Skip to content

Instantly share code, notes, and snippets.

@Nate-Wilkins
Created January 13, 2015 12:25
Show Gist options
  • Save Nate-Wilkins/aa28e1d4be4fd4504b41 to your computer and use it in GitHub Desktop.
Save Nate-Wilkins/aa28e1d4be4fd4504b41 to your computer and use it in GitHub Desktop.
// https://github.com/angular/angular.js/blob/5a60302389162c6ef45f311c1aaa65a00d538c66/i18n/src/parser.js
// e.g. '#,##0.###'
function parsePattern(pattern) {
var p = {
minInt: 1,
minFrac: 0,
maxFrac: 0,
posPre: '',
posSuf: '',
negPre: '',
negSuf: '',
gSize: 0,
lgSize: 0
};
var parts = pattern.split(PATTERN_SEP),
positive = parts[0],
negative = parts[1];
parts = positive.split(DECIMAL_SEP);
var integer = parts[0],
fraction = parts[1];
p.posPre = integer.substr(0, integer.indexOf(DIGIT));
for (var i = 0; i < fraction.length; i++) {
var ch = fraction.charAt(i);
if (ch === ZERO) { p.minFrac = p.maxFrac = i + 1; }
else if (ch === DIGIT) { p.maxFrac = i + 1; }
else { p.posSuf += ch; }
}
var groups = integer.split(GROUP_SEP);
p.gSize = groups[1] ? groups[1].length : 0;
p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;
if (negative) {
var trunkLen = positive.length - p.posPre.length - p.posSuf.length,
pos = negative.indexOf(DIGIT);
p.negPre = negative.substr(0, pos).replace(/\'/g, '');
p.negSuf = negative.substr(pos + trunkLen).replace(/\'/g, '');
} else {
// hardcoded '-' sign is fine as all locale use '-' as MINUS_SIGN. (\u2212 is the same as '-')
p.negPre = p.posPre + '-';
p.negSuf = p.posSuf;
}
return p;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment