##// END OF EJS Templates
test-gendoc: add tests for all languages...
test-gendoc: add tests for all languages This ensures that we catch errors in the reST syntax early and for all languages. The only change needed in gendoc.py was to correct the computation of section underlines for Asian languages.

File last commit:

r9485:7d6ac5d7 default
r9485:7d6ac5d7 default
Show More
gendoc.py
114 lines | 3.1 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:
desc = docstr[i+2:]
else:
desc = " %s" % shortdesc
return (shortdesc, desc)
def get_opts(opts):
for shortopt, longopt, default, desc in opts:
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]
d['synopsis'] = s
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
gendoc: rename underlined/bold to section/subsection
r9296 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
gendoc: rename underlined/bold to section/subsection
r9296 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:
Christian Ebert
gendoc: fix indentation
r6488 if f.startswith("debug"): continue
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
gendoc: rename underlined/bold to section/subsection
r9296 section(sec.upper())
Matt Mackall
Generate docs for help topics
r3797 if callable(doc):
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)