mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
/**
|
|
* A simple parser to parse a number format into a pattern object
|
|
*/
|
|
|
|
exports.parsePattern = parsePattern;
|
|
|
|
var PATTERN_SEP = ';',
|
|
DECIMAL_SEP = '.',
|
|
GROUP_SEP = ',',
|
|
ZERO = '0',
|
|
DIGIT = '#';
|
|
|
|
/**
|
|
* main funciton for parser
|
|
* @param str {string} pattern to be parsed (e.g. #,##0.###).
|
|
*/
|
|
function parsePattern(pattern) {
|
|
var p = {
|
|
minInt: 1,
|
|
minFrac: 0,
|
|
macFrac: 0,
|
|
posPre: '',
|
|
posSuf: '',
|
|
negPre: '',
|
|
negSuf: '',
|
|
gSize: 0,
|
|
lgSize: 0
|
|
};
|
|
|
|
var parts = pattern.split(PATTERN_SEP),
|
|
positive = parts[0],
|
|
negative = parts[1];
|
|
|
|
var parts = positive.split(DECIMAL_SEP),
|
|
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;
|
|
}
|