result = result.replace(' ', ' ')
return result.strip()
-def stringtoushort(fromstring):
+def toushort(fromstring):
# NOTE: symbols (plus, minus, etc.) are assumed to be single character which is not true for
# many of the locales, however the API for those does not handle them as strings thus the first
# character only is used
return ord(fromstring)
-def listtochar(stringlist):
+def tochararray(fromstringlist):
result = '{ '
- for string in stringlist:
+ for string in fromstringlist:
result = '%s"%s\\0", ' % (result, string)
result = '%s }' % result
result = result.replace(', }', ' }')
return result
-def stringtochar(string):
- if string:
- return '"%s\\0"' % string
+def tochar(fromstring):
+ if fromstring:
+ return '"%s\\0"' % fromstring
return 'Q_NULLPTR'
-def stringtoescapedchar(string):
- if string:
- return '"%s\\0"' % string.replace('"', '\\"')
+def toescapedchar(fromstring):
+ if fromstring:
+ return '"%s\\0"' % fromstring.replace('"', '\\"')
return 'Q_NULLPTR'
-def daytoenum(day):
+def todayenum(day):
if day == 'mon':
return 'Qt::Monday'
elif day == 'tue':
value['first_day_of_week'],
value['weekend_start'],
value['weekend_end'],
- stringtoushort(value['decimal']),
- stringtoushort(value['group']),
- stringtoushort(value['list']),
- stringtoushort(value['percent']),
- stringtoushort(value['zero']),
- stringtoushort(value['minus']),
- stringtoushort(value['plus']),
- stringtoushort(value['exponential']),
+ toushort(value['decimal']),
+ toushort(value['group']),
+ toushort(value['list']),
+ toushort(value['percent']),
+ toushort(value['zero']),
+ toushort(value['minus']),
+ toushort(value['plus']),
+ toushort(value['exponential']),
value['currency_digits'],
value['currency_rounding'],
- stringtoescapedchar(value['quotation_start']),
- stringtoescapedchar(value['quotation_end']),
- stringtoescapedchar(value['alternate_quotation_start']),
- stringtoescapedchar(value['alternate_quotation_end']),
- stringtochar(value['language_endonym']),
- stringtochar(value['country_endonym']),
- stringtochar(value['list_pattern_part_start']),
- stringtochar(value['list_pattern_part_mid']),
- stringtochar(value['list_pattern_part_end']),
- stringtochar(value['list_pattern_part_two']),
- stringtochar(value['short_date_format']),
- stringtochar(value['long_date_format']),
- stringtochar(value['short_time_format']),
- stringtochar(value['long_time_format']),
- stringtochar(value['am']),
- stringtochar(value['pm']),
- stringtochar(value['currency_symbol']),
- stringtochar(value['currency_format']),
- stringtochar(value['currency_negative_format']),
- stringtochar(value['currency_iso_code']),
- listtochar(value['currency_display_name']),
- listtochar(value['standalone_short_month_names']),
- listtochar(value['standalone_long_month_names']),
- listtochar(value['standalone_narrow_month_names']),
- listtochar(value['short_month_names']),
- listtochar(value['long_month_names']),
- listtochar(value['narrow_month_names']),
- listtochar(value['standalone_short_day_names']),
- listtochar(value['standalone_long_day_names']),
- listtochar(value['standalone_narrow_day_names']),
- listtochar(value['short_day_names']),
- listtochar(value['long_day_names']),
- listtochar(value['narrow_day_names']),
+ toescapedchar(value['quotation_start']),
+ toescapedchar(value['quotation_end']),
+ toescapedchar(value['alternate_quotation_start']),
+ toescapedchar(value['alternate_quotation_end']),
+ tochar(value['language_endonym']),
+ tochar(value['country_endonym']),
+ tochar(value['list_pattern_part_start']),
+ tochar(value['list_pattern_part_mid']),
+ tochar(value['list_pattern_part_end']),
+ tochar(value['list_pattern_part_two']),
+ tochar(value['short_date_format']),
+ tochar(value['long_date_format']),
+ tochar(value['short_time_format']),
+ tochar(value['long_time_format']),
+ tochar(value['am']),
+ tochar(value['pm']),
+ tochar(value['currency_symbol']),
+ tochar(value['currency_format']),
+ tochar(value['currency_negative_format']),
+ tochar(value['currency_iso_code']),
+ tochararray(value['currency_display_name']),
+ tochararray(value['standalone_short_month_names']),
+ tochararray(value['standalone_long_month_names']),
+ tochararray(value['standalone_narrow_month_names']),
+ tochararray(value['short_month_names']),
+ tochararray(value['long_month_names']),
+ tochararray(value['narrow_month_names']),
+ tochararray(value['standalone_short_day_names']),
+ tochararray(value['standalone_long_day_names']),
+ tochararray(value['standalone_narrow_day_names']),
+ tochararray(value['short_day_names']),
+ tochararray(value['long_day_names']),
+ tochararray(value['narrow_day_names']),
key,
)
)
countrymap['AnyCountry'] = ['', 'Default']
scriptmap['AnyScript'] = ['', 'Default']
-# language to script parsing
+# locale to script parsing
tree = ET.parse('common/supplemental/supplementalData.xml')
root = tree.getroot()
for supllanguage in root.findall('./languageData/language'):
supllanguagescripts = supllanguage.get('scripts')
localescriptmap[supllanguagetype] = supllanguagescripts
-# language to first day parsing
+# locale to first day parsing
for firstday in root.findall('./weekData/firstDay'):
firstdayday = firstday.get('day')
firstdayterritories = firstday.get('territories')
- localefirstdaymap[daytoenum(firstdayday)] = stripxmltext(firstdayterritories).split(' ')
+ localefirstdaymap[todayenum(firstdayday)] = stripxmltext(firstdayterritories).split(' ')
-# language to week start parsing
+# locale to week start parsing
for weekstart in root.findall('./weekData/weekendStart'):
weekstartday = weekstart.get('day')
weekstartterritories = weekstart.get('territories')
- localeweekstartmap[daytoenum(weekstartday)] = stripxmltext(weekstartterritories).split(' ')
+ localeweekstartmap[todayenum(weekstartday)] = stripxmltext(weekstartterritories).split(' ')
-# language to week end parsing
+# locale to week end parsing
for weekend in root.findall('./weekData/weekendStart'):
weekendday = weekend.get('day')
weekendterritories = weekend.get('territories')
- localeweekendmap[daytoenum(weekendday)] = stripxmltext(weekendterritories).split(' ')
+ localeweekendmap[todayenum(weekendday)] = stripxmltext(weekendterritories).split(' ')
-# language to iso4217 parsing
+# locale to iso4217 parsing
for region in root.findall('./currencyData/region'):
regioniso3166 = region.get('iso3166')
latestcurrency = region.find('currency')
lastestcurrencyiso4217 = latestcurrency.get('iso4217')
localeiso4217map[regioniso3166] = lastestcurrencyiso4217
-# language to currency parsing
+# locale to currency parsing
for info in root.findall('./currencyData/fractions/info'):
infoiso4217 = info.get('iso4217')
infodigits = info.get('digits')
inforounding = info.get('rounding')
localecurrencymap[infoiso4217] = [infodigits, inforounding]
-# language to numeric system parsing
+# locale to numeric system parsing
tree = ET.parse('common/supplemental/numberingSystems.xml')
root = tree.getroot()
for numeric in root.findall('./numberingSystems/numberingSystem'):
# only interested in specific languages
continue
- lang = os.path.basename(xml)
- lang = lang.replace('.xml', '')
+ locale = os.path.basename(xml)
+ locale = locale.replace('.xml', '')
- localemap[lang] = {}
- mapcopy(localemap['Default'], localemap[lang])
+ localemap[locale] = {}
+ mapcopy(localemap['Default'], localemap[locale])
tree = ET.parse(xml)
root = tree.getroot()
langtype = None
countrytype = None
currencytype = None
- numertype = 'latn' # CLDR default
+ numbertype = 'latn' # CLDR default
# atleast language is required
langtype = language.get('type')
for key in languagemap.keys():
if langtype == languagemap[key][0]:
- localemap[lang]['language'] = 'QLocale::Language::%s' % key
+ localemap[locale]['language'] = 'QLocale::Language::%s' % key
break
country = root.find('./identity/territory')
countrytype = country.get('type')
for key in countrymap.keys():
if countrytype == countrymap[key][0]:
- localemap[lang]['country'] = 'QLocale::Country::%s' % key
+ localemap[locale]['country'] = 'QLocale::Country::%s' % key
break
else:
# territory often is not specified, use language code as fallback
defaultnumbersystem = root.find('./numbers/defaultNumberingSystem')
if defaultnumbersystem is not None:
- numertype = defaultnumbersystem.text
+ numbertype = defaultnumbersystem.text
# find values from suplemental maps
if langtype:
for key in scriptmap.keys():
if localescriptmap[langtype] == scriptmap[key][0]:
- localemap[lang]['script'] = 'QLocale::Script::%s' % key
+ localemap[locale]['script'] = 'QLocale::Script::%s' % key
break
for key in localefirstdaymap.keys():
for countryvalue in localefirstdaymap[key]:
if countryvalue == countrytype:
- localemap[lang]['first_day_of_week'] = key
+ localemap[locale]['first_day_of_week'] = key
break
for key in localeweekstartmap.keys():
for countryvalue in localeweekstartmap[key]:
if countryvalue == countrytype:
- localemap[lang]['weekend_start'] = key
+ localemap[locale]['weekend_start'] = key
break
for key in localeweekendmap.keys():
for countryvalue in localeweekendmap[key]:
if countryvalue == countrytype:
- localemap[lang]['weekend_end'] = key
+ localemap[locale]['weekend_end'] = key
break
- # find from language data
+ # find from locale data
for symbol in root.findall('./numbers/symbols'):
symbolnumbersystem = symbol.get('numberSystem')
- if not symbolnumbersystem == numertype:
- # should be the language numeric system
+ if not symbolnumbersystem == numbertype:
+ # should be the locale numeric system
continue
decimal = symbol.find('./decimal')
if decimal is not None and len(decimal.text) == 1:
- localemap[lang]['decimal'] = decimal.text
+ localemap[locale]['decimal'] = decimal.text
group = symbol.find('./group')
if group is not None and len(group.text) == 1:
- localemap[lang]['group'] = group.text
+ localemap[locale]['group'] = group.text
listdelimiter = symbol.find('./list')
if listdelimiter is not None and len(listdelimiter.text) == 1:
- localemap[lang]['list'] = listdelimiter.text
+ localemap[locale]['list'] = listdelimiter.text
percent = symbol.find('./percentSign')
if percent is not None and len(percent.text) == 1:
- localemap[lang]['percent'] = percent.text
+ localemap[locale]['percent'] = percent.text
# zero is from cross-reference numeric system map,
# taking the first character works even for UTF-8 chars
- localemap[lang]['zero'] = localenumericmap[numertype][0]
+ localemap[locale]['zero'] = localenumericmap[numbertype][0]
minus = symbol.find('./minusSign')
if minus is not None and len(minus.text) == 1:
- localemap[lang]['minus'] = minus.text
+ localemap[locale]['minus'] = minus.text
plus = symbol.find('./plusSign')
if plus is not None and len(plus.text) == 1:
- localemap[lang]['plus'] = plus.text
+ localemap[locale]['plus'] = plus.text
exponential = symbol.find('./exponential')
if exponential is not None and len(exponential.text) == 1:
- localemap[lang]['exponential'] = exponential.text
+ localemap[locale]['exponential'] = exponential.text
# digits/rounding data is specific so check if it is mapped
if currencytype and currencytype in localecurrencymap.keys():
- localemap[lang]['currency_digits'] = localecurrencymap[currencytype][0]
+ localemap[locale]['currency_digits'] = localecurrencymap[currencytype][0]
- localemap[lang]['currency_rounding'] = localecurrencymap[currencytype][1]
+ localemap[locale]['currency_rounding'] = localecurrencymap[currencytype][1]
quotationstart = root.find('./delimiters/quotationStart')
if quotationstart is not None:
- localemap[lang]['quotation_start'] = quotationstart.text
+ localemap[locale]['quotation_start'] = quotationstart.text
quotationend = root.find('./delimiters/quotationEnd')
if quotationend is not None:
- localemap[lang]['quotation_end'] = quotationend.text
+ localemap[locale]['quotation_end'] = quotationend.text
altquotationstart = root.find('./delimiters/alternateQuotationStart')
if altquotationstart is not None:
- localemap[lang]['alternate_quotation_start'] = altquotationstart.text
+ localemap[locale]['alternate_quotation_start'] = altquotationstart.text
altquotationend = root.find('./delimiters/alternateQuotationEnd')
if altquotationend is not None:
- localemap[lang]['alternate_quotation_end'] = altquotationend.text
+ localemap[locale]['alternate_quotation_end'] = altquotationend.text
if langtype:
for nativelang in root.findall('./localeDisplayNames/languages/language'):
nativelangtype = nativelang.get('type')
if nativelangtype == langtype:
- localemap[lang]['language_endonym'] = nativelang.text
+ localemap[locale]['language_endonym'] = nativelang.text
break
if countrytype:
for nativecountry in root.findall('./localeDisplayNames/territories/territory'):
nativecountrytype = nativecountry.get('type')
if nativecountrytype == countrytype:
- localemap[lang]['country_endonym'] = nativecountry.text
+ localemap[locale]['country_endonym'] = nativecountry.text
break
listpattern = root.find('./listPatterns/listPattern')
for listpatternpart in listpattern.findall('./listPatternPart'):
listpatternparttype = listpatternpart.get('type')
if listpatternparttype == 'start':
- localemap[lang]['list_pattern_part_start'] = tolistformat(listpatternpart.text)
+ localemap[locale]['list_pattern_part_start'] = tolistformat(listpatternpart.text)
elif listpatternparttype == 'middle':
- localemap[lang]['list_pattern_part_mid'] = tolistformat(listpatternpart.text)
+ localemap[locale]['list_pattern_part_mid'] = tolistformat(listpatternpart.text)
elif listpatternparttype == 'end':
- localemap[lang]['list_pattern_part_end'] = tolistformat(listpatternpart.text)
+ localemap[locale]['list_pattern_part_end'] = tolistformat(listpatternpart.text)
elif listpatternparttype == '2':
- localemap[lang]['list_pattern_part_two'] = tolistformat(listpatternpart.text)
+ localemap[locale]['list_pattern_part_two'] = tolistformat(listpatternpart.text)
for calendar in root.findall('./dates/calendars/calendar'):
calendartype = calendar.get('type')
dateformattype = dateformat.get('type')
if dateformattype == 'short':
pattern = dateformat.find('./dateFormat/pattern')
- localemap[lang]['short_date_format'] = pattern.text
+ localemap[locale]['short_date_format'] = pattern.text
elif dateformattype == 'long':
pattern = dateformat.find('./dateFormat/pattern')
- localemap[lang]['long_date_format'] = pattern.text
+ localemap[locale]['long_date_format'] = pattern.text
timeformat = calendar.find('./timeFormats/timeFormatLength')
if timeformat is not None:
timeformattype = timeformat.get('type')
if timeformattype == 'short':
pattern = timeformat.find('./timeFormat/pattern')
- localemap[lang]['short_time_format'] = pattern.text
+ localemap[locale]['short_time_format'] = pattern.text
elif timeformattype == 'long':
pattern = timeformat.find('./timeFormat/pattern')
- localemap[lang]['long_time_format'] = pattern.text
+ localemap[locale]['long_time_format'] = pattern.text
for dayperiodwidth in calendar.findall('./dayPeriods/dayPeriodContext/dayPeriodWidth'):
dayperiodwidthtype = dayperiodwidth.get('type')
for dayperiod in dayperiodwidth.findall('dayPeriod'):
dayperiodtype = dayperiod.get('type')
if dayperiodtype == 'am':
- localemap[lang]['am'] = dayperiod.text
+ localemap[locale]['am'] = dayperiod.text
elif dayperiodtype == 'pm':
- localemap[lang]['pm'] = dayperiod.text
+ localemap[locale]['pm'] = dayperiod.text
# month/day names
for monthcontext in calendar.findall('./months/monthContext'):
monthwidthtype = monthwidth.get('type')
if monthwidthtype == 'wide':
months = monthwidth.findall('./month')
- localemap[lang]['standalone_long_month_names'] = tomothslist(months, localemap[lang]['standalone_long_month_names'])
+ localemap[locale]['standalone_long_month_names'] = tomothslist(months, localemap[locale]['standalone_long_month_names'])
elif monthwidthtype == 'abbreviated':
months = monthwidth.findall('./month')
- localemap[lang]['standalone_short_month_names'] = tomothslist(months, localemap[lang]['standalone_short_month_names'])
+ localemap[locale]['standalone_short_month_names'] = tomothslist(months, localemap[locale]['standalone_short_month_names'])
elif monthwidthtype == 'narrow':
months = monthwidth.findall('./month')
- localemap[lang]['standalone_narrow_month_names'] = tomothslist(months, localemap[lang]['standalone_narrow_month_names'])
+ localemap[locale]['standalone_narrow_month_names'] = tomothslist(months, localemap[locale]['standalone_narrow_month_names'])
elif monthcontexttype == 'format':
for monthwidth in monthcontext.findall('./monthWidth'):
monthwidthtype = monthwidth.get('type')
if monthwidthtype == 'wide':
months = monthwidth.findall('./month')
- localemap[lang]['long_month_names'] = tomothslist(months, localemap[lang]['long_month_names'])
+ localemap[locale]['long_month_names'] = tomothslist(months, localemap[locale]['long_month_names'])
elif monthwidthtype == 'abbreviated':
months = monthwidth.findall('./month')
- localemap[lang]['short_month_names'] = tomothslist(months, localemap[lang]['short_month_names'])
+ localemap[locale]['short_month_names'] = tomothslist(months, localemap[locale]['short_month_names'])
elif monthwidthtype == 'narrow':
months = monthwidth.findall('./month')
- localemap[lang]['narrow_month_names'] = tomothslist(months, localemap[lang]['narrow_month_names'])
+ localemap[locale]['narrow_month_names'] = tomothslist(months, localemap[locale]['narrow_month_names'])
for daycontext in calendar.findall('./days/dayContext'):
daycontexttype = daycontext.get('type')
daywidthtype = daywidth.get('type')
if daywidthtype == 'wide':
days = daywidth.findall('./day')
- localemap[lang]['standalone_long_day_names'] = todayslist(days, localemap[lang]['standalone_long_day_names'])
+ localemap[locale]['standalone_long_day_names'] = todayslist(days, localemap[locale]['standalone_long_day_names'])
elif daywidthtype == 'abbreviated':
days = daywidth.findall('./day')
- localemap[lang]['standalone_short_day_names'] = todayslist(days, localemap[lang]['standalone_short_day_names'])
+ localemap[locale]['standalone_short_day_names'] = todayslist(days, localemap[locale]['standalone_short_day_names'])
elif daywidthtype == 'narrow':
days = daywidth.findall('./day')
- localemap[lang]['standalone_narrow_day_names'] = todayslist(days, localemap[lang]['standalone_narrow_day_names'])
+ localemap[locale]['standalone_narrow_day_names'] = todayslist(days, localemap[locale]['standalone_narrow_day_names'])
elif daycontexttype == 'format':
for daywidth in daycontext.findall('./dayWidth'):
daywidthtype = daywidth.get('type')
if daywidthtype == 'wide':
days = daywidth.findall('./day')
- localemap[lang]['long_month_names'] = todayslist(days, localemap[lang]['long_month_names'])
+ localemap[locale]['long_month_names'] = todayslist(days, localemap[locale]['long_month_names'])
elif daywidthtype == 'abbreviated':
days = daywidth.findall('./day')
- localemap[lang]['short_day_names'] = todayslist(days, localemap[lang]['short_day_names'])
+ localemap[locale]['short_day_names'] = todayslist(days, localemap[locale]['short_day_names'])
elif daywidthtype == 'narrow':
days = daywidth.findall('./day')
- localemap[lang]['narrow_day_names'] = todayslist(days, localemap[lang]['narrow_day_names'])
+ localemap[locale]['narrow_day_names'] = todayslist(days, localemap[locale]['narrow_day_names'])
# gregorian calendar was found, break
break
if elemcurrencytype == currencytype:
symbol = elemcurrency.find('./symbol')
if symbol is not None:
- localemap[lang]['currency_symbol'] = symbol.text
+ localemap[locale]['currency_symbol'] = symbol.text
displaynamelist = ['', '', '', '', '', '', '']
for displayname in elemcurrency.findall('./displayName'):
elif displaynamecount == 'other':
displaynamelist[6] = displayname.text
- localemap[lang]['currency_display_name'] = displaynamelist
+ localemap[locale]['currency_display_name'] = displaynamelist
# currency type was found, break
break
for currencyformat in root.findall('./numbers/currencyFormats'):
currencyformatnumbersystem = currencyformat.get('numberSystem')
- if not currencyformatnumbersystem == numertype:
- # should be the language numeric system
+ if not currencyformatnumbersystem == numbertype:
+ # should be the locale numeric system
continue
nativecurrencyformat = currencyformat.find('currencyFormatLength/currencyFormat/pattern')
if nativecurrencyformat is not None:
- formats = tocurrencyformat(nativecurrencyformat.text, localemap[lang])
- localemap[lang]['currency_format'] = formats[0]
+ formats = tocurrencyformat(nativecurrencyformat.text, localemap[locale])
+ localemap[locale]['currency_format'] = formats[0]
+ # negative format is optional
if len(formats) > 1:
- localemap[lang]['currency_negative_format'] = formats[1]
+ localemap[locale]['currency_negative_format'] = formats[1]
- localemap[lang]['currency_iso_code'] = currencytype
+ localemap[locale]['currency_iso_code'] = currencytype
# month/day names are set during calendar parsing