Commit Graph

102 Commits

Author SHA1 Message Date
Daniel Sidhion
a1581a3647
doc: fix and simplify stylesheets for the manuals, fix nrd bug (#295847)
* doc: fix and simplify stylesheets for the manuals, fix nrd bug

* Add anchorjs script to add links on section headers

* Fix another nrd bug, address style changes

* Use span instead of a for inline span syntax
2024-03-16 20:16:59 +01:00
Johannes Kirschbauer
48a2178434 adds block_args for autogenerated ids from trustworthy sources 2024-01-29 22:29:39 +01:00
Sandro Jäckel
e2702f5aee
treewide: don't use python3Minimal where it is not required
Building a python environment with python3Minimal requires hydra
to bootstrap pip and build all packages used in the environment
which would otherwise not be built. This reduces cache re-use and duplicates things.

Also common dependencies normally included in python itself
are not properly checked and can cause hard to debug errors
because everyone just assumes those modules are there.
2023-12-21 02:21:48 +01:00
pennae
548f98f4fb nixos-render-docs: wrap code in <pre><code>, not <pre>
newer hljs stylesheets work best with <pre><code> wrapping, and it's
semantically more accurate as well.
2023-12-01 18:31:41 +01:00
pennae
229e6eb8ed nixos-render-docs: don't drop code languages anymore
this was needed because the nixos/nixpkgs manuals, for some
reason, *did* drop the languages. we no longer have to render exactly as
the docbook toolchain did, so we can finally fix this bug.
2023-12-01 18:20:24 +01:00
Valentin Gagarin
0efe7d42dc
Merge pull request #269942 from considerate/nixos-render-docs-header 2023-11-26 19:35:23 +01:00
Viktor Kronvall
98ba0aed73 nixos-render-docs: header and footer as list[str] 2023-11-26 01:44:06 +09:00
Viktor Kronvall
9bfa2e36a2 nixos-render-docs: take header and footer on CLI
This commit generalizes nixos-render-docs for manpage generation
to take the header preamble and footer postscript as file paths
as CLI flags --header and --footer.
2023-11-26 01:44:06 +09:00
pennae
14d4491000 nixos-render-docs: fix mypy test
markdown-it-py somewhat recently added more type annotations to their
code, obsoleting a few lint-ignores in nrd.
2023-11-25 16:15:45 +01:00
pennae
e11cac622e nixos-render-docs: fix tests for markdown-it-py 3
parsing of escaped text has changed internally, but apart from Token
field contents that we only inspect in tests the change is *mostly*
invisible to us. some bits of documentation now parse differently and
need to be adjusted, but those were slightly questionable to begin with.
2023-09-27 15:35:23 +02:00
pennae
9c0803f84d nixos-render-docs: fix empty inlines
`children` only has to be not-None, not also not-[]. empty table cells
would can produce an empty inline token and cause these checks to fail,
even though the token actually is totally valid.

showed up in
https://github.com/NixOS/nixpkgs/pull/246956#discussion_r1283146120.
2023-08-03 18:36:34 +02:00
pennae
538b3d1b3c nixos-render-docs: add footnote support
this is only used in the stdenv chapter, but footnotes could be useful
in other places as well. since markdown-it has a plugin to parse
footnote syntax we may as well just support them even if they're rare.
2023-07-01 20:27:29 +02:00
pennae
ac7be1f106 nixos-render-docs: add support for tables 2023-07-01 20:27:29 +02:00
pennae
8fb4cf8b7c nixos-render-docs: add support for figures 2023-07-01 20:27:29 +02:00
pennae
e5e738b72a nixos-render-docs: genericize block numbering
examples and figures behave identically regarding numbering and titling,
they just don't share a common number space. make the numbering/titling
function generic over block types now so figures can just use it.
2023-07-01 20:27:29 +02:00
pennae
8c2d14a6b8 nixos-render-docs: add image support
currently only supported for html. docbook could also support images,
but it's on the way out for manual generation anyway so we won't add
image support there. options docs can't use images because they also
target manpages, which leaves no viable users.
2023-07-01 20:27:28 +02:00
pennae
b962ff92ff nixos-render-docs: add support for section tocs
the nixpkgs manual uses section tocs for eg the nixpkgs library function
reference. we will only not emit tocs for subsections at this point, but
maybe we should consider doing so in the future.
2023-07-01 18:21:16 +02:00
pennae
2bf3bb4f6b nixos-render-docs: hide nav headers/footers if not needed
there's not point in rendering these if we're rendering to a single file
for all content.
2023-07-01 17:31:29 +02:00
pennae
effbaf0ab4 nixos-render-docs: maybe omit link target files
docbook always emits intra-file links if only a single file is emitted.
it doesn't seem to do this for intra-file links when multiple files are
emitted, so we don't do that yet either.
2023-07-01 17:31:29 +02:00
pennae
8c33134465 nixos-render-docs: don't double-escape link titles 2023-07-01 17:31:29 +02:00
Pol Dellaiera
246000e996 nixos/manual: fix html <p> tag closure 2023-06-28 13:50:48 +02:00
pennae
03ca5a47c1 nixos-render-docs: add missing head tag to html output 2023-06-26 21:13:11 +02:00
pennae
c8b4e5d557
Merge pull request #237557 from pennae/dedocbookify-nixos
nixos/doc: dedocbookify
2023-06-19 14:05:03 +02:00
Victor Engmark
7b396875bb nixos-render-docs: De-lint using ruff --fix
This automated de-linting has applied a few different refactors:

- Remove unused imports and variables
- Change f-strings with no variables to regular strings
- Remove trailing semicolon
2023-06-14 14:39:00 +12:00
pennae
34eeac5544 nixos-render-docs: default to markdown for options
docbook is now gone and we can flip the defaults. we won't keep the
command line args around (unlike the make-options-docs argument) because
nixos-render-docs should not be considered an exposed API.
2023-06-13 16:56:31 +02:00
pennae
5f35ae16ec nixos-render-docs: remove literalDocBook support
with literalDocBook itself gone we can also remove the support code in
nixos-render-docs.
2023-06-13 16:56:30 +02:00
pennae
407f6196a2 nixos-render-docs: add examples support
the nixos manual contains enough examples to support them as a proper
toc entity with specialized rendering, and if in the future the nixpkgs
wants to use nixos-render-docs we will definitely have to support them.
this also allows us to restore some examples that were lost in previous
translation steps because there were too few to add renderer support
back then.
2023-05-03 19:58:21 +02:00
Sandro Jäckel
d1a388ae8e
nixos-render-docs: use packageOverrides to construct python packages 2023-03-14 00:12:34 +01:00
pennae
36f04733dd nixos-render-docs: add manual html converter
this converter is currently supposed to be able to reproduce the
docbook-generated html DOMs exactly, though not necessarily the
html *files*. it mirrors many docbook behaviours that seem rather odd,
such as top-level sections in chapters using the same heading depth as
understood by html as their parent chapters do. over time we can
hopefully remove all special casing needed to reproduce docbook
rendering, but for now at least it doesn't hurt *too* much.
2023-02-21 18:26:41 +01:00
pennae
feaa97e5dc nixos-render-docs: render directly from file to file
this will be necessary for html since there we have to do chunking into
multiple files ourselves. writing one file from the caller of the
converter and all others from within the converter is unnecessarily
spread out, and returning a dict of file names and their contents is not
quite as meaningful for docbook (which has only one file to begin with).
2023-02-21 18:26:41 +01:00
pennae
d520d55dee nixos-render-docs: add options html renderer
it's not hooked up to anything yet, but that will come soon. there's a
bit of docbook compat here that must be interoperable with the actual
docbook exporter, but luckily it's not all that much.
2023-02-21 18:26:41 +01:00
pennae
82e62614e9 nixos-render-docs: add html renderer
the basic html renderer. it doesn't have all the docbook compatibility
codes embedded into it, but there is a good amount. this renderer is
unaware of manual structure and does not traverse structural include
tokens (if it finds any it'll just fail), that task falls to derived
classes. once we have more uses for structural includes than just the
manual we may revisit this decision.
2023-02-21 18:26:41 +01:00
pennae
7a74ce51a1 nixos-render-docs: add toc generator
the docbook toolchain uses docbook-xsl to generate its TOC, our html
renderer will have to do this on its own. this generator uses a very
straight-forward algorithm of only inspecting headings, but anything
else could be inspected as well. (examples come to mind, but those do
not have titles and would thus make for bad toc entries)

we also use path information (that will be taken from include block args
in the html renderer) to produce navigation information. the algorithm
we use mirrors what docbook does, linking to the next/previous files in
depth-first toc order.

toc entries are linked to the tokens they refer to for easy use later.
2023-02-21 18:26:41 +01:00
pennae
23dc31a975 nixos-render-docs: allow for options in include blocks
while docbook relies on external chunk-toc info to do chunking of the
rendered manual we have nothing of the sort for html. there it seems
easiest to add annotations to blocks to create new chunks. such
annotations could be extended to docbook to create the chunk-toc instead
of passing it in externally, but with docbook on the way out that seems
like a waste of effort.
2023-02-21 18:26:41 +01:00
pennae
768794d6c1 nixos-render-docs: check book structure
text content in the toplevel file of a book will not render properly.
the first proper element will be a preface, part, or chapter anyway, and
those require includes to produce.

parts do not currently allow headings in the part file itself, but
that's mainly a renderer limitation. we can add support for headings in
part intros when we need them

in all other cases includes must be followed by either another include,
a heading, or end of file. text content could not be properly linked to
from a TOC without a preceding heading.
2023-02-21 18:26:40 +01:00
pennae
163b667352 nixos-render-docs: require headings to have ids
without this we cannot build a TOC to arbitrary depth without generating
ids for headings, but generated ids are fragile and liable to either
break or point to different things if the manual changes shape. we
already have the convention that all headings should have an id, this
formalizes it.
2023-02-21 18:26:40 +01:00
pennae
ba20114460 nixos-render-docs: check heading continuity
while not technically necessary for correct rendering of *contents* we
do need to disallow heading levels being skipped to build a correct
TOC. treating headings that have skipped a number of levels to actually
be headings that many levels up only gets confusing, and inserting
artifical intermediate headings suffers from problems, such as which ids
to use and what to call them.
2023-02-21 18:26:40 +01:00
pennae
7b0824c003 nixos-render-docs: check heading presence during parsing
check that all required headings are present during parsing, not during
rendering. building a correct TOC will need this since every TOC entry
needs a heading to set its title, and every included substructure needs
a title.

also improve the error message on repeated title headings slightly,
giving the end line turns out to not be very useful.
2023-02-21 18:26:40 +01:00
pennae
a7c25bb01f nixos-render-docs: add Freezable class
for most of our data classes we can use dataclasses.dataclass with
frozen=True or even plain named tuples. the TOC structure we'll need to
generate proper navigation links is most easily represented and used as
a cyclic structure though, and for that we can use neither. if we want
to make the TOC structures immutable (which seems like a good idea)
we'll need a hack of *some* kind, and this hack seems like the least intrusive.
2023-02-21 18:26:40 +01:00
pennae
2ab8e742a5 nixos-render-docs: move recursive manual parsing to base class
the html renderer will need all of these functions as well. some
extensions will be needed, but we'll add those as they become necessary.
2023-02-21 18:26:40 +01:00
pennae
5b8be28e66 nixos-render-docs: don't render options during manual parsing
we should really be rendering options at *rendering* time, not at parse
time. currently this is just an academic exercise, but the html renderer
will have to inspect the options.json data after the entire document has
been parsed, but before anything gets rendered.
2023-02-21 18:26:40 +01:00
pennae
068916ae8f nixos-render-docs: keep revision in renderer, not converter
ultimately it's the renderer that needs it, for the options rendering
that will be simplified in a bit.
2023-02-21 18:26:39 +01:00
pennae
6f253fc70b nixos-render-docs: drop options, env parameters
these weren't used for anything. options never was (and does not contain
any information for the renderer that we *want* to honor), and env is
not used because typed renderer state is much more useful for all our cases.
2023-02-21 18:26:39 +01:00
pennae
0236dcb59f nixos-render-docs: don't use markdown-it RendererProtocol
our renderers carry significantly more state than markdown-it wants to
easily cater for, and the html renderer will need even more state still.
relying on the markdown-it-provided rendering functions has already
proven to be a nuisance, and since parsing and rendering are split well
enough we can just replace the rendering part with our own stuff outright.

this also frees us from the tyranny of having to set instance variables
before calling super().__init__ just to make sure that the renderer
creation callback has access to everything it needs.
2023-02-21 18:26:39 +01:00
pennae
417dd2ad16 nixos-render-docs: add options asciidoc converter
same reasoning as for the earlier commonmark converter.
2023-02-21 18:19:00 +01:00
pennae
4d3aef762f nixos-render-docs: add options commonmark converter
the old method of pasting parts of options.json into a markdown document
and hoping for the best no longer works now that options.json contains
more than just docbook. given the infrastructure we have now we can
actually render options.md properly, so we may as well do that.
2023-02-21 18:19:00 +01:00
pennae
6c182075bb nixos-render-docs: forbid attrspans and examples in options
inline anchors are not allowed in option docs per the manual, and the
sole class we current have (.keycap) is never used anyway. disallow them
for now to avoid future surprises.

the same goes for examples, which aren't even documented in the manual yet.
2023-02-21 18:19:00 +01:00
pennae
82d066ffe3 nixos-render-docs: refactor option docs restrictions
move the restrictions we care about into a mixin class. a few more
restrictions will appear soon and a few new converters as well, the
renderers of which need not have these restrictions already baked in by
accident (like the manpage renderer does right now).
2023-02-21 18:19:00 +01:00
pennae
45619b3c4a nixos-render-docs: extend md_make_code
add the ability to set the info string for a newly created fenced code
block, and a flag to always emit a fenced block. the commonmark
converter will need this to faithfully recreate fenced and indented code
blocks.
2023-02-21 18:19:00 +01:00
pennae
895d9e69dd nixos-render-docs: extract md code block factory
the commonmark exporter can make good use once it appears.
2023-02-21 18:19:00 +01:00