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

ItemizeNode.remove_nodes()   A

Complexity

Conditions 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
ccs 3
cts 3
cp 1
rs 9.4285
cc 2
crap 2
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 1
        """
107 1
        nodes_for_remove = []
108
109 1
        for node_id in self.child_nodes:
110
            node = in_scope(node_id)
111
112
            if not isinstance(node, ItemNode):
113 1
                node_store.error("Node: id:{0!s}, {1!s} is not instance of 'ItemNode'".format(str(node.id), node.name),
114
                                 node)
115
                nodes_for_remove.append(node_id)
116 1
117
            out_scope(node)
118
119
        self.remove_nodes(nodes_for_remove)
120
121
    # ------------------------------------------------------------------------------------------------------------------
122
    def remove_nodes(self, node_list):
123
        """
124
        Removes odd nodes from list of child nodes of this node.
125 1
126 1
        :param list[int] node_list:
127
        """
128 1
        for node in node_list:
129
            self.child_nodes.remove(node)
130
131 1
    # ------------------------------------------------------------------------------------------------------------------
132
    @staticmethod
133
    def level_down(number):
134
        """
135
        Decrements the level of hierarchy.
136
137
        :param str number: The number of last node.
138 1
139 1
        :rtype: str
140
        """
141 1
        number_list = number.split('.')
142
        number = '.'.join(number_list[:-1])
143
144 1
        return number
145
146
    # ------------------------------------------------------------------------------------------------------------------
147
    @staticmethod
148
    def level_up(numbers):
149
        """
150 1
        Increments the level of hierarchy.
151
152 1
        :param dict[str,str] numbers: The number of last node.
153
        """
154 1
        if 'item' in numbers:
155
            numbers['item'] += '.0'
156
        else:
157
            numbers['item'] = '0'
158 1
159
    # ------------------------------------------------------------------------------------------------------------------
160
    def number(self, numbers):
161
        """
162
        Passing over all child nodes, for numeration.
163
164
        :param dict[str,str] numbers: The number of last node.
165
        """
166
        self.level_up(numbers)
167
168
        super().number(numbers)
169
170
        numbers['item'] = self.level_down(numbers['item'])
171
172
173
# ----------------------------------------------------------------------------------------------------------------------
174
NodeStore.register_block_command('itemize', ItemizeNode)
175