diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py deleted file mode 100644 index 671cc24e0673..000000000000 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/docbook.py +++ /dev/null @@ -1,234 +0,0 @@ -from collections.abc import Mapping, Sequence -from typing import cast, Optional, NamedTuple - -from markdown_it.token import Token -from xml.sax.saxutils import escape, quoteattr - -from .md import Renderer - -class Deflist: - has_dd = False - -class Heading(NamedTuple): - container_tag: str - level: int - # special handling for titles: whether partinfo was already closed from elsewhere - # or still needs closing. - partintro_closed: bool = False - -class DocBookRenderer(Renderer): - _link_tags: list[str] - _deflists: list[Deflist] - _headings: list[Heading] - _attrspans: list[str] - - def __init__(self, manpage_urls: Mapping[str, str]): - super().__init__(manpage_urls) - self._link_tags = [] - self._deflists = [] - self._headings = [] - self._attrspans = [] - - def render(self, tokens: Sequence[Token]) -> str: - result = super().render(tokens) - result += self._close_headings(None) - return result - def renderInline(self, tokens: Sequence[Token]) -> str: - # HACK to support docbook links and xrefs. link handling is only necessary because the docbook - # manpage stylesheet converts - in urls to a mathematical minus, which may be somewhat incorrect. - for i, token in enumerate(tokens): - if token.type != 'link_open': - continue - token.tag = 'link' - # turn [](#foo) into xrefs - if token.attrs['href'][0:1] == '#' and tokens[i + 1].type == 'link_close': # type: ignore[index] - token.tag = "xref" - # turn into links without contents - if tokens[i + 1].type == 'text' and tokens[i + 1].content == token.attrs['href']: - tokens[i + 1].content = '' - - return super().renderInline(tokens) - - def text(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return escape(token.content) - def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def hardbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "\n" - def softbreak(self, token: Token, tokens: Sequence[Token], i: int) -> str: - # should check options.breaks() and emit hard break if so - return "\n" - def code_inline(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return f"{escape(token.content)}" - def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return f"{escape(token.content)}" - def link_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - self._link_tags.append(token.tag) - href = cast(str, token.attrs['href']) - (attr, start) = ('linkend', 1) if href[0] == '#' else ('xlink:href', 0) - return f"<{token.tag} {attr}={quoteattr(href[start:])}>" - def link_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return f"" - def list_item_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def list_item_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "\n" - # HACK open and close para for docbook change size. remove soon. - def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - spacing = ' spacing="compact"' if token.meta.get('compact', False) else '' - return f"\n" - def bullet_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "\n" - def em_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def em_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def strong_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def strong_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str: - info = f" language={quoteattr(token.info)}" if token.info != "" else "" - return f"{escape(token.content)}" - def blockquote_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "
" - def blockquote_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "
" - def note_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def note_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def caution_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def caution_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def important_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def important_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def tip_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def tip_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def warning_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def warning_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - # markdown-it emits tokens based on the html syntax tree, but docbook is - # slightly different. html has
{
{
}}
, - # docbook has {} - # we have to reject multiple definitions for the same term for time being. - def dl_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - self._deflists.append(Deflist()) - return "" - def dl_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - self._deflists.pop() - return "" - def dt_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - self._deflists[-1].has_dd = False - return "" - def dt_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def dd_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - if self._deflists[-1].has_dd: - raise Exception("multiple definitions per term not supported") - self._deflists[-1].has_dd = True - return "" - def dd_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def myst_role(self, token: Token, tokens: Sequence[Token], i: int) -> str: - if token.meta['name'] == 'command': - return f"{escape(token.content)}" - if token.meta['name'] == 'file': - return f"{escape(token.content)}" - if token.meta['name'] == 'var': - return f"{escape(token.content)}" - if token.meta['name'] == 'env': - return f"{escape(token.content)}" - if token.meta['name'] == 'option': - return f"" - if token.meta['name'] == 'manpage': - [page, section] = [ s.strip() for s in token.content.rsplit('(', 1) ] - section = section[:-1] - man = f"{page}({section})" - title = f"{escape(page)}" - vol = f"{escape(section)}" - ref = f"{title}{vol}" - if man in self._manpage_urls: - return f"{ref}" - else: - return ref - raise NotImplementedError("md node not supported yet", token) - def attr_span_begin(self, token: Token, tokens: Sequence[Token], i: int) -> str: - # we currently support *only* inline anchors and the special .keycap class to produce - # docbook elements. - (id_part, class_part) = ("", "") - if s := token.attrs.get('id'): - id_part = f'' - if s := token.attrs.get('class'): - if s == 'keycap': - class_part = "" - self._attrspans.append("") - else: - return super().attr_span_begin(token, tokens, i) - else: - self._attrspans.append("") - return id_part + class_part - def attr_span_end(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return self._attrspans.pop() - def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - start = f' startingnumber="{token.attrs["start"]}"' if 'start' in token.attrs else "" - spacing = ' spacing="compact"' if token.meta.get('compact', False) else '' - return f"" - def ordered_list_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def heading_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - hlevel = int(token.tag[1:]) - result = self._close_headings(hlevel) - (tag, attrs) = self._heading_tag(token, tokens, i) - self._headings.append(Heading(tag, hlevel)) - attrs_str = "".join([ f" {k}={quoteattr(v)}" for k, v in attrs.items() ]) - return result + f'<{tag}{attrs_str}>\n' - def heading_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - heading = self._headings[-1] - result = '' - if heading.container_tag == 'part': - # generate the same ids as were previously assigned manually. if this collides we - # rely on outside schema validation to catch it! - maybe_id = "" - assert tokens[i - 2].type == 'heading_open' - if id := cast(str, tokens[i - 2].attrs.get('id', "")): - maybe_id = " xml:id=" + quoteattr(id + "-intro") - result += f"" - return result - def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - if id := cast(str, token.attrs.get('id', '')): - id = f'xml:id={quoteattr(id)}' if id else '' - return f'' - def example_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def example_title_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - def example_title_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "" - - def _close_headings(self, level: Optional[int]) -> str: - # we rely on markdown-it producing h{1..6} tags in token.tag for this to work - result = [] - while len(self._headings): - if level is None or self._headings[-1].level >= level: - heading = self._headings.pop() - if heading.container_tag == 'part' and not heading.partintro_closed: - result.append("") - result.append(f"") - else: - break - return "\n".join(result) - - def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> tuple[str, dict[str, str]]: - attrs = {} - if id := token.attrs.get('id'): - attrs['xml:id'] = cast(str, id) - return ("section", attrs) diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py index af2c5af0b153..c277d28ca5e4 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual.py @@ -13,7 +13,6 @@ from typing import Any, Callable, cast, ClassVar, Generic, get_args, NamedTuple from markdown_it.token import Token from . import md, options -from .docbook import DocBookRenderer, Heading from .html import HTMLRenderer, UnresolvedXrefError from .manual_structure import check_structure, FragmentType, is_include, make_xml_id, TocEntry, TocEntryType, XrefTarget from .md import Converter, Renderer @@ -200,74 +199,6 @@ class RendererMixin(Renderer): def included_options(self, token: Token, tokens: Sequence[Token], i: int) -> str: raise NotImplementedError() -class ManualDocBookRenderer(RendererMixin, DocBookRenderer): - def __init__(self, toplevel_tag: str, revision: str, manpage_urls: Mapping[str, str]): - super().__init__(toplevel_tag, revision, manpage_urls) - - def _render_book(self, tokens: Sequence[Token]) -> str: - assert tokens[1].children - assert tokens[4].children - if (maybe_id := cast(str, tokens[0].attrs.get('id', ""))): - maybe_id = "xml:id=" + xml.quoteattr(maybe_id) - return (f'' - f' {self.renderInline(tokens[1].children)}' - f' {self.renderInline(tokens[4].children)}' - f' {super(DocBookRenderer, self).render(tokens[6:])}' - f'') - - def _heading_tag(self, token: Token, tokens: Sequence[Token], i: int) -> tuple[str, dict[str, str]]: - (tag, attrs) = super()._heading_tag(token, tokens, i) - # render() has already verified that we don't have supernumerary headings and since the - # book tag is handled specially we can leave the check this simple - if token.tag != 'h1': - return (tag, attrs) - return (self._toplevel_tag, attrs | { - 'xmlns': "http://docbook.org/ns/docbook", - 'xmlns:xlink': "http://www.w3.org/1999/xlink", - }) - - def _included_thing(self, tag: str, token: Token, tokens: Sequence[Token], i: int) -> str: - result = [] - # close existing partintro. the generic render doesn't really need this because - # it doesn't have a concept of structure in the way the manual does. - if self._headings and self._headings[-1] == Heading('part', 1): - result.append("") - self._headings[-1] = self._headings[-1]._replace(partintro_closed=True) - # must nest properly for structural includes. this requires saving at least - # the headings stack, but creating new renderers is cheap and much easier. - r = ManualDocBookRenderer(tag, self._revision, self._manpage_urls) - for (included, path) in token.meta['included']: - try: - result.append(r.render(included)) - except Exception as e: - raise RuntimeError(f"rendering {path}") from e - return "".join(result) - def included_options(self, token: Token, tokens: Sequence[Token], i: int) -> str: - conv = options.DocBookConverter(self._manpage_urls, self._revision, 'fragment', - token.meta['list-id'], token.meta['id-prefix']) - conv.add_options(token.meta['source']) - return conv.finalize(fragment=True) - - # TODO minimize docbook diffs with existing conversions. remove soon. - def paragraph_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return super().paragraph_open(token, tokens, i) + "\n " - def paragraph_close(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return "\n" + super().paragraph_close(token, tokens, i) - def code_block(self, token: Token, tokens: Sequence[Token], i: int) -> str: - return f"\n{xml.escape(token.content)}" - def fence(self, token: Token, tokens: Sequence[Token], i: int) -> str: - info = f" language={xml.quoteattr(token.info)}" if token.info != "" else "" - return f"\n{xml.escape(token.content)}" - -class DocBookConverter(BaseConverter[ManualDocBookRenderer]): - INCLUDE_ARGS_NS = "docbook" - - def __init__(self, manpage_urls: Mapping[str, str], revision: str): - super().__init__() - self._renderer = ManualDocBookRenderer('book', revision, manpage_urls) - class HTMLParameters(NamedTuple): generator: str @@ -457,7 +388,7 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer): f' ' f'' ) - # we want to look straight through parts because docbook-xsl does too, but it + # we want to look straight through parts because docbook-xsl did too, but it # also makes for more uesful top-level tocs. next_level = walk_and_emit(child, depth - (0 if child.kind == 'part' else 1)) if next_level: @@ -477,7 +408,7 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer): '' ) # we don't want to generate the "Title of Contents" header for sections, - # docbook doesn't and it's only distracting clutter unless it's the main table. + # docbook didn't and it's only distracting clutter unless it's the main table. # we also want to generate tocs only for a top-level section (ie, one that is # not itself contained in another section) print_title = toc.kind != 'section' @@ -506,12 +437,12 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer): ]) def _make_hN(self, level: int) -> tuple[str, str]: - # for some reason chapters don't increase the hN nesting count in docbook xslts. duplicate - # this for consistency. + # for some reason chapters didn't increase the hN nesting count in docbook xslts. + # originally this was duplicated here for consistency with docbook rendering, but + # it could be reevaluated and changed now that docbook is gone. if self._toplevel_tag == 'chapter': level -= 1 - # TODO docbook compat. these are never useful for us, but not having them breaks manual - # compare workflows while docbook is still allowed. + # this style setting is also for docbook compatibility only and could well go away. style = "" if level + self._hlevel_offset < 3 \ and (self._toplevel_tag == 'section' or (self._toplevel_tag == 'chapter' and level > 0)): @@ -537,7 +468,7 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer): if into: toc = TocEntry.of(fragments[0][0][0]) inner.append(self._file_header(toc)) - # we do not set _hlevel_offset=0 because docbook doesn't either. + # we do not set _hlevel_offset=0 because docbook didn't either. else: inner = outer in_dir = self._in_dir @@ -742,12 +673,6 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]): -def _build_cli_db(p: argparse.ArgumentParser) -> None: - p.add_argument('--manpage-urls', required=True) - p.add_argument('--revision', required=True) - p.add_argument('infile', type=Path) - p.add_argument('outfile', type=Path) - def _build_cli_html(p: argparse.ArgumentParser) -> None: p.add_argument('--manpage-urls', required=True) p.add_argument('--revision', required=True) @@ -761,11 +686,6 @@ def _build_cli_html(p: argparse.ArgumentParser) -> None: p.add_argument('infile', type=Path) p.add_argument('outfile', type=Path) -def _run_cli_db(args: argparse.Namespace) -> None: - with open(args.manpage_urls, 'r') as manpage_urls: - md = DocBookConverter(json.load(manpage_urls), args.revision) - md.convert(args.infile, args.outfile) - def _run_cli_html(args: argparse.Namespace) -> None: with open(args.manpage_urls, 'r') as manpage_urls: md = HTMLConverter( @@ -777,13 +697,10 @@ def _run_cli_html(args: argparse.Namespace) -> None: def build_cli(p: argparse.ArgumentParser) -> None: formats = p.add_subparsers(dest='format', required=True) - _build_cli_db(formats.add_parser('docbook')) _build_cli_html(formats.add_parser('html')) def run_cli(args: argparse.Namespace) -> None: - if args.format == 'docbook': - _run_cli_db(args) - elif args.format == 'html': + if args.format == 'html': _run_cli_html(args) else: raise RuntimeError('format not hooked up', args) diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py index 699164c8a1a8..fcd5af4ffe31 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py @@ -17,7 +17,6 @@ from . import md from . import parallel from .asciidoc import AsciiDocRenderer, asciidoc_escape from .commonmark import CommonMarkRenderer -from .docbook import DocBookRenderer from .html import HTMLRenderer from .manpage import ManpageRenderer, man_escape from .manual_structure import make_xml_id, XrefTarget @@ -184,100 +183,6 @@ class OptionDocsRestrictions: def example_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: raise RuntimeError("md token not supported in options doc", token) -class OptionsDocBookRenderer(OptionDocsRestrictions, DocBookRenderer): - # TODO keep optionsDocBook diff small. remove soon if rendering is still good. - def ordered_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - token.meta['compact'] = False - return super().ordered_list_open(token, tokens, i) - def bullet_list_open(self, token: Token, tokens: Sequence[Token], i: int) -> str: - token.meta['compact'] = False - return super().bullet_list_open(token, tokens, i) - -class DocBookConverter(BaseConverter[OptionsDocBookRenderer]): - __option_block_separator__ = "" - - def __init__(self, manpage_urls: Mapping[str, str], - revision: str, - document_type: str, - varlist_id: str, - id_prefix: str): - super().__init__(revision) - self._renderer = OptionsDocBookRenderer(manpage_urls) - self._document_type = document_type - self._varlist_id = varlist_id - self._id_prefix = id_prefix - - def _parallel_render_prepare(self) -> Any: - return (self._renderer._manpage_urls, self._revision, self._document_type, - self._varlist_id, self._id_prefix) - @classmethod - def _parallel_render_init_worker(cls, a: Any) -> DocBookConverter: - return cls(*a) - - def _related_packages_header(self) -> list[str]: - return [ - "", - " Related packages:", - "", - ] - - def _decl_def_header(self, header: str) -> list[str]: - return [ - f"{header}:", - "" - ] - - def _decl_def_entry(self, href: Optional[str], name: str) -> list[str]: - if href is not None: - href = " xlink:href=" + xml.quoteattr(href) - return [ - f"", - xml.escape(name), - "" - ] - - def _decl_def_footer(self) -> list[str]: - return [ "" ] - - def finalize(self, *, fragment: bool = False) -> str: - result = [] - - if not fragment: - result.append('') - if self._document_type == 'appendix': - result += [ - '', - ' Configuration Options', - ] - result += [ - '', - ] - - for (name, opt) in self._sorted_options(): - id = make_xml_id(self._id_prefix + name) - result += [ - "", - # NOTE adding extra spaces here introduces spaces into xref link expansions - (f"" + - f""), - "" - ] - result += opt.lines - result += [ - "", - "" - ] - - result.append("") - if self._document_type == 'appendix': - result.append("") - - return "\n".join(result) - class OptionsManpageRenderer(OptionDocsRestrictions, ManpageRenderer): pass @@ -578,15 +483,6 @@ class HTMLConverter(BaseConverter[OptionsHTMLRenderer]): return "\n".join(result) -def _build_cli_db(p: argparse.ArgumentParser) -> None: - p.add_argument('--manpage-urls', required=True) - p.add_argument('--revision', required=True) - p.add_argument('--document-type', required=True) - p.add_argument('--varlist-id', required=True) - p.add_argument('--id-prefix', required=True) - p.add_argument("infile") - p.add_argument("outfile") - def _build_cli_manpage(p: argparse.ArgumentParser) -> None: p.add_argument('--revision', required=True) p.add_argument("--header", type=Path) @@ -606,20 +502,6 @@ def _build_cli_asciidoc(p: argparse.ArgumentParser) -> None: p.add_argument("infile") p.add_argument("outfile") -def _run_cli_db(args: argparse.Namespace) -> None: - with open(args.manpage_urls, 'r') as manpage_urls: - md = DocBookConverter( - json.load(manpage_urls), - revision = args.revision, - document_type = args.document_type, - varlist_id = args.varlist_id, - id_prefix = args.id_prefix) - - with open(args.infile, 'r') as f: - md.add_options(json.load(f)) - with open(args.outfile, 'w') as f: - f.write(md.finalize()) - def _run_cli_manpage(args: argparse.Namespace) -> None: header = None footer = None @@ -663,15 +545,12 @@ def _run_cli_asciidoc(args: argparse.Namespace) -> None: def build_cli(p: argparse.ArgumentParser) -> None: formats = p.add_subparsers(dest='format', required=True) - _build_cli_db(formats.add_parser('docbook')) _build_cli_manpage(formats.add_parser('manpage')) _build_cli_commonmark(formats.add_parser('commonmark')) _build_cli_asciidoc(formats.add_parser('asciidoc')) def run_cli(args: argparse.Namespace) -> None: - if args.format == 'docbook': - _run_cli_db(args) - elif args.format == 'manpage': + if args.format == 'manpage': _run_cli_manpage(args) elif args.format == 'commonmark': _run_cli_commonmark(args) diff --git a/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py b/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py index 8cbf3dabcea2..d2f7c5cbe69e 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py +++ b/pkgs/tools/nix/nixos-render-docs/src/tests/test_headings.py @@ -2,11 +2,11 @@ import nixos_render_docs as nrd from markdown_it.token import Token -class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]): +class Converter(nrd.md.Converter[nrd.html.HTMLRenderer]): # actual renderer doesn't matter, we're just parsing. def __init__(self, manpage_urls: dict[str, str]) -> None: super().__init__() - self._renderer = nrd.docbook.DocBookRenderer(manpage_urls) + self._renderer = nrd.html.HTMLRenderer(manpage_urls, {}) def test_heading_id_absent() -> None: c = Converter({}) diff --git a/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py b/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py index f53442a96d4c..26632c276b96 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py +++ b/pkgs/tools/nix/nixos-render-docs/src/tests/test_lists.py @@ -3,11 +3,11 @@ import pytest from markdown_it.token import Token -class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]): +class Converter(nrd.md.Converter[nrd.html.HTMLRenderer]): # actual renderer doesn't matter, we're just parsing. def __init__(self, manpage_urls: dict[str, str]) -> None: super().__init__() - self._renderer = nrd.docbook.DocBookRenderer(manpage_urls) + self._renderer = nrd.html.HTMLRenderer(manpage_urls, {}) @pytest.mark.parametrize("ordered", [True, False]) def test_list_wide(ordered: bool) -> None: diff --git a/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py b/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py index fed0b1a17ac1..9499f83df525 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py +++ b/pkgs/tools/nix/nixos-render-docs/src/tests/test_options.py @@ -4,7 +4,7 @@ from markdown_it.token import Token import pytest def test_option_headings() -> None: - c = nixos_render_docs.options.DocBookConverter({}, 'local', 'none', 'vars', 'opt-') + c = nixos_render_docs.options.HTMLConverter({}, 'local', 'vars', 'opt-', {}) with pytest.raises(RuntimeError) as exc: c._render("# foo") assert exc.value.args[0] == 'md token not supported in options doc' diff --git a/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py b/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py index 26fdcea907dd..b46b0c2ceacf 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py +++ b/pkgs/tools/nix/nixos-render-docs/src/tests/test_plugins.py @@ -3,11 +3,11 @@ import pytest from markdown_it.token import Token -class Converter(nrd.md.Converter[nrd.docbook.DocBookRenderer]): +class Converter(nrd.md.Converter[nrd.html.HTMLRenderer]): # actual renderer doesn't matter, we're just parsing. def __init__(self, manpage_urls: dict[str, str]) -> None: super().__init__() - self._renderer = nrd.docbook.DocBookRenderer(manpage_urls) + self._renderer = nrd.html.HTMLRenderer(manpage_urls, {}) def test_attr_span_parsing() -> None: c = Converter({})