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