py/gadict_srs_anki.py
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 08 Jul 2017 01:37:15 +0300
changeset 877 340482715bb0
parent 872 b201a02dc707
child 931 9a5f97027ee7
permissions -rw-r--r--
LEFT/RIGHT FLOOR symbols aren't present in Windows default fonts, replaced with LEFT/RIGHT BLACK LENTICULAR BRACKET.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
     2
"""Anki card writer"""
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
import os
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
import io
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
import sys
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
import tempfile
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
import shutil
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
import signal
872
b201a02dc707 'regex' module isn't easy to install on Cygwin. Stick to standard 're' module.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 750
diff changeset
    10
import re
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
    12
import hashlib
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
    13
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
    14
import anki
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
    15
from anki.exporting import AnkiPackageExporter
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
    16
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
import gadict
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    18
import gadict_freq
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
FINAME = None
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
FONAME = None
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    23
FDELNAME = None
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    24
NAME = None
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
LANGS = None
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    26
FREQ_SOURCES = []
673
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
    27
RICH_MODE = False
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    28
872
b201a02dc707 'regex' module isn't easy to install on Cygwin. Stick to standard 're' module.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 750
diff changeset
    29
ARG_NAME_RE = re.compile("-name=(.+)")
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    30
# -lang:ru,uk
872
b201a02dc707 'regex' module isn't easy to install on Cygwin. Stick to standard 're' module.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 750
diff changeset
    31
ARG_LANG_RE = re.compile("-lang:(.+)")
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    32
# -freq:var:TAG=FILE or -freq:freq:TAG=FILE
872
b201a02dc707 'regex' module isn't easy to install on Cygwin. Stick to standard 're' module.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 750
diff changeset
    33
ARG_FREQ_RE = re.compile("-freq:(freq|var):([^=]+)=(.+)")
b201a02dc707 'regex' module isn't easy to install on Cygwin. Stick to standard 're' module.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 750
diff changeset
    34
ARG_DELFILE_RE = re.compile("-delfile=(.+)")
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    35
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    36
look_for_files = False
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    37
for idx in range(1, len(sys.argv)):
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    38
    arg = sys.argv[idx]
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    39
    if arg == "--":
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    40
        look_for_files = True
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    41
        continue
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    42
    if not look_for_files:
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    43
        m = ARG_NAME_RE.match(arg)
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    44
        if m:
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    45
            NAME = m.group(1)
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    46
            continue
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    47
        m = ARG_LANG_RE.match(arg)
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    48
        if m:
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    49
            LANGS = set(m.group(1).split(","))
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    50
            for lang in LANGS:
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    51
                if len(lang) != 2:
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    52
                    raise Exception("Incorrect language specification: '{:s}'".format(arg))
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    53
            continue
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    54
        m = ARG_FREQ_RE.match(arg)
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    55
        if m:
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    56
            mode = m.group(1)
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    57
            tag = m.group(2)
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    58
            fname = m.group(3)
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    59
            with io.open(fname, mode='r', buffering=1, encoding="utf-8") as stream:
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    60
                if mode == "var":
736
e7f0c03887e1 Fix after rename.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 713
diff changeset
    61
                    parser = gadict_freq.WordformParser(stream)
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    62
                elif mode == "freq":
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    63
                    parser = gadict_freq.FreqlistParser(stream)
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    64
                else:
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    65
                    raise Exception("Unsupported mode: '{:s}'".format(mode))
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    66
                wlist = parser.parse()
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
    67
            FREQ_SOURCES.append((tag, set(wlist)))
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    68
            continue
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    69
        m = ARG_DELFILE_RE.match(arg)
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    70
        if m:
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    71
            FDELNAME = m.group(1)
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    72
            continue
673
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
    73
        if arg == "-rich":
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
    74
            RICH_MODE = True
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
    75
            continue
