Passed
Branch master (0442a2)
by P.R.
02:00
created

HeadingHtmlFormatter   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
c 1
b 0
f 0
dl 0
loc 55
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 10 1
B generate_chapter() 0 22 4
A generate_heading_node() 0 14 2
1
"""
2
SDoc
3
4
Copyright 2016 Set Based IT Consultancy
5
6
Licence MIT
7
"""
8
# ----------------------------------------------------------------------------------------------------------------------
9
from sdoc.helper.Html import Html
10
from sdoc.sdoc2 import node_store
11
from sdoc.sdoc2.formatter.html.HtmlFormatter import HtmlFormatter
12
13
14
class HeadingHtmlFormatter(HtmlFormatter):
15
    """
16
    HtmlFormatter for generating HTML code for headings.
17
    """
18
    # ------------------------------------------------------------------------------------------------------------------
19
    def generate(self, node, file):
20
        """
21
        Generates the HTML code for a heading node.
22
23
        :param sdoc.sdoc2.node.HeadingNode.HeadingNode node: The heading node.
24
        :param file file: The output file.
25
        """
26
        self.generate_heading_node(node, file)
27
28
        super().generate(node, file)
29
30
    # ------------------------------------------------------------------------------------------------------------------
31
    def generate_chapter(self, node, file):
32
        """
33
        Generates HTML file structure if the node is chapter otherwise use method for generating heading node.
34
35
        :param sdoc.sdoc2.node.HeadingNode.HeadingNode node: The heading node.
36
        :param file file: The output file.
37
        """
38
        if node.get_command() == 'chapter':
39
            with open('output_{0}.html'.format(node.argument), 'w') as file:
40
                file.write('<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="NL" lang="NL">')
41
                file.write('<head><meta charset="UTF-8"/><title>sdoc</title></head>')
42
                file.write('<body>')
43
44
                self.generate_heading_node(node, file)
45
                super().generate_chapter(node, file)
46
47
                file.write('</body>')
48
                file.write('</html>')
49
        else:
50
            if file:
51
                self.generate_heading_node(node, file)
52
                super().generate_chapter(node, file)
53
54
    # ------------------------------------------------------------------------------------------------------------------
55
    @staticmethod
56
    def generate_heading_node(node, file):
57
        """
58
        Generates the HTML code for heading node.
59
60
        :param sdoc.sdoc2.node.HeadingNode.HeadingNode node: The heading node.
61
        :param file file: The output file.
62
        """
63
        # Set id attribute to heading node.
64
        attributes = {'id': node.get_option_value('id')}
65
66
        number = node.get_option_value('number')
67
        text_in_tag = '{0} {1!s}'.format('' if not number else number, node.argument)
68
        file.write(Html.generate_element('h{0:d}'.format(node.get_hierarchy_level()), attributes, text_in_tag))
69
70
# ----------------------------------------------------------------------------------------------------------------------
71
node_store.register_formatter('chapter', 'html', HeadingHtmlFormatter)
72
node_store.register_formatter('section', 'html', HeadingHtmlFormatter)
73
node_store.register_formatter('subsection', 'html', HeadingHtmlFormatter)
74
node_store.register_formatter('sub2section', 'html', HeadingHtmlFormatter)
75
node_store.register_formatter('sub3section', 'html', HeadingHtmlFormatter)
76
node_store.register_formatter('sub4section', 'html', HeadingHtmlFormatter)
77
node_store.register_formatter('sub5section', 'html', HeadingHtmlFormatter)
78