annotate lxmldump.py @ 50:5b22ffdab0ce

Adjustment.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 26 May 2021 23:10:24 +0300
parents d3d4b547f86c
children 5d3fb2f3aa21
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 ###
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
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
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
20 import textwrap
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 assert sys.version_info >= (3, 7)
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 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 ### Default settings
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 ###
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
28 # Operation modes
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
29 PKK_MODE_NORMAL = 0
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
30 PKK_MODE_DUMP = 1
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
31 PKK_MODE_XML = 2
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
32 PKK_MODE_ANKI = 3
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
33
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
34
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
35 pkk_modes_list = {
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
36 PKK_MODE_NORMAL: "normal",
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
37 PKK_MODE_DUMP: "dump",
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
38 PKK_MODE_XML: "xml",
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
39 PKK_MODE_ANKI: "anki",
30
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
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
43 pkk_mode_defaults = {
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
44 # Default Ptr URL format strings
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
45 "ptr_fmt": {
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
46 PKK_MODE_NORMAL: u"<PTR:{href}>{text}</PTR>",
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
47 PKK_MODE_ANKI: u"<a href='https://kaino.kotus.fi/cgi-bin/kks/karjala.cgi?a={href}'>{text}</a>",
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
48 },
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
49
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
50 "word_fmt": {
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
51 PKK_MODE_NORMAL: "\"{word}\"{search}{attr}\n{hyphenation}{main_sense}{other_senses}\n",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
52 PKK_MODE_ANKI: "\"{word}\"{search}{attr}{hyphenation};{main_sense};{other_senses}\n\n",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
53 },
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
54 "word_attr_list": {
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
55 PKK_MODE_NORMAL: " ({alist}) ",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
56 PKK_MODE_NORMAL: " ({alist})",
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
57 },
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
58 "word_attr_list_empty": {
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
59 PKK_MODE_NORMAL: " ",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
60 PKK_MODE_ANKI: "",
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
61 },
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
62 "word_attr_list_item": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
63 PKK_MODE_NORMAL: "{text}",
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
64 },
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
65 "word_attr_list_sep": {
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
66 PKK_MODE_NORMAL: " ; ",
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
67 PKK_MODE_ANKI: " : ",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
68 },
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
69
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
70 "search_list": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
71 PKK_MODE_NORMAL: ", {alist}",
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
72 },
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
73 "search_list_empty": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
74 PKK_MODE_NORMAL: "",
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
75 },
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
76 "search_list_item": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
77 PKK_MODE_NORMAL: "\"{text}\"",
45
23f00a0da841 Adjustments.
Matti Hamalainen <ccr@tnsp.org>
parents: 44
diff changeset
78 PKK_MODE_ANKI: "{text}",
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
79 },
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
80 "search_list_sep": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
81 PKK_MODE_NORMAL: ", ",
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
82 },
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
83
44
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
84 "hyphenation": {
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
85 PKK_MODE_NORMAL: "{indent}hyph \"{text}\"\n",
50
5b22ffdab0ce Adjustment.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
86 PKK_MODE_ANKI: " [hyph: {text}]",
44
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
87 },
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
88 "no_hyphenation": {
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
89 PKK_MODE_NORMAL: "",
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
90 },
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
91
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
92 "sense_index": {
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
93 PKK_MODE_NORMAL: "{indent}sense #{index}\n",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
94 PKK_MODE_ANKI: "#{index}: ",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
95 },
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
96
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
97 "definition_fmt": {
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
98 PKK_MODE_NORMAL: "{indent}defn \"{text}\"\n",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
99 PKK_MODE_ANKI: " * \"{text}\"",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
100 },
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
101
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
102 "example_fmt": {
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
103 PKK_MODE_NORMAL: "{indent}exmp \"{text}\"{geostr}\n",
49
d3d4b547f86c Some prodding at Anki output.
Matti Hamalainen <ccr@tnsp.org>
parents: 48
diff changeset
104 PKK_MODE_ANKI: " ⚫ \"{text}\"{geostr}",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
105 },
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
106 "example_geo_list": {
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
107 PKK_MODE_NORMAL: " ({alist})",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
108 },
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
109 "example_geo_list_empty": {
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
110 PKK_MODE_NORMAL: "",
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
111 },
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
112 "example_geo_list_item": {
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
113 PKK_MODE_NORMAL: "{text} [{tclass}]",
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
114 },
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
115 "example_geo_list_sep": {
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
116 PKK_MODE_NORMAL: ", ",
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
117 },
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
118 }
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
119
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
120
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
121 # Element annotation mappings
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
122 pkk_element_annotation_map = {
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
123 "Fragment" : {
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
124 PKK_MODE_NORMAL: ["<", ">"],
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
125 PKK_MODE_ANKI: ["<", ">"],
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
126 },
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
127 }
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
128
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
129
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
130 # List of words in kks1/ useful for debugging, option -p
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
131 pkk_debug_list = [
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
132 "ahas",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
133 "ahavakkaine",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
134 "ahavakala",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
135 "ahavakoittuo",
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
136 "ahvaliha",
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
137 "aloilleh",
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
138 "hanjahtoakseh",
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
139 "akkalisto",
33
3dcf8ac43bda Add one word to debug list.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
140 "alto-",
50
5b22ffdab0ce Adjustment.
Matti Hamalainen <ccr@tnsp.org>
parents: 49
diff changeset
141 "allot-",
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
142 ]
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
143
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
144
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
145 pkk_settings = {}
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
146
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
147
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 ### Misc. helper functions, etc
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 def pkk_cleanup():
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 return 0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
155 ## 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
156 def pkk_print(smsg):
12
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
157 try:
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
158 if pkk_cfg.normalize:
12
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
159 sys.stdout.write(unicodedata.normalize("NFC", smsg))
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
160 else:
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
161 sys.stdout.write(smsg)
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
162
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
163 except (BrokenPipeError, IOError) as e:
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
164 sys.stderr.close()
Matti Hamalainen <ccr@tnsp.org>
parents: 11
diff changeset
165
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
167 ## Get indentation string
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
168 def pkk_geti(indent):
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
169 return " " * pkk_cfg.indent * indent
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
170
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
171
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
172 ## Print string with indentation
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
173 def pkk_printi(indent, smsg):
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
174 pkk_print(pkk_geti(indent) + smsg)
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
175
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 ## Fatal error handler
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 def pkk_fatal(smsg):
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 print(u"ERROR: "+ smsg)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 ## Handler for SIGINT signals
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 def pkk_signal_handler(signal, frame):
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 pkk_cleanup()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 print(u"\nQuitting due to SIGINT / Ctrl+C!")
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
190 class pkk_set_mode(argparse.Action):
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
191 def __call__(self, parser, namespace, value, option_string=None):
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
192 lvalue = value.strip().lower()
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
193 for mode in pkk_modes_list:
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
194 if pkk_modes_list[mode] == lvalue:
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
195 setattr(namespace, self.dest, mode)
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
196 return
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
197
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
198 pkk_fatal(f"Invalid output mode '{lvalue}'.")
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
199
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
200
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
201 ## Value handling
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
202 class pkk_set_value(argparse.Action):
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
203
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
204 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
205
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
206 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
207 rmatch = re.match(self.rexpr, values)
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
208 if rmatch:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
209 rid = rmatch.group(1).lower().replace("-", "_")
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
210 rval = rmatch.group(2)
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
211 if rid in pkk_mode_defaults:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
212 pkk_settings[rid] = rval
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
213 else:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
214 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
215 else:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
216 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
217
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
218
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
219 ## Get mode if it exists
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
220 def pkk_test_value(mid):
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
221 if mid in pkk_mode_defaults:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
222 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
223 mmode = pkk_cfg.mode
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
224 else:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
225 mmode = PKK_MODE_NORMAL
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
226
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
227 if mmode in pkk_mode_defaults[mid]:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
228 return mmode
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
229 else:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
230 return None
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
231 else:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
232 return None
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
233
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 ## Get default value per mode
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
236 def pkk_get_value(mid):
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
237 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
238 return pkk_settings[mid]
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
239
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
240 mmode = pkk_test_value(mid)
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
241 if mmode == None:
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
242 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
243
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
244 return pkk_mode_defaults[mid][mmode]
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
245
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
246
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
247 def pkk_get_fmt(mid):
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
248 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
249
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
250
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
251 ## Annotate given string with prefix and suffix based on tag
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
252 def pkk_str_annotate(mtag, mstr):
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
253 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
254 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
255 mmode = pkk_cfg.mode
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
256 else:
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
257 mmode = PKK_MODE_NORMAL
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
258
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
259 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
260 else:
26
420f13925f20 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
261 return mstr
25
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
262
8a6738f67106 Factor string annotation into separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 24
diff changeset
263
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
264 ## Clean string by removing tabs and newlines
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
265 def pkk_str_clean(mstr):
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
266 return re.sub(r'[\n\r\t]', '', mstr)
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
267
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
268
28
3442b8700da7 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
269 ## Format a "Ptr" node as text
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
270 def pkk_ptr_to_text(pnode):
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
271 pfmt = pkk_get_fmt("ptr_fmt")
30
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
272 return pfmt.format(
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
273 text=("".join(pnode.itertext())).strip(),
34755af2ea1f Make Ptr field URL formatting configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 29
diff changeset
274 href=pnode.attrib["{http://www.w3.org/TR/xlink}href"])
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
275
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
276
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
277 ## Get text inside a given node
16
285b0820d2c6 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
278 def pkk_node_to_text(lnode):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
279 stmp = ""
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
280 for pnode in lnode.iter():
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
281 if pnode.tag == "Ptr":
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
282 stmp += pkk_ptr_to_text(pnode)
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
283 else:
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
284 if isinstance(pnode.text, str):
37
e176fcfc0235 Fix overstripping of concatenated strings.
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
285 stmp += pkk_str_annotate(pnode.tag, pkk_str_clean(pnode.text))
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
286
9
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
287 if isinstance(pnode.tail, str):
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
288 stmp += pkk_str_clean(pnode.tail)
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
289
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
290 return stmp.strip()
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
291
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
292
13
3bd772fd6a50 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
293 ## Simple recursive dump starting at given node
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
294 def pkk_dump_recursive(indent, lnode):
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
295 if lnode.tag in ["Example"]:
16
285b0820d2c6 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 15
diff changeset
296 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
297 pkk_printi(indent, f"{lnode.tag} \"{stmp}\"\n")
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
298 else:
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
299 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
300 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
301 if textstr != "":
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
302 textstr = " \""+ textstr +"\""
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
303 else:
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
304 textstr = ""
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
305
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
306 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
307 attrstr = " "+ str(lnode.attrib)
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
308 else:
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
309 attrstr = ""
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
310
27
d77ab8a300b1 Use Python 3.6/3.7 format strings where we can.
Matti Hamalainen <ccr@tnsp.org>
parents: 26
diff changeset
311 pkk_printi(indent, f"{lnode.tag}{attrstr}{textstr}\n")
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
312 for qnode in lnode.findall("./*"):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
313 pkk_dump_recursive(indent + 1, qnode)
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
314
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
315
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
316 ## Output item(s) under given node with given format string
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
317 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
318 dfmt = pkk_get_fmt(dfmtname)
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
319 ostr = ""
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
320 for qnode in dnode.findall(dsub):
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
321 ostr += dfmt.format(
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
322 text=pkk_node_to_text(qnode),
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
323 indent=pkk_geti(indent))
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
324 return ostr
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
325
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
326
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
327 def pkk_get_list_str(dlist, dprefix, dfilter):
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
328 if len(dlist) > 0:
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
329 if dfilter:
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
330 tfmt = pkk_get_fmt(dprefix + "_list_item")
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
331 tlist = [tfmt.format(text=i) for i in dlist]
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
332 else:
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
333 tlist = dlist
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
334
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
335 return pkk_get_fmt(dprefix + "_list").format(
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
336 alist=pkk_get_fmt(dprefix + "_list_sep").join(tlist))
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
337 else:
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
338 return pkk_get_fmt(dprefix + "_list_empty")
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
339
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
340
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
341 ## Output a main "Headword" or "Sense" node
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
342 def pkk_get_sense(indent, dnode):
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
343 # Definition for this sense
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
344 ostr = pkk_get_subs(indent, dnode, "./Definition", "definition_fmt")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
345
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
346 # Examples for this sense
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
347 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
348 geolist = []
24
8c8e8e4504bb Remove verbosity option as it is not really used.
Matti Hamalainen <ccr@tnsp.org>
parents: 23
diff changeset
349 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
350 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
351 text=pkk_node_to_text(qnode),
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
352 tclass=qnode.attrib["class"]))
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
353
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
354 ostr += pkk_get_fmt("example_fmt").format(
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
355 text=pkk_node_to_text(wnode.find("./Example")),
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
356 geostr=pkk_get_list_str(geolist, "example_geo", False),
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
357 indent=pkk_geti(indent + 1))
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
358
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
359 return ostr
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
360
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
361
17
6fa24c711f86 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
362 ## Output one "DictionaryEntry" node
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
363 def pkk_output_node(indent, dnode):
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
364
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
365 for wnode in dnode.findall("./HeadwordCtn"):
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
366 # Get head word
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
367 headword = pkk_node_to_text(wnode.find("./Headword"))
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
368
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
369 # Collect search forms
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
370 srchlist = []
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
371 for qnode in wnode.findall("./SearchForm"):
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
372 srchlist.append(pkk_node_to_text(qnode))
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
373
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
374 # Remove dupe if headword is also in srchlist
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
375 if headword in srchlist:
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
376 srchlist.remove(headword)
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
377
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
378 # Remove other duplicates and sort
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
379 srchlist = list(set(srchlist))
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
380 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
381
44
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
382 # Get hyphenation note, if any
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
383 hnode = wnode.find("./Hyphenation")
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
384 if hnode != None:
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
385 hyphenation = pkk_get_fmt("hyphenation").format(
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
386 text=pkk_node_to_text(hnode),
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
387 indent=pkk_geti(indent + 1))
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
388 else:
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
389 hyphenation = pkk_get_fmt("no_hyphenation").format(
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
390 indent=pkk_geti(indent + 1))
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
391
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
392 # Create list with grammatical attributes (noun, verb, etc.)
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
393 attrlist = []
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
394 for pnode in wnode.findall("./PartOfSpeechCtn/PartOfSpeech"):
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
395 attrlist.append(pnode.attrib["freeValue"])
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
396
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
397 for pnode in wnode.findall("./GrammaticalNote"):
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
398 attrlist.append(pkk_node_to_text(pnode))
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
399
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
400 # Remove duplicates and sort the list
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
401 attrlist = list(set(attrlist))
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
402 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
403
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
404 # Get main "sense"
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
405 msense = pkk_get_sense(indent + 1, wnode)
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
406
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
407 # Print any other "senses"
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
408 index = 1
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
409 osenses = ""
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
410 for znode in dnode.findall("./SenseGrp"):
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
411 osenses += pkk_get_fmt("sense_index").format(
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
412 index=index,
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
413 indent=pkk_geti(indent + 1))
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
414 osenses += pkk_get_sense(indent + 2, znode)
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
415 index += 1
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
416
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
417 # Print the headword and attributes if any
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
418 pkk_print(pkk_get_fmt("word_fmt").format(
43
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
419 word=headword,
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
420 attr=pkk_get_list_str(attrlist, "word_attr", True),
8ed576574712 More improvements to output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 42
diff changeset
421 search=pkk_get_list_str(srchlist, "search", True),
44
d7b4b2fb0214 Add support for hyphenation data.
Matti Hamalainen <ccr@tnsp.org>
parents: 43
diff changeset
422 hyphenation=hyphenation,
48
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
423 main_sense=msense,
6932c3f2bdeb More flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
424 other_senses=osenses,
40
bc8d8ef4a248 More work on output flexibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 39
diff changeset
425 indent=pkk_geti(indent)))
18
ff959de0f6c8 Add grammatical attributes.
Matti Hamalainen <ccr@tnsp.org>
parents: 17
diff changeset
426
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
427
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
428 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
429 ### Main program starts
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
430 ###
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
431 signal.signal(signal.SIGINT, pkk_signal_handler)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
432
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
433 optparser = argparse.ArgumentParser(
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
434 description="lxmldump - Convert and dump ISO/FDIS 1951 XML file data",
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
435 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
436 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
437 )
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
438
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
439 optparser.add_argument("filenames",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
440 type=str, action="extend", nargs="*",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
441 metavar="filename",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
442 help="XML filename(s)")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
443
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
444 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
445 dest="show_help",
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
446 action="store_true",
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
447 help="show this help message")
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
448
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
449 optparser.add_argument("-m", "--mode",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
450 dest="mode",
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
451 action=pkk_set_mode,
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
452 default=PKK_MODE_NORMAL,
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
453 help="set output mode (see below)")
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
454
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
455 optparser.add_argument("-s", "--set",
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
456 action=pkk_set_value,
38
0e586b4ab62c Cosmetic adjustments to help.
Matti Hamalainen <ccr@tnsp.org>
parents: 37
diff changeset
457 metavar="ID=STR",
0e586b4ab62c Cosmetic adjustments to help.
Matti Hamalainen <ccr@tnsp.org>
parents: 37
diff changeset
458 help='set format string (see below)')
32
cfecd039506e Make word attribute separator string configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
459
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
460 optparser.add_argument("-n", "--normalize",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
461 dest="normalize",
29
f91ef7d7615b Use store_true feature of argparse.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
462 action="store_true",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
463 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
464
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
465 optparser.add_argument("-a", "--annotate",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
466 dest="annotate",
29
f91ef7d7615b Use store_true feature of argparse.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
467 action="store_true",
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
468 help="annotate strings")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
469
22
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
470 optparser.add_argument("-i", "--indent",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
471 dest="indent",
76856fc4e5fa Clean up argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
472 type=int, choices=range(0, 32), default=4,
38
0e586b4ab62c Cosmetic adjustments to help.
Matti Hamalainen <ccr@tnsp.org>
parents: 37
diff changeset
473 metavar="N",
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
474 help='set indentation level (default: %(default)s)')
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
475
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
476 optparser.add_argument("-p", "--debug",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
477 dest="debug",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
478 action="store_true",
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
479 help=argparse.SUPPRESS)
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
480
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
481
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
482 ### Parse arguments
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
483 pkk_cfg = optparser.parse_args()
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
484
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
485
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
486 ### Show help if needed
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
487 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
488 optparser.print_help()
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
489 print(u"\nAvailable output modes:")
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
490 print(" " + ", ".join(pkk_modes_list.values()))
31
4cbefe4c6f53 Improve help, list the default Ptr format strings for each mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 30
diff changeset
491
41
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
492 if pkk_cfg.mode not in [PKK_MODE_NORMAL, PKK_MODE_ANKI]:
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
493 pkk_cfg.mode = PKK_MODE_NORMAL
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
494
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
495 print(u"\nAvailable format strings and values (mode '{}'):".format(
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
496 pkk_modes_list[pkk_cfg.mode]))
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
497
39
f53ea742b57f Refactor output mode handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 38
diff changeset
498 for mid in pkk_mode_defaults:
41
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
499 stmp = pkk_get_value(mid).replace("\\", "\\\\").replace("\n", "\\n")
42
508de0f6836b Adjust help output.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
500 print(u" {:22s} : '{}'".format(mid, stmp))
41
98c85c0b5159 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
501
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
502 sys.exit(0)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
503
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
504
6
34a89d61dbe7 Merge and cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 5 3
diff changeset
505 ### 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
506 for filename in pkk_cfg.filenames:
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
507 # Parse XML file into element tree
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
508 try:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
509 uxml = xmlET.parse(filename)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
510 except Exception as e:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
511 pkk_fatal(u"SVG/XML parsing failed: {0}".format(str(e)))
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
512
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
513 # Dump output
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
514 try:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
515 xroot = uxml.getroot()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
516 for dnode in xroot.findall("./DictionaryEntry"):
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
517
20
f274504eafd0 Use Python argparse module instead of custom self-rolled argument parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
518 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
519 continue
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
520
35
5aafa87dbec2 Some Anki-related stuff, not finalized and thus hidden.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
521 if pkk_cfg.mode in [PKK_MODE_NORMAL, PKK_MODE_ANKI]:
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
522 try:
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
523 pkk_output_node(0, dnode)
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
524 except Exception as e:
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
525 print("")
19
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
526 pkk_dump_recursive(0, dnode)
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
527 print(str(e))
7c6eb57798bd Ja niin.
Matti Hamalainen <ccr@tnsp.org>
parents: 18
diff changeset
528 sys.exit(0)
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
529 elif pkk_cfg.mode == PKK_MODE_DUMP:
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
530 pkk_dump_recursive(0, dnode)
36
4c8aafff8c5f Refactor output handling to be (mostly) configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 35
diff changeset
531 print("")
21
7ef08e05a5bf Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 20
diff changeset
532 elif pkk_cfg.mode == PKK_MODE_XML:
47
2e8282f1a837 Fix XML node output.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
533 pkk_print(xmlET.tostring(dnode, encoding="utf8").decode("utf8") + "\n\n")
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
534 else:
10
013f0cd9e5b3 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
535 pkk_fatal("Invalid operation mode?")
7
4b4299b62f7f Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 6
diff changeset
536
0
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
537 except (BrokenPipeError, IOError) as e:
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
538 sys.stderr.close()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
539 sys.exit(1)
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
540
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
541 pkk_cleanup()
bddf1c283e51 Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
542 sys.exit(0)