doc/runrst
author Pierre-Yves David <pierre-yves.david@octobus.net>
Sat, 18 Feb 2023 04:10:08 +0100
changeset 50155 cdbd5f990596
parent 48966 6000f5b25c9b
permissions -rwxr-xr-x
dirstate: requires being in a `changing_parents` `context to set_parents` Enforcing proper operation scoping on all methods that mutate the dirstate will tighten correctness and reduce the risk of bugs. The context to use for this method is obvious, and all code was already compliant ☺

#!/usr/bin/env python3
#
# runrst - register custom roles and run correct writer
#
# Copyright 2010 Olivia Mackall <olivia@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

"""usage: %s WRITER args...

where WRITER is the name of a Docutils writer such as 'html' or 'manpage'
"""


import sys

try:
    import docutils.core as core
    import docutils.nodes as nodes
    import docutils.utils as utils
    import docutils.parsers.rst.roles as roles
except ImportError:
    sys.stderr.write(
        "abort: couldn't generate documentation: docutils "
        "module is missing\n"
    )
    sys.stderr.write(
        "please install python-docutils or see "
        "http://docutils.sourceforge.net/\n"
    )
    sys.exit(-1)


def role_hg(name, rawtext, text, lineno, inliner, options=None, content=None):
    text = "hg " + utils.unescape(text)
    linktext = nodes.literal(rawtext, text)
    parts = text.split()
    cmd, args = parts[1], parts[2:]
    refuri = "hg.1.html#%s" % cmd
    if cmd == 'help' and args:
        if args[0] == 'config':
            # :hg:`help config`
            refuri = "hgrc.5.html"
        elif args[0].startswith('config.'):
            # :hg:`help config.SECTION...`
            refuri = "hgrc.5.html#%s" % args[0].split('.', 2)[1]
        elif len(args) >= 2 and args[0] == '-c':
            # :hg:`help -c COMMAND ...` is equivalent to :hg:`COMMAND`
            # (mainly for :hg:`help -c config`)
            refuri = "hg.1.html#%s" % args[1]
        else:
            refuri = "hg.1.html#%s" % args[0]
    node = nodes.reference(rawtext, '', linktext, refuri=refuri)
    return [node], []


roles.register_local_role("hg", role_hg)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        sys.stderr.write(__doc__ % sys.argv[0])
        sys.exit(1)

    writer = sys.argv[1]
    del sys.argv[1]

    core.publish_cmdline(writer_name=writer)