diff options
| author | Chirayu Krishnappa | 2013-03-08 15:37:56 -0800 |
|---|---|---|
| committer | Igor Minar | 2013-04-04 09:28:23 -0700 |
| commit | 139c5320191ec5e9f37ba689c5e8e917087f6bfb (patch) | |
| tree | f10def71eb791afcbd7b79d7eb29d31f1a337147 /i18n/src/closureSlurper.js | |
| parent | e5b57bf01c3e71a7048ef07986628f8809281dbe (diff) | |
| download | angular.js-139c5320191ec5e9f37ba689c5e8e917087f6bfb.tar.bz2 | |
chore($ngLocale): refactor slurper & parse extended datetime symbols
Diffstat (limited to 'i18n/src/closureSlurper.js')
| -rwxr-xr-x | i18n/src/closureSlurper.js | 155 |
1 files changed, 55 insertions, 100 deletions
diff --git a/i18n/src/closureSlurper.js b/i18n/src/closureSlurper.js index 2e78ef64..9f236cf2 100755 --- a/i18n/src/closureSlurper.js +++ b/i18n/src/closureSlurper.js @@ -1,130 +1,85 @@ #!/usr/bin/env node 'use strict'; -var Q = require('qq'), +var Q = require('q'), qfs = require('q-fs'), converter = require('./converter.js'), util = require('./util.js'), + closureI18nExtractor = require('./closureI18nExtractor.js'), localeInfo = {}, - localeIds = [], currencySymbols, goog = { provide: function() {}, require: function() {}, i18n: {currency: {}, pluralRules: {}} }; -createFolder('../../src/ngLocale/').then(function() { - var promiseA = Q.defer(), - promiseB = Q.defer(); - qfs.read(__dirname + '/../closure/currencySymbols.js', 'b').then(function(content) { - eval(content.toString()); - currencySymbols = goog.i18n.currency.CurrencyInfo; - currencySymbols.__proto__ = goog.i18n.currency.CurrencyInfoTier2; +var NG_LOCALE_DIR = '../src/ngLocale/'; - qfs.read(__dirname + '/../closure/numberSymbols.js', 'b').then(function(content) { - //eval script in the current context so that we get access to all the symbols - eval(content.toString()); - for (var propName in goog.i18n) { - var localeID = util.findLocaleId(propName, 'num'); - if (localeID) { - if (!localeInfo[localeID]) { - localeInfo[localeID] = {}; - localeIds.push(localeID); - } - var convertedData = converter.convertNumberData(goog.i18n[propName], currencySymbols); - localeInfo[localeID].NUMBER_FORMATS = convertedData; - } - } - promiseA.resolve(); - }); - }); - - - qfs.read(__dirname + '/../closure/datetimeSymbols.js', 'b').then(function(content) { - eval(content.toString()); - for (var propName in goog.i18n) { - var localeID = util.findLocaleId(propName, 'datetime'); - if (localeID) { - if (!localeInfo[localeID]) { - localeInfo[localeID] = {}; - localeIds.push(localeID); - } - var convertedData = converter.convertDatetimeData(goog.i18n[propName]); - localeInfo[localeID].DATETIME_FORMATS = convertedData; - } - } - - promiseB.resolve(); - }); +function readSymbols() { + console.log("Processing currency and number symbols ..."); + var numericStagePromise = qfs.read(__dirname + '/../closure/currencySymbols.js', 'b') + .then(function(content) { + var currencySymbols = closureI18nExtractor.extractCurrencySymbols(content); + return qfs.read(__dirname + '/../closure/numberSymbols.js', 'b').then(function(content) { + closureI18nExtractor.extractNumberSymbols(content, localeInfo, currencySymbols); + }); + }); - return Q.join(promiseA.promise, promiseB.promise, noop); -}).then(function() { - var promise = Q.defer(); + console.log("Processing datetime symbols ..."); + var datetimeStagePromise = qfs.read(__dirname + '/../closure/datetimeSymbols.js', 'b') + .then(function(content) { + closureI18nExtractor.extractDateTimeSymbols(content, localeInfo); + return qfs.read(__dirname + '/../closure/datetimeSymbolsExt.js', 'b').then(function(content) { + closureI18nExtractor.extractDateTimeSymbols(content, localeInfo); + }); + }); - qfs.read(__dirname + '/../closure/pluralRules.js').then(function(content) { - for(var i = 0; i < localeIds.length; i++) { - //We don't need to care about country ID because the plural rules in more specific id are - //always the same as those in its language ID. - // e.g. plural rules for en_SG is the same as those for en. - goog.LOCALE = localeIds[i].match(/[^_]+/)[0]; - eval(content); - var temp = goog.i18n.pluralRules.select.toString(). - replace(/goog.i18n.pluralRules.Keyword/g, 'PLURAL_CATEGORY').replace(/\n/g, ''); + return Q.all([numericStagePromise, datetimeStagePromise]); +} - ///@@ is a crazy place holder to be replaced before writing to file - localeInfo[localeIds[i]].pluralCat = "@@" + temp + "@@"; - } - promise.resolve(); +function extractPlurals() { + console.log('Extracting Plurals ...'); + return qfs.read(__dirname + '/../closure/pluralRules.js').then(function(content) { + closureI18nExtractor.pluralExtractor(content, localeInfo); }); +} - return promise.promise; -}).then(function() { +function writeLocaleFiles() { + console.log('Final stage: Writing angular locale files to directory: %j', NG_LOCALE_DIR); + var writePromises = []; + var localeIds = Object.keys(localeInfo); + var num_files = 0; localeIds.forEach(function(localeID) { - var fallBackID = localeID.match(/[A-Za-z]+/)[0], - localeObj = localeInfo[localeID], - fallBackObj = localeInfo[fallBackID]; - - // fallBack to language formats when country format is missing - // e.g. if NUMBER_FORMATS of en_xyz is not present, use the NUMBER_FORMATS of en instead - if (!localeObj.NUMBER_FORMATS) { - localeObj.NUMBER_FORMATS = fallBackObj.NUMBER_FORMATS; - } - - if (!localeObj.DATETIME_FORMATS) { - localeObj.DATETIME_FORMATS = fallBackObj.DATETIME_FORMATS; - } - - // e.g. from zh_CN to zh-CN, from en_US to en-US - var correctedLocaleId = localeID.replace(/_/g, '-').toLowerCase(); - localeObj.id = correctedLocaleId; - - var prefix = - 'angular.module("ngLocale", [], ["$provide", function($provide) {\n' + - 'var PLURAL_CATEGORY = {' + - 'ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"' + - '};\n' + - '$provide.value("$locale", '; - - var suffix = ');\n}]);'; - - var content = JSON.stringify(localeInfo[localeID]).replace(/\ยค/g,'\\u00A4'). - replace(/"@@|@@"/g, ''); - - var toWrite = prefix + content + suffix; - qfs.write(__dirname + '/../locale/' + 'angular-locale_' + correctedLocaleId + '.js', toWrite); + var content = closureI18nExtractor.outputLocale(localeInfo, localeID); + if (!content) return; + var correctedLocaleId = closureI18nExtractor.correctedLocaleId(localeID); + var filename = NG_LOCALE_DIR + 'angular-locale_' + correctedLocaleId + '.js' + writePromises.push( + qfs.write(filename, content) + .then(function () { + console.log('Wrote ' + filename); + ++num_files; + })); + console.log('Writing ' + filename); }); - console.log('Generated ' + localeIds.length + ' locale files!'); -}).end(); - -function noop() {}; + console.log('Generated %j locale files.', localeIds.length); + return Q.all(writePromises).then(function() { return num_files }); +} /** * Make a folder under current directory. * @param folder {string} name of the folder to be made */ function createFolder(folder) { - return qfs.isDirectory(__dirname + '/' + folder).then(function(isDir) { - if (!isDir) return qfs.makeDirectory(__dirname + '/' + folder); + return qfs.isDirectory(folder).then(function(isDir) { + if (!isDir) return qfs.makeDirectory(folder).then(function() { + console.log('Created directory %j', folder); }); }); } + +createFolder(NG_LOCALE_DIR) + .then(readSymbols) + .then(extractPlurals) + .then(writeLocaleFiles) + .done(function(num_files) { console.log("Wrote %j files.\nAll Done!", num_files); }); |
