summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Dzyubenko <denis.dzyubenko@nokia.com>2010-03-19 15:15:45 +0100
committerDenis Dzyubenko <denis.dzyubenko@nokia.com>2010-03-22 14:21:36 +0100
commit15d64b6e8c5ce98cb8c1061c007afe7f19751226 (patch)
treea60e41f10e104a66c398275510e0ceaebd8bc435
parent44354dc9eebb1fa84529f965e92447b114eb881c (diff)
Improved CLDR parser.
Added support for "defaultNumberingSystem" element to get the right numeric information (decimal point, group separator, zero digit etc). Also fixed xpaths to the AM/PM text for CLDR 1.8.0 Reviewed-by: trustme
-rwxr-xr-xutil/local_database/cldr2qlocalexml.py36
-rw-r--r--util/local_database/xpathlite.py20
2 files changed, 39 insertions, 17 deletions
diff --git a/util/local_database/cldr2qlocalexml.py b/util/local_database/cldr2qlocalexml.py
index 71d14e8cf4..ede7763b75 100755
--- a/util/local_database/cldr2qlocalexml.py
+++ b/util/local_database/cldr2qlocalexml.py
@@ -102,6 +102,9 @@ def generateLocaleInfo(path):
country = ""
if country_id != -1:
country = enumdata.country_list[country_id][0]
+ if country == "":
+ sys.stderr.write("unnknown country code \"" + country_code + "\"\n")
+ return {}
# So we say we accept only those values that have "contributed" or
# "approved" resolution. see http://www.unicode.org/cldr/process.html
@@ -118,16 +121,29 @@ def generateLocaleInfo(path):
result['variant_code'] = variant_code
result['language_id'] = language_id
result['country_id'] = country_id
- result['decimal'] = findEntry(path, "numbers/symbols/decimal")
- result['group'] = findEntry(path, "numbers/symbols/group")
- result['list'] = findEntry(path, "numbers/symbols/list")
- result['percent'] = findEntry(path, "numbers/symbols/percentSign")
- result['zero'] = findEntry(path, "numbers/symbols/nativeZeroDigit")
- 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)
- result['pm'] = findEntry(path, "dates/calendars/calendar[gregorian]/pm", draft)
+
+ numberingSystem = None
+ try:
+ numbering_system = findEntry(path, "numbers/defaultNumberingSystem")
+ except:
+ pass
+ def get_number_in_system(path, xpath, numbering_system):
+ if numbering_system:
+ try:
+ return findEntry(path, xpath + "[numberSystem=" + numbering_system + "]")
+ except xpathlite.Error:
+ 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)
+ 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['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'] = 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")
diff --git a/util/local_database/xpathlite.py b/util/local_database/xpathlite.py
index 0f21a1910e..7d569f30b5 100644
--- a/util/local_database/xpathlite.py
+++ b/util/local_database/xpathlite.py
@@ -64,16 +64,16 @@ class Error:
def __str__(self):
return self.msg
-def findChild(parent, tag_name, arg_value, draft=None):
+def findChild(parent, tag_name, arg_name=None, arg_value=None, draft=None):
for node in parent.childNodes:
if node.nodeType != node.ELEMENT_NODE:
continue
if node.nodeName != tag_name:
continue
if arg_value:
- if not node.attributes.has_key('type'):
+ if not node.attributes.has_key(arg_name):
continue
- if node.attributes['type'].nodeValue != arg_value:
+ if node.attributes[arg_name].nodeValue != arg_value:
continue
if draft:
if not node.attributes.has_key('draft'):
@@ -101,12 +101,18 @@ def _findEntryInFile(file, path, draft=None, attribute=None):
for i in range(len(tag_spec_list)):
tag_spec = tag_spec_list[i]
tag_name = tag_spec
+ arg_name = 'type'
arg_value = ''
left_bracket = tag_spec.find('[')
if left_bracket != -1:
tag_name = tag_spec[:left_bracket]
- arg_value = tag_spec[left_bracket+1:-1]
- alias = findChild(elt, 'alias', None)
+ arg_value = tag_spec[left_bracket+1:-1].split("=")
+ if len(arg_value) == 2:
+ arg_name = arg_value[0]
+ arg_value = arg_value[1]
+ else:
+ arg_value = arg_value[0]
+ alias = findChild(elt, 'alias')
if alias and alias.attributes['source'].nodeValue == 'locale':
path = alias.attributes['path'].nodeValue
aliaspath = tag_spec_list[:i] + path.split("/")
@@ -123,7 +129,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, draft)
+ elt = findChild(elt, tag_name, arg_name, arg_value, draft)
if not elt:
return ("", None)
if attribute is not None:
@@ -136,7 +142,7 @@ def findAlias(file):
if not doc_cache.has_key(file):
return False
doc = doc_cache[file]
- alias_elt = findChild(doc.documentElement, "alias", "")
+ alias_elt = findChild(doc.documentElement, "alias")
if not alias_elt:
return False
if not alias_elt.attributes.has_key('source'):