ItemNode.is_list_element()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 5
Ratio 100 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 2
dl 5
loc 5
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nop 1
crap 1
1 1
from typing import Dict
2
3 1
from cleo.io.io import IO
4
5 1
from sdoc.sdoc2 import in_scope, out_scope
6 1
from sdoc.sdoc2.node.Node import Node
7 1
from sdoc.sdoc2.node.TextNode import TextNode
8 1
from sdoc.sdoc2.NodeStore import NodeStore
9
10
11 1 View Code Duplication
class ItemNode(Node):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
12
    """
13
    SDoc2 node for items.
14
    """
15
16
    # ------------------------------------------------------------------------------------------------------------------
17 1
    def __init__(self, io: IO, options: Dict[str, str], argument: str):
18
        """
19
        Object constructor.
20
21
        :param OutputStyle io: The IO object.
22
        :param dict[str,str] options: The options of this item.
23
        :param str argument: Not used.
24
        """
25 1
        super().__init__(io, 'item', options, argument)
26
27 1
        self._hierarchy_level: int = 0
28 1
        """
29
        The hierarchy level of the itemize.
30
        """
31
32
    # ------------------------------------------------------------------------------------------------------------------
33 1
    def get_command(self) -> str:
34
        """
35
        Returns the command of this node, i.e. item.
36
        """
37 1
        return 'item'
38
39
    # ------------------------------------------------------------------------------------------------------------------
40 1
    def get_hierarchy_level(self, parent_hierarchy_level: int = -1) -> int:
41
        """
42
        Returns parent_hierarchy_level.
43
44
        :param int parent_hierarchy_level: The level of the parent in the hierarchy.
45
        """
46 1
        self._hierarchy_level = parent_hierarchy_level + 1
47
48 1
        return self._hierarchy_level
49
50
    # ------------------------------------------------------------------------------------------------------------------
51 1
    def get_hierarchy_name(self) -> str:
52
        """
53
        Returns 'item'
54
        """
55 1
        return 'item'
56
57
    # ------------------------------------------------------------------------------------------------------------------
58 1
    def is_block_command(self) -> bool:
59
        """
60
        Returns False.
61
        """
62 1
        return False
63
64
    # ------------------------------------------------------------------------------------------------------------------
65 1
    def is_inline_command(self) -> bool:
66
        """
67
        Returns True.
68
        """
69
        return True
70
71
    # ------------------------------------------------------------------------------------------------------------------
72 1
    def is_list_element(self) -> bool:
73
        """
74
        Returns True.
75
        """
76 1
        return True
77
78
    # ------------------------------------------------------------------------------------------------------------------
79 1
    def prepare_content_tree(self) -> None:
80
        """
81
        Method which checks if all child nodes is phrasing.
82
        """
83 1
        first = self.child_nodes[0]
84 1
        last = self.child_nodes[-1]
85
86 1
        for node_id in self.child_nodes:
87 1
            node = in_scope(node_id)
88
89 1
            if isinstance(node, TextNode):
90 1
                if node_id == first:
91 1
                    node.prune_whitespace(leading=True)
92
93 1
                elif node_id == last:
94 1
                    node.prune_whitespace(trailing=True)
95
96 1
                elif node_id == first and node_id == last:
97
                    node.prune_whitespace(leading=True, trailing=True)
98
99
            # if not node.is_phrasing():
100
            #    raise RuntimeError("Node: id:%s, %s is not phrasing" % (str(node.id), node.name))
101
102 1
            out_scope(node)
103
104
    # ------------------------------------------------------------------------------------------------------------------
105 1
    @staticmethod
106 1
    def _increment_last_level(number: str) -> str:
107
        """
108
        Increments the last level in number of the item node.
109
110
        :param str number: The number of last node.
111
        """
112 1
        heading_numbers = number.split('.')
113 1
        heading_numbers[-1] = str(int(heading_numbers[-1]) + 1)
114
115 1
        return '.'.join(heading_numbers)
116
117
    # ------------------------------------------------------------------------------------------------------------------
118 1
    @staticmethod
119 1
    def strip_start_point(number: str) -> str:
120
        """
121
        Removes start point if it in the number.
122
123
        :param str number: The number of last node.
124
        """
125 1
        return number.lstrip('.')
126
127
    # ------------------------------------------------------------------------------------------------------------------
128 1
    def number(self, numbers: Dict[str, str]) -> None:
129
        """
130
        Sets number for item nodes.
131
132
        :param dict[str,str] numbers: The number of last node.
133
        """
134 1
        numbers['item'] = self.strip_start_point(numbers['item'])
135 1
        numbers['item'] = self._increment_last_level(numbers['item'])
136
137 1
        self._options['number'] = numbers['item']
138
139 1
        super().number(numbers)
140
141
142
# ----------------------------------------------------------------------------------------------------------------------
143
NodeStore.register_inline_command('item', ItemNode)
144