doc/gendoc.py
changeset 12781 0d09991f91ee
parent 12780 bdc1cf692447
child 12804 e0e8b123b75e
equal deleted inserted replaced
12780:bdc1cf692447 12781:0d09991f91ee
     6 from mercurial import demandimport; demandimport.enable()
     6 from mercurial import demandimport; demandimport.enable()
     7 from mercurial import encoding
     7 from mercurial import encoding
     8 from mercurial.commands import table, globalopts
     8 from mercurial.commands import table, globalopts
     9 from mercurial.i18n import _
     9 from mercurial.i18n import _
    10 from mercurial.help import helptable
    10 from mercurial.help import helptable
       
    11 from mercurial import extensions
    11 
    12 
    12 def get_desc(docstr):
    13 def get_desc(docstr):
    13     if not docstr:
    14     if not docstr:
    14         return "", ""
    15         return "", ""
    15     # sanitize
    16     # sanitize
    65     ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
    66     ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
    66 
    67 
    67 def subsection(ui, s):
    68 def subsection(ui, s):
    68     ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
    69     ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
    69 
    70 
       
    71 def subsubsection(ui, s):
       
    72     ui.write("%s\n%s\n\n" % (s, "." * encoding.colwidth(s)))
       
    73 
       
    74 def subsubsubsection(ui, s):
       
    75     ui.write("%s\n%s\n\n" % (s, "#" * encoding.colwidth(s)))
       
    76 
    70 
    77 
    71 def show_doc(ui):
    78 def show_doc(ui):
    72     # print options
    79     # print options
    73     section(ui, _("Options"))
    80     section(ui, _("Options"))
    74     for optstr, desc in get_opts(globalopts):
    81     for optstr, desc in get_opts(globalopts):
    75         ui.write("%s\n%s\n\n" % (optstr, desc))
    82         ui.write("%s\n%s\n\n" % (optstr, desc))
    76 
    83 
    77     # print cmds
    84     # print cmds
    78     section(ui, _("Commands"))
    85     section(ui, _("Commands"))
    79     commandprinter(ui, table)
    86     commandprinter(ui, table, subsection)
    80 
    87 
    81     # print topics
    88     # print topics
    82     for names, sec, doc in helptable:
    89     for names, sec, doc in helptable:
    83         for name in names:
    90         for name in names:
    84             ui.write(".. _%s:\n" % name)
    91             ui.write(".. _%s:\n" % name)
    87         if hasattr(doc, '__call__'):
    94         if hasattr(doc, '__call__'):
    88             doc = doc()
    95             doc = doc()
    89         ui.write(doc)
    96         ui.write(doc)
    90         ui.write("\n")
    97         ui.write("\n")
    91 
    98 
    92 def commandprinter(ui, cmdtable):
    99     section(ui, _("Extensions"))
       
   100     ui.write(_("This section contains help for extensions that is distributed "
       
   101                "together with Mercurial. Help for other extensions is available "
       
   102                "in the help system."))
       
   103     ui.write("\n\n"
       
   104              ".. contents::\n"
       
   105              "   :class: htmlonly\n"
       
   106              "   :local:\n"
       
   107              "   :depth: 1\n\n")
       
   108 
       
   109     for extensionname in sorted(allextensionnames()):
       
   110         mod = extensions.load(None, extensionname, None)
       
   111         subsection(ui, extensionname)
       
   112         ui.write("%s\n\n" % mod.__doc__)
       
   113         cmdtable = getattr(mod, 'cmdtable', None)
       
   114         if cmdtable:
       
   115             subsubsection(ui, _('Commands'))
       
   116             commandprinter(ui, cmdtable, subsubsubsection)
       
   117 
       
   118 def commandprinter(ui, cmdtable, sectionfunc):
    93     h = {}
   119     h = {}
    94     for c, attr in cmdtable.items():
   120     for c, attr in cmdtable.items():
    95         f = c.split("|")[0]
   121         f = c.split("|")[0]
    96         f = f.lstrip("^")
   122         f = f.lstrip("^")
    97         h[f] = c
   123         h[f] = c
   100 
   126 
   101     for f in cmds:
   127     for f in cmds:
   102         if f.startswith("debug"):
   128         if f.startswith("debug"):
   103             continue
   129             continue
   104         d = get_cmd(h[f], cmdtable)
   130         d = get_cmd(h[f], cmdtable)
   105         subsection(ui, d['cmd'])
   131         sectionfunc(ui, d['cmd'])
   106         # synopsis
   132         # synopsis
   107         ui.write("``%s``\n" % d['synopsis'].replace("hg ","", 1))
   133         ui.write("``%s``\n" % d['synopsis'].replace("hg ","", 1))
   108         ui.write("\n")
   134         ui.write("\n")
   109         # description
   135         # description
   110         ui.write("%s\n\n" % d['desc'][1])
   136         ui.write("%s\n\n" % d['desc'][1])
   123         # aliases
   149         # aliases
   124         if d['aliases']:
   150         if d['aliases']:
   125             ui.write(_("    aliases: %s\n\n") % " ".join(d['aliases']))
   151             ui.write(_("    aliases: %s\n\n") % " ".join(d['aliases']))
   126 
   152 
   127 
   153 
       
   154 def allextensionnames():
       
   155     extensionnames = []
       
   156 
       
   157     extensionsdictionary = extensions.enabled()[0]
       
   158     extensionnames.extend(extensionsdictionary.keys())
       
   159 
       
   160     extensionsdictionary = extensions.disabled()[0]
       
   161     extensionnames.extend(extensionsdictionary.keys())
       
   162 
       
   163     return extensionnames
       
   164 
       
   165 
   128 if __name__ == "__main__":
   166 if __name__ == "__main__":
   129     show_doc(sys.stdout)
   167     show_doc(sys.stdout)