mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
Issue #20079: Added locales supported in glibc 2.18 to locale alias table.
The makelocalealias.py script now can parse the SUPPORTED file from glibc sources and supports command line options for source paths.
This commit is contained in:
parent
cf4d6997a3
commit
ea4f0573b4
3 changed files with 148 additions and 1 deletions
|
@ -8,6 +8,7 @@
|
|||
"""
|
||||
import locale
|
||||
import sys
|
||||
_locale = locale
|
||||
|
||||
# Location of the alias file
|
||||
LOCALE_ALIAS = '/usr/share/X11/locale/locale.alias'
|
||||
|
@ -51,6 +52,37 @@ def parse(filename):
|
|||
data[locale] = alias
|
||||
return data
|
||||
|
||||
def parse_glibc_supported(filename):
|
||||
|
||||
with open(filename, encoding='latin1') as f:
|
||||
lines = list(f)
|
||||
data = {}
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
if line[:1] == '#':
|
||||
continue
|
||||
if '/' not in line:
|
||||
continue
|
||||
line = line.rstrip('\\').rstrip()
|
||||
alias, _, alias_encoding = line.partition('/')
|
||||
# Lower-case locale
|
||||
locale = alias.lower()
|
||||
# Normalize encoding, if given
|
||||
if '.' in locale:
|
||||
lang, encoding = locale.split('.')[:2]
|
||||
encoding = encoding.replace('-', '')
|
||||
encoding = encoding.replace('_', '')
|
||||
locale = lang + '.' + encoding
|
||||
# Add an encoding to alias
|
||||
alias, _, modifier = alias.partition('@')
|
||||
alias = _locale._replace_encoding(alias, alias_encoding)
|
||||
if modifier and not (modifier == 'euro' and alias_encoding == 'ISO-8859-15'):
|
||||
alias += '@' + modifier
|
||||
data[locale] = alias
|
||||
return data
|
||||
|
||||
def pprint(data):
|
||||
items = sorted(data.items())
|
||||
for k, v in items:
|
||||
|
@ -92,8 +124,19 @@ def check(data):
|
|||
return errors
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--locale-alias', default=LOCALE_ALIAS,
|
||||
help='location of the X11 alias file '
|
||||
'(default: %a)' % LOCALE_ALIAS)
|
||||
parser.add_argument('--glibc-supported',
|
||||
help='location of the glibc SUPPORTED locales file')
|
||||
args = parser.parse_args()
|
||||
|
||||
data = locale.locale_alias.copy()
|
||||
data.update(parse(LOCALE_ALIAS))
|
||||
if args.glibc_supported:
|
||||
data.update(parse_glibc_supported(args.glibc_supported))
|
||||
data.update(parse(args.locale_alias))
|
||||
data = optimize(data)
|
||||
print_differences(data, locale.locale_alias)
|
||||
print()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue