aboutsummaryrefslogtreecommitdiffstats
path: root/i18n/src/parser.js
diff options
context:
space:
mode:
authorDi Peng2011-07-29 14:22:37 -0700
committerIgor Minar2011-08-14 23:44:20 -0700
commit966cbd4cf8d795b1706ff400f604c6002d7e81f9 (patch)
tree3ca9c42d7bad4f151c72d39f3ef9b053de6cc861 /i18n/src/parser.js
parent8534b7c7c0aa352eb0f17dbe8b22ba34f995654d (diff)
downloadangular.js-966cbd4cf8d795b1706ff400f604c6002d7e81f9.tar.bz2
feat(i18n): collect and convert locale info from closure
- add i18n/closure directory with closure i18n files and update-closure.sh script to update them - generate.sh script runs node.js scripts that extract localization rules from the closure library, transform them to a more suitable format and dumps them into i18n/locale directory as angular's $locale services - update Rakefile to copy i18n files to build/ and pkg/ dirs - copy i18n stuff during rake build - e2e tests for several locales
Diffstat (limited to 'i18n/src/parser.js')
-rw-r--r--i18n/src/parser.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/i18n/src/parser.js b/i18n/src/parser.js
new file mode 100644
index 00000000..db31aeef
--- /dev/null
+++ b/i18n/src/parser.js
@@ -0,0 +1,64 @@
+/**
+* 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].length;
+ p.lgSize = (groups[2] || groups[1]).length;
+
+ 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;
+}