summaryrefslogtreecommitdiffstats
path: root/util/local_database/qlocalexml2cpp.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/local_database/qlocalexml2cpp.py')
-rwxr-xr-xutil/local_database/qlocalexml2cpp.py542
1 files changed, 213 insertions, 329 deletions
diff --git a/util/local_database/qlocalexml2cpp.py b/util/local_database/qlocalexml2cpp.py
index 9fd88c46fe..0f10f8ce2d 100755
--- a/util/local_database/qlocalexml2cpp.py
+++ b/util/local_database/qlocalexml2cpp.py
@@ -1,7 +1,7 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
#############################################################################
##
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2017 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the test suite of the Qt Toolkit.
@@ -26,6 +26,12 @@
## $QT_END_LICENSE$
##
#############################################################################
+"""Script to generate C++ code from CLDR data in qLocaleXML form
+
+See ``cldr2qlocalexml.py`` for how to generate the qLocaleXML data itself.
+Pass the output file from that as first parameter to this script; pass
+the root of the qtbase check-out as second parameter.
+"""
import os
import sys
@@ -33,6 +39,8 @@ import tempfile
import datetime
import xml.dom.minidom
+from localexml import Locale
+
class Error:
def __init__(self, msg):
self.msg = msg
@@ -41,113 +49,68 @@ class Error:
def wrap_list(lst):
def split(lst, size):
- for i in range(len(lst)/size+1):
- yield lst[i*size:(i+1)*size]
- return ",\n".join(map(lambda x: ", ".join(x), split(lst, 20)))
+ while lst:
+ head, lst = lst[:size], lst[size:]
+ yield head
+ return ",\n".join(", ".join(x) for x in split(lst, 20))
+
+def isNodeNamed(elt, name, TYPE=xml.dom.minidom.Node.ELEMENT_NODE):
+ return elt.nodeType == TYPE and elt.nodeName == name
def firstChildElt(parent, name):
child = parent.firstChild
while child:
- if child.nodeType == parent.ELEMENT_NODE \
- and (not name or child.nodeName == name):
+ if isNodeNamed(child, name):
return child
child = child.nextSibling
- return False
-
-def nextSiblingElt(sibling, name):
- sib = sibling.nextSibling
- while sib:
- if sib.nodeType == sibling.ELEMENT_NODE \
- and (not name or sib.nodeName == name):
- return sib
- sib = sib.nextSibling
- return False
-
-def eltText(elt):
- result = ""
- child = elt.firstChild
- while child:
- if child.nodeType == elt.TEXT_NODE:
- if result:
- result += " "
- result += child.nodeValue
- child = child.nextSibling
- return result
-def loadLanguageMap(doc):
- result = {}
+ raise Error('No %s child found' % name)
- language_list_elt = firstChildElt(doc.documentElement, "languageList")
- language_elt = firstChildElt(language_list_elt, "language")
- while language_elt:
- language_id = int(eltText(firstChildElt(language_elt, "id")))
- language_name = eltText(firstChildElt(language_elt, "name"))
- language_code = eltText(firstChildElt(language_elt, "code"))
- result[language_id] = (language_name, language_code)
- language_elt = nextSiblingElt(language_elt, "language")
+def eachEltInGroup(parent, group, key):
+ try:
+ element = firstChildElt(parent, group).firstChild
+ except Error:
+ element = None
- return result
-
-def loadScriptMap(doc):
- result = {}
+ while element:
+ if isNodeNamed(element, key):
+ yield element
+ element = element.nextSibling
- script_list_elt = firstChildElt(doc.documentElement, "scriptList")
- script_elt = firstChildElt(script_list_elt, "script")
- while script_elt:
- script_id = int(eltText(firstChildElt(script_elt, "id")))
- script_name = eltText(firstChildElt(script_elt, "name"))
- script_code = eltText(firstChildElt(script_elt, "code"))
- result[script_id] = (script_name, script_code)
- script_elt = nextSiblingElt(script_elt, "script")
-
- return result
-
-def loadCountryMap(doc):
- result = {}
+def eltWords(elt):
+ child = elt.firstChild
+ while child:
+ if child.nodeType == elt.TEXT_NODE:
+ yield child.nodeValue
+ child = child.nextSibling
- country_list_elt = firstChildElt(doc.documentElement, "countryList")
- country_elt = firstChildElt(country_list_elt, "country")
- while country_elt:
- country_id = int(eltText(firstChildElt(country_elt, "id")))
- country_name = eltText(firstChildElt(country_elt, "name"))
- country_code = eltText(firstChildElt(country_elt, "code"))
- result[country_id] = (country_name, country_code)
- country_elt = nextSiblingElt(country_elt, "country")
+def firstChildText(elt, key):
+ return ' '.join(eltWords(firstChildElt(elt, key)))
- return result
+def loadMap(doc, category):
+ return dict((int(firstChildText(element, 'id')),
+ (firstChildText(element, 'name'),
+ firstChildText(element, 'code')))
+ for element in eachEltInGroup(doc.documentElement,
+ category + 'List', category))
def loadLikelySubtagsMap(doc):
- result = {}
+ def triplet(element, keys=('language', 'script', 'country')):
+ return tuple(firstChildText(element, key) for key in keys)
- i = 0
- list_elt = firstChildElt(doc.documentElement, "likelySubtags")
- elt = firstChildElt(list_elt, "likelySubtag")
- while elt:
- elt_from = firstChildElt(elt, "from")
- from_language = eltText(firstChildElt(elt_from, "language"));
- from_script = eltText(firstChildElt(elt_from, "script"));
- from_country = eltText(firstChildElt(elt_from, "country"));
-
- elt_to = firstChildElt(elt, "to")
- to_language = eltText(firstChildElt(elt_to, "language"));
- to_script = eltText(firstChildElt(elt_to, "script"));
- to_country = eltText(firstChildElt(elt_to, "country"));
-
- tmp = {}
- tmp["from"] = (from_language, from_script, from_country)
- tmp["to"] = (to_language, to_script, to_country)
- result[i] = tmp;
- i += 1
- elt = nextSiblingElt(elt, "likelySubtag");
- return result
+ return dict((i, {'from': triplet(firstChildElt(elt, "from")),
+ 'to': triplet(firstChildElt(elt, "to"))})
+ for i, elt in enumerate(eachEltInGroup(doc.documentElement,
+ 'likelySubtags', 'likelySubtag')))
def fixedScriptName(name, dupes):
- name = name.replace(" ", "")
+ # Don't .capitalize() as some names are already camel-case (see enumdata.py):
+ name = ''.join(word[0].upper() + word[1:] for word in name.split())
if name[-6:] != "Script":
- name = name + "Script";
+ name = name + "Script"
if name in dupes:
sys.stderr.write("\n\n\nERROR: The script name '%s' is messy" % name)
- sys.exit(1);
+ sys.exit(1)
return name
def fixedCountryName(name, dupes):
@@ -161,8 +124,8 @@ def fixedLanguageName(name, dupes):
return name.replace(" ", "")
def findDupes(country_map, language_map):
- country_set = set([ v[0] for a, v in country_map.iteritems() ])
- language_set = set([ v[0] for a, v in language_map.iteritems() ])
+ country_set = set(v[0] for a, v in country_map.iteritems())
+ language_set = set(v[0] for a, v in language_map.iteritems())
return country_set & language_set
def languageNameToId(name, language_map):
@@ -183,108 +146,11 @@ def countryNameToId(name, country_map):
return key
return -1
-def convertFormat(format):
- result = ""
- i = 0
- while i < len(format):
- if format[i] == "'":
- result += "'"
- i += 1
- while i < len(format) and format[i] != "'":
- result += format[i]
- i += 1
- if i < len(format):
- result += "'"
- i += 1
- else:
- s = format[i:]
- if s.startswith("EEEE"):
- result += "dddd"
- i += 4
- elif s.startswith("EEE"):
- result += "ddd"
- i += 3
- elif s.startswith("a"):
- result += "AP"
- i += 1
- elif s.startswith("z"):
- result += "t"
- i += 1
- elif s.startswith("v"):
- i += 1
- else:
- result += format[i]
- i += 1
-
- return result
-
-def convertToQtDayOfWeek(firstDay):
- qtDayOfWeek = {"mon":1, "tue":2, "wed":3, "thu":4, "fri":5, "sat":6, "sun":7}
- return qtDayOfWeek[firstDay]
-
-def assertSingleChar(string):
- assert len(string) == 1, "This string is not allowed to be longer than 1 character"
- return string
-
-class Locale:
- def __init__(self, elt):
- self.language = eltText(firstChildElt(elt, "language"))
- self.languageEndonym = eltText(firstChildElt(elt, "languageEndonym"))
- self.script = eltText(firstChildElt(elt, "script"))
- self.country = eltText(firstChildElt(elt, "country"))
- self.countryEndonym = eltText(firstChildElt(elt, "countryEndonym"))
- self.decimal = int(eltText(firstChildElt(elt, "decimal")))
- self.group = int(eltText(firstChildElt(elt, "group")))
- self.listDelim = int(eltText(firstChildElt(elt, "list")))
- self.percent = int(eltText(firstChildElt(elt, "percent")))
- self.zero = int(eltText(firstChildElt(elt, "zero")))
- self.minus = int(eltText(firstChildElt(elt, "minus")))
- self.plus = int(eltText(firstChildElt(elt, "plus")))
- self.exp = int(eltText(firstChildElt(elt, "exp")))
- self.quotationStart = ord(assertSingleChar(eltText(firstChildElt(elt, "quotationStart"))))
- self.quotationEnd = ord(assertSingleChar(eltText(firstChildElt(elt, "quotationEnd"))))
- self.alternateQuotationStart = ord(assertSingleChar(eltText(firstChildElt(elt, "alternateQuotationStart"))))
- self.alternateQuotationEnd = ord(assertSingleChar(eltText(firstChildElt(elt, "alternateQuotationEnd"))))
- self.listPatternPartStart = eltText(firstChildElt(elt, "listPatternPartStart"))
- self.listPatternPartMiddle = eltText(firstChildElt(elt, "listPatternPartMiddle"))
- self.listPatternPartEnd = eltText(firstChildElt(elt, "listPatternPartEnd"))
- self.listPatternPartTwo = eltText(firstChildElt(elt, "listPatternPartTwo"))
- self.am = eltText(firstChildElt(elt, "am"))
- self.pm = eltText(firstChildElt(elt, "pm"))
- self.firstDayOfWeek = convertToQtDayOfWeek(eltText(firstChildElt(elt, "firstDayOfWeek")))
- self.weekendStart = convertToQtDayOfWeek(eltText(firstChildElt(elt, "weekendStart")))
- self.weekendEnd = convertToQtDayOfWeek(eltText(firstChildElt(elt, "weekendEnd")))
- self.longDateFormat = convertFormat(eltText(firstChildElt(elt, "longDateFormat")))
- self.shortDateFormat = convertFormat(eltText(firstChildElt(elt, "shortDateFormat")))
- self.longTimeFormat = convertFormat(eltText(firstChildElt(elt, "longTimeFormat")))
- self.shortTimeFormat = convertFormat(eltText(firstChildElt(elt, "shortTimeFormat")))
- self.standaloneLongMonths = eltText(firstChildElt(elt, "standaloneLongMonths"))
- self.standaloneShortMonths = eltText(firstChildElt(elt, "standaloneShortMonths"))
- self.standaloneNarrowMonths = eltText(firstChildElt(elt, "standaloneNarrowMonths"))
- self.longMonths = eltText(firstChildElt(elt, "longMonths"))
- self.shortMonths = eltText(firstChildElt(elt, "shortMonths"))
- self.narrowMonths = eltText(firstChildElt(elt, "narrowMonths"))
- self.standaloneLongDays = eltText(firstChildElt(elt, "standaloneLongDays"))
- self.standaloneShortDays = eltText(firstChildElt(elt, "standaloneShortDays"))
- self.standaloneNarrowDays = eltText(firstChildElt(elt, "standaloneNarrowDays"))
- self.longDays = eltText(firstChildElt(elt, "longDays"))
- self.shortDays = eltText(firstChildElt(elt, "shortDays"))
- self.narrowDays = eltText(firstChildElt(elt, "narrowDays"))
- self.currencyIsoCode = eltText(firstChildElt(elt, "currencyIsoCode"))
- self.currencySymbol = eltText(firstChildElt(elt, "currencySymbol"))
- self.currencyDisplayName = eltText(firstChildElt(elt, "currencyDisplayName"))
- self.currencyDigits = int(eltText(firstChildElt(elt, "currencyDigits")))
- self.currencyRounding = int(eltText(firstChildElt(elt, "currencyRounding")))
- self.currencyFormat = eltText(firstChildElt(elt, "currencyFormat"))
- self.currencyNegativeFormat = eltText(firstChildElt(elt, "currencyNegativeFormat"))
-
def loadLocaleMap(doc, language_map, script_map, country_map, likely_subtags_map):
result = {}
- locale_list_elt = firstChildElt(doc.documentElement, "localeList")
- locale_elt = firstChildElt(locale_list_elt, "locale")
- while locale_elt:
- locale = Locale(locale_elt)
+ for locale_elt in eachEltInGroup(doc.documentElement, "localeList", "locale"):
+ locale = Locale.fromXmlData(lambda k: firstChildText(locale_elt, k))
language_id = languageNameToId(locale.language, language_map)
if language_id == -1:
sys.stderr.write("Cannot find a language id for '%s'\n" % locale.language)
@@ -318,8 +184,6 @@ def loadLocaleMap(doc, language_map, script_map, country_map, likely_subtags_map
result[(language_id, script_id, country_id)] = locale
- locale_elt = nextSiblingElt(locale_elt, "locale")
-
return result
def compareLocaleKeys(key1, key2):
@@ -385,9 +249,10 @@ class StringDataToken:
return " %d,%d " % (self.index, self.length)
class StringData:
- def __init__(self):
+ def __init__(self, name):
self.data = []
self.hash = {}
+ self.name = name
def append(self, s):
if s in self.hash:
return self.hash[s]
@@ -436,25 +301,24 @@ def escapedString(s):
line += "\\x%02x" % (ord(c))
need_escape = True
if len(line) > 80:
- result = result + "\n" + "\"" + line + "\""
+ result = result + "\n" + '"' + line + '"'
line = ""
line += "\\0"
- result = result + "\n" + "\"" + line + "\""
+ result = result + "\n" + '"' + line + '"'
if result[0] == "\n":
result = result[1:]
return result
def printEscapedString(s):
- print escapedString(s);
-
+ print escapedString(s)
def currencyIsoCodeData(s):
if s:
- return ",".join(map(lambda x: str(ord(x)), s))
- return "0,0,0"
+ return '{' + ",".join(str(ord(x)) for x in s) + '}'
+ return "{0,0,0}"
def usage():
- print "Usage: qlocalexml2cpp.py <path-to-locale.xml> <path-to-qt-src-tree>"
+ print "Usage: qlocalexml2cpp.py <path-to-locale.xml> <path-to-qtbase-src-tree>"
sys.exit(1)
GENERATED_BLOCK_START = "// GENERATED PART STARTS HERE\n"
@@ -467,13 +331,9 @@ def main():
localexml = sys.argv[1]
qtsrcdir = sys.argv[2]
- if not os.path.exists(qtsrcdir) or not os.path.exists(qtsrcdir):
- usage()
- if not os.path.isfile(qtsrcdir + "/src/corelib/tools/qlocale_data_p.h"):
- usage()
- if not os.path.isfile(qtsrcdir + "/src/corelib/tools/qlocale.h"):
- usage()
- if not os.path.isfile(qtsrcdir + "/src/corelib/tools/qlocale.qdoc"):
+ 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)
@@ -486,9 +346,9 @@ def main():
data_temp_file.write(GENERATED_BLOCK_START)
doc = xml.dom.minidom.parse(localexml)
- language_map = loadLanguageMap(doc)
- script_map = loadScriptMap(doc)
- country_map = loadCountryMap(doc)
+ 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():
@@ -498,19 +358,21 @@ def main():
locale_map = loadLocaleMap(doc, language_map, script_map, country_map, likely_subtags_map)
dupes = findDupes(language_map, country_map)
- cldr_version = eltText(firstChildElt(doc.documentElement, "version"))
+ cldr_version = firstChildText(doc.documentElement, "version")
- data_temp_file.write("\n\
-/*\n\
- This part of the file was generated on %s from the\n\
- Common Locale Data Repository v%s\n\
-\n\
- http://www.unicode.org/cldr/\n\
-\n\
- Do not change it, instead edit CLDR data and regenerate this file using\n\
- cldr2qlocalexml.py and qlocalexml2cpp.py.\n\
-*/\n\n\n\
-" % (str(datetime.date.today()), cldr_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")
@@ -574,34 +436,116 @@ def main():
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")
-
- data_temp_file.write("\n")
-
- list_pattern_part_data = StringData()
- date_format_data = StringData()
- time_format_data = StringData()
- months_data = StringData()
- days_data = StringData()
- am_data = StringData()
- pm_data = StringData()
- currency_symbol_data = StringData()
- currency_display_name_data = StringData()
- currency_format_data = StringData()
- endonyms_data = StringData()
+ 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")
- data_temp_file.write("// lang script terr dec group list prcnt zero minus plus exp quotStart quotEnd altQuotStart altQuotEnd lpStart lpMid lpEnd lpTwo sDtFmt lDtFmt sTmFmt lTmFmt ssMonth slMonth sMonth lMonth sDays lDays am,len pm,len\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(" { %6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%6d,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s, {%s}, %s,%s,%s,%s,%s,%s,%6d,%6d,%6d,%6d,%6d }, // %s/%s/%s\n" \
+ data_temp_file.write(line_format
% (key[0], key[1], key[2],
l.decimal,
l.group,
@@ -637,6 +581,9 @@ def main():
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),
@@ -648,97 +595,34 @@ def main():
l.currencyRounding,
l.firstDayOfWeek,
l.weekendStart,
- l.weekendEnd,
- l.language,
- l.script,
- l.country))
- data_temp_file.write(" { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, {0,0,0}, 0,0, 0,0, 0,0, 0,0, 0, 0, 0, 0, 0, 0,0, 0,0 } // trailing 0s\n")
+ 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")
- data_temp_file.write("\n")
-
- # List patterns data
- data_temp_file.write("static const ushort list_pattern_part_data[] = {\n")
- data_temp_file.write(wrap_list(list_pattern_part_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Date format data
- data_temp_file.write("static const ushort date_format_data[] = {\n")
- data_temp_file.write(wrap_list(date_format_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Time format data
- data_temp_file.write("static const ushort time_format_data[] = {\n")
- data_temp_file.write(wrap_list(time_format_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Months data
- data_temp_file.write("static const ushort months_data[] = {\n")
- data_temp_file.write(wrap_list(months_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Days data
- data_temp_file.write("static const ushort days_data[] = {\n")
- data_temp_file.write(wrap_list(days_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # AM data
- data_temp_file.write("static const ushort am_data[] = {\n")
- data_temp_file.write(wrap_list(am_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # PM data
- data_temp_file.write("static const ushort pm_data[] = {\n")
- data_temp_file.write(wrap_list(pm_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Currency symbol data
- data_temp_file.write("static const ushort currency_symbol_data[] = {\n")
- data_temp_file.write(wrap_list(currency_symbol_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Currency display name data
- data_temp_file.write("static const ushort currency_display_name_data[] = {\n")
- data_temp_file.write(wrap_list(currency_display_name_data.data))
- data_temp_file.write("\n};\n")
-
- data_temp_file.write("\n")
-
- # Currency format data
- data_temp_file.write("static const ushort currency_format_data[] = {\n")
- data_temp_file.write(wrap_list(currency_format_data.data))
- data_temp_file.write("\n};\n")
-
- # Endonyms data
- data_temp_file.write("static const ushort endonyms_data[] = {\n")
- data_temp_file.write(wrap_list(endonyms_data.data))
- data_temp_file.write("\n};\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")
+ 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('"' + language_map[key][0] + '\\0"\n')
data_temp_file.write(";\n")
data_temp_file.write("\n")
@@ -759,11 +643,11 @@ def main():
# Script name list
data_temp_file.write("static const char script_name_list[] =\n")
- data_temp_file.write("\"Default\\0\"\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('"' + script_map[key][0] + '\\0"\n')
data_temp_file.write(";\n")
data_temp_file.write("\n")
@@ -784,11 +668,11 @@ def main():
# Country name list
data_temp_file.write("static const char country_name_list[] =\n")
- data_temp_file.write("\"Default\\0\"\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('"' + country_map[key][0] + '\\0"\n')
data_temp_file.write(";\n")
data_temp_file.write("\n")
@@ -813,7 +697,7 @@ def main():
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('"%2s" // %s\n' % (code, language_map[key][0]))
data_temp_file.write(";\n")
data_temp_file.write("\n")
@@ -824,7 +708,7 @@ def main():
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('"%2s" // %s\n' % (code, script_map[key][0]))
data_temp_file.write(";\n")
# Country code list
@@ -833,13 +717,13 @@ def main():
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('"%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 block
+ # skip until end of the old block
while s and s != GENERATED_BLOCK_END:
s = qlocaledata_file.readline()
@@ -931,7 +815,7 @@ def main():
qlocaleh_temp_file.write(GENERATED_BLOCK_END)
s = qlocaleh_file.readline()
- # skip until end of the block
+ # skip until end of the old block
while s and s != GENERATED_BLOCK_END:
s = qlocaleh_file.readline()