def main(): if len(sys.argv) != 3: usage() localexml = sys.argv[1] qtsrcdir = sys.argv[2] if not (os.path.isdir(qtsrcdir) and all( os.path.isfile( os.path.join(qtsrcdir, 'src', 'corelib', 'text', leaf)) for leaf in ('qlocale_data_p.h', 'qlocale.h', 'qlocale.qdoc'))): usage() (data_temp_file, data_temp_file_path) = tempfile.mkstemp("qlocale_data_p.h", dir=qtsrcdir) data_temp_file = os.fdopen(data_temp_file, "w") qlocaledata_file = open(qtsrcdir + "/src/corelib/text/qlocale_data_p.h", "r") s = qlocaledata_file.readline() while s and s != GENERATED_BLOCK_START: data_temp_file.write(s) s = qlocaledata_file.readline() data_temp_file.write(GENERATED_BLOCK_START) doc = xml.dom.minidom.parse(localexml) language_map = loadMap(doc, 'language') script_map = loadMap(doc, 'script') country_map = loadMap(doc, 'country') likely_subtags_map = loadLikelySubtagsMap(doc) default_map = {} for key in likely_subtags_map.keys(): tmp = likely_subtags_map[key] if tmp["from"][1] == "AnyScript" and tmp["from"][ 2] == "AnyCountry" and tmp["to"][2] != "AnyCountry": default_map[(tmp["to"][0], tmp["to"][1])] = tmp["to"][2] locale_map = loadLocaleMap(doc, language_map, script_map, country_map, likely_subtags_map) dupes = findDupes(language_map, country_map) cldr_version = firstChildText(doc.documentElement, "version") data_temp_file.write(generated_template % (datetime.date.today(), cldr_version)) # Likely subtags map data_temp_file.write("static const QLocaleId likely_subtags[] = {\n") index = 0 for key in likely_subtags_map.keys(): tmp = likely_subtags_map[key] from_language = languageNameToId(tmp["from"][0], language_map) from_script = scriptNameToId(tmp["from"][1], script_map) from_country = countryNameToId(tmp["from"][2], country_map) to_language = languageNameToId(tmp["to"][0], language_map) to_script = scriptNameToId(tmp["to"][1], script_map) to_country = countryNameToId(tmp["to"][2], country_map) cmnt_from = "" if from_language != 0: cmnt_from = cmnt_from + language_map[from_language][1] else: cmnt_from = cmnt_from + "und" if from_script != 0: if cmnt_from: cmnt_from = cmnt_from + "_" cmnt_from = cmnt_from + script_map[from_script][1] if from_country != 0: if cmnt_from: cmnt_from = cmnt_from + "_" cmnt_from = cmnt_from + country_map[from_country][1] cmnt_to = "" if to_language != 0: cmnt_to = cmnt_to + language_map[to_language][1] else: cmnt_to = cmnt_to + "und" if to_script != 0: if cmnt_to: cmnt_to = cmnt_to + "_" cmnt_to = cmnt_to + script_map[to_script][1] if to_country != 0: if cmnt_to: cmnt_to = cmnt_to + "_" cmnt_to = cmnt_to + country_map[to_country][1] data_temp_file.write(" ") data_temp_file.write("{ %3d, %3d, %3d }, { %3d, %3d, %3d }" % (from_language, from_script, from_country, to_language, to_script, to_country)) index += 1 if index != len(likely_subtags_map): data_temp_file.write(",") else: data_temp_file.write(" ") data_temp_file.write(" // %s -> %s\n" % (cmnt_from, cmnt_to)) data_temp_file.write("};\n") data_temp_file.write("\n") # Locale index data_temp_file.write("static const quint16 locale_index[] = {\n") index = 0 for key in language_map.keys(): i = 0 count = languageCount(key, locale_map) if count > 0: i = index index += count data_temp_file.write("%6d, // %s\n" % (i, language_map[key][0])) data_temp_file.write(" 0 // trailing 0\n") data_temp_file.write("};\n\n") list_pattern_part_data = StringData('list_pattern_part_data') single_character_data = StringData('single_character_data') date_format_data = StringData('date_format_data') time_format_data = StringData('time_format_data') days_data = StringData('days_data') am_data = StringData('am_data') pm_data = StringData('pm_data') byte_unit_data = StringData('byte_unit_data') currency_symbol_data = StringData('currency_symbol_data') currency_display_name_data = StringData('currency_display_name_data') currency_format_data = StringData('currency_format_data') endonyms_data = StringData('endonyms_data') # Locale data data_temp_file.write("static const QLocaleData locale_data[] = {\n") # Table headings: keep each label centred in its field, matching line_format: data_temp_file.write( ' // ' # Width 6 + comma: + ' lang ' # IDs + 'script ' + ' terr ' # Range entries (all start-indices, then all sizes): # Width 5 + comma: + 'lStrt ' # List pattern + 'lpMid ' + 'lpEnd ' + 'lPair ' + 'lDelm ' # List delimiter # Representing numbers: + ' dec ' + 'group ' + 'prcnt ' + ' zero ' + 'minus ' + 'plus ' + ' exp ' # Quotation marks + 'qtOpn ' + 'qtEnd ' + 'altQO ' + 'altQE ' + 'lDFmt ' # Date format + 'sDFmt ' + 'lTFmt ' # Time format + 'sTFmt ' + 'slDay ' # Day names + 'lDays ' + 'ssDys ' + 'sDays ' + 'snDay ' + 'nDays ' + ' am ' # am/pm indicators + ' pm ' + ' byte ' + 'siQnt ' + 'iecQn ' + 'crSym ' # Currency formatting: + 'crDsp ' + 'crFmt ' + 'crFNg ' + 'ntLng ' # Name of language in itself, and of territory: + 'ntTer ' # Width 3 + comma for each size; no header + ' ' * 37 # Strays (char array, bit-fields): # Width 8+4 + comma + ' currISO ' # Width 6 + comma: + 'curDgt ' # Currency digits + 'curRnd ' # Currencty rounding (unused: QTBUG-81343) + 'dow1st ' # First day of week + ' wknd+ ' # Week-end start/end days: + ' wknd-' # No trailing space on last entry (be sure to # pad before adding anything after it). + '\n') locale_keys = locale_map.keys() compareLocaleKeys.default_map = default_map compareLocaleKeys.locale_map = locale_map locale_keys.sort(compareLocaleKeys) line_format = ( ' { ' # Locale-identifier: + '%6d,' * 3 # Offsets for starts of ranges: + '%5d,' * 37 # Sizes for the same: + '%3d,' * 37 # Currency ISO code: + ' %10s, ' # Currency formatting: + '%6d,%6d' # Day of week and week-end: + ',%6d' * 3 + ' }') for key in locale_keys: l = locale_map[key] # Sequence of StringDataToken: ranges = ( tuple( list_pattern_part_data.append(p) for p in # 5 entries: (l.listPatternPartStart, l.listPatternPartMiddle, l.listPatternPartEnd, l.listPatternPartTwo, l.listDelim)) + tuple( single_character_data.append(p) for p in # 11 entries (l.decimal, l.group, l.percent, l.zero, l.minus, l.plus, l.exp, l.quotationStart, l.quotationEnd, l.alternateQuotationStart, l.alternateQuotationEnd)) + tuple( date_format_data.append(f) for f in # 2 entries: (l.longDateFormat, l.shortDateFormat)) + tuple( time_format_data.append(f) for f in # 2 entries: (l.longTimeFormat, l.shortTimeFormat)) + tuple( days_data.append(d) for d in # 6 entries: (l.standaloneLongDays, l.longDays, l.standaloneShortDays, l.shortDays, l.standaloneNarrowDays, l.narrowDays)) + (am_data.append(l.am), pm_data.append(l.pm)) + # 2 entries: tuple( byte_unit_data.append(b) for b in # 3 entries: (l.byte_unit, l.byte_si_quantified, l.byte_iec_quantified)) + (currency_symbol_data.append(l.currencySymbol), currency_display_name_data.append(l.currencyDisplayName), currency_format_data.append(l.currencyFormat), currency_format_data.append(l.currencyNegativeFormat), endonyms_data.append(l.languageEndonym), endonyms_data.append(l.countryEndonym)) # 6 entries ) # Total: 37 entries assert len(ranges) == 37 data_temp_file.write(line_format % ((key[0], key[1], key[2]) + tuple(r.index for r in ranges) + tuple(r.length for r in ranges) + ( currencyIsoCodeData(l.currencyIsoCode), l.currencyDigits, l.currencyRounding, # unused (QTBUG-81343) l.firstDayOfWeek, l.weekendStart, l.weekendEnd)) + ", // %s/%s/%s\n" % (l.language, l.script, l.country)) data_temp_file.write(line_format # All zeros, matching the format: % ((0, ) * 3 + (0, ) * 37 * 2 + (currencyIsoCodeData(0), ) + (0, ) * 2 + (0, ) * 3) + " // trailing zeros\n") data_temp_file.write("};\n") # StringData tables: for data in (list_pattern_part_data, single_character_data, date_format_data, time_format_data, days_data, byte_unit_data, am_data, pm_data, currency_symbol_data, currency_display_name_data, currency_format_data, endonyms_data): data.write(data_temp_file) data_temp_file.write("\n") # Language name list data_temp_file.write("static const char language_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in language_map.keys(): if key == 0: continue data_temp_file.write('"' + language_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Language name index data_temp_file.write("static const quint16 language_name_index[] = {\n") data_temp_file.write(" 0, // AnyLanguage\n") index = 8 for key in language_map.keys(): if key == 0: continue language = language_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, language)) index += len(language) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Script name list data_temp_file.write("static const char script_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in script_map.keys(): if key == 0: continue data_temp_file.write('"' + script_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Script name index data_temp_file.write("static const quint16 script_name_index[] = {\n") data_temp_file.write(" 0, // AnyScript\n") index = 8 for key in script_map.keys(): if key == 0: continue script = script_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, script)) index += len(script) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Country name list data_temp_file.write("static const char country_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in country_map.keys(): if key == 0: continue data_temp_file.write('"' + country_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Country name index data_temp_file.write("static const quint16 country_name_index[] = {\n") data_temp_file.write(" 0, // AnyCountry\n") index = 8 for key in country_map.keys(): if key == 0: continue country = country_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, country)) index += len(country) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Language code list data_temp_file.write("static const unsigned char language_code_list[] =\n") for key in language_map.keys(): code = language_map[key][1] if len(code) == 2: code += r"\0" data_temp_file.write('"%2s" // %s\n' % (code, language_map[key][0])) data_temp_file.write(";\n") data_temp_file.write("\n") # Script code list data_temp_file.write("static const unsigned char script_code_list[] =\n") for key in script_map.keys(): code = script_map[key][1] for i in range(4 - len(code)): code += "\\0" data_temp_file.write('"%2s" // %s\n' % (code, script_map[key][0])) data_temp_file.write(";\n") # Country code list data_temp_file.write("static const unsigned char country_code_list[] =\n") for key in country_map.keys(): code = country_map[key][1] if len(code) == 2: code += "\\0" data_temp_file.write('"%2s" // %s\n' % (code, country_map[key][0])) data_temp_file.write(";\n") data_temp_file.write("\n") data_temp_file.write(GENERATED_BLOCK_END) s = qlocaledata_file.readline() # skip until end of the old block while s and s != GENERATED_BLOCK_END: s = qlocaledata_file.readline() s = qlocaledata_file.readline() while s: data_temp_file.write(s) s = qlocaledata_file.readline() data_temp_file.close() qlocaledata_file.close() os.remove(qtsrcdir + "/src/corelib/text/qlocale_data_p.h") os.rename(data_temp_file_path, qtsrcdir + "/src/corelib/text/qlocale_data_p.h") # Generate calendar data calendar_format = ' {%6d,%6d,%6d' + ',%5d' * 6 + ',%3d' * 6 + ' },' for calendar, stem in calendars.items(): months_data = StringData('months_data') calendar_data_file = "q%scalendar_data_p.h" % stem calendar_template_file = open( os.path.join(qtsrcdir, 'src', 'corelib', 'time', calendar_data_file), "r") (calendar_temp_file, calendar_temp_file_path) = tempfile.mkstemp(calendar_data_file, dir=qtsrcdir) calendar_temp_file = os.fdopen(calendar_temp_file, "w") s = calendar_template_file.readline() while s and s != GENERATED_BLOCK_START: calendar_temp_file.write(s) s = calendar_template_file.readline() calendar_temp_file.write(GENERATED_BLOCK_START) calendar_temp_file.write(generated_template % (datetime.date.today(), cldr_version)) calendar_temp_file.write( "static const QCalendarLocale locale_data[] = {\n") calendar_temp_file.write( ' // ' # IDs, width 7 (6 + comma) + ' lang ' + ' script' + ' terr ' # Month-name start-indices, width 6 (5 + comma): + 'sLng ' + 'long ' + 'sSrt ' + 'shrt ' + 'sNrw ' + 'naro ' # No individual headers for the sizes. + 'Sizes...' + '\n') for key in locale_keys: l = locale_map[key] # Sequence of StringDataToken: try: # Twelve long month names can add up to more than 256 (e.g. kde_TZ: 264) ranges = (tuple( months_data.append(m[calendar], 16) for m in (l.standaloneLongMonths, l.longMonths)) + tuple( months_data.append(m[calendar]) for m in (l.standaloneShortMonths, l.shortMonths, l.standaloneNarrowMonths, l.narrowMonths))) except ValueError as e: e.args += (l.language, l.script, l.country, stem) raise calendar_temp_file.write(calendar_format % ( (key[0], key[1], key[2]) + tuple(r.index for r in ranges) + tuple(r.length for r in ranges)) + "// %s/%s/%s\n" % (l.language, l.script, l.country)) calendar_temp_file.write(calendar_format % ((0, ) * (3 + 6 * 2)) + '// trailing zeros\n') calendar_temp_file.write("};\n") months_data.write(calendar_temp_file) s = calendar_template_file.readline() while s and s != GENERATED_BLOCK_END: s = calendar_template_file.readline() while s: calendar_temp_file.write(s) s = calendar_template_file.readline() os.rename( calendar_temp_file_path, os.path.join(qtsrcdir, 'src', 'corelib', 'time', calendar_data_file)) # qlocale.h (qlocaleh_temp_file, qlocaleh_temp_file_path) = tempfile.mkstemp("qlocale.h", dir=qtsrcdir) qlocaleh_temp_file = os.fdopen(qlocaleh_temp_file, "w") qlocaleh_file = open(qtsrcdir + "/src/corelib/text/qlocale.h", "r") s = qlocaleh_file.readline() while s and s != GENERATED_BLOCK_START: qlocaleh_temp_file.write(s) s = qlocaleh_file.readline() qlocaleh_temp_file.write(GENERATED_BLOCK_START) qlocaleh_temp_file.write( "// see qlocale_data_p.h for more info on generated data\n") # Language enum qlocaleh_temp_file.write(" enum Language {\n") language = None for key, value in language_map.items(): language = fixedLanguageName(value[0], dupes) qlocaleh_temp_file.write(" " + language + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(language_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastLanguage = " + language + "\n") qlocaleh_temp_file.write(" };\n\n") # Script enum qlocaleh_temp_file.write(" enum Script {\n") script = None for key, value in script_map.items(): script = fixedScriptName(value[0], dupes) qlocaleh_temp_file.write(" " + script + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(script_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastScript = " + script + "\n") qlocaleh_temp_file.write(" };\n\n") # Country enum qlocaleh_temp_file.write(" enum Country {\n") country = None for key, value in country_map.items(): country = fixedCountryName(value[0], dupes) qlocaleh_temp_file.write(" " + country + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(country_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastCountry = " + country + "\n") qlocaleh_temp_file.write(" };\n") qlocaleh_temp_file.write(GENERATED_BLOCK_END) s = qlocaleh_file.readline() # skip until end of the old block while s and s != GENERATED_BLOCK_END: s = qlocaleh_file.readline() s = qlocaleh_file.readline() while s: qlocaleh_temp_file.write(s) s = qlocaleh_file.readline() qlocaleh_temp_file.close() qlocaleh_file.close() os.remove(qtsrcdir + "/src/corelib/text/qlocale.h") os.rename(qlocaleh_temp_file_path, qtsrcdir + "/src/corelib/text/qlocale.h") # qlocale.qdoc (qlocaleqdoc_temp_file, qlocaleqdoc_temp_file_path) = tempfile.mkstemp("qlocale.qdoc", dir=qtsrcdir) qlocaleqdoc_temp_file = os.fdopen(qlocaleqdoc_temp_file, "w") qlocaleqdoc_file = open(qtsrcdir + "/src/corelib/text/qlocale.qdoc", "r") s = qlocaleqdoc_file.readline() DOCSTRING = " QLocale's data is based on Common Locale Data Repository " while s: if DOCSTRING in s: qlocaleqdoc_temp_file.write(DOCSTRING + "v" + cldr_version + ".\n") else: qlocaleqdoc_temp_file.write(s) s = qlocaleqdoc_file.readline() qlocaleqdoc_temp_file.close() qlocaleqdoc_file.close() os.remove(qtsrcdir + "/src/corelib/text/qlocale.qdoc") os.rename(qlocaleqdoc_temp_file_path, qtsrcdir + "/src/corelib/text/qlocale.qdoc")
def main(): if len(sys.argv) != 3: usage() localexml = sys.argv[1] qtsrcdir = sys.argv[2] if not (os.path.isdir(qtsrcdir) and all( os.path.isfile( os.path.join(qtsrcdir, 'src', 'corelib', 'tools', leaf)) for leaf in ('qlocale_data_p.h', 'qlocale.h', 'qlocale.qdoc'))): usage() (data_temp_file, data_temp_file_path) = tempfile.mkstemp("qlocale_data_p", dir=qtsrcdir) data_temp_file = os.fdopen(data_temp_file, "w") qlocaledata_file = open(qtsrcdir + "/src/corelib/tools/qlocale_data_p.h", "r") s = qlocaledata_file.readline() while s and s != GENERATED_BLOCK_START: data_temp_file.write(s) s = qlocaledata_file.readline() data_temp_file.write(GENERATED_BLOCK_START) doc = xml.dom.minidom.parse(localexml) language_map = loadMap(doc, 'language') script_map = loadMap(doc, 'script') country_map = loadMap(doc, 'country') likely_subtags_map = loadLikelySubtagsMap(doc) default_map = {} for key in likely_subtags_map.keys(): tmp = likely_subtags_map[key] if tmp["from"][1] == "AnyScript" and tmp["from"][ 2] == "AnyCountry" and tmp["to"][2] != "AnyCountry": default_map[(tmp["to"][0], tmp["to"][1])] = tmp["to"][2] locale_map = loadLocaleMap(doc, language_map, script_map, country_map, likely_subtags_map) dupes = findDupes(language_map, country_map) cldr_version = firstChildText(doc.documentElement, "version") data_temp_file.write(""" /* This part of the file was generated on %s from the Common Locale Data Repository v%s http://www.unicode.org/cldr/ Do not edit this section: instead regenerate it using cldr2qlocalexml.py and qlocalexml2cpp.py on updated (or edited) CLDR data; see qtbase/util/local_database/. */ """ % (str(datetime.date.today()), cldr_version)) # Likely subtags map data_temp_file.write("static const QLocaleId likely_subtags[] = {\n") index = 0 for key in likely_subtags_map.keys(): tmp = likely_subtags_map[key] from_language = languageNameToId(tmp["from"][0], language_map) from_script = scriptNameToId(tmp["from"][1], script_map) from_country = countryNameToId(tmp["from"][2], country_map) to_language = languageNameToId(tmp["to"][0], language_map) to_script = scriptNameToId(tmp["to"][1], script_map) to_country = countryNameToId(tmp["to"][2], country_map) cmnt_from = "" if from_language != 0: cmnt_from = cmnt_from + language_map[from_language][1] else: cmnt_from = cmnt_from + "und" if from_script != 0: if cmnt_from: cmnt_from = cmnt_from + "_" cmnt_from = cmnt_from + script_map[from_script][1] if from_country != 0: if cmnt_from: cmnt_from = cmnt_from + "_" cmnt_from = cmnt_from + country_map[from_country][1] cmnt_to = "" if to_language != 0: cmnt_to = cmnt_to + language_map[to_language][1] else: cmnt_to = cmnt_to + "und" if to_script != 0: if cmnt_to: cmnt_to = cmnt_to + "_" cmnt_to = cmnt_to + script_map[to_script][1] if to_country != 0: if cmnt_to: cmnt_to = cmnt_to + "_" cmnt_to = cmnt_to + country_map[to_country][1] data_temp_file.write(" ") data_temp_file.write("{ %3d, %3d, %3d }, { %3d, %3d, %3d }" % (from_language, from_script, from_country, to_language, to_script, to_country)) index += 1 if index != len(likely_subtags_map): data_temp_file.write(",") else: data_temp_file.write(" ") data_temp_file.write(" // %s -> %s\n" % (cmnt_from, cmnt_to)) data_temp_file.write("};\n") data_temp_file.write("\n") # Locale index data_temp_file.write("static const quint16 locale_index[] = {\n") index = 0 for key in language_map.keys(): i = 0 count = languageCount(key, locale_map) if count > 0: i = index index += count data_temp_file.write("%6d, // %s\n" % (i, language_map[key][0])) data_temp_file.write(" 0 // trailing 0\n") data_temp_file.write("};\n\n") list_pattern_part_data = StringData('list_pattern_part_data') date_format_data = StringData('date_format_data') time_format_data = StringData('time_format_data') months_data = StringData('months_data') days_data = StringData('days_data') am_data = StringData('am_data') pm_data = StringData('pm_data') byte_unit_data = StringData('byte_unit_data') currency_symbol_data = StringData('currency_symbol_data') currency_display_name_data = StringData('currency_display_name_data') currency_format_data = StringData('currency_format_data') endonyms_data = StringData('endonyms_data') # Locale data data_temp_file.write("static const QLocaleData locale_data[] = {\n") # Table headings: keep each label centred in its field, matching line_format: data_temp_file.write( ' // ' # Width 6 + comma: + ' lang ' # IDs + 'script ' + ' terr ' + ' dec ' # Numeric punctuation: + ' group ' + ' list ' # List delimiter + ' prcnt ' # Arithmetic symbols: + ' zero ' + ' minus ' + ' plus ' + ' exp ' # Width 8 + comma - to make space for these wide labels ! + ' quotOpn ' # Quotation marks + ' quotEnd ' + 'altQtOpn ' + 'altQtEnd ' # Width 11 + comma: + ' lpStart ' # List pattern + ' lpMid ' + ' lpEnd ' + ' lpTwo ' + ' sDtFmt ' # Date format + ' lDtFmt ' + ' sTmFmt ' # Time format + ' lTmFmt ' + ' ssMonth ' # Months + ' slMonth ' + ' snMonth ' + ' sMonth ' + ' lMonth ' + ' nMonth ' + ' ssDays ' # Days + ' slDays ' + ' snDays ' + ' sDays ' + ' lDays ' + ' nDays ' + ' am ' # am/pm indicators + ' pm ' # Width 8 + comma + ' byte ' + ' siQuant ' + 'iecQuant ' # Width 8+4 + comma + ' currISO ' # Width 11 + comma: + ' currSym ' # Currency formatting: + ' currDsply ' + ' currFmt ' + ' currFmtNeg ' + ' endoLang ' # Name of language in itself, and of country: + ' endoCntry ' # Width 6 + comma: + 'curDgt ' # Currency number representation: + 'curRnd ' + 'dow1st ' # First day of week + ' wknd+ ' # Week-end start/end days: + ' wknd-' # No trailing space on last entry (be sure to # pad before adding anything after it). + '\n') locale_keys = locale_map.keys() compareLocaleKeys.default_map = default_map compareLocaleKeys.locale_map = locale_map locale_keys.sort(compareLocaleKeys) line_format = ( ' { ' # Locale-identifier: + '%6d,' * 3 # Numeric formats, list delimiter: + '%6d,' * 8 # Quotation marks: + '%8d,' * 4 # List patterns, date/time formats, month/day names, am/pm: + '%11s,' * 22 # SI/IEC byte-unit abbreviations: + '%8s,' * 3 # Currency ISO code: + ' %10s, ' # Currency and endonyms + '%11s,' * 6 # Currency formatting: + '%6d,%6d' # Day of week and week-end: + ',%6d' * 3 + ' }') for key in locale_keys: l = locale_map[key] data_temp_file.write(line_format % ( key[0], key[1], key[2], l.decimal, l.group, l.listDelim, l.percent, l.zero, l.minus, l.plus, l.exp, l.quotationStart, l.quotationEnd, l.alternateQuotationStart, l.alternateQuotationEnd, list_pattern_part_data.append(l.listPatternPartStart), list_pattern_part_data.append(l.listPatternPartMiddle), list_pattern_part_data.append(l.listPatternPartEnd), list_pattern_part_data.append(l.listPatternPartTwo), date_format_data.append(l.shortDateFormat), date_format_data.append(l.longDateFormat), time_format_data.append(l.shortTimeFormat), time_format_data.append(l.longTimeFormat), months_data.append(l.standaloneShortMonths), months_data.append(l.standaloneLongMonths), months_data.append(l.standaloneNarrowMonths), months_data.append(l.shortMonths), months_data.append( l.longMonths), months_data.append(l.narrowMonths), days_data.append(l.standaloneShortDays), days_data.append(l.standaloneLongDays), days_data.append(l.standaloneNarrowDays), days_data.append(l.shortDays), days_data.append(l.longDays), days_data.append(l.narrowDays), am_data.append(l.am), pm_data.append(l.pm), byte_unit_data.append(l.byte_unit), byte_unit_data.append(l.byte_si_quantified), byte_unit_data.append(l.byte_iec_quantified), currencyIsoCodeData(l.currencyIsoCode), currency_symbol_data.append(l.currencySymbol), currency_display_name_data.append(l.currencyDisplayName), currency_format_data.append(l.currencyFormat), currency_format_data.append(l.currencyNegativeFormat), endonyms_data.append(l.languageEndonym), endonyms_data.append(l.countryEndonym), l.currencyDigits, l. currencyRounding, l.firstDayOfWeek, l.weekendStart, l.weekendEnd) + ", // %s/%s/%s\n" % (l.language, l.script, l.country)) data_temp_file.write(line_format # All zeros, matching the format: % ((0, ) * (3 + 8 + 4) + ("0,0", ) * (22 + 3) + (currencyIsoCodeData(0), ) + ("0,0", ) * 6 + (0, ) * (2 + 3)) + " // trailing 0s\n") data_temp_file.write("};\n") # StringData tables: for data in (list_pattern_part_data, date_format_data, time_format_data, months_data, days_data, byte_unit_data, am_data, pm_data, currency_symbol_data, currency_display_name_data, currency_format_data, endonyms_data): data_temp_file.write("\nstatic const ushort %s[] = {\n" % data.name) data_temp_file.write(wrap_list(data.data)) data_temp_file.write("\n};\n") data_temp_file.write("\n") # Language name list data_temp_file.write("static const char language_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in language_map.keys(): if key == 0: continue data_temp_file.write('"' + language_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Language name index data_temp_file.write("static const quint16 language_name_index[] = {\n") data_temp_file.write(" 0, // AnyLanguage\n") index = 8 for key in language_map.keys(): if key == 0: continue language = language_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, language)) index += len(language) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Script name list data_temp_file.write("static const char script_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in script_map.keys(): if key == 0: continue data_temp_file.write('"' + script_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Script name index data_temp_file.write("static const quint16 script_name_index[] = {\n") data_temp_file.write(" 0, // AnyScript\n") index = 8 for key in script_map.keys(): if key == 0: continue script = script_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, script)) index += len(script) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Country name list data_temp_file.write("static const char country_name_list[] =\n") data_temp_file.write('"Default\\0"\n') for key in country_map.keys(): if key == 0: continue data_temp_file.write('"' + country_map[key][0] + '\\0"\n') data_temp_file.write(";\n") data_temp_file.write("\n") # Country name index data_temp_file.write("static const quint16 country_name_index[] = {\n") data_temp_file.write(" 0, // AnyCountry\n") index = 8 for key in country_map.keys(): if key == 0: continue country = country_map[key][0] data_temp_file.write("%6d, // %s\n" % (index, country)) index += len(country) + 1 data_temp_file.write("};\n") data_temp_file.write("\n") # Language code list data_temp_file.write("static const unsigned char language_code_list[] =\n") for key in language_map.keys(): code = language_map[key][1] if len(code) == 2: code += r"\0" data_temp_file.write('"%2s" // %s\n' % (code, language_map[key][0])) data_temp_file.write(";\n") data_temp_file.write("\n") # Script code list data_temp_file.write("static const unsigned char script_code_list[] =\n") for key in script_map.keys(): code = script_map[key][1] for i in range(4 - len(code)): code += "\\0" data_temp_file.write('"%2s" // %s\n' % (code, script_map[key][0])) data_temp_file.write(";\n") # Country code list data_temp_file.write("static const unsigned char country_code_list[] =\n") for key in country_map.keys(): code = country_map[key][1] if len(code) == 2: code += "\\0" data_temp_file.write('"%2s" // %s\n' % (code, country_map[key][0])) data_temp_file.write(";\n") data_temp_file.write("\n") data_temp_file.write(GENERATED_BLOCK_END) s = qlocaledata_file.readline() # skip until end of the old block while s and s != GENERATED_BLOCK_END: s = qlocaledata_file.readline() s = qlocaledata_file.readline() while s: data_temp_file.write(s) s = qlocaledata_file.readline() data_temp_file.close() qlocaledata_file.close() os.remove(qtsrcdir + "/src/corelib/tools/qlocale_data_p.h") os.rename(data_temp_file_path, qtsrcdir + "/src/corelib/tools/qlocale_data_p.h") # qlocale.h (qlocaleh_temp_file, qlocaleh_temp_file_path) = tempfile.mkstemp("qlocale.h", dir=qtsrcdir) qlocaleh_temp_file = os.fdopen(qlocaleh_temp_file, "w") qlocaleh_file = open(qtsrcdir + "/src/corelib/tools/qlocale.h", "r") s = qlocaleh_file.readline() while s and s != GENERATED_BLOCK_START: qlocaleh_temp_file.write(s) s = qlocaleh_file.readline() qlocaleh_temp_file.write(GENERATED_BLOCK_START) qlocaleh_temp_file.write( "// see qlocale_data_p.h for more info on generated data\n") # Language enum qlocaleh_temp_file.write(" enum Language {\n") language = None for key, value in language_map.items(): language = fixedLanguageName(value[0], dupes) qlocaleh_temp_file.write(" " + language + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(language_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastLanguage = " + language + "\n") qlocaleh_temp_file.write(" };\n") qlocaleh_temp_file.write("\n") # Script enum qlocaleh_temp_file.write(" enum Script {\n") script = None for key, value in script_map.items(): script = fixedScriptName(value[0], dupes) qlocaleh_temp_file.write(" " + script + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(script_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastScript = " + script + "\n") qlocaleh_temp_file.write(" };\n") # Country enum qlocaleh_temp_file.write(" enum Country {\n") country = None for key, value in country_map.items(): country = fixedCountryName(value[0], dupes) qlocaleh_temp_file.write(" " + country + " = " + str(key) + ",\n") qlocaleh_temp_file.write("\n " + ",\n ".join( '%s = %s' % pair for pair in sorted(country_aliases.items())) + ",\n") qlocaleh_temp_file.write("\n") qlocaleh_temp_file.write(" LastCountry = " + country + "\n") qlocaleh_temp_file.write(" };\n") qlocaleh_temp_file.write(GENERATED_BLOCK_END) s = qlocaleh_file.readline() # skip until end of the old block while s and s != GENERATED_BLOCK_END: s = qlocaleh_file.readline() s = qlocaleh_file.readline() while s: qlocaleh_temp_file.write(s) s = qlocaleh_file.readline() qlocaleh_temp_file.close() qlocaleh_file.close() os.remove(qtsrcdir + "/src/corelib/tools/qlocale.h") os.rename(qlocaleh_temp_file_path, qtsrcdir + "/src/corelib/tools/qlocale.h") # qlocale.qdoc (qlocaleqdoc_temp_file, qlocaleqdoc_temp_file_path) = tempfile.mkstemp("qlocale.qdoc", dir=qtsrcdir) qlocaleqdoc_temp_file = os.fdopen(qlocaleqdoc_temp_file, "w") qlocaleqdoc_file = open(qtsrcdir + "/src/corelib/tools/qlocale.qdoc", "r") s = qlocaleqdoc_file.readline() DOCSTRING = " QLocale's data is based on Common Locale Data Repository " while s: if DOCSTRING in s: qlocaleqdoc_temp_file.write(DOCSTRING + "v" + cldr_version + ".\n") else: qlocaleqdoc_temp_file.write(s) s = qlocaleqdoc_file.readline() qlocaleqdoc_temp_file.close() qlocaleqdoc_file.close() os.remove(qtsrcdir + "/src/corelib/tools/qlocale.qdoc") os.rename(qlocaleqdoc_temp_file_path, qtsrcdir + "/src/corelib/tools/qlocale.qdoc")