|
1 #!/usr/bin/env python |
|
2 """ |
|
3 Convert the X11 locale.alias file into a mapping dictionary suitable |
|
4 for locale.py. |
|
5 |
|
6 Written by Marc-Andre Lemburg <mal@genix.com>, 2004-12-10. |
|
7 |
|
8 """ |
|
9 import locale |
|
10 |
|
11 # Location of the alias file |
|
12 LOCALE_ALIAS = '/usr/lib/X11/locale/locale.alias' |
|
13 |
|
14 def parse(filename): |
|
15 |
|
16 f = open(filename) |
|
17 lines = f.read().splitlines() |
|
18 data = {} |
|
19 for line in lines: |
|
20 line = line.strip() |
|
21 if not line: |
|
22 continue |
|
23 if line[:1] == '#': |
|
24 continue |
|
25 locale, alias = line.split() |
|
26 # Strip ':' |
|
27 if locale[-1] == ':': |
|
28 locale = locale[:-1] |
|
29 # Lower-case locale |
|
30 locale = locale.lower() |
|
31 # Ignore one letter locale mappings (except for 'c') |
|
32 if len(locale) == 1 and locale != 'c': |
|
33 continue |
|
34 # Normalize encoding, if given |
|
35 if '.' in locale: |
|
36 lang, encoding = locale.split('.')[:2] |
|
37 encoding = encoding.replace('-', '') |
|
38 encoding = encoding.replace('_', '') |
|
39 locale = lang + '.' + encoding |
|
40 if encoding.lower() == 'utf8': |
|
41 # Ignore UTF-8 mappings - this encoding should be |
|
42 # available for all locales |
|
43 continue |
|
44 data[locale] = alias |
|
45 return data |
|
46 |
|
47 def pprint(data): |
|
48 |
|
49 items = data.items() |
|
50 items.sort() |
|
51 for k,v in items: |
|
52 print ' %-40s%r,' % ('%r:' % k, v) |
|
53 |
|
54 def print_differences(data, olddata): |
|
55 |
|
56 items = olddata.items() |
|
57 items.sort() |
|
58 for k, v in items: |
|
59 if not data.has_key(k): |
|
60 print '# removed %r' % k |
|
61 elif olddata[k] != data[k]: |
|
62 print '# updated %r -> %r to %r' % \ |
|
63 (k, olddata[k], data[k]) |
|
64 # Additions are not mentioned |
|
65 |
|
66 if __name__ == '__main__': |
|
67 data = locale.locale_alias.copy() |
|
68 data.update(parse(LOCALE_ALIAS)) |
|
69 print_differences(data, locale.locale_alias) |
|
70 print |
|
71 print 'locale_alias = {' |
|
72 pprint(data) |
|
73 print '}' |