##// END OF EJS Templates
mq: switched to `` around * * *...
mq: switched to `` around * * * So it can be parsed by rst.

File last commit:

r11570:2d88369a default
r12755:db79d362 default
Show More
gendoc.py
119 lines | 3.3 KiB | text/x-python | PythonLexer
Martin Geisler
gendoc: do not wrap encoded string...
r9484 import os, sys
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # import from the live mercurial repo
sys.path.insert(0, "..")
Cédric Duval
gendoc: fall back to pure modules if C extensions are not available (issue1711)
r9130 # fall back to pure modules if required C extensions are not available
sys.path.append(os.path.join('..', 'mercurial', 'pure'))
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Martin Geisler
test-gendoc: add tests for all languages...
r9485 from mercurial import encoding
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 from mercurial.commands import table, globalopts
Cédric Duval
gendoc: don't translate topic strings twice (issue1760)
r9240 from mercurial.i18n import _
Matt Mackall
Generate docs for help topics
r3797 from mercurial.help import helptable
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
def get_desc(docstr):
if not docstr:
return "", ""
# sanitize
docstr = docstr.strip("\n")
docstr = docstr.rstrip()
shortdesc = docstr.splitlines()[0].strip()
i = docstr.find("\n")
if i != -1:
Matt Mackall
many, many trivial check-code fixups
r10282 desc = docstr[i + 2:]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 else:
desc = " %s" % shortdesc
return (shortdesc, desc)
def get_opts(opts):
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 for opt in opts:
if len(opt) == 5:
shortopt, longopt, default, desc, optlabel = opt
else:
shortopt, longopt, default, desc = opt
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 allopts = []
if shortopt:
allopts.append("-%s" % shortopt)
if longopt:
allopts.append("--%s" % longopt)
desc += default and _(" (default: %s)") % default or ""
yield(", ".join(allopts), desc)
def get_cmd(cmd):
d = {}
attr = table[cmd]
cmds = cmd.lstrip("^").split("|")
d['cmd'] = cmds[0]
d['aliases'] = cmd.split("|")[1:]
d['desc'] = get_desc(attr[0].__doc__)
d['opts'] = list(get_opts(attr[1]))
Matt Mackall
doc: handle shortened command synopses
r7376
s = 'hg ' + cmds[0]
if len(attr) > 2:
if not attr[2].startswith('hg'):
Ori Avtalion
gendoc: add missing space in command synopsis
r8546 s += ' ' + attr[2]
Matt Mackall
doc: handle shortened command synopses
r7376 else:
s = attr[2]
Martin Geisler
gendoc: fix synopsis...
r9622 d['synopsis'] = s.strip()
Matt Mackall
doc: handle shortened command synopses
r7376
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return d
def show_doc(ui):
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 def section(s):
Martin Geisler
test-gendoc: add tests for all languages...
r9485 ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 def subsection(s):
Martin Geisler
test-gendoc: add tests for all languages...
r9485 ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print options
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(_("Options"))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 for optstr, desc in get_opts(globalopts):
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write("%s\n %s\n\n" % (optstr, desc))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print cmds
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(_("Commands"))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 h = {}
for c, attr in table.items():
Christian Ebert
gendoc: fix indentation
r6488 f = c.split("|")[0]
f = f.lstrip("^")
h[f] = c
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = h.keys()
cmds.sort()
for f in cmds:
Matt Mackall
many, many trivial check-code fixups
r10282 if f.startswith("debug"):
continue
Christian Ebert
gendoc: fix indentation
r6488 d = get_cmd(h[f])
# synopsis
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write(".. _%s:\n\n" % d['cmd'])
ui.write("``%s``\n" % d['synopsis'].replace("hg ","", 1))
Christian Ebert
gendoc: fix indentation
r6488 # description
ui.write("%s\n\n" % d['desc'][1])
# options
opt_output = list(d['opts'])
if opt_output:
opts_len = max([len(line[0]) for line in opt_output])
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write(_(" options:\n\n"))
Christian Ebert
gendoc: fix indentation
r6488 for optstr, desc in opt_output:
if desc:
s = "%-*s %s" % (opts_len, optstr, desc)
else:
s = optstr
Martin Geisler
gendoc: do not wrap encoded string...
r9484 ui.write(" %s\n" % s)
Christian Ebert
gendoc: fix indentation
r6488 ui.write("\n")
# aliases
if d['aliases']:
ui.write(_(" aliases: %s\n\n") % " ".join(d['aliases']))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Matt Mackall
Generate docs for help topics
r3797 # print topics
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 for names, sec, doc in helptable:
Martin Geisler
gendoc: make anchors for help topic names
r9297 for name in names:
ui.write(".. _%s:\n" % name)
ui.write("\n")
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(sec)
Martin Geisler
gendoc: remove call to callable for py3k compatibility
r11570 if hasattr(doc, '__call__'):
Matt Mackall
Generate docs for help topics
r3797 doc = doc()
Cédric Duval
gendoc: fix localization of help topic...
r9021 ui.write(doc)
Matt Mackall
Generate docs for help topics
r3797 ui.write("\n")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 if __name__ == "__main__":
show_doc(sys.stdout)