| #!/usr/bin/env python | 
 | """ | 
 |     Convert the X11 locale.alias file into a mapping dictionary suitable | 
 |     for locale.py. | 
 |  | 
 |     Written by Marc-Andre Lemburg <mal@genix.com>, 2004-12-10. | 
 |  | 
 | """ | 
 | import locale | 
 |  | 
 | # Location of the alias file | 
 | LOCALE_ALIAS = '/usr/lib/X11/locale/locale.alias' | 
 |  | 
 | def parse(filename): | 
 |  | 
 |     f = open(filename) | 
 |     lines = f.read().splitlines() | 
 |     data = {} | 
 |     for line in lines: | 
 |         line = line.strip() | 
 |         if not line: | 
 |             continue | 
 |         if line[:1] == '#': | 
 |             continue | 
 |         locale, alias = line.split() | 
 |         # Strip ':' | 
 |         if locale[-1] == ':': | 
 |             locale = locale[:-1] | 
 |         # Lower-case locale | 
 |         locale = locale.lower() | 
 |         # Ignore one letter locale mappings (except for 'c') | 
 |         if len(locale) == 1 and locale != 'c': | 
 |             continue | 
 |         # Normalize encoding, if given | 
 |         if '.' in locale: | 
 |             lang, encoding = locale.split('.')[:2] | 
 |             encoding = encoding.replace('-', '') | 
 |             encoding = encoding.replace('_', '') | 
 |             locale = lang + '.' + encoding | 
 |             if encoding.lower() == 'utf8': | 
 |                 # Ignore UTF-8 mappings - this encoding should be | 
 |                 # available for all locales | 
 |                 continue | 
 |         data[locale] = alias | 
 |     return data | 
 |  | 
 | def pprint(data): | 
 |  | 
 |     items = data.items() | 
 |     items.sort() | 
 |     for k,v in items: | 
 |         print '    %-40s%r,' % ('%r:' % k, v) | 
 |  | 
 | def print_differences(data, olddata): | 
 |  | 
 |     items = olddata.items() | 
 |     items.sort() | 
 |     for k, v in items: | 
 |         if not data.has_key(k): | 
 |             print '#    removed %r' % k | 
 |         elif olddata[k] != data[k]: | 
 |             print '#    updated %r -> %r to %r' % \ | 
 |                   (k, olddata[k], data[k]) | 
 |         # Additions are not mentioned | 
 |  | 
 | if __name__ == '__main__': | 
 |     data = locale.locale_alias.copy() | 
 |     data.update(parse(LOCALE_ALIAS)) | 
 |     print_differences(data, locale.locale_alias) | 
 |     print | 
 |     print 'locale_alias = {' | 
 |     pprint(data) | 
 |     print '}' |