py/gadict_c5.py
changeset 405 6208d07b30f0
parent 404 cdfa6dfa9072
child 406 f0ac87e10d9a
equal deleted inserted replaced
404:cdfa6dfa9072 405:6208d07b30f0
       
     1 # -*- coding: utf-8 -*-
       
     2 """dictd C5 format writer"""
     1 
     3 
     2 import gadict
       
     3 import io
     4 import io
     4 import sys
     5 import sys
     5 
     6 
       
     7 import gadict
     6 
     8 
     7 finame = None
     9 
     8 foname = None
    10 FINAME = None
       
    11 FONAME = None
     9 if len(sys.argv) >= 2:
    12 if len(sys.argv) >= 2:
    10     finame = sys.argv[1]
    13     FINAME = sys.argv[1]
    11 if len(sys.argv) >= 3:
    14 if len(sys.argv) >= 3:
    12     foname = sys.argv[2]
    15     FONAME = sys.argv[2]
    13 
    16 
    14 fin = io.open(finame, mode='r', buffering=1, encoding="utf-8")
    17 FIN = io.open(FINAME, mode='r', buffering=1, encoding="utf-8")
    15 
    18 
    16 parser = gadict.Parser()
    19 PARSER = gadict.Parser()
    17 try:
    20 try:
    18     dom = parser.parse(fin)
    21     DOM = PARSER.parse(FIN)
    19 except gadict.ParseException as ex:
    22 except gadict.ParseException as ex:
    20     sys.stdout.write("{:s}{:s}\n".format(finame, repr(ex)))
    23     sys.stdout.write("{:s}{:s}\n".format(FINAME, repr(ex)))
    21     if __debug__:
    24     if __debug__:
    22         import traceback
    25         import traceback
    23         traceback.print_exc()
    26         traceback.print_exc()
    24     exit(1)
    27     exit(1)
    25 finally:
    28 finally:
    26     fin.close()
    29     FIN.close()
    27 
    30 
    28 
    31 
    29 prelude = dom[0]
    32 PRELUDE = DOM[0]
    30 
    33 
    31 with open(foname+".name", "w") as f:        # for dictfmt -s
    34 with open(FONAME+".name", "w") as f:        # for dictfmt -s
    32     if prelude.name is not None:
    35     if PRELUDE.name is not None:
    33         f.write(prelude.name)
    36         f.write(PRELUDE.name)
    34     f.write("\n")
    37     f.write("\n")
    35 
    38 
    36 with open(foname+".url", "w") as f:         # for dictfmt -u
    39 with open(FONAME+".url", "w") as f:         # for dictfmt -u
    37     if len(prelude.urls) > 0:
    40     if len(PRELUDE.urls) > 0:
    38         f.write(prelude.urls[0])
    41         f.write(PRELUDE.urls[0])
    39     f.write("\n")
    42     f.write("\n")
    40 
    43 
    41 
    44 
    42 if foname is None:
    45 if FONAME is None:
    43     fout = sys.stdout
    46     FOUT = sys.stdout
    44 else:
    47 else:
    45     fout = open(foname, "w")
    48     FOUT = open(FONAME, "w")
    46 
    49 
    47 if prelude.name is not None:
    50 if PRELUDE.name is not None:
    48     fout.write("Dictionary name: ")
    51     FOUT.write("Dictionary name: ")
    49     fout.write(prelude.name)
    52     FOUT.write(PRELUDE.name)
    50     fout.write("\n\n")
    53     FOUT.write("\n\n")
    51 fout.write("Project URLs: ")
    54 FOUT.write("Project URLs: ")
    52 fout.write(" , ".join(prelude.urls))
    55 FOUT.write(" , ".join(PRELUDE.urls))
    53 fout.write("\n\n")
    56 FOUT.write("\n\n")
    54 fout.write("Project licenses: ")
    57 FOUT.write("Project licenses: ")
    55 fout.write(", ".join(prelude.licences))
    58 FOUT.write(", ".join(PRELUDE.licences))
    56 fout.write("\n\n")
    59 FOUT.write("\n\n")
    57 fout.write(prelude.about)
    60 FOUT.write(PRELUDE.about)
    58 fout.write("\n")
    61 FOUT.write("\n")
    59 
    62 
    60 for idx in range(1, len(dom)):
    63 for idx in range(1, len(DOM)):
    61     article = dom[idx]
    64     article = DOM[idx]
    62     fout.write("_____\n\n")
    65     FOUT.write("_____\n\n")
    63     title = "; ".join(article[0].keys())
    66     title = "; ".join(article[0].keys())
    64     fout.write(title)
    67     FOUT.write(title)
    65     fout.write("\n\n")
    68     FOUT.write("\n\n")
    66     for (word, (pron, attrs)) in article[0].items():
    69     for (word, (pron, attrs)) in article[0].items():
    67         if word == "approach":
    70         if word == "approach":
    68             fout.write(str(article[0]))
    71             FOUT.write(str(article[0]))
    69         fout.write("  ")
    72         FOUT.write("  ")
    70         fout.write(word)
    73         FOUT.write(word)
    71         fout.write("\n")
    74         FOUT.write("\n")
    72         if pron is not None:
    75         if pron is not None:
    73             fout.write("    [")
    76             FOUT.write("    [")
    74             fout.write(pron)
    77             FOUT.write(pron)
    75             fout.write("]\n")
    78             FOUT.write("]\n")
    76         if len(attrs) > 0:
    79         if len(attrs) > 0:
    77             fout.write("    ")
    80             FOUT.write("    ")
    78             l = list(attrs)
    81             l = list(attrs)
    79             l.sort()
    82             l.sort()
    80             fout.write(", ".join(l))
    83             FOUT.write(", ".join(l))
    81             fout.write("\n")
    84             FOUT.write("\n")
    82     fout.write("\n")
    85     FOUT.write("\n")
    83     for (pos, trs, exs) in article[1]:
    86     for (pos, trs, exs) in article[1]:
    84         fout.write("  ")
    87         FOUT.write("  ")
    85         if pos is not None:
    88         if pos is not None:
    86             fout.write("⟨")
    89             FOUT.write("⟨")
    87             fout.write(pos)
    90             FOUT.write(pos)
    88             fout.write("⟩ ")
    91             FOUT.write("⟩ ")
    89         for (lang, tr) in trs:
    92         for (lang, tr) in trs:
    90             if lang == "ru":
    93             if lang == "ru":
    91                 fout.write(tr)
    94                 FOUT.write(tr)
    92                 break
    95                 break
    93         fout.write("\n")
    96         FOUT.write("\n")
    94 
    97