109 HTML_FOOTER = """</body> |
109 HTML_FOOTER = """</body> |
110 </html> |
110 </html> |
111 """ |
111 """ |
112 |
112 |
113 FOUT.write(HTML_HEADER.format(title=PRELUDE.name)) |
113 FOUT.write(HTML_HEADER.format(title=PRELUDE.name)) |
114 FOUT.write("<h1>{} dictionary</h1>\n".format(html.escape(PRELUDE.name))) |
114 FOUT.write(u"<h1>{} dictionary</h1>\n".format(escape(PRELUDE.name))) |
115 # FOUT.write("<a href='{}'>Home page</a>") |
115 # FOUT.write("<a href='{}'>Home page</a>") |
116 # FOUT.write(" , ".join(PRELUDE.urls)) |
116 # FOUT.write(" , ".join(PRELUDE.urls)) |
117 FOUT.write("<p>License: ") |
117 FOUT.write("<p>License: ") |
118 FOUT.write(html.escape(", ".join(PRELUDE.licences))) |
118 FOUT.write(escape(", ".join(PRELUDE.licences))) |
119 # FOUT.write("</p>\n<p>") |
119 # FOUT.write("</p>\n<p>") |
120 # FOUT.write(html.escape(PRELUDE.about)) |
120 # FOUT.write(escape(PRELUDE.about)) |
121 FOUT.write("</p>\n") |
121 FOUT.write("</p>\n") |
122 |
122 |
123 def link(lst): |
123 def link(lst): |
124 buf = [] |
124 buf = [] |
125 for el in lst: |
125 for el in lst: |
126 el = html.escape(el) |
126 el = escape(el) |
127 lnk = "<a href='#{}'>{}</a>".format(el, el) |
127 lnk = u"<a href='#{}'>{}</a>".format(el, el) |
128 buf.append(lnk) |
128 buf.append(lnk) |
129 return "; ".join(buf) |
129 return "; ".join(buf) |
130 |
130 |
131 for (headwords, translations) in DOM[1:]: |
131 for (headwords, translations) in DOM[1:]: |
132 identity = headwords[0].headword |
132 identity = headwords[0].headword |
133 FOUT.write("<div id='{}' class='article'>\n".format(html.escape(identity))) |
133 FOUT.write(u"<div id='{}' class='article'>\n".format(escape(identity))) |
134 for hw in headwords: |
134 for hw in headwords: |
135 FOUT.write("<div>") |
135 FOUT.write("<div>") |
136 FOUT.write("<span class='head'>{}</span>".format(html.escape(hw.headword))) |
136 FOUT.write(u"<span class='head'>{}</span>".format(escape(hw.headword))) |
137 if hw.pron is not None: |
137 if hw.pron is not None: |
138 FOUT.write(" <span class='pron'>[") |
138 FOUT.write(" <span class='pron'>[") |
139 FOUT.write(html.escape(hw.pron)) |
139 FOUT.write(escape(hw.pron)) |
140 FOUT.write("]</span>") |
140 FOUT.write("]</span>") |
141 if len(hw.attrs) > 0: |
141 if len(hw.attrs) > 0: |
142 FOUT.write(" <span class='attr'>") |
142 FOUT.write(" <span class='attr'>") |
143 l = ["«"+x+"»" for x in hw.attrs] |
143 l = [u"«" + x + u"»" for x in hw.attrs] |
144 l.sort() |
144 l.sort() |
145 FOUT.write(", ".join(l)) |
145 FOUT.write(", ".join(l)) |
146 FOUT.write("</span>") |
146 FOUT.write("</span>") |
147 if hw.homo is not None and len(hw.homo) > 0: |
147 if hw.homo is not None and len(hw.homo) > 0: |
148 FOUT.write(" homo: <span class='homo'>") |
148 FOUT.write(" homo: <span class='homo'>") |
152 for sense in translations: |
152 for sense in translations: |
153 if not sense: |
153 if not sense: |
154 raise Exception("""Empty sense for article: """ + headwords.__iter__().__next__()) |
154 raise Exception("""Empty sense for article: """ + headwords.__iter__().__next__()) |
155 FOUT.write("<div class='sense'>") |
155 FOUT.write("<div class='sense'>") |
156 if sense.pos: |
156 if sense.pos: |
157 FOUT.write("<span class='pos'>«") |
157 FOUT.write(u"<span class='pos'>«") |
158 FOUT.write(html.escape(sense.pos)) |
158 FOUT.write(escape(sense.pos)) |
159 FOUT.write("»</span> ") |
159 FOUT.write(u"»</span> ") |
160 need_sep = False |
160 need_sep = False |
161 if sense.topic_list and len(sense.topic_list) > 0: |
161 if sense.topic_list and len(sense.topic_list) > 0: |
162 FOUT.write("<span class='topic'>") |
162 FOUT.write("<span class='topic'>") |
163 FOUT.write(html.escape(", ".join(sense.topic_list))) |
163 FOUT.write(escape(", ".join(sense.topic_list))) |
164 FOUT.write("</span>") |
164 FOUT.write("</span>") |
165 need_sep = True |
165 need_sep = True |
166 if sense.ant_list and len(sense.ant_list) > 0: |
166 if sense.ant_list and len(sense.ant_list) > 0: |
167 FOUT.write(" ant: <span class='ant'>") |
167 FOUT.write(" ant: <span class='ant'>") |
168 FOUT.write(link(sense.ant_list)) |
168 FOUT.write(link(sense.ant_list)) |
190 for (lang, tr) in sense.tr_list or []: |
190 for (lang, tr) in sense.tr_list or []: |
191 if LANGS and lang not in LANGS: |
191 if LANGS and lang not in LANGS: |
192 continue |
192 continue |
193 FOUT.write("<div>") |
193 FOUT.write("<div>") |
194 if not LANGS or len(LANGS) > 1: |
194 if not LANGS or len(LANGS) > 1: |
195 FOUT.write("<span class='lang tr'>{}</span> ".format(html.escape(lang))) |
195 FOUT.write(u"<span class='lang tr'>{}</span> ".format(escape(lang))) |
196 FOUT.write("<span class='tr'>{}</span>".format(html.escape(tr))) |
196 FOUT.write(u"<span class='tr'>{}</span>".format(escape(tr))) |
197 FOUT.write("</div>") |
197 FOUT.write("</div>") |
198 for (lang, tr) in sense.glos_list or []: |
198 for (lang, tr) in sense.glos_list or []: |
199 if LANGS and lang not in LANGS: |
199 if LANGS and lang not in LANGS: |
200 continue |
200 continue |
201 FOUT.write("<div>") |
201 FOUT.write("<div>") |
202 if not LANGS or len(LANGS) > 1: |
202 if not LANGS or len(LANGS) > 1: |
203 FOUT.write("<span class='lang glos'>{}</span> ".format(html.escape(lang))) |
203 FOUT.write(u"<span class='lang glos'>{}</span> ".format(escape(lang))) |
204 FOUT.write("<span class='glos'>{}</span>".format(html.escape(tr))) |
204 FOUT.write(u"<span class='glos'>{}</span>".format(escape(tr))) |
205 FOUT.write("</div>") |
205 FOUT.write("</div>") |
206 for (lang, tr) in sense.ex_list or []: |
206 for (lang, tr) in sense.ex_list or []: |
207 if LANGS and lang not in LANGS: |
207 if LANGS and lang not in LANGS: |
208 continue |
208 continue |
209 FOUT.write("<div>") |
209 FOUT.write("<div>") |
210 if not LANGS or len(LANGS) > 1: |
210 if not LANGS or len(LANGS) > 1: |
211 FOUT.write("<span class='lang ex'>{}</span> ".format(html.escape(lang))) |
211 FOUT.write(u"<span class='lang ex'>{}</span> ".format(escape(lang))) |
212 FOUT.write("<span class='ex'>{}</span>".format(html.escape(tr))) |
212 FOUT.write(u"<span class='ex'>{}</span>".format(escape(tr))) |
213 FOUT.write("</div>") |
213 FOUT.write("</div>") |
214 FOUT.write("</div>") |
214 FOUT.write("</div>") |
215 freqtags = [] |
215 freqtags = [] |
216 for (freqtag, freqset) in FREQ_SOURCES: |
216 for (freqtag, freqset) in FREQ_SOURCES: |
217 if identity in freqset: |
217 if identity in freqset: |
218 freqtags.append(freqtag) |
218 freqtags.append(freqtag) |
219 if len(freqtags) > 0: |
219 if len(freqtags) > 0: |
220 FOUT.write("<p class='freq'>") |
220 FOUT.write("<p class='freq'>") |
221 FOUT.write(html.escape(",".join(freqtags))) |
221 FOUT.write(escape(",".join(freqtags))) |
222 FOUT.write("</p>") |
222 FOUT.write("</p>") |
223 FOUT.write("</div>") |
223 FOUT.write("</div>") |
224 |
224 |
225 FOUT.write(HTML_FOOTER) |
225 FOUT.write(HTML_FOOTER) |
226 FOUT.close() |
226 FOUT.close() |