diff options
-rwxr-xr-x | util/local_database/cldr2qlocalexml.py | 21 | ||||
-rw-r--r-- | util/local_database/xpathlite.py | 27 |
2 files changed, 28 insertions, 20 deletions
diff --git a/util/local_database/cldr2qlocalexml.py b/util/local_database/cldr2qlocalexml.py index 6f4ee25..71d14e8 100755 --- a/util/local_database/cldr2qlocalexml.py +++ b/util/local_database/cldr2qlocalexml.py @@ -99,16 +99,23 @@ def generateLocaleInfo(path): language = enumdata.language_list[language_id][0] country_id = enumdata.countryCodeToId(country_code) - if country_id == -1: - sys.stderr.write("unnknown country code \"" + country_code + "\"\n") - return {} - country = enumdata.country_list[country_id][0] + country = "" + if country_id != -1: + 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['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['country_id'] = country_id result['decimal'] = findEntry(path, "numbers/symbols/decimal") @@ -119,8 +126,8 @@ def generateLocaleInfo(path): result['minus'] = findEntry(path, "numbers/symbols/minusSign") result['plus'] = findEntry(path, "numbers/symbols/plusSign") result['exp'] = findEntry(path, "numbers/symbols/exponential").lower() - result['am'] = findEntry(path, "dates/calendars/calendar[gregorian]/am", draft=DraftResolution.approved) - result['pm'] = findEntry(path, "dates/calendars/calendar[gregorian]/pm", draft=DraftResolution.approved) + result['am'] = findEntry(path, "dates/calendars/calendar[gregorian]/am", draft) + result['pm'] = findEntry(path, "dates/calendars/calendar[gregorian]/pm", draft) result['longDateFormat'] = findEntry(path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[full]/dateFormat/pattern") result['shortDateFormat'] = findEntry(path, "dates/calendars/calendar[gregorian]/dateFormats/dateFormatLength[short]/dateFormat/pattern") result['longTimeFormat'] = findEntry(path, "dates/calendars/calendar[gregorian]/timeFormats/timeFormatLength[full]/timeFormat/pattern") @@ -315,7 +322,7 @@ for file in cldr_files: sys.stderr.write("skipping file \"" + file + "\"\n") continue - locale_database[(l['language_id'], l['country_id'])] = l + locale_database[(l['language_id'], l['country_id'], l['script_code'], l['variant_code'])] = l locale_keys = locale_database.keys() locale_keys.sort() diff --git a/util/local_database/xpathlite.py b/util/local_database/xpathlite.py index 94bc23f..0f21a19 100644 --- a/util/local_database/xpathlite.py +++ b/util/local_database/xpathlite.py @@ -52,6 +52,11 @@ class DraftResolution: provisional = 'provisional' contributed = 'contributed' approved = 'approved' + _values = { unconfirmed : 1, provisional : 2, contributed : 3, approved : 4 } + def __init__(self, resolution): + self.resolution = resolution + def toInt(self): + return DraftResolution._values[self.resolution] class Error: def __init__(self, msg): @@ -71,10 +76,13 @@ def findChild(parent, tag_name, arg_value, draft=None): if node.attributes['type'].nodeValue != arg_value: continue if draft: - if node.attributes.has_key('draft'): - if node.attributes['draft'].nodeValue != draft: - continue - elif draft != DraftResolution.approved: + if not node.attributes.has_key('draft'): + # if draft is not specified then it's approved + return node + value = node.attributes['draft'].nodeValue + value = DraftResolution(value).toInt() + exemplar = DraftResolution(draft).toInt() + if exemplar > value: continue return node return False @@ -90,9 +98,6 @@ def _findEntryInFile(file, path, draft=None, attribute=None): elt = doc.documentElement tag_spec_list = path.split("/") last_entry = None - if draft is not None: - last_entry = tag_spec_list[-1] - tag_spec_list = tag_spec_list[:-1] for i in range(len(tag_spec_list)): tag_spec = tag_spec_list[i] tag_name = tag_spec @@ -118,11 +123,7 @@ def _findEntryInFile(file, path, draft=None, attribute=None): aliaspath = "/".join(aliaspath) # "locale" aliases are special - we need to start lookup from scratch return (None, aliaspath) - elt = findChild(elt, tag_name, arg_value) - if not elt: - return ("", None) - if last_entry is not None: - elt = findChild(elt, last_entry, '', draft) + elt = findChild(elt, tag_name, arg_value, draft) if not elt: return ("", None) if attribute is not None: @@ -145,7 +146,7 @@ def findAlias(file): def _findEntry(base, path, draft=None, attribute=None): file = base if base.endswith(".xml"): - file = base + filename = base base = base[:-4] else: file = base + ".xml" |