doc/runrst
author Simon Sapin <simon.sapin@octobus.net>
Mon, 15 Feb 2021 20:13:09 +0100
changeset 46593 5ce2aa7c2ad5
parent 45830 c102b704edb5
child 46819 d4ba4d51f85f
permissions -rwxr-xr-x
rhg: Move `Repo` object creation into `main()` … rather than in each sub-command that needs a local repository. This will allow accessing e.g. `.hg/blackbox.log` before dispatching to sub-commands. Differential Revision: https://phab.mercurial-scm.org/D10004

#!/usr/bin/env python3
#
# runrst - register custom roles and run correct writer
#
# Copyright 2010 Matt Mackall <mpm@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'
"""

from __future__ import absolute_import

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)