cacert-testmgr/external/ZendFramework-1.9.5/externals/dojo/util/buildscripts/cldr/arrayInherit.js
Markus Warg 8398c9048d initially import ZendFramework-1.9.5 into repository
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
2010-03-31 10:12:32 +02:00

128 lines
No EOL
4.5 KiB
JavaScript

/**
* The CLDR represents some lists, like month names, as separate entries, and our JSON uses arrays to express them.
* For some variants, the best our XSLT can do is translate this to a sparse array with 'undefined' entries.
* These entries need to be picked up from the parent locale(s) and copied into the array as necessary(only when the item
* is not the source of a locale alias mapping, like 'months-format-abbr' should be ignored if it is the source of
* locale alias mapping like 'months-format-abbr@localeAlias' :{'target':"months-format-wide",'bundle':"gregorian"}).
* So, this script is responsible for taking all the generated JSON files, and for values which are of type
* array and not the source of locale alias mapping, mixing in the parent values with the undefined ones, recursing
* all the way to the 'root' locale,and replacing the contents of the file.
*
* this script traverses all locales dir in the given root dir
*
* E.g.(Just for example, the contents are not applicable)
* parent locale - "en":
* // generated from ldml/main/ *.xml, xpath: ldml/calendars/calendar-ethiopic
* ({
* 'months-format-abbr':["1","2","3","4","5","6","7","8","9","10","11","12"],
* 'dateFormat-long': "yyyy MMMM d",
* 'dateTimeFormat': "{1} {0}"
* })
*
* child locale - "en-us":
* // generated from ldml/main/ *.xml, xpath: ldml/calendars/calendar-ethiopic
* ({
* 'months-format-abbr':[undefined,undefined,"March",undefined,undefined,"June"],
* 'dateFormat-long': "yyyy-MMMM-d"
* })
*
* After process, the result will be:
* child locale - "en-us":
* // generated from ldml/main/ *.xml, xpath: ldml/calendars/calendar-ethiopic
* ({
* 'months-format-abbr':["1","2","March","4","5","June","7","8","9","10","11","12"],
* 'dateFormat-long': "yyyy-MMMM-d"
* })
*/
djConfig={baseUrl: "../../../dojo/"};
load("../../../dojo/dojo.js");
load("../jslib/logger.js");
load("../jslib/fileUtil.js");
load("../jslib/buildUtil.js");
load("cldrUtil.js");
dojo.require("dojo.i18n");
var dir = arguments[0];
var logDir = arguments[1];
var logStr = "";
print('arrayInherit.js...');
// limit search to gregorian.js files, which are the only ones to use Array as data type
var fileList = fileUtil.getFilteredFileList(dir, /\/gregorian\.js$/, true);
for(var i= 0; i < fileList.length; i++){
//Use new String so we get a JS string and not a Java string.
var jsFileName = new String(fileList[i]);
var data = null;
var jsPath = jsFileName.split("/");
var localeIndex = jsPath.length-2;
var locale = jsPath[localeIndex];
if(locale=="nls"){continue;} // don't run on ROOT resource
var hasChanged = false;
try{
dojo.i18n._requireLocalization('dojo.cldr', 'gregorian', locale);
var bundle = dojo.i18n.getLocalization('dojo.cldr', 'gregorian', locale); //flattened bundle
}catch(e){print(e);/* simply ignore if no bundle found*/}
dojo.i18n._searchLocalePath(locale, true, function(variant){
var isComplete = false;
var path = jsPath;
if(variant=="ROOT"){
path = path.slice(0, localeIndex);
path.push(jsPath[localeIndex+1]);
}else{
path[localeIndex] = variant;
}
var contents;
try{
contents = new String(readFile(path.join("/"), "utf-8"));
}catch(e){
print(e); //TODO: should we be catching this?
return false;
}
var variantData = dojo.fromJson(contents);
if(!data){
data = variantData;
}else{
isComplete = true;
//logStr += locale + "===============================================\n";
for(prop in data){
if(dojo.isArray(data[prop])){
//ignore if the property is an alias source, for alias.js and specialLocale.js
if(isLocaleAliasSrc(prop, bundle)){
//logStr += prop + " is alias, ignored\n";
continue;
}
var variantArray = variantData[prop];
dojo.forEach(data[prop], function(element, index, list){
if(element === undefined && dojo.isArray(variantArray)){
list[index] = variantArray[index];
//logStr += prop + "[" + index + "] undefined, is replaced with " + list[index] + "\n";
hasChanged = true;
if(!("index" in list)){
isComplete = false;
}
}
});
if(dojo.isArray(variantArray) && variantArray.length > data[prop].length){
data[prop] = data[prop].concat(variantArray.slice(data[prop].length));
hasChanged = true;
}
}
}
//logStr += "\n";
}
return isComplete;
});
if(hasChanged){
fileUtil.saveUtf8File(jsFileName, "(" + dojo.toJson(data, true) + ")");
}
}
//fileUtil.saveUtf8File(logDir + '/arrayInherit.log',logStr+'\n');