]> pere.pagekite.me Git - text-mekanikerord.git/blob - make-glossary
Bytt til dblatex for å bygge PDF.
[text-mekanikerord.git] / make-glossary
1 #!/usr/bin/python3
2
3 from lxml import etree
4 from lxml.etree import tostring
5
6 filemakerxml = 'meksme-utf8.xml'
7
8 tree = etree.parse(filemakerxml)
9 root = tree.getroot()
10
11 #print(root)
12 #print(tostring(tree))
13
14 cols = (
15 'topic', 'sme', 'desc-sme', 'desc-nb', 'nb', 'sv', 'fi', 'en', 'is',
16 )
17
18 resultset = root.find("{http://www.filemaker.com/fmpxmlresult}RESULTSET")
19
20 words = []
21 for row in resultset.getchildren():
22 d = {}
23 index = 0
24 for col in row.findall("{http://www.filemaker.com/fmpxmlresult}COL"):
25 t = col.getchildren()[0].text
26 if t:
27 import re
28 t = re.sub(r'\s+', ' ', t)
29 d[cols[index]] = t
30 index += 1
31 #print(d)
32 words.append(d)
33 def langsort(lang, e):
34 if lang in e:
35 return e[lang]
36 else:
37 return e['sme']
38
39 def make_glossary_docbook(lang):
40 import lxml.builder
41 E = lxml.builder.ElementMaker(
42 nsmap={
43 # 'xi': "http://www.w3.org/2001/XInclude",
44 }
45 )
46
47 langcodes = ('en', 'nb', 'sme', 'sv', 'fi',)
48
49 def indexit(entry, wlist, lang=None):
50 for w in wlist.split(","):
51 if "" != w:
52 if lang:
53 w += "[%s]" % lang
54 entry.append(E.indexterm(E.primary(w)))
55 glossary = E.glosslist()
56 for e in sorted(words, key=lambda x: langsort(lang, x)):
57 if 'topic' not in e:
58 e['topic'] = 'n/a'
59 if lang in e and 'desc-%s' % lang in e:
60 entry = E.glossentry(
61 E.glossterm('%s [%s]' % (e[lang], e['topic'])),
62 )
63 indexit(entry, e[lang])
64 lstr = ""
65 for l in langcodes:
66 if l != lang and l in e:
67 lstr += "%s (%s) " % (e[l], l)
68 # Add foreign words to index, split on comma
69 indexit(entry, e[l], l)
70 entry.append(E.glossdef(E.para(e['desc-%s' % lang])))
71 if "" != lstr:
72 entry.append(E.glossdef(E.para(lstr)))
73 glossary.append(entry)
74
75 content = lxml.etree.tostring(glossary,
76 pretty_print=True,
77 xml_declaration=True,
78 encoding='UTF-8')
79 # print(content)
80 with open('glossary.xml', 'wb') as f:
81 f.write(content)
82
83 def make_glossary(lang):
84 make_glossary_docbook(lang)
85
86 if True:
87 print("Norsk/bokmål")
88 print()
89 make_glossary(lang='nb')
90 else:
91 print("Nordsamisk")
92 print()
93 make_glossary(lang='sme')
94
95 #print("Engelsk")
96 #print("=====")
97 #print()
98 #make_glossary(lang='en')