py/gadict_html.py
changeset 1319 679972640f47
parent 1223 d592572cc546
child 1351 ae963ee79b49
equal deleted inserted replaced
1318:24f8a621bfdd 1319:679972640f47
     3 
     3 
     4 import io
     4 import io
     5 import sys
     5 import sys
     6 import codecs
     6 import codecs
     7 import re
     7 import re
     8 import html
     8 from xml.sax.saxutils import escape
     9 
     9 
    10 import gadict
    10 import gadict
    11 import gadict_freq
    11 import gadict_freq
    12 
    12 
    13 
    13 
    65 
    65 
    66 PARSER = gadict.Parser()
    66 PARSER = gadict.Parser()
    67 try:
    67 try:
    68     DOM = PARSER.parse(FIN)
    68     DOM = PARSER.parse(FIN)
    69 except gadict.ParseException as ex:
    69 except gadict.ParseException as ex:
    70     sys.stdout.write("{:s}{:s}\n".format(FINAME, repr(ex)))
    70     sys.stdout.write(u"{:s}{:s}\n".format(FINAME, repr(ex)))
    71     if __debug__:
    71     if __debug__:
    72         import traceback
    72         import traceback
    73         traceback.print_exc()
    73         traceback.print_exc()
    74     exit(1)
    74     exit(1)
    75 finally:
    75 finally:
   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()