Unverified Commit 0efe7d42 authored by Valentin Gagarin's avatar Valentin Gagarin Committed by GitHub
Browse files

Merge pull request #269942 from considerate/nixos-render-docs-header

parents a96187ad 98ba0aed
Loading
Loading
Loading
Loading
+61 −28
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import xml.sax.saxutils as xml
from abc import abstractmethod
from collections.abc import Mapping, Sequence
from markdown_it.token import Token
from pathlib import Path
from typing import Any, Generic, Optional
from urllib.parse import quote

@@ -287,18 +288,27 @@ class ManpageConverter(BaseConverter[OptionsManpageRenderer]):
    _links_in_last_description: Optional[list[str]] = None

    def __init__(self, revision: str,
                 header: list[str] | None,
                 footer: list[str] | None,
                 *,
                 # only for parallel rendering
                 _options_by_id: Optional[dict[str, str]] = None):
        super().__init__(revision)
        self._options_by_id = _options_by_id or {}
        self._renderer = OptionsManpageRenderer({}, self._options_by_id)
        self._header = header
        self._footer = footer

    def _parallel_render_prepare(self) -> Any:
        return (self._revision, { '_options_by_id': self._options_by_id })
        return (
            self._revision,
            self._header,
            self._footer,
            { '_options_by_id': self._options_by_id },
        )
    @classmethod
    def _parallel_render_init_worker(cls, a: Any) -> ManpageConverter:
        return cls(a[0], **a[1])
        return cls(a[0], a[1], a[2], **a[3])

    def _render_option(self, name: str, option: dict[str, Any]) -> RenderedOption:
        links = self._renderer.link_footnotes = []
@@ -342,6 +352,9 @@ class ManpageConverter(BaseConverter[OptionsManpageRenderer]):
    def finalize(self) -> str:
        result = []

        if self._header is not None:
            result += self._header
        else:
            result += [
                r'''.TH "CONFIGURATION\&.NIX" "5" "01/01/1980" "NixOS" "NixOS Reference Pages"''',
                r'''.\" disable hyphenation''',
@@ -383,6 +396,9 @@ class ManpageConverter(BaseConverter[OptionsManpageRenderer]):

            result.append(".RE")

        if self._footer is not None:
            result += self._footer
        else:
            result += [
                r'''.SH "AUTHORS"''',
                r'''.PP''',
@@ -573,6 +589,8 @@ def _build_cli_db(p: argparse.ArgumentParser) -> None:

def _build_cli_manpage(p: argparse.ArgumentParser) -> None:
    p.add_argument('--revision', required=True)
    p.add_argument("--header", type=Path)
    p.add_argument("--footer", type=Path)
    p.add_argument("infile")
    p.add_argument("outfile")

@@ -603,7 +621,22 @@ def _run_cli_db(args: argparse.Namespace) -> None:
            f.write(md.finalize())

def _run_cli_manpage(args: argparse.Namespace) -> None:
    md = ManpageConverter(revision = args.revision)
    header = None
    footer = None

    if args.header is not None:
        with args.header.open() as f:
            header = f.read().splitlines()

    if args.footer is not None:
        with args.footer.open() as f:
            footer = f.read().splitlines()

    md = ManpageConverter(
        revision = args.revision,
        header = header,
        footer = footer,
    )

    with open(args.infile, 'r') as f:
        md.add_options(json.load(f))