14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Generate ReStructuredText source for the User Reference Manual.
17
"""Generate reStructuredText source for the User Reference Manual.
18
18
Loosely based on the manpage generator autodoc_man.py.
20
20
Written by the Bazaar community.
86
85
If output_dir is not None, topics are dumped into text files there
87
86
during processing, as well as being included in the return result.
89
topics = sorted(registry.get_topics_for_section(section))
90
88
lines = [title, hdg_level1 * len(title), ""]
90
lines.extend([".. toctree::", " :maxdepth: 1", ""])
92
92
# docutils treats section heading as implicit link target.
93
93
# But in some cases topic and heading are different, e.g.:
102
102
# .. _topic: `heading`_
105
topics = sorted(registry.get_topics_for_section(section))
105
106
for topic in topics:
106
107
help = registry.get_detail(topic)
107
heading,text = help.split("\n", 1)
108
lines.append(heading)
108
heading, text = help.split("\n", 1)
109
109
if not text.startswith(hdg_level2):
110
lines.append(hdg_level2 * len(heading))
110
underline = hdg_level2 * len(heading)
111
help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
113
help = "%s\n%s\n\n" % (heading, text)
115
topic_id = _dump_text(output_dir, topic, help)
116
lines.append(" %s" % topic_id)
113
120
# check that topic match heading
114
121
if topic != heading.lower():
115
122
links_glue.append((topic, heading))
116
# dump the text if requested
117
if output_dir is not None:
118
out_file = bzrlib.osutils.pathjoin(output_dir, topic + ".txt")
119
_dump_text(out_file, help)
121
124
# provide links glue for topics that don't match headings
122
lines.extend([".. _%s: `%s`_" % i for i in links_glue])
126
#lines.extend([".. _%s: `%s`_" % i for i in links_glue])
125
129
return "\n" + "\n".join(lines) + "\n"
128
def _dump_text(filename, text):
129
"""Dump text to filename."""
130
if not FILE_PER_TOPIC:
132
f = open(filename, "w")
137
132
def _get_commands_section(registry, title="Commands", hdg_level1="#",
133
hdg_level2="=", output_dir=None):
139
134
"""Build the commands reference section of the manual."""
140
135
lines = [title, hdg_level1 * len(title), ""]
137
lines.extend([".. toctree::", " :maxdepth: 1", ""])
141
139
cmds = sorted(bzrlib.commands.builtin_command_names())
142
140
for cmd_name in cmds:
143
141
cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
144
142
if cmd_object.hidden:
146
144
heading = cmd_name
145
underline = hdg_level2 * len(heading)
147
146
text = cmd_object.get_help_text(plain=False, see_also_as_links=True)
148
lines.append(heading)
149
lines.append(hdg_level2 * len(heading))
147
help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
149
topic_id = _dump_text(output_dir, cmd_name, help)
150
lines.append(" %s" % topic_id)
152
154
return "\n" + "\n".join(lines) + "\n"
157
def _dump_text(output_dir, topic, text):
158
"""Dump text for a topic to a file."""
159
topic_id = "%s-%s" % (topic, "help")
160
filename = bzrlib.osutils.pathjoin(output_dir, topic_id + ".txt")
161
f = open(filename, "w")