| 
									
										
										
										
											2004-12-10 21:58:14 +00:00
										 |  |  | #!/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 | 
					
						
							| 
									
										
										
										
											2004-12-13 19:56:01 +00:00
										 |  |  |             if encoding.lower() == 'utf8': | 
					
						
							|  |  |  |                 # Ignore UTF-8 mappings - this encoding should be | 
					
						
							|  |  |  |                 # available for all locales | 
					
						
							|  |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2004-12-10 21:58:14 +00:00
										 |  |  |         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 '}' | 
					
						
							|  |  |  |      |