]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - spec_utf8
- typo
[packages/rpm-build-tools.git] / spec_utf8
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',
31     'ru':'KOI8-R',
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 find_encoding(lang):
45   r = re.match("^([^.]+)(\.[^@]+)?$", lang)
46   pure_lang = r.group(1)
47   if r.group(2) == None:
48     try:
49       enc = langs[lang]
50     except KeyError:
51       enc = None
52   else:
53     # strip dot
54     enc = r.group(2)[1:]
55   return (enc, pure_lang)
56
57 def parse_spec(infile, outfile):
58   re_summary = re.compile("^Summary\(([^\)]+)\):\t+(.*)$")
59   re_utf = re.compile("^utf-8$", re.I)
60   re_desc = re.compile("^(%description.*\s)-l\s+([\S]+)($|\s.*$)")
61   re_proc = re.compile("^%")
62   in_desc = False
63
64   for l in infile:
65       outline = l
66       r = re_summary.match(l)
67       if r:
68         (enc, pure_lang) = find_encoding(r.group(1))
69         if enc == None:
70           outfile.write("#unknow lang code Summary(%s)\n" % (lang))
71         elif not re_utf.search(enc):
72           try:
73             desc = unicode(r.group(2), enc).encode("UTF-8")
74             l = "Summary(%s.UTF-8):   %s\n" % (pure_lang, desc)
75           except UnicodeDecodeError:
76             outfile.write("#transcoding error Summary(%s)\n" % (lang))
77       if in_desc:
78         if re_proc.search(l):
79           in_desc = False
80         else:
81           if not re_utf.search(enc):
82             try:
83               l = unicode(l, enc).encode("UTF-8")
84             except UnicodeDecodeError:
85               outfile.write("#transcoding error %%description -l %s\n" % (lang))
86
87       r = re_desc.match(l)
88       if r:
89         (enc, pure_lang) = find_encoding(r.group(2))
90         if enc == None:
91           outfile.write("#unknown lang code in %%description -l %s\n" % (lang))
92         elif not re_utf.search(enc):
93           in_desc = True
94           l = "%s-l %s.UTF-8%s\n" % (r.group(1), pure_lang, r.group(3))
95
96       outfile.write(l)
97
98 def main():
99   parse_spec(sys.stdin, sys.stdout)
100
101 if __name__ == "__main__":
102   main()
103
This page took 0.03685 seconds and 4 git commands to generate.