def _parseLocale(l): language = "AnyLanguage" script = "AnyScript" country = "AnyCountry" if l == "und": raise xpathlite.Error("we are treating unknown locale like C") items = l.split("_") language_code = items[0] if language_code != "und": language_id = enumdata.languageCodeToId(language_code) if language_id == -1: raise xpathlite.Error('unknown language code "%s"' % language_code) language = enumdata.language_list[language_id][0] if len(items) > 1: script_code = items[1] country_code = "" if len(items) > 2: country_code = items[2] if len(script_code) == 4: script_id = enumdata.scriptCodeToId(script_code) if script_id == -1: raise xpathlite.Error('unknown script code "%s"' % script_code) script = enumdata.script_list[script_id][0] else: country_code = script_code if country_code: country_id = enumdata.countryCodeToId(country_code) if country_id == -1: raise xpathlite.Error('unknown country code "%s"' % country_code) country = enumdata.country_list[country_id][0] return (language, script, country)
def _parseLocale(l): language = "AnyLanguage" script = "AnyScript" country = "AnyCountry" if l == "und": raise xpathlite.Error("we are treating unknown locale like C") parsed = splitLocale(l) language_code = parsed.next() script_code = country_code = '' try: script_code, country_code = parsed except ValueError: pass if language_code != "und": language_id = enumdata.languageCodeToId(language_code) if language_id == -1: raise xpathlite.Error('unknown language code "%s"' % language_code) language = enumdata.language_list[language_id][0] if script_code: script_id = enumdata.scriptCodeToId(script_code) if script_id == -1: raise xpathlite.Error('unknown script code "%s"' % script_code) script = enumdata.script_list[script_id][0] if country_code: country_id = enumdata.countryCodeToId(country_code) if country_id == -1: raise xpathlite.Error('unknown country code "%s"' % country_code) country = enumdata.country_list[country_id][0] return (language, script, country)
def raiseUnknownCode(code, form, cache={}): """Check whether an unknown code could be supported. We declare a language, script or country code unknown if it's not known to enumdata.py; however, if it's present in main/en.xml's mapping of codes to names, we have the option of adding support. This caches the necessary look-up (so we only read main/en.xml once) and returns the name we should use if we do add support. First parameter, code, is the unknown code. Second parameter, form, is one of 'language', 'script' or 'country' to select the type of code to look up. Do not pass further parameters (the next will deprive you of the cache). Raises xpathlite.Error with a suitable message, that includes the unknown code's full name if found. Relies on global cldr_dir being set before it's called; see tail of this file. """ if not cache: cache.update( xpathlite.codeMapsFromFile(os.path.join(cldr_dir, 'en.xml'))) name = cache[form].get(code) msg = 'unknown %s code "%s"' % (form, code) if name: msg += ' - could use "%s"' % name raise xpathlite.Error(msg)
def generateLocaleInfo(path): if not path.endswith(".xml"): return {} # skip legacy/compatibility ones alias = findAlias(path) if alias: raise xpathlite.Error('alias to "%s"' % alias) def code(tag): return findEntryInFile(path, 'identity/' + tag, attribute="type")[0] return _generateLocaleInfo(path, code('language'), code('script'), code('territory'), code('variant'))
def generateLocaleInfo(path): if not path.endswith(".xml"): return {} # skip legacy/compatibility ones alias = findAlias(path) if alias: raise xpathlite.Error("alias to \"%s\"" % alias) language_code = findEntryInFile(path, "identity/language", attribute="type")[0] country_code = findEntryInFile(path, "identity/territory", attribute="type")[0] script_code = findEntryInFile(path, "identity/script", attribute="type")[0] variant_code = findEntryInFile(path, "identity/variant", attribute="type")[0] return _generateLocaleInfo(path, language_code, script_code, country_code, variant_code)
if mapTimezones: for mapZone in mapTimezones: # [u'mapZone', [(u'territory', u'MH'), (u'other', u'UTC+12'), (u'type', u'Pacific/Majuro Pacific/Kwajalein')]] if mapZone[0] == u'mapZone': data = {} for attribute in mapZone[1]: if attribute[0] == u'other': data['windowsId'] = attribute[1] if attribute[0] == u'territory': data['countryCode'] = attribute[1] if attribute[0] == u'type': data['ianaList'] = attribute[1] data['windowsKey'] = windowsIdToKey(data['windowsId']) if data['windowsKey'] <= 0: raise xpathlite.Error("Unknown Windows ID, please add \"%s\"" % data['windowsId']) countryId = 0 if data['countryCode'] == u'001': defaultDict[data['windowsKey']] = data['ianaList'] else: data['countryId'] = enumdata.countryCodeToId(data['countryCode']) if data['countryId'] < 0: raise xpathlite.Error("Unknown Country Code \"%s\"" % data['countryCode']) data['country'] = enumdata.country_list[data['countryId']][0] windowsIdDict[data['windowsKey'], data['countryId']] = data print "Input file parsed, now writing data" GENERATED_BLOCK_START = "// GENERATED PART STARTS HERE\n" GENERATED_BLOCK_END = "// GENERATED PART ENDS HERE\n"
def _generateLocaleInfo(path, language_code, script_code, country_code, variant_code=""): if not path.endswith(".xml"): return {} if language_code == 'root': # just skip it return {} # we do not support variants # ### actually there is only one locale with variant: en_US_POSIX # does anybody care about it at all? if variant_code: raise xpathlite.Error('we do not support variants ("%s")' % variant_code) language_id = enumdata.languageCodeToId(language_code) if language_id <= 0: raise xpathlite.Error('unknown language code "%s"' % language_code) script_id = enumdata.scriptCodeToId(script_code) if script_id == -1: raise xpathlite.Error('unknown script code "%s"' % script_code) # we should handle fully qualified names with the territory if not country_code: return {} country_id = enumdata.countryCodeToId(country_code) if country_id <= 0: raise xpathlite.Error('unknown country code "%s"' % country_code) # So we say we accept only those values that have "contributed" or # "approved" resolution. see http://www.unicode.org/cldr/process.html # But we only respect the resolution for new datas for backward # compatibility. draft = DraftResolution.contributed result = dict( language=enumdata.language_list[language_id][0], language_code=language_code, language_id=language_id, script=enumdata.script_list[script_id][0], script_code=script_code, script_id=script_id, country=enumdata.country_list[country_id][0], country_code=country_code, country_id=country_id, variant_code=variant_code) (dir_name, file_name) = os.path.split(path) def from_supplement(tag, path=os.path.join(dir_name, '..', 'supplemental', 'supplementalData.xml')): return findTagsInFile(path, tag) currencies = from_supplement('currencyData/region[iso3166=%s]' % country_code) result['currencyIsoCode'] = '' result['currencyDigits'] = 2 result['currencyRounding'] = 1 if currencies: for e in currencies: if e[0] == 'currency': t = [x[1] == 'false' for x in e[1] if x[0] == 'tender'] if t and t[0]: pass elif not any(x[0] == 'to' for x in e[1]): result['currencyIsoCode'] = (x[1] for x in e[1] if x[0] == 'iso4217').next() break if result['currencyIsoCode']: t = from_supplement("currencyData/fractions/info[iso4217=%s]" % result['currencyIsoCode']) if t and t[0][0] == 'info': result['currencyDigits'] = (int(x[1]) for x in t[0][1] if x[0] == 'digits').next() result['currencyRounding'] = (int(x[1]) for x in t[0][1] if x[0] == 'rounding').next() numbering_system = None try: numbering_system = findEntry(path, "numbers/defaultNumberingSystem") except: pass def findEntryDef(path, xpath, value=''): try: return findEntry(path, xpath) except xpathlite.Error: return value def get_number_in_system(path, xpath, numbering_system): if numbering_system: try: return findEntry(path, xpath + "[numberSystem=" + numbering_system + "]") except xpathlite.Error: # in CLDR 1.9 number system was refactored for numbers (but not for currency) # so if previous findEntry doesn't work we should try this: try: return findEntry(path, xpath.replace("/symbols/", "/symbols[numberSystem=" + numbering_system + "]/")) except xpathlite.Error: # fallback to default pass return findEntry(path, xpath) result['decimal'] = get_number_in_system(path, "numbers/symbols/decimal", numbering_system) result['group'] = get_number_in_system(path, "numbers/symbols/group", numbering_system) result['list'] = get_number_in_system(path, "numbers/symbols/list", numbering_system) result['percent'] = get_number_in_system(path, "numbers/symbols/percentSign", numbering_system) try: numbering_systems = {} for ns in findTagsInFile(os.path.join(cldr_dir, '..', 'supplemental', 'numberingSystems.xml'), 'numberingSystems'): tmp = {} id = "" for data in ns[1:][0]: # ns looks like this: [u'numberingSystem', [(u'digits', u'0123456789'), (u'type', u'numeric'), (u'id', u'latn')]] tmp[data[0]] = data[1] if data[0] == u"id": id = data[1] numbering_systems[id] = tmp result['zero'] = numbering_systems[numbering_system][u"digits"][0] except e: sys.stderr.write("Native zero detection problem:\n" + str(e) + "\n") result['zero'] = get_number_in_system(path, "numbers/symbols/nativeZeroDigit", numbering_system) result['minus'] = get_number_in_system(path, "numbers/symbols/minusSign", numbering_system) result['plus'] = get_number_in_system(path, "numbers/symbols/plusSign", numbering_system) result['exp'] = get_number_in_system(path, "numbers/symbols/exponential", numbering_system).lower() result['quotationStart'] = findEntry(path, "delimiters/quotationStart") result['quotationEnd'] = findEntry(path, "delimiters/quotationEnd") result['alternateQuotationStart'] = findEntry(path, "delimiters/alternateQuotationStart") result['alternateQuotationEnd'] = findEntry(path, "delimiters/alternateQuotationEnd") result['listPatternPartStart'] = parse_list_pattern_part_format(findEntry(path, "listPatterns/listPattern/listPatternPart[start]")) result['listPatternPartMiddle'] = parse_list_pattern_part_format(findEntry(path, "listPatterns/listPattern/listPatternPart[middle]")) result['listPatternPartEnd'] = parse_list_pattern_part_format(findEntry(path, "listPatterns/listPattern/listPatternPart[end]")) result['listPatternPartTwo'] = parse_list_pattern_part_format(findEntry(path, "listPatterns/listPattern/listPatternPart[2]")) result['am'] = findEntry(path, "dates/calendars/calendar[gregorian]/dayPeriods/dayPeriodContext[format]/dayPeriodWidth[wide]/dayPeriod[am]", draft) result['pm'] = findEntry(path, "dates/calendars/calendar[gregorian]/dayPeriods/dayPeriodContext[format]/dayPeriodWidth[wide]/dayPeriod[pm]", draft) result['longDateFormat'] = convert_date(findEntry(path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[full]/dateFormat/pattern")) result['shortDateFormat'] = convert_date(findEntry(path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[short]/dateFormat/pattern")) result['longTimeFormat'] = convert_date(findEntry(path, "dates/calendars/calendar[gregorian]/timeFormats/timeFormatLength[full]/timeFormat/pattern")) result['shortTimeFormat'] = convert_date(findEntry(path, "dates/calendars/calendar[gregorian]/timeFormats/timeFormatLength[short]/timeFormat/pattern")) endonym = None if country_code and script_code: endonym = findEntryDef(path, "localeDisplayNames/languages/language[type=%s_%s_%s]" % (language_code, script_code, country_code)) if not endonym and script_code: endonym = findEntryDef(path, "localeDisplayNames/languages/language[type=%s_%s]" % (language_code, script_code)) if not endonym and country_code: endonym = findEntryDef(path, "localeDisplayNames/languages/language[type=%s_%s]" % (language_code, country_code)) if not endonym: endonym = findEntryDef(path, "localeDisplayNames/languages/language[type=%s]" % (language_code)) result['language_endonym'] = endonym result['country_endonym'] = findEntryDef(path, "localeDisplayNames/territories/territory[type=%s]" % (country_code)) currency_format = get_number_in_system(path, "numbers/currencyFormats/currencyFormatLength/currencyFormat/pattern", numbering_system) currency_format = parse_number_format(currency_format, result) result['currencyFormat'] = currency_format[0] result['currencyNegativeFormat'] = '' if len(currency_format) > 1: result['currencyNegativeFormat'] = currency_format[1] result['currencySymbol'] = '' result['currencyDisplayName'] = '' if result['currencyIsoCode']: result['currencySymbol'] = findEntryDef(path, "numbers/currencies/currency[%s]/symbol" % result['currencyIsoCode']) result['currencyDisplayName'] = ';'.join( findEntryDef(path, 'numbers/currencies/currency[' + result['currencyIsoCode'] + ']/displayName' + tail) for tail in ['',] + [ '[count=%s]' % x for x in ('zero', 'one', 'two', 'few', 'many', 'other') ]) + ';' def findUnitDef(path, stem, fallback=''): # The displayName for a quantified unit in en.xml is kByte # instead of kB (etc.), so prefer any unitPattern provided: for count in ('many', 'few', 'two', 'other', 'zero', 'one'): try: ans = findEntry(path, stem + 'unitPattern[count=%s]' % count) except xpathlite.Error: continue # TODO: epxloit count-handling, instead of discarding placeholders if ans.startswith('{0}'): ans = ans[3:].lstrip() if ans: return ans return findEntryDef(path, stem + 'displayName', fallback) # First without quantifier, then quantified each way: result['byte_unit'] = findEntryDef( path, 'units/unitLength[type=long]/unit[type=digital-byte]/displayName', 'bytes') stem = 'units/unitLength[type=short]/unit[type=digital-%sbyte]/' known = [] # cases where we *do* have a given version: result['byte_si_quantified'] = ';'.join(unit_quantifiers(findUnitDef, path, stem, 'B', known)) # IEC 60027-2 # http://physics.nist.gov/cuu/Units/binary.html result['byte_iec_quantified'] = ';'.join(unit_quantifiers(findUnitDef, path, stem % '%sbi', 'iB', known)) # Used for month and day data: namings = ( ('standaloneLong', 'stand-alone', 'wide'), ('standaloneShort', 'stand-alone', 'abbreviated'), ('standaloneNarrow', 'stand-alone', 'narrow'), ('long', 'format', 'wide'), ('short', 'format', 'abbreviated'), ('narrow', 'format', 'narrow'), ) # Month data: for cal in ('gregorian',): # We shall want to add to this stem = 'dates/calendars/calendar[' + cal + ']/months/' for (key, mode, size) in namings: prop = 'monthContext[' + mode + ']/monthWidth[' + size + ']/' result[key + 'Months'] = ';'.join( findEntry(path, stem + prop + "month[%d]" % i) for i in range(1, 13)) + ';' # Day data (for Gregorian, at least): stem = 'dates/calendars/calendar[gregorian]/days/' days = ('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat') for (key, mode, size) in namings: prop = 'dayContext[' + mode + ']/dayWidth[' + size + ']/day' result[key + 'Days'] = ';'.join( findEntry(path, stem + prop + '[' + day + ']') for day in days) + ';' return Locale(result)
def ordStr(c): if len(c) == 1: return str(ord(c)) raise xpathlite.Error('Unable to handle value "%s"' % addEscapes(c))
data['countryCode'] = attribute[1] if attribute[0] == u'type': data['ianaList'] = attribute[1] data['windowsKey'] = windowsIdToKey(data['windowsId']) if data['windowsKey'] <= 0: badZones.add(data['windowsId']) countryId = 0 if data['countryCode'] == u'001': defaultDict[data['windowsKey']] = data['ianaList'] else: data['countryId'] = enumdata.countryCodeToId( data['countryCode']) if data['countryId'] < 0: raise xpathlite.Error("Unknown Country Code \"%s\"" % data['countryCode']) data['country'] = enumdata.country_list[data['countryId']][0] windowsIdDict[data['windowsKey'], data['countryId']] = data if badZones: sys.stderr.write('\n\t'.join(["\nUnknown Windows ID, please add:"] + sorted(badZones)) + "\nto the windowIdList in cldr2qtimezone.py\n\n") raise xpathlite.Error("Unknown Windows IDs") print "Input file parsed, now writing data" GENERATED_BLOCK_START = "// GENERATED PART STARTS HERE\n" GENERATED_BLOCK_END = "// GENERATED PART ENDS HERE\n" # Create a temp file to write the new data into (newTempFile, newTempFilePath) = tempfile.mkstemp("qtimezone_data_p",
def ordStr(c): if len(c) == 1: return str(ord(c)) raise xpathlite.Error("Unable to handle value \"%s\"" % addEscapes(c)) return "##########"
def _generateLocaleInfo(path, language_code, script_code, country_code, variant_code=""): if not path.endswith(".xml"): return {} if language_code == 'root': # just skip it return {} # we do not support variants # ### actually there is only one locale with variant: en_US_POSIX # does anybody care about it at all? if variant_code: raise xpathlite.Error("we do not support variants (\"%s\")" % variant_code) language_id = enumdata.languageCodeToId(language_code) if language_id <= 0: raise xpathlite.Error("unknown language code \"%s\"" % language_code) language = enumdata.language_list[language_id][0] script_id = enumdata.scriptCodeToId(script_code) if script_id == -1: raise xpathlite.Error("unknown script code \"%s\"" % script_code) script = enumdata.script_list[script_id][0] # we should handle fully qualified names with the territory if not country_code: return {} country_id = enumdata.countryCodeToId(country_code) if country_id <= 0: raise xpathlite.Error("unknown country code \"%s\"" % country_code) country = enumdata.country_list[country_id][0] # So we say we accept only those values that have "contributed" or # "approved" resolution. see http://www.unicode.org/cldr/process.html # But we only respect the resolution for new datas for backward # compatibility. draft = DraftResolution.contributed result = {} result['language'] = language result['script'] = script result['country'] = country result['language_code'] = language_code result['country_code'] = country_code result['script_code'] = script_code result['variant_code'] = variant_code result['language_id'] = language_id result['script_id'] = script_id result['country_id'] = country_id (dir_name, file_name) = os.path.split(path) supplementalPath = dir_name + "/../supplemental/supplementalData.xml" currencies = findTagsInFile( supplementalPath, "currencyData/region[iso3166=%s]" % country_code) result['currencyIsoCode'] = '' result['currencyDigits'] = 2 result['currencyRounding'] = 1 if currencies: for e in currencies: if e[0] == 'currency': tender = True t = filter(lambda x: x[0] == 'tender', e[1]) if t and t[0][1] == 'false': tender = False if tender and not filter(lambda x: x[0] == 'to', e[1]): result['currencyIsoCode'] = filter( lambda x: x[0] == 'iso4217', e[1])[0][1] break if result['currencyIsoCode']: t = findTagsInFile( supplementalPath, "currencyData/fractions/info[iso4217=%s]" % result['currencyIsoCode']) if t and t[0][0] == 'info': result['currencyDigits'] = int( filter(lambda x: x[0] == 'digits', t[0][1])[0][1]) result['currencyRounding'] = int( filter(lambda x: x[0] == 'rounding', t[0][1])[0][1]) numbering_system = None try: numbering_system = findEntry(path, "numbers/defaultNumberingSystem") except: pass def findEntryDef(path, xpath, value=''): try: return findEntry(path, xpath) except xpathlite.Error: return value def get_number_in_system(path, xpath, numbering_system): if numbering_system: try: return findEntry( path, xpath + "[numberSystem=" + numbering_system + "]") except xpathlite.Error: # in CLDR 1.9 number system was refactored for numbers (but not for currency) # so if previous findEntry doesn't work we should try this: try: return findEntry( path, xpath.replace( "/symbols/", "/symbols[numberSystem=" + numbering_system + "]/")) except xpathlite.Error: # fallback to default pass return findEntry(path, xpath) result['decimal'] = get_number_in_system(path, "numbers/symbols/decimal", numbering_system) result['group'] = get_number_in_system(path, "numbers/symbols/group", numbering_system) result['list'] = get_number_in_system(path, "numbers/symbols/list", numbering_system) result['percent'] = get_number_in_system(path, "numbers/symbols/percentSign", numbering_system) try: numbering_systems = {} for ns in findTagsInFile( cldr_dir + "/../supplemental/numberingSystems.xml", "numberingSystems"): tmp = {} id = "" for data in ns[1:][ 0]: # ns looks like this: [u'numberingSystem', [(u'digits', u'0123456789'), (u'type', u'numeric'), (u'id', u'latn')]] tmp[data[0]] = data[1] if data[0] == u"id": id = data[1] numbering_systems[id] = tmp result['zero'] = numbering_systems[numbering_system][u"digits"][0] except e: sys.stderr.write("Native zero detection problem:\n" + str(e) + "\n") result['zero'] = get_number_in_system( path, "numbers/symbols/nativeZeroDigit", numbering_system) result['minus'] = get_number_in_system(path, "numbers/symbols/minusSign", numbering_system) result['plus'] = get_number_in_system(path, "numbers/symbols/plusSign", numbering_system) result['exp'] = get_number_in_system(path, "numbers/symbols/exponential", numbering_system).lower() result['quotationStart'] = findEntry(path, "delimiters/quotationStart") result['quotationEnd'] = findEntry(path, "delimiters/quotationEnd") result['alternateQuotationStart'] = findEntry( path, "delimiters/alternateQuotationStart") result['alternateQuotationEnd'] = findEntry( path, "delimiters/alternateQuotationEnd") result['listPatternPartStart'] = parse_list_pattern_part_format( findEntry(path, "listPatterns/listPattern/listPatternPart[start]")) result['listPatternPartMiddle'] = parse_list_pattern_part_format( findEntry(path, "listPatterns/listPattern/listPatternPart[middle]")) result['listPatternPartEnd'] = parse_list_pattern_part_format( findEntry(path, "listPatterns/listPattern/listPatternPart[end]")) result['listPatternPartTwo'] = parse_list_pattern_part_format( findEntry(path, "listPatterns/listPattern/listPatternPart[2]")) result['am'] = findEntry( path, "dates/calendars/calendar[gregorian]/dayPeriods/dayPeriodContext[format]/dayPeriodWidth[wide]/dayPeriod[am]", draft) result['pm'] = findEntry( path, "dates/calendars/calendar[gregorian]/dayPeriods/dayPeriodContext[format]/dayPeriodWidth[wide]/dayPeriod[pm]", draft) result['longDateFormat'] = convert_date( findEntry( path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[full]/dateFormat/pattern" )) result['shortDateFormat'] = convert_date( findEntry( path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[short]/dateFormat/pattern" )) result['longTimeFormat'] = convert_date( findEntry( path, "dates/calendars/calendar[gregorian]/timeFormats/timeFormatLength[full]/timeFormat/pattern" )) result['shortTimeFormat'] = convert_date( findEntry( path, "dates/calendars/calendar[gregorian]/timeFormats/timeFormatLength[short]/timeFormat/pattern" )) endonym = None if country_code and script_code: endonym = findEntryDef( path, "localeDisplayNames/languages/language[type=%s_%s_%s]" % (language_code, script_code, country_code)) if not endonym and script_code: endonym = findEntryDef( path, "localeDisplayNames/languages/language[type=%s_%s]" % (language_code, script_code)) if not endonym and country_code: endonym = findEntryDef( path, "localeDisplayNames/languages/language[type=%s_%s]" % (language_code, country_code)) if not endonym: endonym = findEntryDef( path, "localeDisplayNames/languages/language[type=%s]" % (language_code)) result['language_endonym'] = endonym result['country_endonym'] = findEntryDef( path, "localeDisplayNames/territories/territory[type=%s]" % (country_code)) currency_format = get_number_in_system( path, "numbers/currencyFormats/currencyFormatLength/currencyFormat/pattern", numbering_system) currency_format = parse_number_format(currency_format, result) result['currencyFormat'] = currency_format[0] result['currencyNegativeFormat'] = '' if len(currency_format) > 1: result['currencyNegativeFormat'] = currency_format[1] result['currencySymbol'] = '' result['currencyDisplayName'] = '' if result['currencyIsoCode']: result['currencySymbol'] = findEntryDef( path, "numbers/currencies/currency[%s]/symbol" % result['currencyIsoCode']) display_name_path = "numbers/currencies/currency[%s]/displayName" % result[ 'currencyIsoCode'] result['currencyDisplayName'] \ = findEntryDef(path, display_name_path) + ";" \ + findEntryDef(path, display_name_path + "[count=zero]") + ";" \ + findEntryDef(path, display_name_path + "[count=one]") + ";" \ + findEntryDef(path, display_name_path + "[count=two]") + ";" \ + findEntryDef(path, display_name_path + "[count=few]") + ";" \ + findEntryDef(path, display_name_path + "[count=many]") + ";" \ + findEntryDef(path, display_name_path + "[count=other]") + ";" standalone_long_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[stand-alone]/monthWidth[wide]/month" result['standaloneLongMonths'] \ = findEntry(path, standalone_long_month_path + "[1]") + ";" \ + findEntry(path, standalone_long_month_path + "[2]") + ";" \ + findEntry(path, standalone_long_month_path + "[3]") + ";" \ + findEntry(path, standalone_long_month_path + "[4]") + ";" \ + findEntry(path, standalone_long_month_path + "[5]") + ";" \ + findEntry(path, standalone_long_month_path + "[6]") + ";" \ + findEntry(path, standalone_long_month_path + "[7]") + ";" \ + findEntry(path, standalone_long_month_path + "[8]") + ";" \ + findEntry(path, standalone_long_month_path + "[9]") + ";" \ + findEntry(path, standalone_long_month_path + "[10]") + ";" \ + findEntry(path, standalone_long_month_path + "[11]") + ";" \ + findEntry(path, standalone_long_month_path + "[12]") + ";" standalone_short_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[stand-alone]/monthWidth[abbreviated]/month" result['standaloneShortMonths'] \ = findEntry(path, standalone_short_month_path + "[1]") + ";" \ + findEntry(path, standalone_short_month_path + "[2]") + ";" \ + findEntry(path, standalone_short_month_path + "[3]") + ";" \ + findEntry(path, standalone_short_month_path + "[4]") + ";" \ + findEntry(path, standalone_short_month_path + "[5]") + ";" \ + findEntry(path, standalone_short_month_path + "[6]") + ";" \ + findEntry(path, standalone_short_month_path + "[7]") + ";" \ + findEntry(path, standalone_short_month_path + "[8]") + ";" \ + findEntry(path, standalone_short_month_path + "[9]") + ";" \ + findEntry(path, standalone_short_month_path + "[10]") + ";" \ + findEntry(path, standalone_short_month_path + "[11]") + ";" \ + findEntry(path, standalone_short_month_path + "[12]") + ";" standalone_narrow_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[stand-alone]/monthWidth[narrow]/month" result['standaloneNarrowMonths'] \ = findEntry(path, standalone_narrow_month_path + "[1]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[2]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[3]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[4]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[5]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[6]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[7]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[8]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[9]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[10]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[11]") + ";" \ + findEntry(path, standalone_narrow_month_path + "[12]") + ";" long_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[format]/monthWidth[wide]/month" result['longMonths'] \ = findEntry(path, long_month_path + "[1]") + ";" \ + findEntry(path, long_month_path + "[2]") + ";" \ + findEntry(path, long_month_path + "[3]") + ";" \ + findEntry(path, long_month_path + "[4]") + ";" \ + findEntry(path, long_month_path + "[5]") + ";" \ + findEntry(path, long_month_path + "[6]") + ";" \ + findEntry(path, long_month_path + "[7]") + ";" \ + findEntry(path, long_month_path + "[8]") + ";" \ + findEntry(path, long_month_path + "[9]") + ";" \ + findEntry(path, long_month_path + "[10]") + ";" \ + findEntry(path, long_month_path + "[11]") + ";" \ + findEntry(path, long_month_path + "[12]") + ";" short_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[format]/monthWidth[abbreviated]/month" result['shortMonths'] \ = findEntry(path, short_month_path + "[1]") + ";" \ + findEntry(path, short_month_path + "[2]") + ";" \ + findEntry(path, short_month_path + "[3]") + ";" \ + findEntry(path, short_month_path + "[4]") + ";" \ + findEntry(path, short_month_path + "[5]") + ";" \ + findEntry(path, short_month_path + "[6]") + ";" \ + findEntry(path, short_month_path + "[7]") + ";" \ + findEntry(path, short_month_path + "[8]") + ";" \ + findEntry(path, short_month_path + "[9]") + ";" \ + findEntry(path, short_month_path + "[10]") + ";" \ + findEntry(path, short_month_path + "[11]") + ";" \ + findEntry(path, short_month_path + "[12]") + ";" narrow_month_path = "dates/calendars/calendar[gregorian]/months/monthContext[format]/monthWidth[narrow]/month" result['narrowMonths'] \ = findEntry(path, narrow_month_path + "[1]") + ";" \ + findEntry(path, narrow_month_path + "[2]") + ";" \ + findEntry(path, narrow_month_path + "[3]") + ";" \ + findEntry(path, narrow_month_path + "[4]") + ";" \ + findEntry(path, narrow_month_path + "[5]") + ";" \ + findEntry(path, narrow_month_path + "[6]") + ";" \ + findEntry(path, narrow_month_path + "[7]") + ";" \ + findEntry(path, narrow_month_path + "[8]") + ";" \ + findEntry(path, narrow_month_path + "[9]") + ";" \ + findEntry(path, narrow_month_path + "[10]") + ";" \ + findEntry(path, narrow_month_path + "[11]") + ";" \ + findEntry(path, narrow_month_path + "[12]") + ";" long_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[format]/dayWidth[wide]/day" result['longDays'] \ = findEntry(path, long_day_path + "[sun]") + ";" \ + findEntry(path, long_day_path + "[mon]") + ";" \ + findEntry(path, long_day_path + "[tue]") + ";" \ + findEntry(path, long_day_path + "[wed]") + ";" \ + findEntry(path, long_day_path + "[thu]") + ";" \ + findEntry(path, long_day_path + "[fri]") + ";" \ + findEntry(path, long_day_path + "[sat]") + ";" short_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[format]/dayWidth[abbreviated]/day" result['shortDays'] \ = findEntry(path, short_day_path + "[sun]") + ";" \ + findEntry(path, short_day_path + "[mon]") + ";" \ + findEntry(path, short_day_path + "[tue]") + ";" \ + findEntry(path, short_day_path + "[wed]") + ";" \ + findEntry(path, short_day_path + "[thu]") + ";" \ + findEntry(path, short_day_path + "[fri]") + ";" \ + findEntry(path, short_day_path + "[sat]") + ";" narrow_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[format]/dayWidth[narrow]/day" result['narrowDays'] \ = findEntry(path, narrow_day_path + "[sun]") + ";" \ + findEntry(path, narrow_day_path + "[mon]") + ";" \ + findEntry(path, narrow_day_path + "[tue]") + ";" \ + findEntry(path, narrow_day_path + "[wed]") + ";" \ + findEntry(path, narrow_day_path + "[thu]") + ";" \ + findEntry(path, narrow_day_path + "[fri]") + ";" \ + findEntry(path, narrow_day_path + "[sat]") + ";" standalone_long_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[stand-alone]/dayWidth[wide]/day" result['standaloneLongDays'] \ = findEntry(path, standalone_long_day_path + "[sun]") + ";" \ + findEntry(path, standalone_long_day_path + "[mon]") + ";" \ + findEntry(path, standalone_long_day_path + "[tue]") + ";" \ + findEntry(path, standalone_long_day_path + "[wed]") + ";" \ + findEntry(path, standalone_long_day_path + "[thu]") + ";" \ + findEntry(path, standalone_long_day_path + "[fri]") + ";" \ + findEntry(path, standalone_long_day_path + "[sat]") + ";" standalone_short_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[stand-alone]/dayWidth[abbreviated]/day" result['standaloneShortDays'] \ = findEntry(path, standalone_short_day_path + "[sun]") + ";" \ + findEntry(path, standalone_short_day_path + "[mon]") + ";" \ + findEntry(path, standalone_short_day_path + "[tue]") + ";" \ + findEntry(path, standalone_short_day_path + "[wed]") + ";" \ + findEntry(path, standalone_short_day_path + "[thu]") + ";" \ + findEntry(path, standalone_short_day_path + "[fri]") + ";" \ + findEntry(path, standalone_short_day_path + "[sat]") + ";" standalone_narrow_day_path = "dates/calendars/calendar[gregorian]/days/dayContext[stand-alone]/dayWidth[narrow]/day" result['standaloneNarrowDays'] \ = findEntry(path, standalone_narrow_day_path + "[sun]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[mon]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[tue]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[wed]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[thu]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[fri]") + ";" \ + findEntry(path, standalone_narrow_day_path + "[sat]") + ";" return result