Skip to content

Commit 3a9ffe6

Browse files
committed
docutils: Add a /coq/ prefix to pygments settings in reST field lists
1 parent 2ac20a6 commit 3a9ffe6

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

README.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ When compiling reStructuredText documents, you can add per-document highlighting
518518

519519
.. code-block:: rst
520520
521-
:alectryon/pygments/tacn: intuition_eauto simplify invert
522-
:alectryon/pygments/tacn-solve: map_tauto solve_eq
521+
:alectryon/pygments/coq/tacn: intuition_eauto simplify invert
522+
:alectryon/pygments/coq/tacn-solve: map_tauto solve_eq
523523
524524
Interactivity
525525
-------------

alectryon/docutils.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,21 @@ def _node_error(document, node, msg):
148148
err.add_backref(pbid)
149149
node.replace_self(pb)
150150

151+
def _format_errors(src, *errs):
152+
msg = "\n".join(map(str, errs))
153+
msg = "\n" + core.indent(msg, " ") if len(errs) > 1 else " " + msg
154+
if isinstance(src, nodes.Node):
155+
src = getattr(src, "text", src.rawsource)
156+
return "In {}:{}".format(src, msg)
157+
151158
def _try(document, fn, node, *args, **kwargs):
152159
try:
153160
return fn(node, *args, **kwargs)
154161
except transforms.CollectedErrors as e:
155162
errs = e.args
156163
except ValueError as e:
157164
errs = [e]
158-
msg = "\n".join(map(str, errs))
159-
msg = "\n" + core.indent(msg, " ") if len(errs) > 1 else " " + msg
160-
msg = "In {}:{}".format(getattr(node, "text", node.rawsource), msg)
161-
_node_error(document, node, msg)
165+
_node_error(document, node, _format_errors(node, *errs))
162166
return None
163167

164168
# LATER: dataclass
@@ -203,18 +207,20 @@ class Config:
203207
def __init__(self, document):
204208
self.tokens = {}
205209
self.sertop_args = []
206-
self.read_docinfo(document)
210+
self.document = document
211+
self.read_docinfo()
207212

208-
def read_docinfo(self, document):
213+
def read_docinfo(self):
209214
# Sphinx doesn't translate ``field_list`` to ``docinfo``
210215
selector = lambda n: isinstance(n, (nodes.field_list, nodes.docinfo))
211-
for di in document.traverse(selector):
216+
for di in self.document.traverse(selector):
212217
for field in di.traverse(nodes.field):
213218
name, body = field.children
214219
field.text = "`:{}:`".format(name.rawsource)
215220
field.rawsource = ":{}: {}".format(name.rawsource, body.rawsource)
216-
_try(document, self.parse_docinfo_field, field, name.rawsource, body.rawsource)
217-
for di in document.traverse(selector):
221+
_try(self.document, self.parse_docinfo_field,
222+
field, name.rawsource, body.rawsource)
223+
for di in self.document.traverse(selector):
218224
errors = []
219225
for field in di.traverse(nodes.problematic):
220226
errors.append(field)
@@ -226,7 +232,13 @@ def read_docinfo(self, document):
226232

227233
def parse_docinfo_field(self, node, name, body):
228234
if name.startswith("alectryon/pygments/"):
229-
token = name[len("alectryon/pygments/"):]
235+
name = name[len("alectryon/pygments/"):]
236+
if "/" not in name:
237+
name = "coq/" + name # legacy syntax doesn't have coq/
238+
MSG = "Missing language name (did you mean `:alectryon/pygments/{}:`?)."
239+
msg = _format_errors(node, MSG.format(name))
240+
self.document.reporter.warning(msg, base_node=node, line=node.line)
241+
lang, token = name.split("/", maxsplit=1)
230242
resolve_token(token) # Check that this is a valid token
231243
# LATER: It would be nice to support multi-words tokens. Using
232244
# ``shlex.split(body)`` instead of ``body.split()`` would work find
@@ -834,7 +846,7 @@ def coq_code_role(role, rawtext, text, lineno, inliner,
834846
]
835847

836848
def _role_error(inliner, rawtext, msg, lineno):
837-
msg = "In {}: {}".format(rawtext, msg)
849+
msg = _format_errors(rawtext, msg)
838850
err = inliner.reporter.error(msg, line=lineno)
839851
return [inliner.problematic(rawtext, rawtext, err)], [err]
840852

recipes/custom_highlighting.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
Custom highlighting
44
=====================
55
6-
:alectryon/pygments/tacn: app but_first
7-
:alectryon/pygments/tacn-solve: must_eauto
6+
:alectryon/pygments/coq/tacn: app but_first
7+
:alectryon/pygments/coq/tacn-solve: must_eauto
88
99
This file shows how to customize syntax highlighting in Alectryon. To compile it, use::
1010

0 commit comments

Comments
 (0)