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

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 

10 

11 

12class bigger_node(nodes.Element): 

13 

14 """ 

15 Defines *bigger* node. 

16 """ 

17 pass 

18 

19 

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`): 

24 

25 :: 

26 

27 :bigger:`text` 

28 

29 Or to specify a different :bigger:`::5:size` : 

30 

31 :: 

32 

33 :bigger:`::5:size` 

34 

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], [] 

54 

55 

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. 

62 

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>") 

67 

68 

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"]) 

78 

79 

80def depart_bigger_node_rst(self, node): 

81 """ 

82 depart bigger_node for rst 

83 """ 

84 self.add_text('`') 

85 

86 

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"]) 

96 

97 

98def depart_bigger_node_latex(self, node): 

99 """ 

100 depart bigger_node for latex 

101 """ 

102 self.add_text('}') 

103 

104 

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 

113 

114 

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)) 

122 

123 

124def setup(app): 

125 """ 

126 setup for ``bigger`` (sphinx) 

127 """ 

128 if hasattr(app, "add_mapping"): 

129 app.add_mapping('bigger', bigger_node) 

130 

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)) 

139 

140 app.add_role('bigger', bigger_role) 

141 return {'version': sphinx.__display_version__, 'parallel_read_safe': True}