Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagecell
Path: blob/master/contrib/sphinx2/icsecontrib/sagecellserver.py
447 views
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
4
from docutils import nodes
5
from docutils.parsers.rst import directives
6
from sphinx.util.compat import Directive
7
8
9
10
class sagecellserver(nodes.General, nodes.Element):
11
pass
12
13
14
def html_visit_sagecellserver_node(self, node):
15
self.body.append("<div class='sage'>")
16
self.body.append("<script type='text/x-sage'>")
17
self.body.append(node['python_code'])
18
self.body.append("</script>")
19
self.body.append("</div>")
20
21
22
def html_depart_sagecellserver_node(self, node):
23
pass
24
25
26
def latex_visit_sagecellserver_node(self, node):
27
if node["is_verbatim"] == "True":
28
self.body.append("\n\n")
29
self.body.append("\\begin{verbatim}\n")
30
self.body.append(node['python_code'])
31
self.body.append("\n\end{verbatim}")
32
self.body.append("\n\n")
33
else:
34
self.body.append("\n\\textbf{***SAGE CELL***}\n")
35
36
37
def latex_depart_sagecellserver_node(self, node):
38
pass
39
40
41
class SageCellServer(Directive):
42
has_content = True
43
required_arguments = 0
44
optional_arguments = 2
45
option_spec = {
46
"prompt_tag": directives.unchanged,
47
"is_verbatim": directives.unchanged,
48
}
49
50
def run(self):
51
if "prompt_tag" in self.options:
52
annotation = self.options.get("prompt_tag")
53
else:
54
annotation = "False"
55
56
if "is_verbatim" in self.options:
57
is_verbatim = self.options.get("is_verbatim")
58
else:
59
is_verbatim = "True"
60
61
content_list = self.content
62
63
if annotation == "False":
64
content_list = map(lambda x: x.replace("sage: ", "").replace("... ", ""), content_list)
65
66
node = sagecellserver()
67
node['is_verbatim'] = is_verbatim
68
node['python_code'] = '\n'.join(content_list)
69
70
return [node]
71
72
73
def setup(app):
74
app.add_node(sagecellserver,
75
html = (html_visit_sagecellserver_node, html_depart_sagecellserver_node),
76
latex = (latex_visit_sagecellserver_node, latex_depart_sagecellserver_node))
77
app.add_directive("sagecellserver", SageCellServer)
78
79
80
81
82