5 import os, os.path, re, sys, locale, StringIO
46 def find_encoding(lang):
47 r = re.match("^([^.]+)(\.[^@]+)?$", lang)
48 pure_lang = r.group(1)
49 if r.group(2) == None:
57 return (enc, pure_lang)
59 def parse_spec(infile, outfile):
61 re_summary = re.compile("^Summary\(([^\)]+)\):\t+(.*)$")
62 re_utf = re.compile("^utf-8$", re.I)
63 re_desc = re.compile("^(%description.*\s)-l\s+([\S]+)($|\s.*$)")
64 re_proc = re.compile("^%[^{]")
65 re_changelog = re.compile("^%changelog")
71 if debug: outfile.write("%s, %s, %s" % (in_desc, in_changelog, l))
77 (enc, pure_lang) = find_encoding(lang)
79 outfile.write("#spec_utf8: unknown lang code in %%description -l %s\n" % (lang))
81 elif not re_utf.search(enc):
83 outline = "%s-l %s.UTF-8%s\n" % (r.group(1), pure_lang, r.group(3))
88 # %description continues
89 if not re_utf.search(enc):
91 outline = unicode(l, enc).encode("UTF-8")
92 except UnicodeDecodeError:
93 outfile.write("#spec_utf8: transcoding error %%description -l %s\n" % (pure_lang))
97 outline = unicode(l, "UTF-8").encode("UTF-8")
98 except UnicodeDecodeError:
100 outline = unicode(l, "ISO-8859-2").encode("UTF-8")
101 except UnicodeDecodeError:
102 outfile.write("#spec_utf8: transcoding next line from Latin2 failed\n")
106 r = re_summary.match(l)
109 (enc, pure_lang) = find_encoding(lang)
111 outfile.write("#spec_utf8: unknown lang code in Summary(%s)\n" % (lang))
113 elif not re_utf.search(enc):
115 desc = unicode(r.group(2), enc).encode("UTF-8")
116 outline = "Summary(%s.UTF-8): %s\n" % (pure_lang, desc)
117 except UnicodeDecodeError:
118 outfile.write("#spec_utf8: transcoding error Summary(%s)\n" % (lang))
120 elif re_changelog.match(l):
125 if debug: outfile.write("%s, %s\n"% (in_desc, in_changelog))
126 outfile.write("%s"% (outline, ))
130 print "Converting %s ..." % argv[1]
131 f = open(argv[1], 'r')
132 sio = StringIO.StringIO()
136 f = open(argv[1] + '.tmp', 'w')
137 if not parse_spec(sio, f):
138 sys.stderr.write(" Problems while converting %s.\n" % argv[1])
140 os.rename(argv[1] + '.tmp', argv[1])
142 if __name__ == "__main__":
143 if len(sys.argv) != 2:
144 sys.stderr.write("Usage: %s <spec file>\n" % sys.argv[0])