EnglishItem.export_as_html()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
"""
2
This module contains a EnglishItem Model
3
"""
4
5
from loglan_core.definition import BaseDefinition
6
7
from app.site.compose import DEFAULT_HTML_STYLE, Item
8
from app.site.compose.definition_formatter import DefinitionFormatter
9
10
11
class EnglishItem(Item):
12
    def __init__(
13
        self,
14
        definitions: list[BaseDefinition],
15
        key: str,
16
        style: str = DEFAULT_HTML_STYLE,
17
    ):
18
        self.definitions = definitions
19
        self.key = key
20
        self.style = style
21
22
    def export_as_html(self):
23
        return "\n".join(
24
            [self.export_for_english(d, self.key, self.style) for d in self.definitions]
25
        )
26
27
    @staticmethod
28
    def export_for_english(  # pylint: disable=too-many-locals
29
        definition: BaseDefinition,
30
        key: str,
31
        style: str = DEFAULT_HTML_STYLE,
32
    ) -> str:
33
        # de = definition english
34
        tags = {
35
            "normal": [
36
                '<span class="dg">(%s)</span>',
37
                '<span class="dt">[%s]</span> ',
38
                ' <span class="db">%s</span>',
39
                f'<span class="definition eng" id={definition.id}>%s</span>',
40
                '<div class="d_line">%s</div>',
41
                '<span class="w_name">%s</span>, ',
42
                '<span class="w_origin">&lt;%s&gt;</span> ',
43
            ],
44
            "ultra": [
45
                "(%s)",
46
                "[%s] ",
47
                " %s",
48
                "<de>%s</de>",
49
                "<ld>%s</ld>",
50
                "<wn>%s</wn>, ",
51
                "<o>&lt;%s&gt;</o> ",
52
            ],
53
        }
54
55
        (
56
            t_d_gram,
57
            t_d_tags,
58
            t_d_body,
59
            t_def,
60
            t_def_line,
61
            t_word_name,
62
            t_word_origin,
63
        ) = tags[style]
64
65
        gram_form = str(definition.slots or "") + definition.grammar_code
66
        def_gram = t_d_gram % gram_form if gram_form else ""
67
        def_tags = (
68
            t_d_tags % definition.case_tags.replace("-", "&zwj;-&zwj;")
69
            if definition.case_tags
70
            else ""
71
        )
72
73
        def_body = DefinitionFormatter(definition).tagged_definition_body(key, t_d_body)
74
        word_name = DefinitionFormatter(definition).tagged_word_name(t_word_name)
75
        word_origin_x = DefinitionFormatter(definition).tagged_word_origin_x(
76
            t_word_origin
77
        )
78
79
        definition = t_def % f"{def_tags}{def_gram}{def_body}"
80
        return t_def_line % f"{word_name}{word_origin_x}{definition}"
81