]>
Commit | Line | Data |
---|---|---|
11774a5d AF |
1 | #!/usr/bin/python |
2 | ||
3 | import os, os.path, re, sys, locale | |
4 | ||
5 | langs={ | |
6 | 'bg':'windows-1251', | |
7 | 'br':'iso8859-1', | |
8 | 'ca':'iso8859-1', | |
9 | 'cs':'iso8859-2', | |
10 | 'da':'iso8859-1', | |
11 | 'de':'iso8859-1', | |
12 | 'en':'iso8859-1', | |
13 | 'eo':'iso8859-3', | |
14 | 'es':'iso8859-1', | |
15 | 'fi':'iso8859-1', | |
16 | 'fo':'iso8859-1', | |
17 | 'fr':'iso8859-1', | |
18 | 'gl':'iso8859-1', | |
19 | 'he':'iso8859-8', | |
20 | 'id':'iso8859-1', | |
21 | 'is':'iso8859-1', | |
22 | 'it':'iso8859-1', | |
23 | 'ja':'euc-jp', | |
24 | 'ko':'euc-kr', | |
25 | 'nb':'iso8859-1', | |
26 | 'nl':'iso8859-1', | |
27 | 'pl':'iso8859-2', | |
28 | 'pt':'iso8859-1', | |
29 | 'pt_BR':'iso8859-1', | |
30 | 'ro':'iso8859-2', | |
e4fe63e5 | 31 | 'ru':'KOI8-R', |
11774a5d AF |
32 | 'se':'UTF-8', |
33 | 'sk':'iso8859-2', | |
34 | 'sl':'iso8859-2', | |
35 | 'sv':'iso8859-1', | |
36 | 'tr':'iso8859-9', | |
37 | 'uk':'KOI8-U', | |
38 | 'wa':'iso8859-1', | |
39 | 'zh_CN':'GB2312', | |
40 | 'zh_HK':'BIG5-HKSCS', | |
41 | 'zh_TW':'BIG5', | |
42 | 0:0} | |
43 | ||
44 | def parse_spec(infile, outfile): | |
45 | re_summary = re.compile("^Summary\(([^\)]+)\):\t+(.*)$") | |
46 | re_utf = re.compile(".utf-8$", re.I) | |
47 | re_desc = re.compile("^(%description.*\s)-l\s+([\S]+)($|\s.*$)") | |
48 | re_proc = re.compile("^%") | |
49 | in_desc = False | |
50 | ||
51 | for l in infile: | |
52 | outline = l | |
53 | r = re_summary.match(l) | |
54 | if r: | |
55 | lang = r.group(1) | |
56 | if re_utf.search(lang): | |
57 | outfile.write(l) | |
58 | continue | |
59 | if lang in langs.keys(): | |
60 | try: | |
61 | desc = unicode(r.group(2), langs[lang]).encode("UTF-8") | |
62 | l = "Summary(%s.UTF-8): %s\n" % (lang, desc) | |
63 | except UnicodeDecodeError: | |
64 | outfile.write("#transcoding error Summary(%s)\n" % (lang)) | |
65 | else: | |
66 | outfile.write("#unknow lang code Summary(%s)\n" % (lang)) | |
67 | if in_desc: | |
68 | if re_proc.search(l): | |
69 | in_desc = False | |
70 | else: | |
71 | if not langs[lang] == 'UTF-8': | |
72 | try: | |
73 | l = unicode(l, langs[lang]).encode("UTF-8") | |
74 | except UnicodeDecodeError: | |
75 | outfile.write("#transcoding error %%description -l %s\n" % (lang)) | |
76 | ||
77 | r = re_desc.match(l) | |
78 | if r: | |
79 | lang = r.group(2) | |
80 | if re_utf.search(lang): | |
81 | outfile.write(l) | |
82 | continue | |
83 | in_desc = True | |
84 | if not lang in langs.keys(): | |
85 | outfile.write("#unknow lang code in %%description -l %s\n" % (lang)) | |
86 | else: | |
87 | l = "%s-l %s.UTF-8%s\n" % (r.group(1), lang, r.group(3)) | |
88 | ||
89 | outfile.write(l) | |
90 | ||
91 | ||
92 | ||
93 | def main(): | |
94 | parse_spec(sys.stdin, sys.stdout) | |
95 | ||
96 | if __name__ == "__main__": | |
97 | main() | |
98 |