From effbaf0ab40a06d547a42ec50073aa500d4bbbd5 Mon Sep 17 00:00:00 2001 From: pennae Date: Wed, 21 Jun 2023 16:20:46 +0200 Subject: [PATCH] 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. --- .../src/nixos_render_docs/manual.py | 18 +++++++++++++++++- .../src/nixos_render_docs/manual_structure.py | 5 ++++- 2 files changed, 21 insertions(+), 2 deletions(-) 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 ef81e4d7e1ab..138069d98204 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 @@ -312,7 +312,7 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer): "".join((f'' for script in self._html_params.scripts)), f' ', - f' ', + f' ' if home.target.href() else "", f' {up_link}{prev_link}{next_link}', ' ', ' ', @@ -629,6 +629,22 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]): failed = True # do another round and report the first error xref_queue = deferred + paths_seen = set() + for t in self._xref_targets.values(): + paths_seen.add(t.path) + + if len(paths_seen) == 1: + for (k, t) in self._xref_targets.items(): + self._xref_targets[k] = XrefTarget( + t.id, + t.title_html, + t.toc_html, + t.title, + t.path, + t.drop_fragment, + drop_target=True + ) + TocEntry.collect_and_link(self._xref_targets, tokens) diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py index 95e6e9474e73..fcc3f02f19a8 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py @@ -110,9 +110,12 @@ class XrefTarget: path: str """whether to drop the `#anchor` from links when expanding xrefs""" drop_fragment: bool = False + """whether to drop the `path.html` from links when expanding xrefs. + mostly useful for docbook compatibility""" + drop_target: bool = False def href(self) -> str: - path = html.escape(self.path, True) + path = "" if self.drop_target else html.escape(self.path, True) return path if self.drop_fragment else f"{path}#{html.escape(self.id, True)}" @dc.dataclass