644
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    76
        if arg.startswith("-"):
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    77
            raise Exception("Unsupported option format: '{:s}'".format(arg))
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    78
    if not FINAME:
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    79
        FINAME = arg
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    80
        continue
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    81
    if not FONAME:
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    82
        FONAME = arg
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    83
        continue
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    84
    raise Exception("Unnecessary argument: '{:s}'".format(arg))
e38cd6112193 New command line format for passing language list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 618
diff changeset
    85
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    86
if not FINAME:
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
    87
    raise Exception("Input file name is not passed...")
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
FIN = io.open(FINAME, mode='r', buffering=1, encoding="utf-8")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    90
PARSER = gadict.Parser()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    91
try:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
    DOM = PARSER.parse(FIN)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
except gadict.ParseException as ex:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
    sys.stdout.write("{:s}{:s}\n".format(FINAME, repr(ex)))
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
    if __debug__:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
        import traceback
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    97
        traceback.print_exc()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    98
    exit(1)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    99
finally:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   100
    FIN.close()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   101
699
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   102
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   103
def cleanup(collection, tmpdir):
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   104
    if collection:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   105
        collection.close()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   106
    if tmpdir:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   107
        shutil.rmtree(tmpdir, ignore_errors=True)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   108
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   109
# signal.signal(signal.SIGINT, lambda signal, frame: cleanup())
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   110
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   111
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   112
if FONAME is None:
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   113
    raise Exception("Output file name is not passed...")
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   114
# Looks like anki libs change working directory to media directory of current deck
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   115
# Therefore absolute path should be stored before creating temporary deck
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   116
FONAME = os.path.abspath(FONAME)
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   117
TMPDIR = tempfile.mkdtemp(dir=os.path.dirname(FONAME))
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
674
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   119
if not NAME:
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   120
    NAME, _ = os.path.splitext(os.path.basename(FINAME))
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   121
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   122
if FDELNAME:
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   123
    FDEL = io.open(FDELNAME, mode='r', buffering=1, encoding="utf-8")
fe57401d8109 Externalize deck name and delete file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 673
diff changeset
   124
