- Alectryon is now compatible with Python 3.10, Sphinx 6.1.3, Docutils 0.19, and Pygments 2.14 (other reasonably recent versions should still work). [39535f4]
- Alectryon now supports Lean 4. [GH-76]
- Alectryon now has partial support for Lean 3. [GH-64]
- JSON recordings (produced by
--backend json
) can now be used as inputs to generate webpages or highlighted snippets. [c69b08ee] - Alectryon's cache format has changed to support documents with multiple languages. Caches created with previous versions of Alectryon can still be read and do not need to be regenerated. [d376077b]
- Alectryon can now compile Coq documents without running proofs nor recording Coq's output. This is useful for quick experimentation. [GH-52] [6f4ae202]
- Alectryon can now compile Coq documents with
coqc
instead ofSerAPI
. The results do not include goals or messages. This is useful when trying out a version of Coq that SerAPI does not support yet. [GH-60] [735e72b9] - Per-document Coq syntax-highlighting rules added to the docinfo section at the beginning of each document are now prefixed with
alectryon/pygments/coq/
instead ofalectryon/pygments/
(the legacy prefix is still supported). [3a9ffe6d] - A new extension of the marker-placement mini-language allows authors to attach properties to parts of a proof; for example,
.. coq:: .s(Extraction).msg[lang]=haskell
highlights all messages produced byExtraction
commands using the Haskell lexer instead of the usual Coq lexer. [409fa6c3] - A new
massert
directive silently provides a simple form of unit-testing by silently checking a collection of marker-placement references, thus confirming that the prover's output matches user-provided search patterns. [bc2d8a42] [GH-63] - A new
mquote
directive complements themquote
role by allowing authors to quote parts of a proof as a block (themquote
role generates inline text). [e0c9eda5] - Alectryon now accepts a
--pygments-style
flag to chose which Pygments code-highlighting style to use. It also honors the Sphinx configuration optionpygments_style
. [GH-58] [63539edd] - Alectryon now exits with an informative error code (
10
+ the level of the most severe Docutils error). [GH-57] [dffde22c]
- Multiple APIs have been generalized to allow working with languages other than Coq and drivers other than SerAPI. In particular,
docutils.AlectryonTransform.SERTOP_ARGS
is nowdocutils.AlectryonTransform.DRIVER_ARGS['sertop']
[735e72b9];transforms.DEFAULT_TRANSFORMS
is nowtransforms.DEFAULT_TRANSFORMS["coq"]
[370b8206]; docinfo headers for custom highlighting now use the prefixalectryon/pygments/coq/
instead ofalectryon/pygments/
[a58a0449] (backwards-compatible); caches are now partitioned by language [d376077b] (backwards-compatible);html.gen_banner
now takes a list ofDriverInfo
instances (renamed fromGeneratorInfo
in [2ce6c0a4]) instead of a single one [d376077b];--backend json
now writes files named.v.io.json
instead of.io.json
; and--frontend json
is now--frontend coq.json
[] (backwards-compatible). - SerAPI-specific parts of the
core
module have been moved to a newserapi
module. [91058a61] - The Pygments stylesheets generated by Alectryon were renamed from
tango_subtle.sty
andtango_subtle.css
topygments.sty
andpygments.css
to reflect the fact that the style is not hardcoded any more. [9c15544f] Instead, these stylesheets are now generated dynamically based on the style chosen using the--pygments-style
flag or thepygments_style
option indocutils.conf
. [63539edd] The filesassets/tango_subtle.*
have been removed. [cea4ed47]
- Alectryon will now copy assets (CSS and STY files) in the directory of the output file (rather than that of the input file) when no
--output-directory
is specified. This only matters if an output file is specified using-o
(otherwise, the directory of the output file is the same as the input file, so the new behavior matches the old one). [6a35af22]
- Spacing and line breaks in LaTeX documents generated by Alectryon are now more consistent, especially in
no-out
blocks. [91fc735, bc4f408]
- Fix line breaking between long hypotheses in LuaLaTeX. [cf0596c]
- EXPERIMENTAL A new mini-language lets authors show or hide specific sentences, hypotheses, and goals within a fragment of Coq code. The same language can be used in conjunction with a new
:mref:
role to place markers and create references to a subpart of a goal, and with a new:mquote:
role to replicate subparts of a goal inline. [8a02bce, 14f45b7, 4f91484] [GH-36, GH-2] - Alectryon's LaTeX preamble has been rewritten to improve line breaking between and within hypotheses. [3325d55]
.. coq::
directives now accept:class:
and:name:
arguments. [df6ff35, 7cf03d6]- A new
--long-line-threshold
flag controls the line length over which Alectryon will issue “long line” warnings. [0286051] - A new
--cache-compression
flag enables compression of generated cache files. This typically yields space savings of over 95%. [GH-35] - A new
--html-minification
flag enables the generation of more compact HTML files. Minified HTML files use backreferences to refer to repeated goals and hypotheses (these backreferences are resolved at display time using Javascript) and more succinct markup (full markup is rebuilt dynamically at page load). This typically saves 70-90% of the generated file size, and nearly as much on HTML generation time on page load times. [GH-35] - HTML5, XeLaTeX and LuaLaTeX outputs are now supported (
--latex-dialect
,--html-dialect
). [c576ae8]
- Fix parsing of reST docinfo fields for custom highlighting (:alectryon/pygments/…:). [33df0f2]
- Improvements to goals rendering in HTML may cause very slight alignment changes. Use
.alectryon-io .goal-separator { height: calc(1em + 1px); }
to revert to the previous alignment (modulo rounding errors). - The LaTeX markup of hypotheses has changed:
alectryon@hyp
is now a macro, not an environment. - Docutils option
"syntax_highlight"
now defaults to"short"
when using Alectryon's CLI or its custom HTML writer. That is, inline :coq: roles now produce short-form CSS Pygments class names when processed usingalectryon.docutils
or the CLI. [72749bd] - The HTML markup for
alectryon-io
blocks has been simplified to save space in generated files (may affect third-party stylesheets). Specifically, the.highlight
class is now applied to whole.alectryon-io
blocks;.hyp-body-block
and.hyp-type-block
are now.hyp-body
and.hyp-type
; and the following classes have been removed:.goal-hyp
(use.goal-hyps > span
),.hyp-name
(use.goal-hyps var
),.hyp-body
(use.hyp-body > span
),.hyp-type
(use.hyp-type > span
),.hyp-punct
(use.goal-hyps b
or.hyp-type > b
and.hyp-body > b
),.alectryon-output-stycky-wrapper
(use.alectryon-output > div
),.alectryon-extra-goal-label
(use.alectryon-extra-goals > .goal-separator
). [59563f1, dc4b128, 28a004e] json.Cache
in modulealectryon.json
now takes arbitrarymetadata
instead ofsertop_args
. [56ca103]json_of_annotated
andannotated_of_json
in modulealectryon.json
are nowPlainSerializer.encode
andPlainSerializer.decode
. [c1076cc]
- Fix an API breakage introduced by the implementation LaTeX export (
AlectryonPostTransform
was only registered for Docutils and Sphinx, but not for other document processors like Pelican; the updated implementation registers it unconditionally). [4cc19b9]
- Caching is now supported for all documents, not just those processed through docutils (
--cache-directory
). [c3dfa6b] - (Experimental) LaTeX export now works for full reST and Coq documents, not just snippets. [GH-47]
- Alectryon is now on PyPI. [GH-46]
- alectryon.el is now on MELPA. [melpa/melpa#7554]
- CSS classes have been renamed from
.coq-…
to.alectryon-…
. - CSS class
alectryon-header
is nowalectryon-banner
. - The undocumented
alectryon-header
has been removed.