py/gadict_c5.py
author Oleksandr Gavenko <gavenkoa@gmail.com>
Mon, 28 Mar 2016 00:46:21 +0300
changeset 406 f0ac87e10d9a
parent 405 6208d07b30f0
child 408 52cd8e5f465f
permissions -rw-r--r--
Fix warnings from pylint/pyflakes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
     1
# -*- coding: utf-8 -*-
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
     2
"""dictd C5 format writer"""
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
import io
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
import sys
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
     7
import gadict
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    10
FINAME = None
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    11
FONAME = None
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    12
if len(sys.argv) >= 2:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    13
    FINAME = sys.argv[1]
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    14
if len(sys.argv) >= 3:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    15
    FONAME = sys.argv[2]
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    17
FIN = io.open(FINAME, mode='r', buffering=1, encoding="utf-8")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    18
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    19
PARSER = gadict.Parser()
399
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    20
try:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    21
    DOM = PARSER.parse(FIN)
399
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    22
except gadict.ParseException as ex:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    23
    sys.stdout.write("{:s}{:s}\n".format(FINAME, repr(ex)))
399
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    24
    if __debug__:
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    25
        import traceback
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    26
        traceback.print_exc()
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    27
    exit(1)
a6a7036f3c6f File name is not available in parser. Move error printing to writer.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 394
diff changeset
    28
finally:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    29
    FIN.close()
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    31
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    32
PRELUDE = DOM[0]
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    33
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    34
with open(FONAME+".name", "w") as f:        # for dictfmt -s
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    35
    if PRELUDE.name is not None:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    36
        f.write(PRELUDE.name)
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    37
    f.write("\n")
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    38
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    39
with open(FONAME+".url", "w") as f:         # for dictfmt -u
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    40
    if len(PRELUDE.urls) > 0:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    41
        f.write(PRELUDE.urls[0])
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    42
    f.write("\n")
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    43
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    44
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    45
if FONAME is None:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    46
    FOUT = sys.stdout
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    47
else:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    48
    FOUT = open(FONAME, "w")
404
cdfa6dfa9072 Integrate dictionary metainfo line name and home page url into dictd build.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 403
diff changeset
    49
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    50
if PRELUDE.name is not None:
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    51
    FOUT.write("Dictionary name: ")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    52
    FOUT.write(PRELUDE.name)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    53
    FOUT.write("\n\n")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    54
FOUT.write("Project URLs: ")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    55
FOUT.write(" , ".join(PRELUDE.urls))
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    56
FOUT.write("\n\n")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    57
FOUT.write("Project licenses: ")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    58
FOUT.write(", ".join(PRELUDE.licences))
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    59
FOUT.write("\n\n")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    60
FOUT.write(PRELUDE.about)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    61
FOUT.write("\n")
402
b47698d5ccab Parse dictionary metainfo.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 399
diff changeset
    62
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    63
for idx in range(1, len(DOM)):
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    64
    article = DOM[idx]
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    65
    FOUT.write("_____\n\n")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
    title = "; ".join(article[0].keys())
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    67
    FOUT.write(title)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    68
    FOUT.write("\n\n")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    69
    for (word, (pron, attrs)) in article[0].items():
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
        if word == "approach":
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    71
            FOUT.write(str(article[0]))
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    72
        FOUT.write("  ")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    73
        FOUT.write(word)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    74
        FOUT.write("\n")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
        if pron is not None:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    76
            FOUT.write("    [")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    77
            FOUT.write(pron)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    78
            FOUT.write("]\n")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
        if len(attrs) > 0:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    80
            FOUT.write("    ")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
            l = list(attrs)
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
            l.sort()
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    83
            FOUT.write(", ".join(l))
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    84
            FOUT.write("\n")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    85
    FOUT.write("\n")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
    for (pos, trs, exs) in article[1]:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    87
        FOUT.write("  ")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
        if pos is not None:
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    89
            FOUT.write("⟨")
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    90
            FOUT.write(pos)
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    91
            FOUT.write("⟩ ")
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
        for (lang, tr) in trs:
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
            if lang == "ru":
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    94
                FOUT.write(tr)
385
18284ce77c7a gadict format parser.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
                break
405
6208d07b30f0 Fix warnings from pyflakes.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 404
diff changeset
    96
        FOUT.write("\n")