diff options
author | pennae <github@quasiparticle.net> | 2023-01-18 02:14:24 +0100 |
---|---|---|
committer | pennae <82953136+pennae@users.noreply.github.com> | 2023-01-22 17:50:09 +0100 |
commit | 3a5f1ae029318b72d4bdbf8ad2c4cf7d04ce7d02 (patch) | |
tree | a53be0c20628e7265a4d835ddb8fd4eff335054e /nixos | |
parent | 2bd8129a4776f560516ad3e57825b5ca56d24e71 (diff) |
nixos/make-options-doc: render default/example contents through MD
removes some trailing whitespaces from the html output, no other changes.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/lib/make-options-doc/mergeJSON.py | 32 | ||||
-rw-r--r-- | nixos/lib/make-options-doc/options-to-docbook.xsl | 33 |
2 files changed, 32 insertions, 33 deletions
diff --git a/nixos/lib/make-options-doc/mergeJSON.py b/nixos/lib/make-options-doc/mergeJSON.py index 1f30e4315cf86..cdbf7cc21f0d0 100644 --- a/nixos/lib/make-options-doc/mergeJSON.py +++ b/nixos/lib/make-options-doc/mergeJSON.py @@ -203,6 +203,30 @@ def convertMD(options: Dict[str, Any]) -> str: if '_type' not in option[key]: return False return option[key]['_type'] == typ + def convertCode(name: str, option: Dict[str, Any], key: str): + rendered = f"{key}-db" + if optionIs(option, key, 'literalMD'): + docbook = convertString(name, f"*{key.capitalize()}:*\n{option[key]['text']}") + option[rendered] = f"<para>{docbook}</para>" + elif optionIs(option, key, 'literalExpression'): + code = option[key]['text'] + # for multi-line code blocks we only have to count ` runs at the beginning + # of a line, but this is much easier. + multiline = '\n' in code + longest, current = (0, 0) + for c in code: + current = current + 1 if c == '`' else 0 + longest = max(current, longest) + # inline literals need a space to separate ticks from content, code blocks + # need newlines. inline literals need one extra tick, code blocks need three. + ticks, sep = ('`' * (longest + (3 if multiline else 1)), '\n' if multiline else ' ') + docbook = convertString(name, f"*{key.capitalize()}:*\n{ticks}{sep}{code}{sep}{ticks}") + option[rendered] = f"<para>{docbook}</para>" + elif optionIs(option, key, 'literalDocBook'): + option[rendered] = f"<para><emphasis>{key.capitalize()}:</emphasis> {option[key]['text']}</para>" + elif key in option: + raise Exception(f"{name} {key} has unrecognized type", option[key]) + for (name, option) in options.items(): try: if optionIs(option, 'description', 'mdDoc'): @@ -210,12 +234,8 @@ def convertMD(options: Dict[str, Any]) -> str: elif markdownByDefault: option['description'] = convertString(name, option['description']) - if optionIs(option, 'example', 'literalMD'): - docbook = convertString(name, option['example']['text']) - option['example'] = { '_type': 'literalDocBook', 'text': docbook } - if optionIs(option, 'default', 'literalMD'): - docbook = convertString(name, option['default']['text']) - option['default'] = { '_type': 'literalDocBook', 'text': docbook } + convertCode(name, option, 'example') + convertCode(name, option, 'default') except Exception as e: raise Exception(f"Failed to render option {name}: {str(e)}") diff --git a/nixos/lib/make-options-doc/options-to-docbook.xsl b/nixos/lib/make-options-doc/options-to-docbook.xsl index 39d34fb8633c4..7a80931df0dec 100644 --- a/nixos/lib/make-options-doc/options-to-docbook.xsl +++ b/nixos/lib/make-options-doc/options-to-docbook.xsl @@ -72,22 +72,14 @@ </para> </xsl:if> - <xsl:if test="attr[@name = 'default']"> - <para> - <emphasis>Default:</emphasis> - <xsl:text> -</xsl:text> - <xsl:apply-templates select="attr[@name = 'default']/*" mode="top" /> - </para> + <xsl:if test="attr[@name = 'default-db']"> + <xsl:value-of disable-output-escaping="yes" + select="attr[@name = 'default-db']/string/@value" /> </xsl:if> - <xsl:if test="attr[@name = 'example']"> - <para> - <emphasis>Example:</emphasis> - <xsl:text> -</xsl:text> - <xsl:apply-templates select="attr[@name = 'example']/*" mode="top" /> - </para> + <xsl:if test="attr[@name = 'example-db']"> + <xsl:value-of disable-output-escaping="yes" + select="attr[@name = 'example-db']/string/@value" /> </xsl:if> <xsl:if test="attr[@name = 'relatedPackages']"> @@ -123,19 +115,6 @@ </xsl:template> - <xsl:template match="attrs[attr[@name = '_type' and string[@value = 'literalExpression']]]" mode = "top"> - <xsl:choose> - <xsl:when test="contains(attr[@name = 'text']/string/@value, '
')"> - <programlisting><xsl:value-of select="attr[@name = 'text']/string/@value" /><xsl:text> -</xsl:text></programlisting> - </xsl:when> - <xsl:otherwise> - <literal><xsl:value-of select="attr[@name = 'text']/string/@value" /></literal> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="attrs[attr[@name = '_type' and string[@value = 'literalDocBook']]]" mode = "top"> <xsl:value-of disable-output-escaping="yes" select="attr[@name = 'text']/string/@value" /> </xsl:template> |