changeset 48:6932c3f2bdeb

More flexibility.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 26 May 2021 22:41:29 +0300
parents 2e8282f1a837
children d3d4b547f86c
files lxmldump.py
diffstat 1 files changed, 28 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/lxmldump.py	Wed May 26 13:55:20 2021 +0300
+++ b/lxmldump.py	Wed May 26 22:41:29 2021 +0300
@@ -48,8 +48,8 @@
     },
 
     "word_fmt": {
-        PKK_MODE_NORMAL: "\"{word}\"{search}{attr}\n{hyphenation}",
-        PKK_MODE_ANKI: "{word}{search}{attr}{hyphenation}\n",
+        PKK_MODE_NORMAL: "\"{word}\"{search}{attr}\n{hyphenation}{main_sense}{other_senses}\n",
+        PKK_MODE_ANKI: "{word}{search}{attr}{hyphenation}{main_sense}{other_senses}\n",
     },
     "word_attr_list": {
         PKK_MODE_NORMAL: " ({alist}) ",
@@ -113,10 +113,6 @@
     "example_geo_list_sep": {
         PKK_MODE_NORMAL: ", ",
     },
-
-    "word_end": {
-        PKK_MODE_NORMAL: "\n",
-    },
 }
 
 
@@ -315,12 +311,14 @@
 
 
 ## Output item(s) under given node with given format string
-def pkk_output_subs(indent, dnode, dsub, dfmtname):
+def pkk_get_subs(indent, dnode, dsub, dfmtname):
     dfmt = pkk_get_fmt(dfmtname)
+    ostr = ""
     for qnode in dnode.findall(dsub):
-        pkk_print(dfmt.format(
+        ostr += dfmt.format(
             text=pkk_node_to_text(qnode),
-            indent=pkk_geti(indent)))
+            indent=pkk_geti(indent))
+    return ostr
 
 
 def pkk_get_list_str(dlist, dprefix, dfilter):
@@ -338,9 +336,9 @@
 
 
 ## Output a main "Headword" or "Sense" node
-def pkk_output_sense(indent, dnode):
+def pkk_get_sense(indent, dnode):
     # Definition for this sense
-    pkk_output_subs(indent, dnode, "./Definition", "definition_fmt")
+    ostr = pkk_get_subs(indent, dnode, "./Definition", "definition_fmt")
 
     # Examples for this sense
     for wnode in dnode.findall("./ExampleBlock/ExampleCtn"):
@@ -350,10 +348,12 @@
                 text=pkk_node_to_text(qnode),
                 tclass=qnode.attrib["class"]))
 
-        pkk_print(pkk_get_fmt("example_fmt").format(
+        ostr += pkk_get_fmt("example_fmt").format(
             text=pkk_node_to_text(wnode.find("./Example")),
             geostr=pkk_get_list_str(geolist, "example_geo", False),
-            indent=pkk_geti(indent + 1)))
+            indent=pkk_geti(indent + 1))
+
+    return ostr
 
 
 ## Output one "DictionaryEntry" node
@@ -398,28 +398,29 @@
         attrlist = list(set(attrlist))
         attrlist.sort(reverse=False, key=lambda attr: (attr, len(attr)))
 
+        # Get main "sense"
+        msense = pkk_get_sense(indent + 1, wnode)
+
+        # Print any other "senses"
+        index = 1
+        osenses = ""
+        for znode in dnode.findall("./SenseGrp"):
+            osenses += pkk_get_fmt("sense_index").format(
+                index=index,
+                indent=pkk_geti(indent + 1))
+            osenses += pkk_get_sense(indent + 2, znode)
+            index += 1
+
         # Print the headword and attributes if any
         pkk_print(pkk_get_fmt("word_fmt").format(
             word=headword,
             attr=pkk_get_list_str(attrlist, "word_attr", True),
             search=pkk_get_list_str(srchlist, "search", True),
             hyphenation=hyphenation,
+            main_sense=msense,
+            other_senses=osenses,
             indent=pkk_geti(indent)))
 
-        # Print main "sense"
-        pkk_output_sense(indent + 1, wnode)
-
-        # Print any other "senses"
-        index = 1
-        for wnode in dnode.findall("./SenseGrp"):
-            pkk_print(pkk_get_fmt("sense_index").format(
-                index=index,
-                indent=pkk_geti(indent + 1)))
-            pkk_output_sense(indent + 2, wnode)
-            index += 1
-
-        pkk_print(pkk_get_fmt("word_end"))
-
 
 ###
 ### Main program starts