Completed
Pull Request — master (#46)
by Oleg
02:11
created

ItemizeNode.__init__()   A

Complexity

Conditions 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
crap 1
1
"""
2
SDoc
3
4
Copyright 2016 Set Based IT Consultancy
5
6
Licence MIT
7
"""
8
# ----------------------------------------------------------------------------------------------------------------------
9 1
from sdoc.sdoc2 import node_store, out_scope, in_scope
10 1
from sdoc.sdoc2.NodeStore import NodeStore
11 1
from sdoc.sdoc2.node.ItemNode import ItemNode
12 1
from sdoc.sdoc2.node.Node import Node
13
14
15 1
class ItemizeNode(Node):
16
    """
17
    SDoc2 node for itemize.
18
    """
19
20
    # ------------------------------------------------------------------------------------------------------------------
21 1
    def __init__(self, io, options):
22
        """
23
        Object constructor.
24
25
        :param None|cleo.styles.output_style.OutputStyle io: The IO object.
26
        :param dict[str,str] options: The options of this itemize.
27
        """
28 1
        super().__init__(io, 'itemize', options)
29
30 1
        self._hierarchy_level = 0
31
32 1
        node_store.first = True
33
34
    # ------------------------------------------------------------------------------------------------------------------
35 1
    def get_command(self):
36
        """
37
        Returns the command of this node, i.e. itemize.
38
39
        :rtype: str
40
        """
41 1
        return 'itemize'
42
43
    # ------------------------------------------------------------------------------------------------------------------
44 1
    def get_hierarchy_level(self, parent_hierarchy_level=-1):
45
        """
46
        Returns parent_hierarchy_level + 1.
47
48
        :param int parent_hierarchy_level: The level of the parent in the hierarchy.
49
50
        :rtype: int
51
        """
52 1
        self._hierarchy_level = parent_hierarchy_level + 1
53
54 1
        return self._hierarchy_level
55
56
    # ------------------------------------------------------------------------------------------------------------------
57 1
    def get_hierarchy_name(self):
58
        """
59
        Returns 'item'
60
61
        :rtype: str
62
        """
63 1
        return 'item'
64
65
    # ------------------------------------------------------------------------------------------------------------------
66 1
    def is_block_command(self):
67
        """
68
        Returns True.
69
70
        :rtype: bool
71
        """
72 1
        return True
73
74
    # ------------------------------------------------------------------------------------------------------------------
75 1
    def is_hierarchy_root(self):
76
        """
77
        Returns True.
78
79
        :rtype: bool
80
        """
81 1
        return self._hierarchy_level == 0
82
83
    # ------------------------------------------------------------------------------------------------------------------
84 1
    def is_inline_command(self):
85
        """
86
        Returns False.
87
88
        :rtype: bool
89
        """
90
        return False
91
92
    # ------------------------------------------------------------------------------------------------------------------
93 1
    def is_phrasing(self):
94
        """
95
        Returns True.
96
97
        :rtype: bool
98
        """
99 1
        return False
100
101
    # ------------------------------------------------------------------------------------------------------------------
102 1
    def prepare_content_tree(self):
103
        """
104
        Method which checks if all child nodes is instance of sdoc.sdoc2.node.ItemNode.ItemNode. If not, removes
105
        from child node list and from node store.
106
        """
107 1
        for node_id in self.child_nodes:
108 1
            node = in_scope(node_id)
109
110 1
            if not isinstance(node, ItemNode):
111
                node_store.error("Node: id:{0!s}, {1!s} is not instance of 'ItemNode'".format(str(node.id), node.name),
112
                                 node)
113
                node_store.append_node_for_remove(node_id)
114
115 1
            out_scope(node)
116
117
    # ------------------------------------------------------------------------------------------------------------------
118 1
    @staticmethod
119
    def level_down(number):
120
        """
121
        Decrements the level of hierarchy.
122
123
        :param str number: The number of last node.
124
125
        :rtype: str
126
        """
127 1
        number_list = number.split('.')
128 1
        number = '.'.join(number_list[:-1])
129
130 1
        return number
131
132
    # ------------------------------------------------------------------------------------------------------------------
133 1
    @staticmethod
134
    def level_up(numbers):
135
        """
136
        Increments the level of hierarchy.
137
138
        :param dict[str,str] numbers: The number of last node.
139
        """
140 1
        if 'item' in numbers:
141 1
            numbers['item'] += '.0'
142
        else:
143 1
            numbers['item'] = '0'
144
145
    # ------------------------------------------------------------------------------------------------------------------
146 1
    def number(self, numbers):
147
        """
148
        Passing over all child nodes, for numeration.
149
150
        :param dict[str,str] numbers: The number of last node.
151
        """
152 1
        self.level_up(numbers)
153
154 1
        super().number(numbers)
155
156 1
        numbers['item'] = self.level_down(numbers['item'])
157
158
159
# ----------------------------------------------------------------------------------------------------------------------
160
NodeStore.register_block_command('itemize', ItemizeNode)
161