[Python-checkins] r62689 - in doctools/trunk: doc/markup/misc.rst sphinx/latexwriter.py sphinx/texinputs/sphinx.sty

georg.brandl python-checkins at python.org
Sun May 4 09:43:10 CEST 2008


Author: georg.brandl
Date: Sun May  4 09:43:09 2008
New Revision: 62689

Log:
Fix handling of Verbatim within tables.


Modified:
   doctools/trunk/doc/markup/misc.rst
   doctools/trunk/sphinx/latexwriter.py
   doctools/trunk/sphinx/texinputs/sphinx.sty

Modified: doctools/trunk/doc/markup/misc.rst
==============================================================================
--- doctools/trunk/doc/markup/misc.rst	(original)
+++ doctools/trunk/doc/markup/misc.rst	Sun May  4 09:43:09 2008
@@ -78,3 +78,12 @@
    By default, Sphinx uses a table layout with ``L`` for every column.
 
    .. versionadded:: 0.2.1
+
+.. warning::
+
+   Tables that contain literal blocks cannot be set with ``tabulary``.  They are
+   therefore set with the standard LaTeX ``tabular`` environment.  Also, the
+   verbatim environment used for literal blocks only works in ``p{width}``
+   columns, which means that by default, Sphinx generates such column specs for
+   such tables.  Use the :dir:`tabularcolumns` directive to get finer control
+   over such tables.

Modified: doctools/trunk/sphinx/latexwriter.py
==============================================================================
--- doctools/trunk/sphinx/latexwriter.py	(original)
+++ doctools/trunk/sphinx/latexwriter.py	Sun May  4 09:43:09 2008
@@ -76,7 +76,9 @@
     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 @@
         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 @@
 
     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 @@
         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

Modified: doctools/trunk/sphinx/texinputs/sphinx.sty
==============================================================================
--- doctools/trunk/sphinx/texinputs/sphinx.sty	(original)
+++ doctools/trunk/sphinx/texinputs/sphinx.sty	Sun May  4 09:43:09 2008
@@ -154,9 +154,9 @@
 \newcommand{\py at modulebadkey}{{--just-some-junk--}}
 
 % Redefine the Verbatim environment to allow border and background colors.
-%
-\let\py at OldVerbatim=\Verbatim
-\let\py at 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 at OldVerbatim[#1]%
+    \OriginalVerbatim[#1]%
 }
 \renewcommand{\endVerbatim}{%
-    \py at OldEndVerbatim%
+    \endOriginalVerbatim%
   \endMakeFramed%
   \endlist%
 }


More information about the Python-checkins mailing list