author | Raphaël Gomès <rgomes@octobus.net> |
Tue, 01 Oct 2024 13:20:40 +0200 | |
changeset 52045 | 652149ed64f0 |
parent 52021 | 2a875530a023 |
permissions | -rwxr-xr-x |
45830
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43691
diff
changeset
|
1 |
#!/usr/bin/env python3 |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
2 |
# |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
3 |
# runrst - register custom roles and run correct writer |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
4 |
# |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45830
diff
changeset
|
5 |
# Copyright 2010 Olivia Mackall <olivia@selenic.com> and others |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
6 |
# |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
7 |
# This software may be used and distributed according to the terms of the |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
8 |
# GNU General Public License version 2 or any later version. |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
9 |
|
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
10 |
"""usage: %s WRITER args... |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
11 |
|
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
12 |
where WRITER is the name of a Docutils writer such as 'html' or 'manpage' |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
13 |
""" |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
14 |
|
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
15 |
|
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
16 |
import re |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
17 |
import sys |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
18 |
|
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
19 |
try: |
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
20 |
import docutils.core as core |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
21 |
import docutils.nodes as nodes |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
22 |
import docutils.utils as utils |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
23 |
import docutils.parsers.rst.roles as roles |
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
24 |
except ImportError: |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
25 |
sys.stderr.write( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
26 |
"abort: couldn't generate documentation: docutils " |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
27 |
"module is missing\n" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
28 |
) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
29 |
sys.stderr.write( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
30 |
"please install python-docutils or see " |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
31 |
"http://docutils.sourceforge.net/\n" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
32 |
) |
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
33 |
sys.exit(-1) |
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
34 |
|
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
35 |
# Whether we are rendering a help page for a single topic. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
36 |
# If false, we are rendering a monolithic page with all topics together. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
37 |
is_individual_pages_mode = False |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
38 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
39 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
40 |
def make_cmd_ref_uri(cmd): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
41 |
if is_individual_pages_mode: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
42 |
return "hg-%s.html" % cmd |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
43 |
else: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
44 |
return "hg.1.html#%s" % cmd |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
45 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
46 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
47 |
known_refs = None |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
48 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
49 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
50 |
def load_known_refs(fname): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
51 |
try: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
52 |
with open(fname, 'r') as fp: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
53 |
text = fp.read() |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
54 |
return re.split(r'[ \n]+', text) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
55 |
except OSError: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
56 |
sys.stderr.write( |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
57 |
"abort: couldn't find '%', please run documentation generation " |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
58 |
"through the Makefile, or run 'make knownrefs'\n" |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
59 |
) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
60 |
sys.exit(-1) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
61 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
62 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
63 |
def find_known_ref(ref): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
64 |
global known_refs |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
65 |
if known_refs is None: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
66 |
cmds = load_known_refs('commandlist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
67 |
topics = load_known_refs('topiclist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
68 |
exts = load_known_refs('extensionlist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
69 |
known_refs = {'hg': cmds, 'topic': topics, 'ext': exts} |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
70 |
for reftype, refnames in known_refs.items(): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
71 |
if ref in refnames: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
72 |
return reftype |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
73 |
return None |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
74 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
75 |
|
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
76 |
def make_any_ref_uri(ref): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
77 |
if is_individual_pages_mode: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
78 |
# Try to find if ref is a command, topic, or extension. If not, |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
79 |
# reference the anchor in the main hg.1 help page. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
80 |
reftype = find_known_ref(ref) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
81 |
if reftype: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
82 |
return '%s-%s.html' % (reftype, ref) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
83 |
return "hg.1.html#%s" % ref |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
84 |
|
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
85 |
|
43690
15cccbacd5ce
doc: don't use mutable default arguments
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39472
diff
changeset
|
86 |
def role_hg(name, rawtext, text, lineno, inliner, options=None, content=None): |
10974
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
87 |
text = "hg " + utils.unescape(text) |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
88 |
linktext = nodes.literal(rawtext, text) |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
89 |
parts = text.split() |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
90 |
cmd, args = parts[1], parts[2:] |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
91 |
refuri = make_cmd_ref_uri(cmd) |
10974
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
92 |
if cmd == 'help' and args: |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
93 |
if args[0] == 'config': |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
94 |
# :hg:`help config` |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
95 |
refuri = "hgrc.5.html" |
28076
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
96 |
elif args[0].startswith('config.'): |
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
97 |
# :hg:`help config.SECTION...` |
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
98 |
refuri = "hgrc.5.html#%s" % args[0].split('.', 2)[1] |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
99 |
elif len(args) >= 2 and args[0] == '-c': |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
100 |
# :hg:`help -c COMMAND ...` is equivalent to :hg:`COMMAND` |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
101 |
# (mainly for :hg:`help -c config`) |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
102 |
refuri = make_cmd_ref_uri(args[1]) |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
103 |
else: |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
104 |
refuri = make_any_ref_uri(args[0]) |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
105 |
node = nodes.reference(rawtext, '', linktext, refuri=refuri) |
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
106 |
return [node], [] |
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
107 |
|
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
108 |
|
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
109 |
roles.register_local_role("hg", role_hg) |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
110 |
|
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
111 |
if __name__ == "__main__": |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
112 |
if len(sys.argv) < 2: |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
113 |
sys.stderr.write(__doc__ % sys.argv[0]) |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
114 |
sys.exit(1) |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
115 |
|
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
116 |
writer = sys.argv[1] |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
117 |
del sys.argv[1] |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
118 |
|
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
119 |
if sys.argv[1] == '--hg-individual-pages': |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
120 |
is_individual_pages_mode = True |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
121 |
del sys.argv[1] |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
122 |
|
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
123 |
core.publish_cmdline(writer_name=writer) |