|
1 # -*- coding: utf-8 -*- |
|
2 """dictd C5 format writer""" |
1 |
3 |
2 import gadict |
|
3 import io |
4 import io |
4 import sys |
5 import sys |
5 |
6 |
|
7 import gadict |
6 |
8 |
7 finame = None |
9 |
8 foname = None |
10 FINAME = None |
|
11 FONAME = None |
9 if len(sys.argv) >= 2: |
12 if len(sys.argv) >= 2: |
10 finame = sys.argv[1] |
13 FINAME = sys.argv[1] |
11 if len(sys.argv) >= 3: |
14 if len(sys.argv) >= 3: |
12 foname = sys.argv[2] |
15 FONAME = sys.argv[2] |
13 |
16 |
14 fin = io.open(finame, mode='r', buffering=1, encoding="utf-8") |
17 FIN = io.open(FINAME, mode='r', buffering=1, encoding="utf-8") |
15 |
18 |
16 parser = gadict.Parser() |
19 PARSER = gadict.Parser() |
17 try: |
20 try: |
18 dom = parser.parse(fin) |
21 DOM = PARSER.parse(FIN) |
19 except gadict.ParseException as ex: |
22 except gadict.ParseException as ex: |
20 sys.stdout.write("{:s}{:s}\n".format(finame, repr(ex))) |
23 sys.stdout.write("{:s}{:s}\n".format(FINAME, repr(ex))) |
21 if __debug__: |
24 if __debug__: |
22 import traceback |
25 import traceback |
23 traceback.print_exc() |
26 traceback.print_exc() |
24 exit(1) |
27 exit(1) |
25 finally: |
28 finally: |
26 fin.close() |
29 FIN.close() |
27 |
30 |
28 |
31 |
29 prelude = dom[0] |
32 PRELUDE = DOM[0] |
30 |
33 |
31 with open(foname+".name", "w") as f: # for dictfmt -s |
34 with open(FONAME+".name", "w") as f: # for dictfmt -s |
32 if prelude.name is not None: |
35 if PRELUDE.name is not None: |
33 f.write(prelude.name) |
36 f.write(PRELUDE.name) |
34 f.write("\n") |
37 f.write("\n") |
35 |
38 |
36 with open(foname+".url", "w") as f: # for dictfmt -u |
39 with open(FONAME+".url", "w") as f: # for dictfmt -u |
37 if len(prelude.urls) > 0: |
40 if len(PRELUDE.urls) > 0: |
38 f.write(prelude.urls[0]) |
41 f.write(PRELUDE.urls[0]) |
39 f.write("\n") |
42 f.write("\n") |
40 |
43 |
41 |
44 |
42 if foname is None: |
45 if FONAME is None: |
43 fout = sys.stdout |
46 FOUT = sys.stdout |
44 else: |
47 else: |
45 fout = open(foname, "w") |
48 FOUT = open(FONAME, "w") |
46 |
49 |
47 if prelude.name is not None: |
50 if PRELUDE.name is not None: |
48 fout.write("Dictionary name: ") |
51 FOUT.write("Dictionary name: ") |
49 fout.write(prelude.name) |
52 FOUT.write(PRELUDE.name) |
50 fout.write("\n\n") |
53 FOUT.write("\n\n") |
51 fout.write("Project URLs: ") |
54 FOUT.write("Project URLs: ") |
52 fout.write(" , ".join(prelude.urls)) |
55 FOUT.write(" , ".join(PRELUDE.urls)) |
53 fout.write("\n\n") |
56 FOUT.write("\n\n") |
54 fout.write("Project licenses: ") |
57 FOUT.write("Project licenses: ") |
55 fout.write(", ".join(prelude.licences)) |
58 FOUT.write(", ".join(PRELUDE.licences)) |
56 fout.write("\n\n") |
59 FOUT.write("\n\n") |
57 fout.write(prelude.about) |
60 FOUT.write(PRELUDE.about) |
58 fout.write("\n") |
61 FOUT.write("\n") |
59 |
62 |
60 for idx in range(1, len(dom)): |
63 for idx in range(1, len(DOM)): |
61 article = dom[idx] |
64 article = DOM[idx] |
62 fout.write("_____\n\n") |
65 FOUT.write("_____\n\n") |
63 title = "; ".join(article[0].keys()) |
66 title = "; ".join(article[0].keys()) |
64 fout.write(title) |
67 FOUT.write(title) |
65 fout.write("\n\n") |
68 FOUT.write("\n\n") |
66 for (word, (pron, attrs)) in article[0].items(): |
69 for (word, (pron, attrs)) in article[0].items(): |
67 if word == "approach": |
70 if word == "approach": |
68 fout.write(str(article[0])) |
71 FOUT.write(str(article[0])) |
69 fout.write(" ") |
72 FOUT.write(" ") |
70 fout.write(word) |
73 FOUT.write(word) |
71 fout.write("\n") |
74 FOUT.write("\n") |
72 if pron is not None: |
75 if pron is not None: |
73 fout.write(" [") |
76 FOUT.write(" [") |
74 fout.write(pron) |
77 FOUT.write(pron) |
75 fout.write("]\n") |
78 FOUT.write("]\n") |
76 if len(attrs) > 0: |
79 if len(attrs) > 0: |
77 fout.write(" ") |
80 FOUT.write(" ") |
78 l = list(attrs) |
81 l = list(attrs) |
79 l.sort() |
82 l.sort() |
80 fout.write(", ".join(l)) |
83 FOUT.write(", ".join(l)) |
81 fout.write("\n") |
84 FOUT.write("\n") |
82 fout.write("\n") |
85 FOUT.write("\n") |
83 for (pos, trs, exs) in article[1]: |
86 for (pos, trs, exs) in article[1]: |
84 fout.write(" ") |
87 FOUT.write(" ") |
85 if pos is not None: |
88 if pos is not None: |
86 fout.write("⟨") |
89 FOUT.write("⟨") |
87 fout.write(pos) |
90 FOUT.write(pos) |
88 fout.write("⟩ ") |
91 FOUT.write("⟩ ") |
89 for (lang, tr) in trs: |
92 for (lang, tr) in trs: |
90 if lang == "ru": |
93 if lang == "ru": |
91 fout.write(tr) |
94 FOUT.write(tr) |
92 break |
95 break |
93 fout.write("\n") |
96 FOUT.write("\n") |
94 |
97 |