Completed
Pull Request — master (#32)
by Oleg
03:16
created

FigureNode   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 11
c 1
b 0
f 0
dl 0
loc 91
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A get_command() 0 7 1
A __init__() 0 8 1
A is_block_command() 0 7 1
A is_inline_command() 0 7 1
B _get_numeration() 0 22 5
A _increment_last_level() 0 11 1
A number() 0 12 1
1
"""
2
SDoc
3
4
Copyright 2016 Set Based IT Consultancy
5
6
Licence MIT
7
"""
8
# ----------------------------------------------------------------------------------------------------------------------
9
from sdoc.sdoc2 import node_store
10
from sdoc.sdoc2.node.Node import Node
11
from sdoc.sdoc2.node.HeadingNode import HeadingNode
0 ignored issues
show
Unused Code introduced by
Unused HeadingNode imported from sdoc.sdoc2.node.HeadingNode
Loading history...
12
13
14
class FigureNode(Node):
15
    """
16
    A stub for SDoc2 node for figures.
17
    """
18
    # ------------------------------------------------------------------------------------------------------------------
19
    def __init__(self, options, argument):
20
        """
21
        Object constructor.
22
23
        :param dict[str,str] options: The options of this figure.
24
        :param str argument: Not used.
25
        """
26
        super().__init__('figure', options, argument)
27
28
    # ------------------------------------------------------------------------------------------------------------------
29
    def get_command(self):
30
        """
31
        Returns the command of this node, i.e. smile.
32
33
        :rtype: str
34
        """
35
        return 'figure'
36
37
    # ------------------------------------------------------------------------------------------------------------------
38
    def is_block_command(self):
39
        """
40
        Returns False.
41
42
        :rtype: bool
43
        """
44
        return False
45
46
    # ------------------------------------------------------------------------------------------------------------------
47
    def is_inline_command(self):
48
        """
49
        Returns True.
50
51
        :rtype: bool
52
        """
53
        return True
54
55
    # ------------------------------------------------------------------------------------------------------------------
56
    @staticmethod
57
    def _get_numeration(enumerable_numbers):
58
        """
59
        Returns the current enumeration of figures.
60
61
        :param dict[str, sdoc.sdoc2.helper.Enumerable.Enumerable] enumerable_numbers:
62
        """
63
        if 'heading' in enumerable_numbers and enumerable_numbers['heading'].get_level(1):
64
            chapter = enumerable_numbers['heading'].get_level(1)
65
        else:
66
            chapter = 0
67
68
        if 'figures' not in enumerable_numbers:
69
            enumerable_numbers['figures'] = '{0!s}.{1!s}'.format(chapter, '0')
70
71
        else:
72
            numbers_level = enumerable_numbers['figures'].split('.')
73
            if chapter > int(numbers_level[0]):
74
                numbers_level[0] = chapter
75
                numbers_level[-1] = '0'
76
77
            enumerable_numbers['figures'] = '.'.join(map(str, numbers_level))
0 ignored issues
show
introduced by
Used builtin function 'map'
Loading history...
78
79
    # ------------------------------------------------------------------------------------------------------------------
80
    @staticmethod
81
    def _increment_last_level(enumerable_numbers):
82
        """
83
        Increments the last level of figures enumeration.
84
85
        :param dict[str,str] enumerable_numbers: The current numbers of enumerable nodes.
86
        """
87
        heading_numbers = enumerable_numbers['figures'].split('.')
88
        heading_numbers[-1] = str(int(heading_numbers[-1]) + 1)
89
90
        enumerable_numbers['figures'] = '.'.join(heading_numbers)
91
92
    # ------------------------------------------------------------------------------------------------------------------
93
    def number(self, enumerable_numbers):
94
        """
95
        Sets the number of this figure node.
96
97
        :param dict[str,str] enumerable_numbers: The current numbers of enumerable nodes.
98
        """
99
        self._get_numeration(enumerable_numbers)
100
        self._increment_last_level(enumerable_numbers)
101
102
        self._options['number'] = enumerable_numbers['figures']
103
104
        super().number(enumerable_numbers)
105
106
# ----------------------------------------------------------------------------------------------------------------------
107
node_store.register_inline_command('figure', FigureNode)
108