'use strict'; var sprintf = require('sprintf-js').sprintf; /** * @returns {String} the string with all zeroes contained in a */ var spanAllZeroes = exports.spanAllZeroes = function (s) { return s.replace(/(0+)/g, '$1'); }; /** * @returns {String} the string with each character contained in a */ exports.spanAll = function (s, optionalOffset) { if (optionalOffset === undefined) { optionalOffset = 0; } var letters = s.split(''); return letters.map(function (n, i) { return sprintf('%s', n, i + optionalOffset, spanAllZeroes(n)); // XXX Use #base-2 .value-0 instead? }).join(''); }; function spanLeadingZeroesSimple(group) { return group.replace(/^(0+)/, '$1'); } /** * @returns {String} the string with leading zeroes contained in a */ exports.spanLeadingZeroes = function (address) { var groups = address.split(':'); return groups.map(function (g) { return spanLeadingZeroesSimple(g); }).join(':'); }; /** * Groups an address * @returns {String} a grouped address */ exports.simpleGroup = function (addressString, offset) { var groups = addressString.split(':'); if (!offset) { offset = 0; } return groups.map(function (g, i) { if (/group-v4/.test(g)) { return g; } return sprintf('%s', i + offset, spanLeadingZeroesSimple(g)); }).join(':'); };