summaryrefslogtreecommitdiff
path: root/sphinx
diff options
context:
space:
mode:
authorgeorg.brandl <devnull@localhost>2008-05-04 07:43:09 +0000
committergeorg.brandl <devnull@localhost>2008-05-04 07:43:09 +0000
commitbe6009cdd60560dfd9a023c6a89b5f2abe86c98b (patch)
treeb178faf2eb1020a65908acf7f7bcb14fa6307d9c /sphinx
parentb7c37b073048136f5686e1a31deeef7323b57047 (diff)
downloadsphinx-be6009cdd60560dfd9a023c6a89b5f2abe86c98b.tar.gz
Fix handling of Verbatim within tables.
Diffstat (limited to 'sphinx')
-rw-r--r--sphinx/latexwriter.py40
-rw-r--r--sphinx/texinputs/sphinx.sty10
2 files changed, 39 insertions, 11 deletions
diff --git a/sphinx/latexwriter.py b/sphinx/latexwriter.py
index d3fe27ff..526abc94 100644
--- a/sphinx/latexwriter.py
+++ b/sphinx/latexwriter.py
@@ -76,7 +76,9 @@ class Table(object):
def __init__(self):
self.col = 0
self.colcount = 0
+ self.colspec = None
self.had_head = False
+ self.has_verbatim = False
class Desc(object):
@@ -385,10 +387,32 @@ class LaTeXTranslator(nodes.NodeVisitor):
if self.table:
raise NotImplementedError('Nested tables are not supported.')
self.table = Table()
- self.body.append('\n\\begin{tabulary}{\\textwidth}')
+ self.tablebody = []
+ # Redirect body output until table is finished.
+ self._body = self.body
+ self.body = self.tablebody
def depart_table(self, node):
- self.body.append('\\end{tabulary}\n\n')
+ self.body = self._body
+ if self.table.has_verbatim:
+ self.body.append('\n\\begin{tabular}')
+ else:
+ self.body.append('\n\\begin{tabulary}{\\textwidth}')
+ if self.table.colspec:
+ self.body.append(self.table.colspec)
+ else:
+ if self.table.has_verbatim:
+ colwidth = 0.95 / self.table.colcount
+ colspec = ('p{%.3f\\textwidth}|' % colwidth) * self.table.colcount
+ self.body.append('{|' + colspec + '}\n')
+ else:
+ self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
+ self.body.extend(self.tablebody)
+ if self.table.has_verbatim:
+ self.body.append('\\end{tabular}\n\n')
+ else:
+ self.body.append('\\end{tabulary}\n\n')
self.table = None
+ self.tablebody = None
def visit_colspec(self, node):
self.table.colcount += 1
@@ -402,9 +426,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_thead(self, node):
if self.next_table_colspec:
- self.body.append('{%s}\n' % self.next_table_colspec)
- else:
- self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
+ self.table.colspec = '{%s}\n' % self.next_table_colspec
self.next_table_colspec = None
self.body.append('\\hline\n')
self.table.had_head = True
@@ -727,10 +749,16 @@ class LaTeXTranslator(nodes.NodeVisitor):
hlcode = self.highlighter.highlight_block(code, lang, linenos)
# workaround for Unicode issue
hlcode = hlcode.replace(u'€', u'@texteuro[]')
+ # must use original Verbatim environment and "tabular" environment
+ if self.table:
+ hlcode = hlcode.replace('\\begin{Verbatim}',
+ '\\begin{OriginalVerbatim}')
+ self.table.has_verbatim = True
# get consistent trailer
hlcode = hlcode.rstrip()[:-14] # strip \end{Verbatim}
hlcode = hlcode.rstrip() + '\n'
- self.body.append('\n' + hlcode + '\\end{Verbatim}\n')
+ self.body.append('\n' + hlcode + '\\end{%sVerbatim}\n' %
+ (self.table and 'Original' or ''))
self.verbatim = None
visit_doctest_block = visit_literal_block
depart_doctest_block = depart_literal_block
diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty
index 7dacb904..a4845a01 100644
--- a/sphinx/texinputs/sphinx.sty
+++ b/sphinx/texinputs/sphinx.sty
@@ -154,9 +154,9 @@
\newcommand{\py@modulebadkey}{{--just-some-junk--}}
% Redefine the Verbatim environment to allow border and background colors.
-%
-\let\py@OldVerbatim=\Verbatim
-\let\py@OldEndVerbatim=\endVerbatim
+% The original environment is still used for verbatims within tables.
+\let\OriginalVerbatim=\Verbatim
+\let\endOriginalVerbatim=\endVerbatim
% Play with vpsace to be able to keep the indentation.
\newlength\distancetoright
@@ -188,10 +188,10 @@
}%
\item\MakeFramed {\FrameRestore}%
\small%
- \py@OldVerbatim[#1]%
+ \OriginalVerbatim[#1]%
}
\renewcommand{\endVerbatim}{%
- \py@OldEndVerbatim%
+ \endOriginalVerbatim%
\endMakeFramed%
\endlist%
}