diff options
3 files changed, 58 insertions, 46 deletions
diff --git a/nixos/lib/make-options-doc/default.nix b/nixos/lib/make-options-doc/default.nix index 963ebdf41e6..271af9ba180 100644 --- a/nixos/lib/make-options-doc/default.nix +++ b/nixos/lib/make-options-doc/default.nix @@ -148,20 +148,19 @@ in rec { ''; optionsDocBook = pkgs.runCommand "options-docbook.xml" { - MANPAGE_URLS = pkgs.path + "/doc/manpage-urls.json"; - OTD_DOCUMENT_TYPE = documentType; - OTD_VARIABLE_LIST_ID = variablelistId; - OTD_OPTION_ID_PREFIX = optionIdPrefix; - OTD_REVISION = revision; - nativeBuildInputs = [ pkgs.nixos-render-docs ]; } '' - nixos-render-docs \ + nixos-render-docs options docbook \ + --manpage-urls ${pkgs.path + "/doc/manpage-urls.json"} \ + --revision ${lib.escapeShellArg revision} \ + --document-type ${lib.escapeShellArg documentType} \ + --varlist-id ${lib.escapeShellArg variablelistId} \ + --id-prefix ${lib.escapeShellArg optionIdPrefix} \ ${lib.optionalString markdownByDefault "--markdown-by-default"} \ ${optionsJSON}/share/doc/nixos/options.json \ - > options.xml + options.xml if grep /nixpkgs/nixos/modules options.xml; then echo "The manual appears to depend on the location of Nixpkgs, which is bad" diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py index e28d516fed3..e65eadcbbf9 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py @@ -1,45 +1,20 @@ -import collections -import json +import argparse import os import sys -from collections.abc import MutableMapping, Sequence -from typing import Any, Dict, List -from frozendict import frozendict +from typing import Any, Dict -# for MD conversion -import markdown_it -import markdown_it.renderer -from markdown_it.token import Token -from markdown_it.utils import OptionsDict -from mdit_py_plugins.container import container_plugin -from mdit_py_plugins.deflist import deflist_plugin -from mdit_py_plugins.myst_role import myst_role_plugin -from xml.sax.saxutils import escape, quoteattr +from .md import Converter +from . import options -from .options import DocBookConverter +def main() -> None: + parser = argparse.ArgumentParser(description='render nixos manual bits') -def need_env(n): - if n not in os.environ: - raise RuntimeError("required environment variable not set", n) - return os.environ[n] + commands = parser.add_subparsers(dest='command', required=True) -def main(): - markdownByDefault = False - optOffset = 0 - for arg in sys.argv[1:]: - if arg == "--markdown-by-default": - optOffset += 1 - markdownByDefault = True + options.build_cli(commands.add_parser('options')) - md = DocBookConverter( - json.load(open(os.getenv('MANPAGE_URLS'))), - revision = need_env('OTD_REVISION'), - document_type = need_env('OTD_DOCUMENT_TYPE'), - varlist_id = need_env('OTD_VARIABLE_LIST_ID'), - id_prefix = need_env('OTD_OPTION_ID_PREFIX'), - markdown_by_default = markdownByDefault - ) - - options = json.load(open(sys.argv[1 + optOffset], 'r')) - md.add_options(options) - print(md.finalize()) + args = parser.parse_args() + if args.command == 'options': + options.run_cli(args) + else: + raise RuntimeError('command 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 072d21e4057..d165a593709 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 @@ -1,3 +1,6 @@ +import argparse +import json + from abc import abstractmethod from typing import Any, Optional from xml.sax.saxutils import escape, quoteattr @@ -223,3 +226,38 @@ class DocBookConverter(BaseConverter): result.append("</appendix>") 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('--markdown-by-default', default=False, action='store_true') + 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, + markdown_by_default = args.markdown_by_default) + + 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 build_cli(p: argparse.ArgumentParser) -> None: + formats = p.add_subparsers(dest='format', required=True) + _build_cli_db(formats.add_parser('docbook')) + +def run_cli(args: argparse.Namespace) -> None: + if args.format == 'docbook': + _run_cli_db(args) + else: + raise RuntimeError('format not hooked up', args) |