Completed
Push — master ( b50573...8e7f82 )
by P.R.
01:58
created

HeadingHtmlFormatter.generate_chapter()   B

Complexity

Conditions 4

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 17.0071

Importance

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