File: local_extension.py

package info (click to toggle)
python-coincidence 0.6.6-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 768 kB
  • sloc: python: 1,340; makefile: 3
file content (71 lines) | stat: -rw-r--r-- 1,893 bytes parent folder | download | duplicates (2)
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
69
70
71
# stdlib
from typing import List, Optional, Tuple

# 3rd party
from docutils import nodes, utils
from docutils.nodes import Node, system_message
from domdf_python_tools.paths import PathPlus
from sphinx.application import Sphinx
from sphinx.util.docutils import SphinxRole
from sphinx.writers.html import HTMLTranslator
from sphinx.writers.latex import LaTeXTranslator


class del_node(nodes.paragraph):
	pass


class DelRole(SphinxRole):

	def run(self) -> Tuple[List[Node], List[system_message]]:
		node = del_node(text=utils.unescape(self.text))
		node["docname"] = self.inliner.document.settings.env.docname
		node["rawtext"] = self.rawtext
		return [node], []


def html_visit_del_node(translator: HTMLTranslator, node: del_node) -> None:
	translator.body.append("<span><del>")
	translator.visit_paragraph(node)


def html_depart_del_node(translator: HTMLTranslator, node: del_node) -> None:
	translator.body.append("</del></span>")
	translator.depart_paragraph(node)


def visit_del_node_latex(translator: LaTeXTranslator, node: del_node) -> None:
	translator.body.append(r"\st{")


def depart_del_node_latex(translator: LaTeXTranslator, node: del_node) -> None:
	translator.body.append('}')


def replace_geq(app: Sphinx, exception: Optional[Exception] = None):
	if exception:
		return

	if app.builder.name.lower() != "latex":
		return

	output_file = PathPlus(app.builder.outdir) / f"{app.builder.titles[0][1]}.tex"
	output_content = output_file.read_text()
	output_content = output_content.replace('≥', r" $\geq$ ")
	output_file.write_clean(output_content)


def setup(app: Sphinx):
	app.add_node(
			del_node,
			html=(html_visit_del_node, html_depart_del_node),
			latex=(visit_del_node_latex, depart_del_node_latex),
			)

	app.add_role("del", DelRole())
	app.connect("build-finished", replace_geq)

	return {
			"parallel_read_safe": True,
			"parallel_write_safe": True,
			}