diff options
| author | Georg Brandl <georg@python.org> | 2010-02-21 11:50:08 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2010-02-21 11:50:08 +0100 |
| commit | 7429ae935ec47c56c95998a8537236d4c1da7a2b (patch) | |
| tree | 898390a615563269b7b8a56f3026b0e6de47f9a4 /sphinx/builders/manpage.py | |
| parent | cdb65275eef02c7c3d248fa1316ddf8db1d43d0a (diff) | |
| download | sphinx-7429ae935ec47c56c95998a8537236d4c1da7a2b.tar.gz | |
Add manual page writer.
Diffstat (limited to 'sphinx/builders/manpage.py')
| -rw-r--r-- | sphinx/builders/manpage.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py new file mode 100644 index 00000000..7b3aef1d --- /dev/null +++ b/sphinx/builders/manpage.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.manpage + ~~~~~~~~~~~~~~~~~~~~~~~ + + Manual pages builder. + + :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from os import path + +from docutils.io import FileOutput +from docutils.frontend import OptionParser + +from sphinx import addnodes +from sphinx.errors import SphinxError +from sphinx.builders import Builder +from sphinx.environment import NoUri +from sphinx.util.nodes import inline_all_toctrees +from sphinx.util.console import bold, darkgreen +try: + from sphinx.writers.manpage import ManualPageWriter + has_manpage_writer = True +except ImportError: + has_manpage_writer = False + + +class ManualPageBuilder(Builder): + """ + Builds groff output in manual page format. + """ + name = 'man' + format = 'man' + supported_image_types = [] + + def init(self): + if not has_manpage_writer: + raise SphinxError('The docutils manual page writer can\'t be ' + 'found; it is only available as of docutils 0.6.') + if not self.config.man_pages: + self.warn('no "man_pages" config value found; no manual pages ' + 'will be written') + + def get_outdated_docs(self): + return 'all manpages' # for now + + def get_target_uri(self, docname, typ=None): + if typ == 'token': + return '' + raise NoUri + + def write(self, *ignored): + docwriter = ManualPageWriter(self) + docsettings = OptionParser( + defaults=self.env.settings, + components=(docwriter,)).get_default_values() + + self.info(bold('writing... '), nonl=True) + + for info in self.config.man_pages: + docname, name, description, authors, section = info + if isinstance(authors, basestring): + authors = [authors] + + targetname = '%s.%s' % (name, section) + self.info(darkgreen(targetname) + ' { ', nonl=True) + destination = FileOutput( + destination_path=path.join(self.outdir, targetname), + encoding='utf-8') + + tree = self.env.get_doctree(docname) + docnames = set() + largetree = inline_all_toctrees(self, docnames, docname, tree, + darkgreen) + self.info('} ', nonl=True) + self.env.resolve_references(largetree, docname, self) + # remove pending_xref nodes + for pendingnode in largetree.traverse(addnodes.pending_xref): + pendingnode.replace_self(pendingnode.children) + + largetree.settings = docsettings + largetree.settings.title = name + largetree.settings.subtitle = description + largetree.settings.authors = authors + largetree.settings.section = section + + docwriter.write(largetree, destination) + self.info() + + def finish(self): + pass |
