diff options
| author | Di Peng | 2011-07-29 14:22:37 -0700 | 
|---|---|---|
| committer | Igor Minar | 2011-08-14 23:44:20 -0700 | 
| commit | 966cbd4cf8d795b1706ff400f604c6002d7e81f9 (patch) | |
| tree | 3ca9c42d7bad4f151c72d39f3ef9b053de6cc861 /i18n/src/parser.js | |
| parent | 8534b7c7c0aa352eb0f17dbe8b22ba34f995654d (diff) | |
| download | angular.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.js | 64 | 
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; +} | 
