Coverage for pyquickhelper/sphinxext/sphinx_bigger_extension.py: 100%
41 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-03 02:21 +0200
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-03 02:21 +0200
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Defines a :epkg:`sphinx` extension to display bigger text.
5"""
6import html as cgiesc
7import sphinx
8from docutils import nodes
9from sphinx.util.logging import getLogger
12class bigger_node(nodes.Element):
14 """
15 Defines *bigger* node.
16 """
17 pass
20def bigger_role(role, rawtext, text, lineno, inliner, options=None, content=None):
21 """
22 Defines custom role *bigger*. The following instructions defines
23 buttons of size 20 (:bigger:`text`):
25 ::
27 :bigger:`text`
29 Or to specify a different :bigger:`::5:size` :
31 ::
33 :bigger:`::5:size`
35 :param role: The role name used in the document.
36 :param rawtext: The entire markup snippet, with role.
37 :param text: The text marked with the role.
38 :param lineno: The line number where rawtext appears in the input.
39 :param inliner: The inliner instance that called us.
40 :param options: Directive options for customization.
41 :param content: The directive content for customization.
42 """
43 if options is None:
44 options = {}
45 if content is None:
46 content = []
47 if text.startswith("::"):
48 size, text = text[2:].split(':')
49 else:
50 size = "4"
51 node = bigger_node(text=text, size=size)
52 node['classes'] += ["bigger"]
53 return [node], []
56def depart_bigger_node_html(self, node):
57 """
58 what to do when leaving a node *bigger*
59 the function should have different behaviour,
60 depending on the format, or the setup should
61 specify a different function for each.
63 It does only html for the time being.
64 """
65 self.body.append(
66 f"<font size=\"{node['size']}\">{cgiesc.escape(node['text'])}</font>")
69def visit_bigger_node_rst(self, node):
70 """
71 what to do when visiting a node *bigger*
72 the function should have different behaviour,
73 depending on the format, or the setup should
74 specify a different function for each.
75 """
76 self.add_text(':bigger:`')
77 self.add_text(node["text"])
80def depart_bigger_node_rst(self, node):
81 """
82 depart bigger_node for rst
83 """
84 self.add_text('`')
87def visit_bigger_node_latex(self, node):
88 """
89 what to do when visiting a node *bigger*
90 the function should have different behaviour,
91 depending on the format, or the setup should
92 specify a different function for each.
93 """
94 self.add_text('\\huge{')
95 self.add_text(node["text"])
98def depart_bigger_node_latex(self, node):
99 """
100 depart bigger_node for latex
101 """
102 self.add_text('}')
105def visit_bigger_node(self, node):
106 """
107 what to do when visiting a node *bigger*
108 the function should have different behaviour,
109 depending on the format, or the setup should
110 specify a different function for each.
111 """
112 pass
115def depart_bigger_node(self, node):
116 """
117 depart bigger_node for format other than html
118 """
119 logger = getLogger("bigger")
120 logger.warning(
121 "[depart_bigger_node] output only available for HTML not for %r", type(self))
124def setup(app):
125 """
126 setup for ``bigger`` (sphinx)
127 """
128 if hasattr(app, "add_mapping"):
129 app.add_mapping('bigger', bigger_node)
131 app.add_node(bigger_node,
132 html=(visit_bigger_node, depart_bigger_node_html),
133 epub=(visit_bigger_node, depart_bigger_node_html),
134 latex=(visit_bigger_node_latex, depart_bigger_node_latex),
135 elatex=(visit_bigger_node_latex, depart_bigger_node_latex),
136 text=(visit_bigger_node, depart_bigger_node),
137 md=(visit_bigger_node, depart_bigger_node),
138 rst=(visit_bigger_node_rst, depart_bigger_node_rst))
140 app.add_role('bigger', bigger_role)
141 return {'version': sphinx.__display_version__, 'parallel_read_safe': True}