File: reference.py

package info (click to toggle)
blender-doc 4.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 253,604 kB
  • sloc: python: 13,030; javascript: 322; makefile: 113; sh: 107
file content (68 lines) | stat: -rwxr-xr-x 1,911 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

from docutils import nodes
from docutils.nodes import Element, Node
from docutils.parsers.rst import directives
from docutils.parsers.rst.directives.admonitions import BaseAdmonition

from sphinx.locale import _
from sphinx.util.docutils import SphinxDirective


class refbox(nodes.Admonition, nodes.Element):
    pass


def visit_refbox_node(self, node):
    self.visit_admonition(node)


def depart_refbox_node(self, node):
    self.depart_admonition(node)


class ReferenceDirective(BaseAdmonition, SphinxDirective):
    node_class = refbox
    has_content = True
    required_arguments = 0
    optional_arguments = 0
    final_argument_whitespace = False
    option_spec = {
        'class': directives.class_option,
        'name': directives.unchanged,
    }

    def run(self):
        if not self.options.get('class'):
            self.options['class'] = ['refbox']

        (reference,) = super().run()
        if isinstance(reference, nodes.system_message):
            return [reference]
        elif isinstance(reference, refbox):
            reference.insert(0, nodes.title(text=_('Reference')))
            reference['docname'] = self.env.docname
            self.add_name(reference)
            self.set_source_info(reference)
            self.state.document.note_explicit_target(reference)
            return [reference]
        else:
            raise RuntimeError  # never reached here


def setup(app):
    app.add_node(
        refbox,
        html=(visit_refbox_node, depart_refbox_node),
        latex=(visit_refbox_node, depart_refbox_node),
        text=(visit_refbox_node, depart_refbox_node),
        man=(visit_refbox_node, depart_refbox_node),
        texinfo=(visit_refbox_node, depart_refbox_node),
    )

    app.add_directive('reference', ReferenceDirective)

    return {
        'version': '1.0',
        'parallel_read_safe': True,
        'parallel_write_safe': True,
    }