annotate lxmldump.py @ 35:5aafa87dbec2

Some Anki-related stuff, not finalized and thus hidden.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 25 May 2021 13:28:24 +0300
parents 73f2f98e3eef
children 4c8aafff8c5f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #!/usr/bin/python3 -B
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 # coding=utf-8
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 ###
4
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
4 ### lxmldump - Dump ISO/FDIS 1951 XML file data
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
5 ### Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org>
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
6 ### (C) Copyright 2021 Tecnic Software productions (TNSP)
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
7 ###
23
3ef1c5463b8f Add license.
Matti Hamalainen <ccr@tnsp.org>
parents: 22
diff changeset
8 ### Released / distributed under 3-clause BSD license
3ef1c5463b8f Add license.
Matti Hamalainen <ccr@tnsp.org>
parents: 22
diff changeset
9 ### (see file "COPYING" for more information)
3ef1c5463b8f Add license.
Matti Hamalainen <ccr@tnsp.org>
parents: 22
diff changeset
10 ###
4
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
11 ### Python 3.7+ required!
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 import sys
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 import signal
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 import re
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 from pathlib import Path
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 assert sys.version_info >= (3, 7)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 ### Default settings
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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",
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
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
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
42 # Default Ptr URL format strings
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
43 pkk_ptr_url_fmt = {
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
44 PKK_MODE_NORMAL: u"<PTR:{href}>{text}</PTR>",
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
45 PKK_MODE_ANKI: u"<a href='https://kaino.kotus.fi/cgi-bin/kks/karjala.cgi?a={href}'>{text}</a>",
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
46 }
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
47
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
48
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
49 # Element annotation mappings
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
50 pkk_element_annotation_map = {
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
51 "Fragment" : {
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
52 PKK_MODE_NORMAL: ["<", ">"],
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
53 PKK_MODE_ANKI: ["<", ">"],
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
54 },
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
55 }
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
56
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
57
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
58 # List of words in kks1/ useful for debugging, option -p
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
59 pkk_debug_list = [
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
60 "ahas",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
61 "ahavakkaine",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
62 "ahavakala",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
63 "ahavakoittuo",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
64 "ahvaliha",
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
65 "aloilleh",
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
66 "hanjahtoakseh",
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
67 "akkalisto",
33
3dcf8ac43bda Add one word to debug list.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
68 "alto-",
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
69 ]
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
70
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
71
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
72
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 ### Misc. helper functions, etc
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 def pkk_cleanup():
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77 return 0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
80 ## 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
81 def pkk_print(smsg):
12
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
82 try:
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
83 if pkk_cfg.normalize:
12
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
84 sys.stdout.write(unicodedata.normalize("NFC", smsg))
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
85 else:
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
86 sys.stdout.write(smsg)
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
87
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
88 except (BrokenPipeError, IOError) as e:
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
89 sys.stderr.close()
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
90
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
92 ## Print string with indentation
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
93 def pkk_printi(indent, smsg):
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
94 pkk_print((" " * pkk_cfg.indent * indent) + smsg)
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
95
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 ## Fatal error handler
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 def pkk_fatal(smsg):
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 print(u"ERROR: "+ smsg)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 ## Handler for SIGINT signals
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 def pkk_signal_handler(signal, frame):
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 pkk_cleanup()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 print(u"\nQuitting due to SIGINT / Ctrl+C!")
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
110 ## Annotate given string with prefix and suffix based on tag
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
111 def pkk_str_annotate(mtag, mstr):
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
112 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
113 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
114 mmode = pkk_cfg.mode
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
115 else:
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
116 mmode = PKK_MODE_NORMAL
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
117
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
118 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
119 else:
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
120 return mstr
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
121
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
122
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
123 ## Clean string by removing tabs and newlines
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
124 def pkk_str_clean(mstr):
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
125 return re.sub(r'[\n\r\t]', '', mstr)
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
126
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
127
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
128 ## Format a "Ptr" node as text
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
129 def pkk_ptr_to_text(pnode):
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
130 # If custom format set, use it
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
131 if pkk_cfg.ptr_url_fmt != None:
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
132 pfmt = pkk_cfg.ptr_url_fmt
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
133 elif pkk_cfg.mode in pkk_ptr_url_fmt:
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
134 # Else try mode-specific
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
135 pfmt = pkk_ptr_url_fmt[pkk_cfg.mode]
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
136 else:
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
137 # Last resort is normal mode format
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
138 pfmt = pkk_ptr_url_fmt[PKK_MODE_NORMAL]
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
139
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
140 return pfmt.format(
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
141 text=("".join(pnode.itertext())).strip(),
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
142 href=pnode.attrib["{http://www.w3.org/TR/xlink}href"])
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
143
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
144
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
145 ## Get text inside a given node
16
285b0820d2c6 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
146 def pkk_node_to_text(lnode):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
147 stmp = ""
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
148 for pnode in lnode.iter():
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
149 if pnode.tag == "Ptr":
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
150 stmp += pkk_ptr_to_text(pnode)
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
151 else:
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
152 if isinstance(pnode.text, str):
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
153 stmp += pkk_str_annotate(pnode.tag, pkk_str_clean(pnode.text).strip())
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
154
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
155 if isinstance(pnode.tail, str):
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
156 stmp += pkk_str_clean(pnode.tail)
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
157
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
158 return stmp.strip()
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
159
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
160
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
161 ## Simple recursive dump starting at given node
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
162 def pkk_dump_recursive(indent, lnode):
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
163 if lnode.tag in ["Example"]:
16
285b0820d2c6 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
164 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
165 pkk_printi(indent, f"{lnode.tag} \"{stmp}\"\n")
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
166 else:
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
167 if isinstance(lnode.text, str):
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
168 textstr = pkk_str_clean(lnode.text).strip()
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
169 if textstr != "":
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
170 textstr = " \""+ textstr +"\""
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
171 else:
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
172 textstr = ""
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
173
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
174 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
175 attrstr = " "+ str(lnode.attrib)
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
176 else:
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
177 attrstr = ""
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
178
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
179 pkk_printi(indent, f"{lnode.tag}{attrstr}{textstr}\n")
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
180 for qnode in lnode.findall("./*"):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
181 pkk_dump_recursive(indent + 1, qnode)
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
182
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
183
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
184 ## Output item(s) under given node with given format string
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
185 def pkk_output_subs_fmt(indent, dnode, dsub, dname, dfmt):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
186 for qnode in dnode.findall(dsub):
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
187 pkk_printi(indent, dfmt.format(nname=dname, ntext=pkk_node_to_text(qnode)))
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
188
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
189 ## Output item(s) under given node with a prefixed name string
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
190 def pkk_output_subs_prefix(indent, dnode, dsub, dname):
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
191 pkk_output_subs_fmt(indent, dnode, dsub, dname, "{nname} \"{ntext}\"\n")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
192
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
193
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
194 ## Output a main "Headword" or "Sense" node under it
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
195 def pkk_output_sense(indent, dnode):
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
196 # Search form and definition
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
197 pkk_output_subs_prefix(indent, dnode, "./SearchForm", "srch")
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
198 pkk_output_subs_prefix(indent, dnode, "./Definition", "defn")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
199
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
200 # Examples
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
201 for wnode in dnode.findall("./ExampleBlock/ExampleCtn"):
16
285b0820d2c6 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
202 sstr = pkk_node_to_text(wnode.find("./Example"))
8
ce07bb2a247b More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
203 lstr = ""
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
204
24
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
205 ltmp = []
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
206 for qnode in wnode.findall("./FreeTopic[@type='levikki']/GeographicalUsage"):
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
207 ltmp.append("{} [{}]".format(pkk_node_to_text(qnode), qnode.attrib["class"]))
8
ce07bb2a247b More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 7
diff changeset
208
24
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
209 if len(ltmp) > 0:
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
210 lstr = " ({})".format(", ".join(ltmp))
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
211
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
212 pkk_printi(indent + 1, "{} \"{}\"{}\n".format("exmp", sstr, lstr))
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
213
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
214
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
215 ## Output one "DictionaryEntry" node
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
216 def pkk_output_node(indent, dnode):
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
217
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
218 for wnode in dnode.findall("./HeadwordCtn"):
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
219 # Create list with grammatical attributes (noun, verb, etc.)
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
220 tmpl = []
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
221 for pnode in wnode.findall("./PartOfSpeechCtn/PartOfSpeech"):
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
222 tmpl.append(pnode.attrib["freeValue"])
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
223
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
224 for pnode in wnode.findall("./GrammaticalNote"):
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
225 tmpl.append(pkk_node_to_text(pnode))
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
226
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
227 # Remove duplicates and sort the list
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
228 tmpl = list(set(tmpl))
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
229 tmpl.sort(reverse=False, key=lambda attr: (attr, len(attr)))
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
230
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
231 # Print the headword and attributes if any
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
232 pkk_output_subs_fmt(indent, wnode, "./Headword", "", "\"{ntext}\"")
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
233
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
234 if len(tmpl) > 0:
32
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
235 pkk_print(" ({nlist})".format(nlist=pkk_cfg.word_attr_sep.join(tmpl)))
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
236
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
237 pkk_print("\n")
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
238
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
239 # Print main "sense"
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
240 pkk_output_sense(indent + 1, wnode)
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
241
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
242 # Print any other "senses"
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
243 index = 1
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
244 for wnode in dnode.findall("./SenseGrp"):
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
245 pkk_printi(indent + 1, f"sense #{index}\n")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
246 pkk_output_sense(indent + 2, wnode)
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
247 index += 1
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
248
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
249
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251 ### Main program starts
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 signal.signal(signal.SIGINT, pkk_signal_handler)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
255 optparser = argparse.ArgumentParser(
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
256 description="lxmldump - Dump ISO/FDIS 1951 XML file data",
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
257 usage="%(prog)s [options] <input xml file(s)>",
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
258 add_help=False
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
259 )
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
261 optparser.add_argument("filenames",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
262 type=str, action="extend", nargs="*",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
263 metavar="filename",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
264 help="XML filename(s)")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
266 optparser.add_argument("-h", "--help",
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
267 dest="show_help",
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
268 action="store_true",
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
269 help="show this help message and exit")
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
270
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
271 optparser.add_argument("-d", "--dump",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
272 dest="mode",
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
273 action="store_const", const=PKK_MODE_DUMP, default=PKK_MODE_NORMAL,
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
274 help="output as simple dump")
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
275
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
276 optparser.add_argument("-x", "--xml",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
277 dest="mode",
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
278 action="store_const", const=PKK_MODE_XML,
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
279 help="output as XML")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
280
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
281 optparser.add_argument("-A", "--anki",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
282 dest="mode",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
283 action="store_const", const=PKK_MODE_ANKI,
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
284 help=argparse.SUPPRESS)
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
285 # help="output Anki compatible")
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
286
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
287 optparser.add_argument("--ptr-url-fmt",
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
288 dest="ptr_url_fmt",
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
289 type=str,
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
290 default=None,
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
291 metavar="str",
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
292 help='Ptr URL format string (see below)')
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
293
32
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
294 optparser.add_argument("--attr-sep",
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
295 dest="word_attr_sep",
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
296 type=str, default=" ; ",
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
297 metavar="str",
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
298 help='word attribute separator (default: \"%(default)s\")')
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
299
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
300 optparser.add_argument("-n", "--normalize",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
301 dest="normalize",
29
f91ef7d7615b Use store_true feature of argparse.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
302 action="store_true",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
303 help="output NFC normalized Unicode")
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
304
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
305 optparser.add_argument("-a", "--annotate",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
306 dest="annotate",
29
f91ef7d7615b Use store_true feature of argparse.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
307 action="store_true",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
308 help="annotate strings")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
309
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
310 optparser.add_argument("-i", "--indent",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
311 dest="indent",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
312 type=int, choices=range(0, 32), default=4,
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
313 metavar="n",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
314 help='indent output by <n> characters (default: %(default)s)')
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
315
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
316 optparser.add_argument("-p", "--debug",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
317 dest="debug",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
318 action="store_true",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
319 help=argparse.SUPPRESS)
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
320
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
321
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
322 ### Show help if needed
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
323 pkk_cfg = optparser.parse_args()
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
324 if len(pkk_cfg.filenames) == 0 or pkk_cfg.show_help:
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
325 optparser.print_help()
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
326
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
327 print(u"\nDefault Ptr format strings per mode:")
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
328 for pmode in pkk_modes_list:
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
329 if pmode in pkk_ptr_url_fmt:
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
330 print(u" {:6s} : \"{}\"".format(pkk_modes_list[pmode], pkk_ptr_url_fmt[pmode]))
34
73f2f98e3eef Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
331
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
332 print(u"")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
333 sys.exit(0)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
334
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
336 ### Handle each input file
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
337 for filename in pkk_cfg.filenames:
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
338 # Parse XML file into element tree
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
339 try:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
340 uxml = xmlET.parse(filename)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
341 except Exception as e:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
342 pkk_fatal(u"SVG/XML parsing failed: {0}".format(str(e)))
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
343
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
344 # Dump output
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
345 try:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
346 xroot = uxml.getroot()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
347 for dnode in xroot.findall("./DictionaryEntry"):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
348
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
349 if pkk_cfg.debug and dnode.attrib["identifier"] not in pkk_debug_list:
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
350 continue
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
351
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
352 if pkk_cfg.mode in [PKK_MODE_NORMAL, PKK_MODE_ANKI]:
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
353 try:
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
354 pkk_output_node(0, dnode)
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
355 except Exception as e:
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
356 pkk_dump_recursive(0, dnode)
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
357 print(str(e))
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
358 sys.exit(0)
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
359 elif pkk_cfg.mode == PKK_MODE_DUMP:
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
360 pkk_dump_recursive(0, dnode)
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
361 elif pkk_cfg.mode == PKK_MODE_XML:
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
362 pkk_print(str(xmlET.tostring(dnode, encoding="utf8")) + "\n")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
363 else:
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
364 pkk_fatal("Invalid operation mode?")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
365
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
366 print("\n")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
367
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
368 except (BrokenPipeError, IOError) as e:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
369 sys.stderr.close()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
370 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
371
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
372 pkk_cleanup()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
373 sys.exit(0)