diff --git a/sphinx/builder.py b/sphinx/builder.py index 1de29d645..946be7deb 100644 --- a/sphinx/builder.py +++ b/sphinx/builder.py @@ -299,7 +299,7 @@ class StandaloneHTMLBuilder(Builder): doc, source_class=DocTreeInput, reader=doctree.Reader(), - writer=HTMLWriter(self.config, self.name), + writer=HTMLWriter(self), settings_overrides={'output_encoding': 'unicode'} ) @@ -307,7 +307,7 @@ class StandaloneHTMLBuilder(Builder): from .search import IndexBuilder self.indexer = IndexBuilder() self.load_indexer(filenames) - self.docwriter = HTMLWriter(self.config, self.name) + self.docwriter = HTMLWriter(self) self.docsettings = OptionParser( defaults=self.env.settings, components=(self.docwriter,)).get_default_values() @@ -684,7 +684,7 @@ class LaTeXBuilder(Builder): for fname in ["glossary", "about", "license", "copyright"]: specials.append(self.env.get_doctree(fname+".rst")) - docwriter = LaTeXWriter(self.config, self.name) + docwriter = LaTeXWriter(self) docsettings = OptionParser( defaults=self.env.settings, components=(docwriter,)).get_default_values() @@ -728,7 +728,7 @@ class LaTeXBuilder(Builder): largetree.extend(specials) print print "resolving references..." - # XXX problem here: :ref:s to distant PDF + # XXX problem here: :ref:s to distant tex files self.env.resolve_references(largetree, indexfile, self) return largetree diff --git a/sphinx/htmlwriter.py b/sphinx/htmlwriter.py index f6a60b9ea..12286a834 100644 --- a/sphinx/htmlwriter.py +++ b/sphinx/htmlwriter.py @@ -16,9 +16,9 @@ from .util.smartypants import sphinx_smarty_pants class HTMLWriter(Writer): - def __init__(self, config, buildername): + def __init__(self, builder): Writer.__init__(self) - self.translator_class = translator_class(config, buildername) + self.translator_class = translator_class(builder) version_text = { @@ -27,7 +27,7 @@ version_text = { 'versionadded': 'New in version %s', } -def translator_class(config, buildername): +def translator_class(builder): class HTMLTranslator(BaseTranslator): """ Our custom HTML translator. @@ -53,7 +53,7 @@ def translator_class(config, buildername): if node.parent['desctype'] in ('class', 'exception'): self.body.append('%s ' % node.parent['desctype']) def depart_desc_signature(self, node): - if node['ids'] and buildername != 'htmlhelp': + if node['ids'] and builder.name != 'htmlhelp': self.body.append(u'\u00B6') self.body.append('\n') @@ -245,7 +245,7 @@ def translator_class(config, buildername): def depart_title(self, node): close_tag = self.context[-1] - if buildername != 'htmlhelp' and \ + if builder.name != 'htmlhelp' and \ close_tag.startswith(('>self.builder.warning_stream, 'WARNING: document title ' \ + 'is not a single Text node' + self.options['title'] = node.astext() self.this_is_the_title = 0 raise nodes.SkipNode elif isinstance(node.parent, nodes.section): @@ -209,22 +212,20 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append(r'\textbf{') self.context.append('}\n\n\medskip\n\n') else: - raise RuntimeError("XXX title without section") + print >>self.builder.warning_stream, 'WARNING: encountered title node ' \ + 'not in section, topic or sidebar' + self.body.append('\\textbf{') + self.context.append('}') self.in_title = 1 def depart_title(self, node): self.in_title = 0 self.body.append(self.context.pop()) - def visit_field_list(self, node): - raise nodes.SkipNode # XXX - desc_map = { 'function' : 'funcdesc', 'class': 'classdesc', - #'classdesc*': ('class', '0'), XXX 'method': 'methoddesc', 'exception': 'excdesc', - #'excclassdesc': ('exception', '0(1)'), XXX 'data': 'datadesc', 'attribute': 'memberdesc', 'opcode': 'opcodedesc', @@ -236,7 +237,7 @@ class LaTeXTranslator(nodes.NodeVisitor): 'cvar': 'cvardesc', 'describe': 'describe', - 'cmdoption': 'describe', # XXX? + 'cmdoption': 'describe', 'envvar': 'describe', } @@ -322,7 +323,8 @@ class LaTeXTranslator(nodes.NodeVisitor): def visit_rubric(self, node): if len(node.children) == 1 and node.children[0].astext() == 'Footnotes': raise nodes.SkipNode - raise RuntimeError("rubric not supported except for footnotes heading") + print >>self.builder.warning_stream, 'WARNING: encountered rubric node' \ + 'not used for footnotes, content will be lost' def visit_footnote(self, node): # XXX not optimal, footnotes are at section end @@ -356,7 +358,9 @@ class LaTeXTranslator(nodes.NodeVisitor): elif columnCount == 5: self.body.append('\\begin{tablev}{l|l|l|l|l}{textrm}') else: - raise RuntimeError("XXX table with too many columns found") + print >>self.builder.warning_stream, 'WARNING: table with too ' \ + 'many columns, ignoring' + raise nodes.SkipNode def depart_tgroup(self, node): if self.tableSpec.columnCount == 2: self.body.append('\n\\end{tableii}\n\n') @@ -457,6 +461,22 @@ class LaTeXTranslator(nodes.NodeVisitor): def depart_definition(self, node): self.body.append('\n') + def visit_field_list(self, node): + self.body.append('\\begin{quote}\\begin{description}\n') + def depart_field_list(self, node): + self.body.append('\\end{description}\\end{quote}\n') + + def visit_field(self, node): + pass + def depart_field(self, node): + pass + + visit_field_name = visit_term + depart_field_name = depart_term + + visit_field_body = visit_definition + depart_field_body = depart_definition + def visit_paragraph(self, node): self.body.append('\n') def depart_paragraph(self, node): @@ -554,7 +574,8 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append(r'\%s{%s}' % (self.indextype_map[type], self.encode(string))) else: - raise RuntimeError('XXX unknown index entry type') + print >>self.builder.warning_stream, 'WARNING: unknown index entry ' \ + 'type %s found' % type raise nodes.SkipNode def visit_reference(self, node): @@ -574,7 +595,9 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append('\\grammartoken{') self.context.append('}') else: - raise RuntimeError('XXX malformed reference target %s' % uri) + print self.builder.warning_stream, 'WARNING: malformed reference ' \ + 'target found: %s' % uri + self.context.append('') def depart_reference(self, node): self.body.append(self.context.pop()) @@ -589,9 +612,9 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append('}') def visit_literal_emphasis(self, node): - self.body.append(r'\emph{') # XXX + self.body.append(r'\emph{\texttt{') def depart_literal_emphasis(self, node): - self.body.append('}') + self.body.append('}}') def visit_strong(self, node): self.body.append(r'\textbf{')