Completed
Push — master ( 57e7bf...8a74a7 )
by P.R.
01:36
created

sdoc.sdoc2.node.FigureNode   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 88
Duplicated Lines 0 %
Metric Value
dl 0
loc 88
rs 10
wmc 9

7 Methods

Rating   Name   Duplication   Size   Complexity  
A FigureNode.get_command() 0 7 1
A FigureNode._get_numeration() 0 19 3
A FigureNode.__init__() 0 8 1
A FigureNode.is_block_command() 0 7 1
A FigureNode._increment_last_level() 0 11 1
A FigureNode.number() 0 12 1
A FigureNode.is_inline_command() 0 7 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
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,str] enumerable_numbers: The current numbers of enumerable nodes.
62
        """
63
        chapter = HeadingNode.get_numeration(enumerable_numbers, 1)
64
65
        if 'figures' not in enumerable_numbers:
66
            enumerable_numbers['figures'] = '{0!s}.{1!s}'.format(chapter, '0')
67
68
        else:
69
            numbers_level = enumerable_numbers['figures'].split('.')
70
            if chapter > numbers_level[0]:
71
                numbers_level[0] = chapter
72
                numbers_level[-1] = '0'
73
74
            enumerable_numbers['figures'] = '.'.join(numbers_level)
75
76
    # ------------------------------------------------------------------------------------------------------------------
77
    @staticmethod
78
    def _increment_last_level(enumerable_numbers):
79
        """
80
        Increments the last level of figures enumeration.
81
82
        :param dict[str,str] enumerable_numbers: The current numbers of enumerable nodes.
83
        """
84
        heading_numbers = enumerable_numbers['figures'].split('.')
85
        heading_numbers[-1] = str(int(heading_numbers[-1]) + 1)
86
87
        enumerable_numbers['figures'] = '.'.join(heading_numbers)
88
89
    # ------------------------------------------------------------------------------------------------------------------
90
    def number(self, enumerable_numbers):
91
        """
92
        Sets the number of this figure node.
93
94
        :param dict[str,str] enumerable_numbers: The current numbers of enumerable nodes.
95
        """
96
        self._get_numeration(enumerable_numbers)
97
        self._increment_last_level(enumerable_numbers)
98
99
        self._options['number'] = enumerable_numbers['figures']
100
101
        super().number(enumerable_numbers)
102
103
# ----------------------------------------------------------------------------------------------------------------------
104
node_store.register_inline_command('figure', FigureNode)
105