else:
608
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   125
    FDEL = None
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   126
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   127
################################################################
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   128
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   129
MODEL_CSS = """
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   130
.card {
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   131
  font-family: arial;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   132
  font-size: 20px;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   133
  text-align: center;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   134
  color: black;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   135
  background-color: white;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   136
}
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   137
.ask {
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   138
  margin-bottom: 1.2em;
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   139
}
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   140
span.headword {
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   141
  font-weight: bolt;
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   142
}
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   143
.pron {
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   144
  color: magenta;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   145
}
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   146
.pos {
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   147
  color: green;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   148
  font-style: italic;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   149
}
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   150
.lang {
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   151
  color: red;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   152
  font-style: italic;
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   153
}
618
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   154
.topic {
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   155
  color: #B04080;
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   156
}
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   157
.ant {
565
ac68f2680ea0 Add syntax to add related words. Add separators between ant/syn/rel in
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 562
diff changeset
   158
  color: #404080;
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   159
}
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   160
.syn {
565
ac68f2680ea0 Add syntax to add related words. Add separators between ant/syn/rel in
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 562
diff changeset
   161
  color: #804040;
ac68f2680ea0 Add syntax to add related words. Add separators between ant/syn/rel in
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 562
diff changeset
   162
}
ac68f2680ea0 Add syntax to add related words. Add separators between ant/syn/rel in
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 562
diff changeset
   163
.rel {
618
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   164
  color: #604080;
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   165
}
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   166
.hyper {
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   167
  color: #600080;
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   168
}
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   169
.hypo {
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   170
  color: #606080;
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   171
}
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   172
.attrs {
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   173
  color: blue;
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   174
}
560
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   175
span.ex {
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   176
  font-style: italic;
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   177
  font-size: .85em;
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   178
}
569
5709d5bd349b Fix: reverse card missed glossary.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
   179
div.glos .lang {
5709d5bd349b Fix: reverse card missed glossary.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
   180
  color: brown;
5709d5bd349b Fix: reverse card missed glossary.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
   181
}
566
0bba61492c37 Add syntax for glossary/explanation.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
   182
span.glos {
569
5709d5bd349b Fix: reverse card missed glossary.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
   183
  font-size: .95em;
566
0bba61492c37 Add syntax for glossary/explanation.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
   184
}
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   185
.freq {
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   186
  color: red;
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   187
  font-weight: bold;
650
b13c09aaa9a3 Fix typo and decrease font size of frequency list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 647
diff changeset
   188
  font-size: small;
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   189
}
608
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   190
.del {
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   191
  color: red;
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   192
  font-weight: bold;
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   193
}
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   194
"""
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   195
699
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   196
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   197
def note_add_tags(note, tags):
699
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   198
    if isinstance(tags, str):
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   199
        note.tags = [tags]
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   200
    elif isinstance(tags, list):
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   201
        note.tags = tags
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   202
    elif tags is None:
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   203
        pass
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   204
    else:
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   205
        raise Exception('Expecting string or list of tags...')
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   206
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   207
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   208
class AnkiDbBuilder:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   209
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   210
    def __init__(self, tmpdir, name):
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   211
        self.tmpdir = tmpdir
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   212
        self.name = name
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   213
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   214
        self.collection = collection = anki.Collection(os.path.join(self.tmpdir, 'collection.anki2'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   215
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   216
        deck_id = collection.decks.id(self.name)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   217
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   218
        # It is essential to keep model['id'] unchanged between upgrades!!
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   219
        model_id = int(hashlib.sha1(self.name).hexdigest(), 16) % (2**63)
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   220
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   221
        ################################################################
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   222
        # Regular card model. SafeBack doesn't include examples to not spoil
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   223
        # word spelling.
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   224
        model = collection.models.new(self.name + "_frontback")
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   225
        model['did'] = deck_id
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   226
        model['css'] = MODEL_CSS
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   227
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   228
        collection.models.addField(model, collection.models.newField('Front'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   229
        collection.models.addField(model, collection.models.newField('Back'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   230
        collection.models.addField(model, collection.models.newField('SafeBack'))
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   231
        collection.models.addField(model, collection.models.newField('Freq'))
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   232
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   233
        tmpl = collection.models.newTemplate('Front -> Back')
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   234
        tmpl['qfmt'] = '<div class="front">{{Front}}</div><div class="freq">{{Freq}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   235
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Back}}</div>'
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   236
        collection.models.addTemplate(model, tmpl)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   237
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   238
        tmpl = collection.models.newTemplate('SafeBack -> Front')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   239
        tmpl['qfmt'] = '<div class="safe-back">{{SafeBack}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   240
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="front">{{Front}}</div><div class="freq">{{Freq}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   241
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   242
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   243
        # Equivalent of ``collection.models.add(model)`` without setting
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   244
        # auto-generated ID.
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   245
        # Increment +1 is for keeping model['id'] unique from previous v0.9 release.
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   246
        model['id'] = model_id + 1
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   247
        collection.models.update(model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   248
        collection.models.save(model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   249
        self.model = model
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   250
        # collection.models.setCurrent(model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   251
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   252
        if not RICH_MODE:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   253
            return
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   254
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   255
        ################################################################
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   256
        # Model for irregular verbs.
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   257
        model = collection.models.new(self.name + "_irrverb")
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   258
        model['did'] = deck_id
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   259
        model['css'] = MODEL_CSS
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   260
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   261
        collection.models.addField(model, collection.models.newField('V1'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   262
        collection.models.addField(model, collection.models.newField('V2'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   263
        collection.models.addField(model, collection.models.newField('V3'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   264
        collection.models.addField(model, collection.models.newField('V2alt'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   265
        collection.models.addField(model, collection.models.newField('V3alt'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   266
        collection.models.addField(model, collection.models.newField('Front'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   267
        collection.models.addField(model, collection.models.newField('Back'))
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   268
        collection.models.addField(model, collection.models.newField('Freq'))
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   269
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   270
        question = u"<div class='ask'>Find irregular verb:</div>"
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   271
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   272
        tmpl = collection.models.newTemplate('V1 -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   273
        tmpl['qfmt'] = question + '<div class="front">{{V1}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   274
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   275
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   276
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   277
        tmpl = collection.models.newTemplate('V2 -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   278
        tmpl['qfmt'] = question + '<div class="front">{{V2}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   279
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   280
        collection.models.addTemplate(model, tmpl)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   281
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   282
        tmpl = collection.models.newTemplate('V3 -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   283
        tmpl['qfmt'] = question + '<div class="front">{{V3}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   284
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   285
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   286
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   287
        tmpl = collection.models.newTemplate('V2alt -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   288
        tmpl['qfmt'] = question + '<div class="front">{{V2alt}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   289
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   290
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   291
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   292
        tmpl = collection.models.newTemplate('V3alt -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   293
        tmpl['qfmt'] = question + '<div class="front">{{V3alt}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   294
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   295
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   296
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   297
        model['id'] = model_id + 2          # Keep model['id'] unique.
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   298
        collection.models.update(model)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   299
        collection.models.save(model)
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   300
        self.model_irr = model
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   301
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   302
        ################################################################
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   303
        # Model for irregular plurals.
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   304
        model = collection.models.new(self.name + "_plural")
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   305
        model['did'] = deck_id
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   306
        model['css'] = MODEL_CSS
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   307
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   308
        collection.models.addField(model, collection.models.newField('Singular'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   309
        collection.models.addField(model, collection.models.newField('Plural'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   310
        collection.models.addField(model, collection.models.newField('Front'))
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   311
        collection.models.addField(model, collection.models.newField('Back'))
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   312
        collection.models.addField(model, collection.models.newField('Freq'))
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   313
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   314
        question = u"<div class='ask'>Find singular/plural form:</div>"
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   315
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   316
        tmpl = collection.models.newTemplate('Singular -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   317
        tmpl['qfmt'] = question + '<div class="front">{{Singular}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   318
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   319
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   320
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   321
        tmpl = collection.models.newTemplate('Plural -> Back')
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   322
        tmpl['qfmt'] = question + '<div class="front">{{Plural}}</div>'
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   323
        tmpl['afmt'] = '{{FrontSide}}<hr id=answer><div class="back">{{Front}}</div><div class="freq">{{Freq}}</div><div class="back">{{Back}}</div>'
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   324
        collection.models.addTemplate(model, tmpl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   325
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   326
        model['id'] = model_id + 3          # Keep model['id'] unique.
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   327
        collection.models.update(model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   328
        collection.models.save(model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   329
        self.model_pl = model
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   330
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   331
    def guid(self, nodetype, headword, unambiguous):
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   332
        """
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   333
        :nodetype     used to generate different notes from same headword
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   334
        :unambiguous  used if several subsequent article with same headword (and different pronunciation)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   335
        """
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   336
        if unambiguous > 0:
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   337
            h = hashlib.md5(":".join((self.name, nodetype, headword, str(unambiguous))))
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   338
        else:
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   339
            h = hashlib.md5(":".join((self.name, nodetype, headword)))
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   340
        return h.hexdigest()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   341
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   342
    def add_note(self, headword, unambiguous, front, back, safeback, freq="", tags=None):
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   343
        note = anki.notes.Note(self.collection, self.model)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   344
        note['Front'] = front
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   345
        note['Back'] = back
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   346
        note['SafeBack'] = safeback
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   347
        note['Freq'] = freq
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   348
        note_add_tags(note, tags)
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   349
        note.guid = self.guid("front/back", headword, unambiguous)
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   350
        self.collection.addNote(note)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   351
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   352
    def add_note_irr(self, headword, unambiguous, v1, v2, v2alt, v3, v3alt, front, back, freq, tags=None):
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   353
        note = anki.notes.Note(self.collection, self.model_irr)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   354
        note['V1'] = v1
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   355
        note['V2'] = v2
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   356
        note['V3'] = v3
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   357
        note['V2alt'] = v2alt
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   358
        note['V3alt'] = v3alt
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   359
        note['Front'] = front
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   360
        note['Back'] = back
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   361
        note['Freq'] = freq
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   362
        note_add_tags(note, tags)
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   363
        note.guid = self.guid("irregular verb", headword, unambiguous)
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   364
        self.collection.addNote(note)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   365
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   366
    def add_note_pl(self, headword, unambiguous, singular, plural, front, back, freq, tags=None):
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   367
        note = anki.notes.Note(self.collection, self.model_pl)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   368
        note['Singular'] = singular
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   369
        note['Plural'] = plural
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   370
        note['Front'] = front
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   371
        note['Back'] = back
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   372
        note['Freq'] = freq
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   373
        note_add_tags(note, tags)
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   374
        note.guid = self.guid("singular/plural noun", headword, unambiguous)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   375
        self.collection.addNote(note)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   376
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   377
    def export(self, fname):
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   378
        export = AnkiPackageExporter(self.collection)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   379
        export.exportInto(fname)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   380
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   381
    def close(self):
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   382
        self.collection.close()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   383
699
38ff2e2ffd5c Fix warning from pep8: E701 multiple statements on one line (colon).
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 698
diff changeset
   384
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   385
def write_sense(buf, sense, with_examples=True):
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   386
    buf.append("<div class='sense'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   387
    if sense.pos:
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   388
        buf.append("<span class='pos'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   389
        buf.append(sense.pos)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   390
        buf.append("</span>")
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   391
    have_ref = False
686
a9e3b6050544 Add topic to dictd and Anki.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 678
diff changeset
   392
    if sense.topic_list and len(sense.topic_list) > 0:
a9e3b6050544 Add topic to dictd and Anki.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 678
diff changeset
   393
        have_ref = True
877
340482715bb0 LEFT/RIGHT FLOOR symbols aren't present in Windows default fonts, replaced
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 872
diff changeset
   394
        buf.append(u" <span class='topic'>【")
686
a9e3b6050544 Add topic to dictd and Anki.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 678
diff changeset
   395
        buf.append(u", ".join(sense.topic_list))
877
340482715bb0 LEFT/RIGHT FLOOR symbols aren't present in Windows default fonts, replaced
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 872
diff changeset
   396
        buf.append(u"】</span>")
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   397
    if sense.ant_list and len(sense.ant_list) > 0:
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   398
        have_ref = True
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   399
        buf.append(" <span class='ant'>ant: ")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   400
        buf.append("; ".join(sense.ant_list))
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   401
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   402
    if sense.syn_list and len(sense.syn_list) > 0:
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   403
        have_ref = True
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   404
        buf.append(" <span class='syn'>syn: ")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   405
        buf.append("; ".join(sense.syn_list))
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   406
        buf.append("</span>")
618
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   407
    if sense.hyper_list and len(sense.hyper_list) > 0:
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   408
        have_ref = True
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   409
        buf.append(" <span class='hyper'>hyper: ")
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   410
        buf.append("; ".join(sense.hyper_list))
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   411
        buf.append("</span>")
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   412
    if sense.hypo_list and len(sense.hypo_list) > 0:
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   413
        have_ref = True
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   414
        buf.append(" <span class='hypo'>hypo: ")
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   415
        buf.append("; ".join(sense.hypo_list))
6ad7203ac9dc Add support for hypernyms and hyponyms.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 608
diff changeset
   416
        buf.append("</span>")
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   417
    if sense.rel_list and len(sense.rel_list) > 0:
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   418
        have_ref = True
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   419
        buf.append(" <span class='rel'>rel: ")
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   420
        buf.append("; ".join(sense.rel_list))
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   421
        buf.append("</span>")
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   422
    for (lang, tr) in sense.tr_list or []:
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   423
        if len(sense.tr_list) > 1 or have_ref:
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   424
            buf.append("<div class='sense'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   425
        buf.append(" <span class='lang'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   426
        buf.append(lang)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   427
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   428
        buf.append(" <span class='tr'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   429
        buf.append(tr)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   430
        buf.append("</span>")
574
5478477ab2ae Add related words to Anki cards. Break line if any reference is provided.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
   431
        if len(sense.tr_list) > 1 or have_ref:
570
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   432
            buf.append("</div>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   433
    for (lang, tr) in sense.glos_list or []:
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   434
        buf.append("<div class='glos'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   435
        buf.append(" <span class='lang'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   436
        buf.append(lang)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   437
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   438
        buf.append(" <span class='glos'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   439
        buf.append(tr)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   440
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   441
        buf.append("</div>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   442
    for (lang, tr) in (with_examples and sense.ex_list) or []:
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   443
        buf.append("<div class='ex'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   444
        buf.append(" <span class='lang'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   445
        buf.append(lang)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   446
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   447
        buf.append(" <span class='ex'>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   448
        buf.append(tr)
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   449
        buf.append("</span>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   450
        buf.append("</div>")
181897a421e9 Remove code duplication.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
   451
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   452
try:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   453
    BUILDER = AnkiDbBuilder(TMPDIR, NAME)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   454
608
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   455
    for identity in FDEL or []:
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   456
        identity = identity.strip()
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   457
        warnmsg = "<div class='del'>Please delete this note ({})</div>".format(identity)
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   458
        BUILDER.add_note(identity, 0, warnmsg, warnmsg, warnmsg, tags="del")
750
b68dfe0c2804 Add missing argument to call. It happened in untested execution branch.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 739
diff changeset
   459
        BUILDER.add_note_irr(identity, 0, warnmsg, warnmsg, warnmsg, warnmsg, warnmsg, warnmsg, warnmsg, freq="", tags="del")
b68dfe0c2804 Add missing argument to call. It happened in untested execution branch.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 739
diff changeset
   460
        BUILDER.add_note_pl(identity, 0, warnmsg, warnmsg, warnmsg, warnmsg, freq="", tags="del")
608
01fcbb1d5cea Add a way to mark card for deletion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 574
diff changeset
   461
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   462
    prev_identity = None
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   463
    unambiguous = 0
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   464
    for (headwords, translations) in DOM[1:]:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   465
        identity = headwords[0].headword
650
b13c09aaa9a3 Fix typo and decrease font size of frequency list.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 647
diff changeset
   466
        if 'rare' in headwords[0].attrs:
647
6ae5399c8087 Add ``rare`` attribute to headword to filter low frequency headwords out from
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 646
diff changeset
   467
            continue
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   468
        freqtags = []
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   469
        for (freqtag, freqset) in FREQ_SOURCES:
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   470
            if identity in freqset:
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   471
                freqtags.append(freqtag)
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   472
        if prev_identity == identity:
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   473
            unambiguous += 1
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   474
        else:
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   475
            prev_identity = identity
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   476
            unambiguous = 0
678
28e04408c0c0 Add frequency tags as separate field and as native Anki tags.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 677
diff changeset
   477
        freqmsg = " "
646
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   478
        if len(freqtags) > 0:
2d488cfc4c0c Add frequency markers to dictd dictionary and Anki cards.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 644
diff changeset
   479
            freqmsg = ",".join(freqtags)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   480
        buf = []
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   481
        v1, v2, v3, v2alt, v3alt = (None, None, None, None, None)
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   482
        singular, plural = (None, None)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   483
        for hw in headwords:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   484
            buf.append("<div clsas='headword'>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   485
            buf.append("<span clsas='headword'>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   486
            buf.append(hw.headword)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   487
            buf.append("</span>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   488
            if hw.pron is not None:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   489
                buf.append(" <span class='pron'>[")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   490
                buf.append(hw.pron)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   491
                buf.append("]</span>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   492
            if len(hw.attrs) > 0:
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   493
                l = [u"«"+x+u"»" for x in hw.attrs]
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   494
                l.sort()
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   495
                buf.append("<span class='attrs'>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   496
                buf.append(", ".join(l))
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   497
                buf.append("</span>")
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   498
            if 'v1' in hw.attrs:
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   499
                v1 = (hw.headword, hw.pron)
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   500
            if 'v2' in hw.attrs:
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   501
                if v2:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   502
                    v2alt = (hw.headword, hw.pron)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   503
                else:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   504
                    v2 = (hw.headword, hw.pron)
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   505
            if 'v3' in hw.attrs:
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   506
                if v3:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   507
                    v3alt = (hw.headword, hw.pron)
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   508
                else:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   509
                    v3 = (hw.headword, hw.pron)
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   510
            if 's' in hw.attrs:
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   511
                singular = (hw.headword, hw.pron)
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   512
            if 'pl' in hw.attrs:
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   513
                plural = (hw.headword, hw.pron)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   514
            buf.append("</div>")
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   515
        direct_from = "".join(buf)
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   516
        buf = []
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   517
        for sense in translations:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   518
            write_sense(buf, sense, with_examples=True)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   519
        direct_to = "".join(buf)
560
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   520
        buf = []
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   521
        for sense in translations:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   522
            write_sense(buf, sense, with_examples=False)
560
dad049a0f585 Include examples into dictionary articles and Packaged Anki Desk files.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 559
diff changeset
   523
        reverse_from = "".join(buf)         # without examples!!
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   524
        BUILDER.add_note(identity, unambiguous, direct_from, direct_to, reverse_from, freqmsg)
673
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
   525
        if v1 and v2 and v3 and RICH_MODE:
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   526
            riddle1 = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>v1</span>".format(v1[0], v1[1])
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   527
            riddle2 = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>v2</span>".format(v2[0], v2[1])
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   528
            riddle3 = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>v3</span>".format(v3[0], v3[1])
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   529
            if v2alt:
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   530
                riddle2alt = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>v2</span>".format(v2alt[0], v2alt[1])
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   531
            else:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   532
                riddle2alt = u""
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   533
            if v3alt:
713
c6cb8d720b51 Fix typo.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 699
diff changeset
   534
                riddle3alt = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>v3</span>".format(v3alt[0], v3alt[1])
677
e330e7f195b7 Switched to new models for notes in order to use Anki feature of preventing
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 676
diff changeset
   535
            else:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   536
                riddle3alt = u""
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   537
            BUILDER.add_note_irr(identity, unambiguous, riddle1, riddle2, riddle2alt, riddle3, riddle3alt, direct_from, direct_to, freqmsg)
673
ca1d4a6e201b Option to include Irregular verb and plural form.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 657
diff changeset
   538
        if singular and plural and RICH_MODE:
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   539
            riddle_s = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>s</span>".format(singular[0], singular[1])
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   540
            riddle_pl = u"<span class='headword'>{}</span> <span class='pron'>[{}]</span> <span class='attrs'>pl</span>".format(plural[0], plural[1])
739
4c70daa48492 Handling for sequence of article with same headword (as workaround for
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 736
diff changeset
   541
            BUILDER.add_note_pl(identity, unambiguous, riddle_s, riddle_pl, direct_from, direct_to, freqmsg)
556
78bf1097106a Add question for plural form and irregular verbs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 555
diff changeset
   542
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   543
    BUILDER.export(FONAME)
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   544
finally:
698
5fc9bc68fb9c Fix warning from pylint.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 697
diff changeset
   545
    BUILDER.close()
555
4a3188fc8951 Generating Packaged Anki Desk files for Anki space repetition software.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   546
    shutil.rmtree(TMPDIR, ignore_errors=True)