| 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/share/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 '}' | 
|---|