##// END OF EJS Templates
doc/Makefile: let hg1.gendoc.txt depend on gendoc.py
doc/Makefile: let hg1.gendoc.txt depend on gendoc.py

File last commit:

r9021:2ccb527c default
r9107:309c1d76 default
Show More
gendoc.py
112 lines | 3.1 KiB | text/x-python | PythonLexer
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 import sys, textwrap
# import from the live mercurial repo
sys.path.insert(0, "..")
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 from mercurial.commands import table, globalopts
Martin Geisler
i18n: use gettext instead of _...
r7014 from mercurial.i18n import gettext, _
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):
def bold(s, text=""):
ui.write("%s\n%s\n%s\n" % (s, "="*len(s), text))
def underlined(s, text=""):
ui.write("%s\n%s\n%s\n" % (s, "-"*len(s), text))
# print options
underlined(_("OPTIONS"))
for optstr, desc in get_opts(globalopts):
ui.write("%s::\n %s\n\n" % (optstr, desc))
# print cmds
underlined(_("COMMANDS"))
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
Adrian Buehlmann
gendoc: add anchors for commands...
r6612 ui.write("[[%s]]\n" % d['cmd'])
Christian Ebert
gendoc: fix indentation
r6488 ui.write("%s::\n" % d['synopsis'].replace("hg ","", 1))
# 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])
ui.write(_(" options:\n"))
for optstr, desc in opt_output:
if desc:
s = "%-*s %s" % (opts_len, optstr, desc)
else:
s = optstr
s = textwrap.fill(s, initial_indent=4 * " ",
subsequent_indent=(6 + opts_len) * " ")
ui.write("%s\n" % s)
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
restructure helptable...
r7012 for names, section, doc in helptable:
Martin Geisler
i18n: use gettext instead of _...
r7014 underlined(gettext(section).upper())
Matt Mackall
Generate docs for help topics
r3797 if callable(doc):
doc = doc()
Cédric Duval
gendoc: fix localization of help topic...
r9021 else:
doc = gettext(doc)
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)