Mercurial > hg > lxmldump
annotate lxmldump.py @ 72:0849d65fabce
More work on improving help.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 09 Dec 2021 10:31:50 +0200 |
parents | 8481f8f52a84 |
children | 4e27677ca5a9 |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python3 -B |
2 # coding=utf-8 | |
3 ### | |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
4 ### lxmldump - Convert and dump ISO/FDIS 1951 XML file data |
4 | 5 ### Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org> |
6 ### (C) Copyright 2021 Tecnic Software productions (TNSP) | |
7 ### | |
23 | 8 ### Released / distributed under 3-clause BSD license |
9 ### (see file "COPYING" for more information) | |
10 ### | |
4 | 11 ### Python 3.7+ required! |
0 | 12 ### |
13 import sys | |
14 import signal | |
67
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
15 import functools |
0 | 16 import re |
17 import xml.etree.ElementTree as xmlET | |
5
274b2091137c
Some more work on cleaning this up.
Matti Hamalainen <ccr@tnsp.org>
parents:
4
diff
changeset
|
18 import unicodedata |
20
f274504eafd0
Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
19 import argparse |
0 | 20 |
21 assert sys.version_info >= (3, 7) | |
22 | |
23 | |
24 ### | |
25 ### Default settings | |
26 ### | |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
27 # Operation modes |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
28 PKK_MODE_NORMAL = 0 |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
29 PKK_MODE_DUMP = 1 |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
30 PKK_MODE_XML = 2 |
35
5aafa87dbec2
Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
31 PKK_MODE_ANKI = 3 |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
32 |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
33 |
30
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
34 pkk_modes_list = { |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
35 PKK_MODE_NORMAL: "normal", |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
36 PKK_MODE_DUMP: "dump", |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
37 PKK_MODE_XML: "xml", |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
38 PKK_MODE_ANKI: "anki", |
30
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
39 } |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
40 |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
41 |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
42 pkk_mode_defaults = { |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
43 # Default Ptr URL format strings |
39
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
44 "ptr_fmt": { |
52 | 45 PKK_MODE_NORMAL: "<PTR:{href}>{text}</PTR>", |
46 PKK_MODE_ANKI: "<a href='https://kaino.kotus.fi/cgi-bin/kks/karjala.cgi?a={href}'>{text}</a>", | |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
47 }, |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
48 |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
49 "word_item": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
50 PKK_MODE_NORMAL: "{word}{search}{attr}{hyphenation}:{main_sense}{other_senses}\n", |
57 | 51 PKK_MODE_ANKI: "\"{word}\"{search}{attr}{hyphenation};{main_sense}{other_senses}\n", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
52 }, |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
53 "word_attr_list": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
54 PKK_MODE_NORMAL: " ({alist})", |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
55 PKK_MODE_ANKI: " ({alist})", |
39
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
56 }, |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
57 "word_attr_list_empty": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
58 PKK_MODE_NORMAL: "", |
49
d3d4b547f86c
Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents:
48
diff
changeset
|
59 PKK_MODE_ANKI: "", |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
60 }, |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
61 "word_attr_list_item": { |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
62 PKK_MODE_NORMAL: "{text}", |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
63 }, |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
64 "word_attr_list_sep": { |
64 | 65 PKK_MODE_NORMAL: "; ", |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
66 PKK_MODE_ANKI: " : ", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
67 }, |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
68 |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
69 "hyphenation": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
70 PKK_MODE_NORMAL: " [hyph: {text}]", |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
71 PKK_MODE_ANKI: " [hyph: {text}]", |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
72 }, |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
73 "no_hyphenation": { |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
74 PKK_MODE_NORMAL: "", |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
75 }, |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
76 |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
77 |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
78 "search_list": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
79 PKK_MODE_NORMAL: ", {alist}", |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
80 PKK_MODE_ANKI: ", {alist}", |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
81 }, |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
82 "search_list_empty": { |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
83 PKK_MODE_NORMAL: "", |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
84 }, |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
85 "search_list_item": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
86 PKK_MODE_NORMAL: "{text}", |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
87 PKK_MODE_ANKI: "\"{text}\"", |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
88 }, |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
89 "search_list_sep": { |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
90 PKK_MODE_NORMAL: ", ", |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
91 }, |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
92 |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
93 "main_sense_item": { |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
94 PKK_MODE_NORMAL: "{definition}{example_list}", |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
95 PKK_MODE_ANKI: "{definition}{example_list}", |
44
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
96 }, |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
97 "sense_list": { |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
98 PKK_MODE_NORMAL: "{alist}", |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
99 PKK_MODE_ANKI: " | {alist}", |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
100 }, |
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
101 "sense_list_empty": { |
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
102 PKK_MODE_NORMAL: "", |
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
103 }, |
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
104 "sense_list_item": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
105 PKK_MODE_NORMAL: "#{index}:{definition}{example_list}", |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
106 PKK_MODE_ANKI: "#{index}:{definition}{example_list}", |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
107 }, |
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
108 "sense_list_sep": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
109 PKK_MODE_NORMAL: " | ", |
62 | 110 PKK_MODE_ANKI: " | ", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
111 }, |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
112 |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
113 "definition_item": { |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
114 PKK_MODE_NORMAL: " {text}", |
57 | 115 PKK_MODE_ANKI: " ? \"{text}\"", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
116 }, |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
117 |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
118 "example_list": { |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
119 PKK_MODE_NORMAL: " | {alist}", |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
120 }, |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
121 "example_list_empty": { |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
122 PKK_MODE_NORMAL: "", |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
123 }, |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
124 "example_list_item": { |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
125 PKK_MODE_NORMAL: "\"{text}\"{geo_list}", |
57 | 126 PKK_MODE_ANKI: " * \"{text}\"{geo_list}", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
127 }, |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
128 "example_list_sep": { |
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
129 PKK_MODE_NORMAL: " ; ", |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
130 PKK_MODE_ANKI: "", |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
131 }, |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
132 |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
133 "example_geo_list": { |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
134 PKK_MODE_NORMAL: " ({alist})", |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
135 }, |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
136 "example_geo_list_empty": { |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
137 PKK_MODE_NORMAL: "", |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
138 }, |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
139 "example_geo_list_item": { |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
140 PKK_MODE_NORMAL: "{text} [{tclass}]", |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
141 }, |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
142 "example_geo_list_sep": { |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
143 PKK_MODE_NORMAL: ", ", |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
144 }, |
30
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
145 } |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
146 |
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
147 |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
148 # Element annotation mappings |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
149 pkk_element_annotation_map = { |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
150 "Fragment" : { |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
151 PKK_MODE_NORMAL: ["<", ">"], |
35
5aafa87dbec2
Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
152 PKK_MODE_ANKI: ["<", ">"], |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
153 }, |
7 | 154 } |
155 | |
156 | |
28 | 157 # List of words in kks1/ useful for debugging, option -p |
7 | 158 pkk_debug_list = [ |
159 "ahavakkaine", | |
160 "ahavakala", | |
161 "ahavakoittuo", | |
64 | 162 "ahava", |
7 | 163 "ahvaliha", |
9 | 164 "aloilleh", |
18 | 165 "hanjahtoakseh", |
19 | 166 "akkalisto", |
33 | 167 "alto-", |
50 | 168 "allot-", |
7 | 169 ] |
170 | |
171 | |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
172 pkk_settings = {} |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
173 |
21 | 174 |
0 | 175 ### |
176 ### Misc. helper functions, etc | |
177 ### | |
178 | |
13 | 179 ## Print string to stdout using normalized Unicode if enabled |
5
274b2091137c
Some more work on cleaning this up.
Matti Hamalainen <ccr@tnsp.org>
parents:
4
diff
changeset
|
180 def pkk_print(smsg): |
12 | 181 try: |
20
f274504eafd0
Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
182 if pkk_cfg.normalize: |
12 | 183 sys.stdout.write(unicodedata.normalize("NFC", smsg)) |
184 else: | |
185 sys.stdout.write(smsg) | |
186 | |
187 except (BrokenPipeError, IOError) as e: | |
188 sys.stderr.close() | |
189 | |
0 | 190 |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
191 ## Get indentation string |
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
192 def pkk_geti(indent): |
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
193 return " " * pkk_cfg.indent * indent |
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
194 |
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
195 |
13 | 196 ## Print string with indentation |
7 | 197 def pkk_printi(indent, smsg): |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
198 pkk_print(pkk_geti(indent) + smsg) |
7 | 199 |
0 | 200 |
201 ## Fatal error handler | |
202 def pkk_fatal(smsg): | |
203 print(u"ERROR: "+ smsg) | |
204 sys.exit(1) | |
205 | |
206 | |
207 ## Handler for SIGINT signals | |
208 def pkk_signal_handler(signal, frame): | |
209 print(u"\nQuitting due to SIGINT / Ctrl+C!") | |
210 sys.exit(1) | |
211 | |
212 | |
67
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
213 def pkk_arg_range(vstr, vmin, vmax): |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
214 value = int(vstr) |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
215 if value < vmin or value > vmax: |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
216 raise argparse.ArgumentTypeError("value {} not in range {}-{}".format(value, vmin, vmax)) |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
217 else: |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
218 return value |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
219 |
9833df4573a7
Improve handling of value range commandline options.
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
220 |
39
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
221 class pkk_set_mode(argparse.Action): |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
222 def __call__(self, parser, namespace, value, option_string=None): |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
223 lvalue = value.strip().lower() |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
224 for mode in pkk_modes_list: |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
225 if pkk_modes_list[mode] == lvalue: |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
226 setattr(namespace, self.dest, mode) |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
227 return |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
228 |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
229 pkk_fatal(f"Invalid output mode '{lvalue}'.") |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
230 |
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
231 |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
232 ## Value handling |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
233 class pkk_set_value(argparse.Action): |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
234 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
235 rexpr = re.compile(r'\s*(\w+)\s*=\s*(.*)\s*') |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
236 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
237 def __call__(self, parser, namespace, values, option_string=None): |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
238 rmatch = re.match(self.rexpr, values) |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
239 if rmatch: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
240 rid = rmatch.group(1).lower().replace("-", "_") |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
241 rval = rmatch.group(2) |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
242 if rid in pkk_mode_defaults: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
243 pkk_settings[rid] = rval |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
244 else: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
245 pkk_fatal(f"Invalid option '{option_string} {values}': No such ID '{rid}'.") |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
246 else: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
247 pkk_fatal(f"Invalid option '{option_string} {values}': Expected id=value.") |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
248 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
249 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
250 ## Get mode if it exists |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
251 def pkk_test_value(mid): |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
252 if mid in pkk_mode_defaults: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
253 if pkk_cfg.mode in pkk_mode_defaults[mid]: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
254 mmode = pkk_cfg.mode |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
255 else: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
256 mmode = PKK_MODE_NORMAL |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
257 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
258 if mmode in pkk_mode_defaults[mid]: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
259 return mmode |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
260 else: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
261 return None |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
262 else: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
263 return None |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
264 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
265 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
266 ## Get default value per mode |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
267 def pkk_get_value(mid): |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
268 if mid in pkk_settings and pkk_settings[mid] != None: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
269 return pkk_settings[mid] |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
270 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
271 mmode = pkk_test_value(mid) |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
272 if mmode == None: |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
273 pkk_fatal(f"Internal error: No mode for ID '{mid}'.") |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
274 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
275 return pkk_mode_defaults[mid][mmode] |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
276 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
277 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
278 def pkk_get_fmt(mid): |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
279 return pkk_get_value(mid).replace("\\n", "\n") |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
280 |
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
281 |
71 | 282 ## Argument parser subclass |
283 class PKKArgumentParser(argparse.ArgumentParser): | |
284 def print_help(self): | |
285 print("lxmldump - Convert and dump ISO/FDIS 1951 XML file data\n" | |
286 "(C) Copyright 2021 Matti 'ccr' Hämäläinen <ccr@tnsp.org>\n") | |
287 super().print_help() | |
288 | |
289 def error(self, message): | |
290 self.print_help() | |
291 sys.stderr.write(f"\nerror: {message}\n") | |
292 sys.exit(2) | |
293 | |
294 | |
28 | 295 ## Annotate given string with prefix and suffix based on tag |
26 | 296 def pkk_str_annotate(mtag, mstr): |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
297 if pkk_cfg.annotate and mtag in pkk_element_annotation_map: |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
298 if pkk_cfg.mode in pkk_element_annotation_map[mtag]: |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
299 mmode = pkk_cfg.mode |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
300 else: |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
301 mmode = PKK_MODE_NORMAL |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
302 |
26 | 303 return pkk_element_annotation_map[mtag][mmode][0] + mstr + pkk_element_annotation_map[mtag][mmode][1] |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
304 else: |
26 | 305 return mstr |
25
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
306 |
8a6738f67106
Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents:
24
diff
changeset
|
307 |
13 | 308 ## Clean string by removing tabs and newlines |
10 | 309 def pkk_str_clean(mstr): |
60 | 310 return re.sub(r'[\n\r\t]', '', mstr).strip() |
10 | 311 |
312 | |
28 | 313 ## Format a "Ptr" node as text |
9 | 314 def pkk_ptr_to_text(pnode): |
39
f53ea742b57f
Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
38
diff
changeset
|
315 pfmt = pkk_get_fmt("ptr_fmt") |
60 | 316 ptext = ("".join(pnode.itertext())).strip() |
317 if pkk_cfg.annotate: | |
318 ptext = re.sub(r'\s*\.\s*$', '', ptext) | |
30
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
319 return pfmt.format( |
60 | 320 text=ptext, |
30
34755af2ea1f
Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
29
diff
changeset
|
321 href=pnode.attrib["{http://www.w3.org/TR/xlink}href"]) |
9 | 322 |
323 | |
13 | 324 ## Get text inside a given node |
16 | 325 def pkk_node_to_text(lnode): |
7 | 326 stmp = "" |
327 for pnode in lnode.iter(): | |
9 | 328 if pnode.tag == "Ptr": |
329 stmp += pkk_ptr_to_text(pnode) | |
330 else: | |
331 if isinstance(pnode.text, str): | |
60 | 332 stmp += pkk_str_annotate(pnode.tag, pnode.text) |
7 | 333 |
9 | 334 if isinstance(pnode.tail, str): |
60 | 335 stmp += pnode.tail |
7 | 336 |
60 | 337 return pkk_str_clean(re.sub(r'\s*\.\s*$', '', stmp)) |
7 | 338 |
339 | |
13 | 340 ## Simple recursive dump starting at given node |
7 | 341 def pkk_dump_recursive(indent, lnode): |
342 if lnode.tag in ["Example"]: | |
16 | 343 stmp = pkk_node_to_text(lnode) |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
344 pkk_printi(indent, f"{lnode.tag} \"{stmp}\"\n") |
6 | 345 else: |
7 | 346 if isinstance(lnode.text, str): |
60 | 347 textstr = pkk_str_clean(lnode.text) |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
348 if textstr != "": |
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
349 textstr = " \""+ textstr +"\"" |
7 | 350 else: |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
351 textstr = "" |
6 | 352 |
353 if len(lnode.attrib) > 0: | |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
354 attrstr = " "+ str(lnode.attrib) |
6 | 355 else: |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
356 attrstr = "" |
6 | 357 |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
358 pkk_printi(indent, f"{lnode.tag}{attrstr}{textstr}\n") |
6 | 359 for qnode in lnode.findall("./*"): |
7 | 360 pkk_dump_recursive(indent + 1, qnode) |
6 | 361 |
362 | |
17 | 363 ## Output item(s) under given node with given format string |
48 | 364 def pkk_get_subs(indent, dnode, dsub, dfmtname): |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
365 dfmt = pkk_get_fmt(dfmtname) |
48 | 366 ostr = "" |
7 | 367 for qnode in dnode.findall(dsub): |
48 | 368 ostr += dfmt.format( |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
369 text=pkk_node_to_text(qnode), |
48 | 370 indent=pkk_geti(indent)) |
371 return ostr | |
7 | 372 |
373 | |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
374 def pkk_get_list_str(dindent, dlist, dprefix, dfilter): |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
375 if len(dlist) > 0: |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
376 if dfilter: |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
377 tfmt = pkk_get_fmt(dprefix + "_list_item") |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
378 tlist = [tfmt.format(text=i) for i in dlist] |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
379 else: |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
380 tlist = dlist |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
381 |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
382 return pkk_get_fmt(dprefix + "_list").format( |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
383 alist=pkk_get_fmt(dprefix + "_list_sep").join(tlist), |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
384 indent=pkk_geti(dindent)) |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
385 else: |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
386 return pkk_get_fmt(dprefix + "_list_empty").format( |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
387 indent=pkk_geti(dindent)) |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
388 |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
389 |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
390 ## Get definition nand examples from node |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
391 def pkk_get_sense(indent, dnode, dname, dindex): |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
392 exlist = [] |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
393 index = 1 |
7 | 394 for wnode in dnode.findall("./ExampleBlock/ExampleCtn"): |
36
4c8aafff8c5f
Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents:
35
diff
changeset
|
395 geolist = [] |
24
8c8e8e4504bb
Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents:
23
diff
changeset
|
396 for qnode in wnode.findall("./FreeTopic[@type='levikki']/GeographicalUsage"): |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
397 geolist.append(pkk_get_fmt("example_geo_list_item").format( |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
398 text=pkk_node_to_text(qnode), |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
399 tclass=qnode.attrib["class"], |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
400 indent=pkk_geti(indent + 2))) |
7 | 401 |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
402 exlist.append(pkk_get_fmt("example_list_item").format( |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
403 text=pkk_node_to_text(wnode.find("./Example")), |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
404 geo_list=pkk_get_list_str(indent + 1, geolist, "example_geo", False), |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
405 indent=pkk_geti(indent + 1), |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
406 index=index)) |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
407 index += 1 |
48 | 408 |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
409 return pkk_get_fmt(dname).format( |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
410 definition=pkk_get_subs(indent, dnode, "./Definition", "definition_item"), |
63
afe5cd7626dc
Some more work, this may break things a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
62
diff
changeset
|
411 example_list=pkk_get_list_str(indent, exlist, "example", False), |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
412 indent=pkk_geti(indent), |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
413 index=dindex) |
7 | 414 |
415 | |
17 | 416 ## Output one "DictionaryEntry" node |
7 | 417 def pkk_output_node(indent, dnode): |
6 | 418 |
7 | 419 for wnode in dnode.findall("./HeadwordCtn"): |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
420 # Get head word |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
421 headword = pkk_node_to_text(wnode.find("./Headword")) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
422 |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
423 # Collect search forms |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
424 srchlist = [] |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
425 for qnode in wnode.findall("./SearchForm"): |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
426 srchlist.append(pkk_node_to_text(qnode)) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
427 |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
428 # Remove dupe if headword is also in srchlist |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
429 if headword in srchlist: |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
430 srchlist.remove(headword) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
431 |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
432 # Remove other duplicates and sort |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
433 srchlist = list(set(srchlist)) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
434 srchlist.sort(reverse=False, key=lambda attr: (attr, len(attr))) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
435 |
44
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
436 # Get hyphenation note, if any |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
437 hnode = wnode.find("./Hyphenation") |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
438 if hnode != None: |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
439 hyphenation = pkk_get_fmt("hyphenation").format( |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
440 text=pkk_node_to_text(hnode), |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
441 indent=pkk_geti(indent + 1)) |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
442 else: |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
443 hyphenation = pkk_get_fmt("no_hyphenation").format( |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
444 indent=pkk_geti(indent + 1)) |
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
445 |
18 | 446 # Create list with grammatical attributes (noun, verb, etc.) |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
447 attrlist = [] |
18 | 448 for pnode in wnode.findall("./PartOfSpeechCtn/PartOfSpeech"): |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
449 attrlist.append(pnode.attrib["freeValue"]) |
18 | 450 |
451 for pnode in wnode.findall("./GrammaticalNote"): | |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
452 attrlist.append(pkk_node_to_text(pnode)) |
18 | 453 |
454 # Remove duplicates and sort the list | |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
455 attrlist = list(set(attrlist)) |
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
456 attrlist.sort(reverse=False, key=lambda attr: (attr, len(attr))) |
27
d77ab8a300b1
Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents:
26
diff
changeset
|
457 |
48 | 458 # Get main "sense" |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
459 msense = pkk_get_sense(indent + 1, wnode, "main_sense_item", 0) |
48 | 460 |
461 # Print any other "senses" | |
462 index = 1 | |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
463 senselist = [] |
48 | 464 for znode in dnode.findall("./SenseGrp"): |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
465 senselist.append(pkk_get_sense(indent + 1, znode, "sense_list_item", index)) |
48 | 466 index += 1 |
467 | |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
468 # Print the headword and attributes if any |
55
301452a71cc7
Make sense output formatting more list-like, rename some items.
Matti Hamalainen <ccr@tnsp.org>
parents:
51
diff
changeset
|
469 pkk_print(pkk_get_fmt("word_item").format( |
43
8ed576574712
More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
470 word=headword, |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
471 attr=pkk_get_list_str(indent + 1, attrlist, "word_attr", True), |
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
472 search=pkk_get_list_str(indent + 1, srchlist, "search", True), |
44
d7b4b2fb0214
Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents:
43
diff
changeset
|
473 hyphenation=hyphenation, |
48 | 474 main_sense=msense, |
61
9c36574199f5
Enhancements to the output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
60
diff
changeset
|
475 other_senses=pkk_get_list_str(indent + 1, senselist, "sense", False), |
40
bc8d8ef4a248
More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents:
39
diff
changeset
|
476 indent=pkk_geti(indent))) |
18 | 477 |
6 | 478 |
71 | 479 ## Argument parser subclass |
480 class PKKArgumentParser(argparse.ArgumentParser): | |
481 def print_help(self): | |
482 print("lxmldump - Convert and dump ISO/FDIS 1951 XML file data\n" | |
483 "(C) Copyright 2021 Matti 'ccr' Hämäläinen <ccr@tnsp.org>\n") | |
484 | |
485 super().print_help() | |
486 | |
487 print(u"\nAvailable output modes:") | |
488 print(" " + ", ".join(pkk_modes_list.values())) | |
489 | |
490 def error(self, message): | |
491 self.print_help() | |
492 sys.stderr.write(f"\nerror: {message}\n") | |
493 sys.exit(2) | |
494 | |
495 | |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
496 def pkk_get_argparser(): |
71 | 497 optparser = PKKArgumentParser( |
498 usage="%(prog)s [options] <input xml file(s)>" | |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
499 ) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
500 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
501 optparser.add_argument("filenames", |
72
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
502 type=str, action="extend", nargs="*", |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
503 metavar="filename", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
504 help="XML filename(s)") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
505 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
506 optparser.add_argument("-m", "--mode", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
507 dest="mode", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
508 action=pkk_set_mode, |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
509 default=PKK_MODE_NORMAL, |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
510 help="set output mode (see below)") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
511 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
512 optparser.add_argument("-s", "--set", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
513 action=pkk_set_value, |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
514 metavar="ID=STR", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
515 help='set format string (see below)') |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
516 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
517 optparser.add_argument("-n", "--normalize", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
518 dest="normalize", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
519 action="store_true", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
520 help="output NFC normalized Unicode") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
521 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
522 optparser.add_argument("-a", "--annotate", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
523 dest="annotate", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
524 action="store_true", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
525 help="annotate strings") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
526 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
527 optparser.add_argument("-i", "--indent", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
528 dest="indent", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
529 type=functools.partial(pkk_arg_range, vmin=0, vmax=32), default=4, |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
530 metavar="N", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
531 help='set indentation width (default: %(default)s)') |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
532 |
71 | 533 optparser.add_argument("-l", "--list", |
534 dest="list_values", | |
535 action="store_true", | |
536 help="show list of format strings for current mode") | |
537 | |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
538 optparser.add_argument("-p", "--debug", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
539 dest="debug", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
540 action="store_true", |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
541 help=argparse.SUPPRESS) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
542 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
543 return optparser |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
544 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
545 |
0 | 546 ### |
547 ### Main program starts | |
548 ### | |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
549 if __name__ == "__main__": |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
550 signal.signal(signal.SIGINT, pkk_signal_handler) |
35
5aafa87dbec2
Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
551 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
552 ### Parse arguments |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
553 optparser = pkk_get_argparser() |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
554 pkk_cfg = optparser.parse_args() |
35
5aafa87dbec2
Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
555 |
71 | 556 if pkk_cfg.list_values: |
72
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
557 print(u"\nAvailable output modes:") |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
558 print(" " + ", ".join(pkk_modes_list.values())) |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
559 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
560 if pkk_cfg.mode not in [PKK_MODE_NORMAL, PKK_MODE_ANKI]: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
561 pkk_cfg.mode = PKK_MODE_NORMAL |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
562 |
72
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
563 print(u"\nAvailable format strings and values (mode '{}'):".format( |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
564 pkk_modes_list[pkk_cfg.mode])) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
565 |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
566 for mid in pkk_mode_defaults: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
567 stmp = pkk_get_value(mid).replace("\\", "\\\\").replace("\n", "\\n") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
568 print(u" {:22s} : '{}'".format(mid, stmp)) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
569 |
72
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
570 sys.exit(0) |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
571 |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
572 elif len(pkk_cfg.filenames) == 0: |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
573 optparser.print_help() |
0849d65fabce
More work on improving help.
Matti Hamalainen <ccr@tnsp.org>
parents:
71
diff
changeset
|
574 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
575 ### Handle each input file |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
576 for filename in pkk_cfg.filenames: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
577 # Parse XML file into element tree |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
578 try: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
579 uxml = xmlET.parse(filename) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
580 except Exception as e: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
581 pkk_fatal(u"SVG/XML parsing failed: {0}".format(str(e))) |
41 | 582 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
583 # Dump output |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
584 try: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
585 xroot = uxml.getroot() |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
586 for dnode in xroot.findall("./DictionaryEntry"): |
0 | 587 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
588 if pkk_cfg.debug and dnode.attrib["identifier"] not in pkk_debug_list: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
589 continue |
0 | 590 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
591 if pkk_cfg.mode in [PKK_MODE_NORMAL, PKK_MODE_ANKI]: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
592 try: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
593 pkk_output_node(0, dnode) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
594 except Exception as e: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
595 print("") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
596 pkk_dump_recursive(0, dnode) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
597 print(str(e)) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
598 sys.exit(0) |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
599 elif pkk_cfg.mode == PKK_MODE_DUMP: |
19 | 600 pkk_dump_recursive(0, dnode) |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
601 print("") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
602 elif pkk_cfg.mode == PKK_MODE_XML: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
603 pkk_print(xmlET.tostring(dnode, encoding="utf8").decode("utf8") + "\n\n") |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
604 else: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
605 pkk_fatal("Invalid operation mode?") |
7 | 606 |
70
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
607 except (BrokenPipeError, IOError) as e: |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
608 sys.stderr.close() |
f887d8a68e5e
Cleanups, move argparser initialization into a function.
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
609 sys.exit(1) |