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

ItemizeNode   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 156
Duplicated Lines 0 %

Test Coverage

Coverage 90.91%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 17
c 1
b 0
f 0
dl 0
loc 156
ccs 40
cts 44
cp 0.9091
rs 10

13 Methods

Rating   Name   Duplication   Size   Complexity  
A __init__() 0 12 1
A get_command() 0 7 1
A is_inline_command() 0 7 1
A is_block_command() 0 7 1
A get_hierarchy_level() 0 11 1
A get_hierarchy_name() 0 7 1
A is_hierarchy_root() 0 7 1
A is_phrasing() 0 7 1
A level_down() 0 13 1
A level_up() 0 11 2
A prepare_content_tree() 0 18 3
A number() 0 11 1
A remove_nodes() 0 8 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
        """
107 1
        nodes_for_remove = []
108
109 1
        for node_id in self.child_nodes:
110 1
            node = in_scope(node_id)
111
112 1
            if not isinstance(node, ItemNode):
113
                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
117 1
            out_scope(node)
118
119 1
        self.remove_nodes(nodes_for_remove)
120
121
    # ------------------------------------------------------------------------------------------------------------------
122 1
    def remove_nodes(self, node_list):
123
        """
124
        Removes odd nodes from list of child nodes of this node.
125
126
        :param list[int] node_list:
127
        """
128 1
        for node in node_list:
129
            self.child_nodes.remove(node)
130
131
    # ------------------------------------------------------------------------------------------------------------------
132 1
    @staticmethod
133
    def level_down(number):
134
        """
135
        Decrements the level of hierarchy.
136
137
        :param str number: The number of last node.
138
139
        :rtype: str
140
        """
141 1
        number_list = number.split('.')
142 1
        number = '.'.join(number_list[:-1])
143
144 1
        return number
145
146
    # ------------------------------------------------------------------------------------------------------------------
147 1
    @staticmethod
148
    def level_up(numbers):
149
        """
150
        Increments the level of hierarchy.
151
152
        :param dict[str,str] numbers: The number of last node.
153
        """
154 1
        if 'item' in numbers:
155 1
            numbers['item'] += '.0'
156
        else:
157 1
            numbers['item'] = '0'
158
159
    # ------------------------------------------------------------------------------------------------------------------
160 1
    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 1
        self.level_up(numbers)
167
168 1
        super().number(numbers)
169
170 1
        numbers['item'] = self.level_down(numbers['item'])
171
172
173
# ----------------------------------------------------------------------------------------------------------------------
174
NodeStore.register_block_command('itemize', ItemizeNode)
175