# HG changeset patch # User Matti Hamalainen # Date 1622058089 -10800 # Node ID 6932c3f2bdebf2bac658637da08648296d0fcea4 # Parent 2e8282f1a83728d99f60470681204493621353f3 More flexibility. diff -r 2e8282f1a837 -r 6932c3f2bdeb lxmldump.py --- 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