Anonymous avatar Anonymous committed b6a98f1

* New LaTeX table handling.
* Support parts in LaTeX output.

Comments (0)

Files changed (17)

   independently from the source directory.  For that, a new command-line
   option ``-c`` has been added.
 
+* A new directive ``tabularcolumns`` can be used to give a tabular column
+  specification for LaTeX output.  Tables now use the ``tabulary`` package.
+
+* A new config value, `latex_use_parts`, can be used to enable parts in LaTeX
+  documents.
+
 Bugs fixed
 ----------
 
   master document.  Also encode non-ASCII characters as entities in TOC
   and index file.
 
+* Lots of little fixes to the LaTeX output and style.
+
 
 Release 0.2 (Apr 27, 2008)
 ==========================
 
 latex_logo = '_static/sphinx.png'
 
+#latex_use_parts = True
+
 # Additional stuff for the LaTeX preamble.
 #latex_preamble = ''
 
    configuration directory) that is the logo of the docs.  It is placed at the
    top of the title page.  Default: ``None``.
 
+.. confval:: latex_use_parts
+
+   If true, the topmost sectioning unit is parts, else it is chapters.  Default:
+   ``False``.
+
+   .. versionadded:: 0.2.1
+
 .. confval:: latex_appendices
 
    Documents to append as an appendix to all manuals.

doc/ext/appapi.rst

 
 These events are known to the core:
 
+.. tabularcolumns:: |l|L|L|
+
 ====================== =================================== =========
 Event name             Emitted when                        Arguments
 ====================== =================================== =========

doc/markup/misc.rst

    keep track of contributions), but you can set the configuration value
    :confval:`show_authors` to True to make them produce a paragraph in the
    output.
+
+
+Tables
+------
+
+Use standard reStructuredText tables.  They work fine in HTML output, however
+there are some gotchas when using tables in LaTeX: the column width is hard to
+determine correctly automatically.  For this reason, the following directive
+exists:
+
+.. directive:: .. tabularcolumns:: column spec
+
+   This directive gives a "column spec" for the next table occurring in the
+   source file.  The spec is the second argument to the LaTeX ``tabulary``
+   package's environment (which Sphinx uses to translate tables).  It can have
+   values like ::
+
+      |l|l|l|
+
+   which means three left-adjusted, nonbreaking columns.  For columns with
+   longer text that should automatically be broken, use either the standard
+   ``p{width}`` construct, or tabulary's automatic specifiers:
+
+   +-----+------------------------------------------+
+   |``L``| ragged-left column with automatic width  |
+   +-----+------------------------------------------+
+   |``R``| ragged-right column with automatic width |
+   +-----+------------------------------------------+
+   |``C``| centered column with automatic width     |
+   +-----+------------------------------------------+
+   |``J``| justified column with automatic width    |
+   +-----+------------------------------------------+
+
+   The automatic width is determined by rendering the content in the table, and
+   scaling them according to their share of the total width.
+
+   .. versionadded:: 0.2.1

sphinx/addnodes.py

 # module declaration
 class module(nodes.Element): pass
 
-# make them known to docutils. this is needed, because the HTMl writer
+# start of a file, used in the LaTeX builder only
+class start_of_file(nodes.Element): pass
+
+# tabular column specification, used for the LaTeX writer
+class tabular_col_spec(nodes.Element): pass
+
+# make them known to docutils. this is needed, because the HTML writer
 # will choke at some point if these are not added
 nodes._add_node_class_names("""index desc desc_content desc_signature desc_type
       desc_classname desc_name desc_parameterlist desc_parameter desc_optional
       centered versionmodified seealso productionlist production toctree
       pending_xref compact_paragraph highlightlang literal_emphasis
-      glossary acks module""".split())
+      glossary acks module start_of_file tabular_col_spec""".split())

sphinx/builder.py

                         self.warn('%s: toctree contains ref to nonexisting file %r' %
                                   (docname, includefile))
                     else:
+                        newnodes.append(addnodes.start_of_file())
                         newnodes.extend(subtree.children)
                 toctreenode.parent.replace(toctreenode, newnodes)
             return tree
         # the logo is handled differently
         if self.config.latex_logo:
             logobase = path.basename(self.config.latex_logo)
-            self.info(' '+logobase, nonl=1)
             shutil.copyfile(path.join(self.confdir, self.config.latex_logo),
                             path.join(self.outdir, logobase))
 
         latex_logo = (None, False),
         latex_preamble = ('', False),
         latex_appendices = ([], False),
+        latex_use_parts = (False, False),
         latex_use_modindex = (True, False),
     )
 

sphinx/directives.py

 acks_directive.content = 1
 acks_directive.arguments = (0, 0, 0)
 directives.register_directive('acks', acks_directive)
+
+
+# ------ tabularcolumns directive ---------------------------------------------------
+
+def tabularcolumns_directive(name, arguments, options, content, lineno,
+                             content_offset, block_text, state, state_machine):
+    # support giving explicit tabulary column definition to latex
+    node = addnodes.tabular_col_spec()
+    node['spec'] = arguments[0]
+    return [node]
+
+tabularcolumns_directive.content = 0
+tabularcolumns_directive.arguments = (1, 0, 1)
+directives.register_directive('tabularcolumns', tabularcolumns_directive)
+

sphinx/htmlwriter.py

     def visit_index(self, node):
         raise nodes.SkipNode
 
+    def visit_tabular_col_spec(self, node):
+        raise nodes.SkipNode
+
     def visit_glossary(self, node):
         pass
     def depart_glossary(self, node):

sphinx/latexwriter.py

 
 # Helper classes
 
-class TableSpec:
+class Table(object):
     def __init__(self):
-        self.columnCount = 0
-        self.firstRow = 1
+        self.col = 0
+        self.colcount = 0
+        self.had_head = False
 
-class Desc:
+
+class Desc(object):
     def __init__(self, node):
         self.env = LaTeXTranslator.desc_map.get(node['desctype'], 'describe')
         self.ni = node['noindex']
 
 
 class LaTeXTranslator(nodes.NodeVisitor):
-    sectionnames = ["chapter", "chapter", "section", "subsection",
+    sectionnames = ["part", "chapter", "section", "subsection",
                     "subsubsection", "paragraph", "subparagraph"]
 
     def __init__(self, document, builder):
             'latex', builder.config.pygments_style)
         self.context = []
         self.descstack = []
+        self.table = None
+        self.next_table_colspec = None
         self.highlightlang = 'python'
         self.highlightlinenothreshold = sys.maxint
         self.written_ids = set()
         if docclass == 'manual':
-            self.top_sectionlevel = 0
+            if builder.config.latex_use_parts:
+                self.top_sectionlevel = -1
+            else:
+                self.top_sectionlevel = 0
         else:
             self.top_sectionlevel = 1
+        self.next_section_target = None
         # flags
         self.verbatim = None
         self.in_title = 0
                (self.need_graphicx and GRAPHICX or '') + \
                '\n\n' + \
                u''.join(self.body) + \
-               (self.options['modindex'] and '\\printmodindex\n' or '') + \
+               (self.options['modindex'] and
+                '\\renewcommand{\\indexname}{Module Index}'
+                '\\printmodindex'
+                '\\renewcommand{\\indexname}{Index}\n' or '') + \
                (FOOTER % self.options)
 
     def visit_document(self, node):
         if self.first_document == 1:
+            # the first document is all the regular content ...
             self.body.append('\\begin{document}\n\\maketitle\n\\tableofcontents\n')
             self.first_document = 0
         elif self.first_document == 0:
+            # ... and all others are the appendices
             self.body.append('\n\\appendix\n')
             self.first_document = -1
         self.sectionlevel = self.top_sectionlevel
     def depart_document(self, node):
         pass
 
+    def visit_start_of_file(self, node):
+        # This marks the begin of a new file; therefore the current module and
+        # class must be reset
+        self.body.append('\n\\resetcurrentobjects\n')
+        raise nodes.SkipNode
+
     def visit_highlightlang(self, node):
         self.highlightlang = node['lang']
         self.highlightlinenothreshold = node['linenothreshold']
         if not self.this_is_the_title:
             self.sectionlevel += 1
         self.body.append('\n\n')
-        if node.get('ids'):
-            for id in node['ids']:
-                if id not in self.written_ids:
-                    self.body.append(r'\hypertarget{%s}{}' % id)
-                    self.written_ids.add(id)
+        if self.next_section_target:
+            self.body.append(r'\hypertarget{%s}{}' % self.next_section_target)
+            self.next_section_target = None
+        #if node.get('ids'):
+        #    for id in node['ids']:
+        #        if id not in self.written_ids:
+        #            self.body.append(r'\hypertarget{%s}{}' % id)
+        #            self.written_ids.add(id)
     def depart_section(self, node):
         self.sectionlevel -= 1
 
     def visit_label(self, node):
         raise nodes.SkipNode
 
+    def visit_tabular_col_spec(self, node):
+        self.next_table_colspec = node['spec']
+        raise nodes.SkipNode
+
     def visit_table(self, node):
-        self.tableSpec = TableSpec()
+        if self.table:
+            raise NotImplementedError('Nested tables are not supported.')
+        self.table = Table()
+        self.body.append('\n\\begin{tabulary}{\\textwidth}')
     def depart_table(self, node):
-        self.tableSpec = None
+        self.body.append('\\end{tabulary}\n\n')
+        self.table = None
 
     def visit_colspec(self, node):
-        pass
+        self.table.colcount += 1
     def depart_colspec(self, node):
         pass
 
     def visit_tgroup(self, node):
-        columnCount = int(node.get('cols', 0))
-        self.tableSpec.columnCount = columnCount
-        if columnCount == 2:
-            self.body.append('\\begin{tableii}{l|l}{textrm}')
-        elif columnCount == 3:
-            self.body.append('\\begin{tableiii}{l|l|l}{textrm}')
-        elif columnCount == 4:
-            self.body.append('\\begin{tableiv}{l|l|l|l}{textrm}')
-        elif columnCount == 5:
-            self.body.append('\\begin{tablev}{l|l|l|l|l}{textrm}')
-        else:
-            self.builder.warn('table with too many columns, ignoring')
-            raise nodes.SkipNode
+        pass
     def depart_tgroup(self, node):
-        if self.tableSpec.columnCount == 2:
-            self.body.append('\n\\end{tableii}\n\n')
-        elif self.tableSpec.columnCount == 3:
-            self.body.append('\n\\end{tableiii}\n\n')
-        elif self.tableSpec.columnCount == 4:
-            self.body.append('\n\\end{tableiv}\n\n')
-        elif self.tableSpec.columnCount == 5:
-            self.body.append('\n\\end{tablev}\n\n')
+        pass
 
     def visit_thead(self, node):
-        pass
+        if self.next_table_colspec:
+            self.body.append('{%s}\n' % self.next_table_colspec)
+        else:
+            self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
+        self.next_table_colspec = None
+        self.body.append('\\hline\n')
+        self.table.had_head = True
     def depart_thead(self, node):
-        pass
+        self.body.append('\\hline\n')
 
     def visit_tbody(self, node):
-        pass
+        if not self.table.had_head:
+            self.visit_thead(node)
     def depart_tbody(self, node):
-        pass
+        self.body.append('\\hline\n')
 
     def visit_row(self, node):
-        if not self.tableSpec.firstRow:
-            if self.tableSpec.columnCount == 2:
-                self.body.append('\n\\lineii')
-            elif self.tableSpec.columnCount == 3:
-                self.body.append('\n\\lineiii')
-            elif self.tableSpec.columnCount == 4:
-                self.body.append('\n\\lineiv')
-            elif self.tableSpec.columnCount == 5:
-                self.body.append('\n\\linev')
+        self.table.col = 0
     def depart_row(self, node):
-        if self.tableSpec.firstRow:
-            self.tableSpec.firstRow = 0
+        self.body.append('\\\\\n')
 
     def visit_entry(self, node):
-        if self.tableSpec.firstRow:
-            self.body.append('{%s}' % self.encode(node.astext().strip(' ')))
-            raise nodes.SkipNode
+        if node.has_key('morerows') or node.has_key('morecols'):
+            raise NotImplementedError('Column or row spanning cells are not implemented.')
+        if self.table.col > 0:
+            self.body.append(' & ')
+        self.table.col += 1
+        if isinstance(node.parent.parent, nodes.thead):
+            self.body.append('\\textbf{')
+            self.context.append('}')
         else:
-            self.body.append('{')
+            self.context.append('')
     def depart_entry(self, node):
-        if self.tableSpec.firstRow:
-            pass
-        else:
-            self.body.append('}')
+        self.body.append(self.context.pop()) # header
 
     def visit_acks(self, node):
         # this is a list in the source, but should be rendered as a
             # indexing uses standard LaTeX index markup, so the targets
             # will be generated differently
             if not id.startswith('index-'):
-                self.body.append(r'\hypertarget{%s}{' % id)
-                return '}'
-            return ''
+                self.body.append(r'\hypertarget{%s}{}' % id)
 
-        if not (node.has_key('refuri') or node.has_key('refid')
-                or node.has_key('refname')):
-            ctx = ''
-            for id in node['ids']:
-                if id not in self.written_ids:
-                    self.written_ids.add(id)
-                    ctx += add_target(id)
-            self.context.append(ctx)
-        elif node.has_key('refid') and node['refid'] not in self.written_ids:
-            self.context.append(add_target(node['refid']))
+        if node.has_key('refid') and node['refid'] not in self.written_ids:
+            parindex = node.parent.index(node)
+            try:
+                next = node.parent[parindex+1]
+                if isinstance(next, nodes.section):
+                    self.next_section_target = node['refid']
+                    return
+            except IndexError:
+                pass
+            add_target(node['refid'])
             self.written_ids.add(node['refid'])
-        else:
-            self.context.append('')
     def depart_target(self, node):
-        self.body.append(self.context.pop())
+        pass
 
     indextype_map = {
         'module': 'refmodindex',

sphinx/quickstart.py

 # the title page.
 #latex_logo = None
 
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
 # Additional stuff for the LaTeX preamble.
 #latex_preamble = ''
 

sphinx/texinputs/Makefile

 
 clean:
 	rm -f *.pdf *.dvi *.ps
-	rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg
+	rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla
 
 .PHONY: all all-pdf all-dvi all-ps clean
 

sphinx/texinputs/howto.cls

 %
 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesClass{howto}[1998/02/25 Document class (Python HOWTO)]
+\ProvidesClass{howto}[2008/05/01 Document class (Sphinx HOWTO)]
 
 \RequirePackage{fancybox}
 
 \ProcessOptions\relax
 \LoadClass[twoside]{article}
 
-\setcounter{secnumdepth}{1}
 
-% Optional packages:
+% Set some sane defaults for section numbering depth and TOC depth.  You can
+% reset these counter in your preamble.
 %
-% If processing of these documents fails at your TeX installation,
-% these may be commented out (independently) to make things work.
-% These are both supplied with the current version of the teTeX
-% distribution.
-%
-% The "fancyhdr" package makes nicer page footers reasonable to
-% implement, and is used to put the chapter and section information in 
-% the footers.
+\setcounter{secnumdepth}{2}
+
+
+% The "fancyhdr" package makes nicer page footers reasonable to implement, and
+% is used to put the chapter and section information in the footers.
 %
 \RequirePackage{fancyhdr}
 
-
-% Required package:
-%
-% This gives us all the Python-specific markup that we really want.
-% This should come last.  Do not change this.
+% This gives us all the Python-specific markup that we really want.  This should
+% come last.  Do not change this.
 %
 \RequirePackage{sphinx}
 
-% This comes after python.sty because it otherwise defines its own
-% "seealso" command.
+% This comes after python.sty because it otherwise defines its own "seealso"
+% command.
+%
 \RequirePackage{makeidx}
 
-
-% Support for module synopsis sections:
-\newcommand{\py@ModSynopsisFilename}{\jobname.syn}
-
-
 % Need to do one of these....
 \newcommand{\py@doHorizontalRule}{\rule{\textwidth}{1pt}}
 
 
-% Change the title page to look a bit better, and fit in with the
-% fncychap ``Bjarne'' style a bit better.
+% Change the title page to look a bit better, and fit in with the fncychap
+% ``Bjarne'' style a bit better.
 %
 \renewcommand{\maketitle}{
   \py@doHorizontalRule
   \endgroup
   \py@doHorizontalRule
   \vspace{12pt}
-  \py@doing@page@targetstrue
 }  
 
-% Fix the theindex environment to add an entry to the Table of
-% Contents; this is much nicer than just having to jump to the end of
-% the book and flip around, especially with multiple indexes.
+% Fix the theindex environment to add an entry to the Table of Contents; this is
+% much nicer than just having to jump to the end of the book and flip around,
+% especially with multiple indexes.
 %
 \let\py@OldTheindex=\theindex
 \renewcommand{\theindex}{
   \clearpage
+  \phantomsection
   \py@OldTheindex
   \addcontentsline{toc}{section}{\indexname}
 }
   \pagestyle{plain}}{
   \pagestyle{normal}}		% start this way; change for
 \pagenumbering{arabic}		% ToC & chapters
-\setcounter{secnumdepth}{2}
 
 \thispagestyle{empty}

sphinx/texinputs/manual.cls

 %
 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesClass{manual}[1998/03/03 Document class (Python manual)]
+\ProvidesClass{manual}[2008/05/01 Document class (Sphinx manual)]
 
 \RequirePackage{fancybox}
 
 \ProcessOptions\relax
 \LoadClass[twoside,openright]{report}
 
+
+% Set some sane defaults for section numbering depth and TOC depth.  You can
+% reset these counter in your preamble.
+%
 \setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{1}
 
-% Optional packages:
-%
-% If processing of these documents fails at your TeX installation,
-% these may be commented out (independently) to make things work.
-% These are both supplied with the current version of the teTeX
-% distribution.
-%
-% The "fancyhdr" package makes nicer page footers reasonable to
-% implement, and is used to put the chapter and section information in 
-% the footers.
+
+% The "fancyhdr" package makes nicer page footers reasonable to implement, and
+% is used to put the chapter and section information in the footers.
 %
 \RequirePackage{fancyhdr}
 
-% Required packages:
-%
-% The "fncychap" package is used to get the nice chapter headers.  The
-% .sty file is distributed with Sphinx, so you should not need to disable
-% it.  You'd also end up with a mixed page style; uglier than stock LaTeX!
+% The "fncychap" package is used to get the nice chapter headers.
 %
 \RequirePackage[Bjarne]{fncychap}
 % Do horizontal rules it this way to match:
 \newcommand{\py@doHorizontalRule}{\mghrulefill{\RW}}
 
-
-% This gives us all the Sphinx-specific markup that we really want.
-% This should come last.  Do not change this.
+% This gives us all the Sphinx-specific markup that we really want.  This should
+% come last.  Do not change this.
 %
 \RequirePackage{sphinx}
 
-% This comes after sphinx.sty because it otherwise defines its own
-% "seealso" command.
+% This comes after sphinx.sty because it otherwise defines its own "seealso"
+% command.
+%
 \RequirePackage{makeidx}
 
 
-% Support for module synopsis sections:
-\newcommand{\py@ModSynopsisFilename}{\jobname\thechapter.syn}
-\let\py@OldChapter=\chapter
-\renewcommand{\chapter}{
-  \py@ProcessModSynopsis
-  \py@closeModSynopsisFile
-  \py@OldChapter
-}
-
-
-% Change the title page to look a bit better, and fit in with the
-% fncychap ``Bjarne'' style a bit better.
+% Change the title page to look a bit better, and fit in with the fncychap
+% ``Bjarne'' style a bit better.
 %
 \renewcommand{\maketitle}{%
   \begin{titlepage}%
 }
 
 
-% Catch the end of the {abstract} environment, but here make sure the
-% abstract is followed by a blank page if the 'openright' option is used.
+% Catch the end of the {abstract} environment, but here make sure the abstract
+% is followed by a blank page if the 'openright' option is used.
 %
 \let\py@OldEndAbstract=\endabstract
 \renewcommand{\endabstract}{
   \py@OldEndAbstract
 }
 
-% This wraps the \tableofcontents macro with all the magic to get the
-% spacing right and have the right number of pages if the 'openright'
-% option has been used.  This eliminates a fair amount of crud in the
-% individual document files.
+
+% This wraps the \tableofcontents macro with all the magic to get the spacing
+% right and have the right number of pages if the 'openright' option has been
+% used.  This eliminates a fair amount of crud in the individual document files.
 %
 \let\py@OldTableofcontents=\tableofcontents
 \renewcommand{\tableofcontents}{%
   }%
   \pagenumbering{arabic}%
   \@ifundefined{fancyhf}{}{\pagestyle{normal}}%
-  \py@doing@page@targetstrue%
 }
+
+
 % This is needed to get the width of the section # area wide enough in the
 % library reference.  Doing it here keeps it the same for all the manuals.
 %
 \renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}}
 \renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}}
-\setcounter{tocdepth}{1}
 
 
-% Fix the theindex environment to add an entry to the Table of
-% Contents; this is much nicer than just having to jump to the end of
-% the book and flip around, especially with multiple indexes.
+% Fix the theindex environment to add an entry to the Table of Contents; this is
+% much nicer than just having to jump to the end of the book and flip around,
+% especially with multiple indexes.
 %
 \let\py@OldTheindex=\theindex
 \renewcommand{\theindex}{
   \cleardoublepage
+  \phantomsection
   \py@OldTheindex
   \addcontentsline{toc}{chapter}{\indexname}
 }

sphinx/texinputs/sphinx.sty

 %
 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{sphinx}[2007/12/30 LaTeX package (Sphinx markup)]
+\ProvidesPackage{sphinx}[2008/05/01 LaTeX package (Sphinx markup)]
 
 \RequirePackage{textcomp}
-\RequirePackage{longtable}
 \RequirePackage{times}
 \RequirePackage{fancyvrb}
 \RequirePackage{titlesec}
+\RequirePackage{tabulary}
 
 \RequirePackage{color}
-% Define these colors to your liking in the preamble.
+% Redefine these colors to your liking in the preamble.
 \definecolor{TitleColor}{rgb}{0.126,0.263,0.361}
 \definecolor{InnerLinkColor}{rgb}{0.208,0.374,0.486}
 \definecolor{OuterLinkColor}{rgb}{0.216,0.439,0.388}
-% Define these colors to something not white if you want to have colored
+% Redefine these colors to something not white if you want to have colored
 % background and border for code examples.
 \definecolor{VerbatimColor}{rgb}{1,1,1}
 \definecolor{VerbatimBorderColor}{rgb}{1,1,1}
 %\renewcommand{\paperwidth}{8.5in}   % typical squarish manual
 %\renewcommand{\paperwidth}{7in}     % O'Reilly ``Programmming Python''
 
-% If we ever want to indent paragraphs, this needs to be changed.
-% This is used inside the macros defined here instead of coding
-% \noindent directly.
-\let\py@parindent=\noindent
-
-% for PDF output, use maximal compression & a lot of other stuff
-% (test for PDF recommended by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov>)
-%
-\newif\ifpy@doing@page@targets
-\py@doing@page@targetsfalse
-
+% for PDF output, use maximal compression
 \newif\ifpdf\pdffalse
 \ifx\pdfoutput\undefined\else\ifcase\pdfoutput
   \let\py@NormalColor\relax
 \else
   \pdftrue
   \input{pdfcolor}
-  \let\py@LinkColor=\NavyBlue
   \let\py@NormalColor=\Black
   \def\py@TitleColor{\color{TitleColor}}
   \pdfcompresslevel=9
-  \pdfpagewidth=\paperwidth    % page width of PDF output
-  \pdfpageheight=\paperheight  % page height of PDF output
-  %
-  % Pad the number with '0' to 3 digits wide so no page name is a prefix
-  % of any other.
-  %
-  \newcommand{\py@targetno}[1]{\ifnum#1<100 0\fi\ifnum#1<10 0\fi#1}
-  \newcommand{\py@pageno}{\py@targetno\thepage}
-  %
-  % This definition allows the entries in the page-view of the ToC to be
-  % active links.  Some work, some don't.
-  %
-  \let\py@OldContentsline=\contentsline
-  %
-  % Backward compatibility hack: pdfTeX 0.13 defined \pdfannotlink,
-  % but it changed to \pdfstartlink in 0.14.  This let's us use either
-  % version and still get useful behavior.
-  %
-  \@ifundefined{pdfstartlink}{
-    \let\pdfstartlink=\pdfannotlink
-  }{}
-  %
-  % The \py@parindent here is a hack -- we're forcing pdfTeX into
-  % horizontal mode since \pdfstartlink requires that.
-  \def\py@pdfstartlink{%
-    \ifvmode\py@parindent\fi%
-    \pdfstartlink%
-  }
-  %
-  % Macro that takes two args: the name to link to and the content of
-  % the link.  This takes care of the PDF magic, getting the colors
-  % the same for each link, and avoids having lots of garbage all over 
-  % this style file.
-  \newcommand{\py@linkToName}[2]{%
-    \py@pdfstartlink attr{/Border [0 0 0]} goto name{#1}%
-      \color{InnerLinkColor}#2\py@NormalColor%
-    \pdfendlink%
-  }
-  % Compute the padded page number separately since we end up with a pair of
-  % \relax tokens; this gets the right string computed and works.
-  \renewcommand{\contentsline}[3]{%
-    \def\my@pageno{\py@targetno{#3}}%
-    \py@OldContentsline{#1}{\py@linkToName{page\my@pageno}{#2}}{#3}%
-  }
-  \AtEndDocument{
-    \def\_{\string_}
-    \InputIfFileExists{\jobname.bkm}{\pdfcatalog{/PageMode /UseOutlines}}{}
-  }
-  \newcommand{\py@target}[1]{%
-    \ifpy@doing@page@targets%
-      {\pdfdest name{#1} xyz}%
-    \fi%
-  }
-  \let\py@OldLabel=\label
-  \renewcommand{\label}[1]{%
-    \py@OldLabel{#1}%
-    \py@target{label-#1}%
-  }
-  % This stuff adds a page# destination to every PDF page, where # is three
-  % digits wide, padded with leading zeros.  This doesn't really help with
-  % the frontmatter, but does fine with the body.
-  %
-  % This is *heavily* based on the hyperref package.
-  %
-  \def\@begindvi{%
-    \unvbox \@begindvibox
-    \@hyperfixhead
-  }
-  \def\@hyperfixhead{%
-   \let\H@old@thehead\@thehead
-       \global\def\@foo{\py@target{page\py@pageno}}%
-     \expandafter\ifx\expandafter\@empty\H@old@thehead
-       \def\H@old@thehead{\hfil}\fi
-    \def\@thehead{\@foo\relax\H@old@thehead}%
-  }
 \fi\fi
 
 % Increase printable page size (copied from fullpage.sty)
 % Add the defining entry for a module
 \newcommand{\py@modindex}[2]{%
   \renewcommand{\py@thismodule}{#1}
-  \index{#1@{\py@idxcode{#1}} (#2module)|textbf}%
+  \index{#1@{\py@idxcode{#1}} (#2module)}%
   \ifpy@UseModuleIndex%
     \@ifundefined{py@modplat@\py@thismodulekey}{
-      \write\modindexfile{\protect\indexentry{#1@{\texttt{#1}}}{\thepage}}%
-    }{\write\modindexfile{\protect\indexentry{#1@{\texttt{#1} %
-        \emph{(\py@platformof[\py@thismodulekey]{})}}}{\thepage}}%
+      \write\modindexfile{\protect\indexentry{#1@{\texttt{#1}}|hyperpage}{\thepage}}%
+    }{\write\modindexfile{\protect\indexentry{#1@{\texttt{#1 }%
+        \emph{(\platformof{#1})}}|hyperpage}{\thepage}}%
     }
   \fi%
 }
 
-
-% Module synopsis processing -----------------------------------------------
-%
+% "Current" keys
 \newcommand{\py@thisclass}{}
 \newcommand{\py@thismodule}{}
 \newcommand{\py@thismodulekey}{}
 \newcommand{\py@thismoduletype}{}
 
+% Module index types
 \newcommand{\py@standardIndexModule}[1]{\py@modindex{#1}{standard }}
 \newcommand{\py@builtinIndexModule}[1]{\py@modindex{#1}{built-in }}
 \newcommand{\py@extensionIndexModule}[1]{\py@modindex{#1}{extension }}
 \newcommand{\py@IndexModule}[1]{\py@modindex{#1}{}}
 
-\newif\ifpy@HaveModSynopsis       \py@HaveModSynopsisfalse
-\newif\ifpy@ModSynopsisFileIsOpen \py@ModSynopsisFileIsOpenfalse
-\newif\ifpy@HaveModPlatform       \py@HaveModPlatformfalse
-
 % \declaremodule[key]{type}{name}
 \newcommand{\declaremodule}[3][\py@modulebadkey]{
-  \py@openModSynopsisFile
   \renewcommand{\py@thismoduletype}{#2}
   \ifx\py@modulebadkey#1
     \renewcommand{\py@thismodulekey}{#3}
   }{%
     \csname py@#2IndexModule\endcsname{#3}%
   }
-  \label{module-\py@thismodulekey}
+  %\label{module-\py@thismodulekey}
 }
+
+% Record module platforms for the Module Index
 \newif\ifpy@ModPlatformFileIsOpen \py@ModPlatformFileIsOpenfalse
+\long\def\py@writeModPlatformFile#1{%
+  \protected@write\py@ModPlatformFile%
+    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
+    {\string#1}%
+}
 \newcommand{\py@ModPlatformFilename}{\jobname.pla}
 \newcommand{\platform}[1]{
   \ifpy@ModPlatformFileIsOpen\else
     \openout\py@ModPlatformFile=\py@ModPlatformFilename
     \py@ModPlatformFileIsOpentrue
   \fi
+  \py@writeModPlatformFile{\py@defplatform{\py@thismodulekey}{#1}}
 }
+\newcommand{\py@defplatform}[2]{\expandafter\def\csname py@modplat@#1\endcsname{#2}}
+\newcommand{\platformof}[1]{\csname py@modplat@#1\endcsname}
+
 \InputIfFileExists{\jobname.pla}{}{}
-\newcommand{\py@platformof}[2][\py@modulebadkey]{%
-  \ifx\py@modulebadkey#1 \def\py@key{#2}%
-  \else \def\py@key{#1}%
-  \fi%
-  \csname py@modplat@\py@key\endcsname%
-}
-\newcommand{\ignorePlatformAnnotation}[1]{}
 
 % \moduleauthor{name}{email}
 \newcommand{\moduleauthor}[2]{}
 % \sectionauthor{name}{email}
 \newcommand{\sectionauthor}[2]{}
 
+% Ignore module synopsis.
+\newcommand{\modulesynopsis}[1]{}
 
-\newcommand{\py@defsynopsis}{Module has no synopsis.}
-\newcommand{\py@modulesynopsis}{\py@defsynopsis}
-\newcommand{\modulesynopsis}[1]{
-  \py@HaveModSynopsistrue
-  \renewcommand{\py@modulesynopsis}{#1}
-}
-
-% define the file
-\newwrite\py@ModSynopsisFile
-
-% hacked from \addtocontents from latex.ltx:
-\long\def\py@writeModSynopsisFile#1{%
-  \protected@write\py@ModSynopsisFile%
-      {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
-      {\string#1}%
-}
-\newcommand{\py@closeModSynopsisFile}{
-  \ifpy@ModSynopsisFileIsOpen
-    \closeout\py@ModSynopsisFile
-    \py@ModSynopsisFileIsOpenfalse
-  \fi
-}
-\newcommand{\py@openModSynopsisFile}{
-  \ifpy@ModSynopsisFileIsOpen\else
-    \openout\py@ModSynopsisFile=\py@ModSynopsisFilename
-    \py@ModSynopsisFileIsOpentrue
-  \fi
-}
-
-\newcommand{\py@ProcessModSynopsis}{
-  \ifpy@HaveModSynopsis
-    \py@writeModSynopsisFile{\modulesynopsis%
-      {\py@thismodulekey}{\py@thismodule}%
-      {\py@thismoduletype}{\py@modulesynopsis}}%
-    \py@HaveModSynopsisfalse
-  \fi
-  \renewcommand{\py@modulesynopsis}{\py@defsynopsis}
-}
-\AtEndDocument{\py@ProcessModSynopsis\py@closeModSynopsisFile}
-
-
-\long\def\py@writeModPlatformFile#1{%
-  \protected@write\py@ModPlatformFile%
-    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
-    {\string#1}%
-}
-
-
-\newcommand{\localmoduletable}{
-  \IfFileExists{\py@ModSynopsisFilename}{
-    \begin{synopsistable}
-      \input{\py@ModSynopsisFilename}
-    \end{synopsistable}
-  }{}
-}
-
-\ifpdf
-  \newcommand{\py@ModSynopsisSummary}[4]{%
-    \py@linkToName{label-module-#1}{\bfcode{#2}} & #4\\
-  }
-\else
-  \newcommand{\py@ModSynopsisSummary}[4]{\bfcode{#2} & #4\\}
-\fi
-\newenvironment{synopsistable}{
-  % key, name, type, synopsis
-  \let\modulesynopsis=\py@ModSynopsisSummary
-  \begin{tabular}{ll}
-}{
-  \end{tabular}
-}
-%
-% --------------------------------------------------------------------------
-
-
-\newcommand{\py@reset}{
-  \py@ProcessModSynopsis
+% Reset "current" objects.
+\newcommand{\resetcurrentobjects}{
   \renewcommand{\py@thisclass}{}
   \renewcommand{\py@thismodule}{}
   \renewcommand{\py@thismodulekey}{}
 % Augment the sectioning commands used to get our own font family in place,
 % and reset some internal data items:
 \titleformat{\section}{\Large\py@HeaderFamily\py@TitleColor}%
-{\thesection}{-1em}{\py@reset}{\py@NormalColor}
+{\thesection}{0.5em}{}{\py@NormalColor}
 \titleformat{\subsection}{\large\py@HeaderFamily\py@TitleColor}%
 {\thesubsection}{0.5em}{}{\py@NormalColor}
 \titleformat{\subsubsection}{\py@HeaderFamily\py@TitleColor}%
 }
 
 
-% Tables.
-%
-\newenvironment{tableii}[4]{%
-  \begin{center}%
-    \def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}%
-    \begin{tabular}{#1}\strong{#3}&\strong{#4} \\* \hline%
-}{%
-    \end{tabular}%
-  \end{center}%
-}
-
-\newenvironment{longtableii}[4]{%
-  \begin{center}%
-    \def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}%
-    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4} \\* \hline\endhead%
-}{%
-    \end{longtable}%
-  \end{center}%
-}
-
-\newenvironment{tableiii}[5]{%
-  \begin{center}%
-    \def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}%
-    \begin{tabular}{#1}\strong{#3}&\strong{#4}&\strong{#5} \\%
-      \hline%
-}{%
-    \end{tabular}%
-  \end{center}%
-}
-
-\newenvironment{longtableiii}[5]{%
-  \begin{center}%
-    \def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}%
-    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4}&\strong{#5} \\%
-      \hline\endhead%
-}{%
-    \end{longtable}%
-  \end{center}%
-}
-
-\newenvironment{tableiv}[6]{%
-  \begin{center}%
-    \def\lineiv##1##2##3##4{\csname#2\endcsname{##1}&##2&##3&##4\\}%
-    \begin{tabular}{#1}\strong{#3}&\strong{#4}&\strong{#5}&\strong{#6} \\%
-      \hline%
-}{%
-    \end{tabular}%
-  \end{center}%
-}
-
-\newenvironment{longtableiv}[6]{%
-  \begin{center}%
-    \def\lineiv##1##2##3##4{\csname#2\endcsname{##1}&##2&##3&##4\\}%
-    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4}&\strong{#5}&\strong{#6}%
-      \\%
-      \hline\endhead%
-}{%
-    \end{longtable}%
-  \end{center}%
-}
-
-\newenvironment{tablev}[7]{%
-  \begin{center}%
-    \def\linev##1##2##3##4##5{\csname#2\endcsname{##1}&##2&##3&##4&##5\\}%
-    \begin{tabular}{#1}\strong{#3}&\strong{#4}&\strong{#5}&\strong{#6}&\strong{#7} \\%
-      \hline%
-}{%
-    \end{tabular}%
-  \end{center}%
-}
-
-\newenvironment{longtablev}[7]{%
-  \begin{center}%
-    \def\linev##1##2##3##4##5{\csname#2\endcsname{##1}&##2&##3&##4&##5\\}%
-    \begin{longtable}[c]{#1}\strong{#3}&\strong{#4}&\strong{#5}&\strong{#6}&\strong{#7}%
-      \\%
-      \hline\endhead%
-}{%
-    \end{longtable}%
-  \end{center}%
-}
-
 % See-also environment
 \newenvironment{seealso}{
   \par

sphinx/texinputs/tabulary.sty

+%%
+%% This is file `tabulary.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabulary.dtx  (with options: `package')
+%% DRAFT VERSION
+%%
+%% File `tabulary.dtx'.
+%% Copyright (C) 1995 1996 2003 David Carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tabulary}
+          [2007/10/02 v0.9 tabulary package (DPC)]
+\RequirePackage{array}
+\catcode`\Z=14
+\DeclareOption{debugshow}{\catcode`\Z=9\relax}
+\ProcessOptions
+\def\arraybackslash{\let\\=\@arraycr}
+\def\@finalstrut#1{%
+  \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}
+\newcount\TY@count
+\def\tabulary{%
+  \let\TY@final\tabular
+  \let\endTY@final\endtabular
+  \TY@tabular}
+\def\TY@tabular#1{%
+  \edef\TY@{\@currenvir}%
+  {\ifnum0=`}\fi
+  \@ovxx\TY@linewidth
+  \@ovyy\TY@tablewidth
+  \count@\z@
+  \@tempswatrue
+  \@whilesw\if@tempswa\fi{%
+  \advance\count@\@ne
+  \expandafter\ifx\csname TY@F\the\count@\endcsname\relax
+    \@tempswafalse
+  \else
+    \expandafter\let\csname TY@SF\the\count@\expandafter\endcsname
+                     \csname TY@F\the\count@\endcsname
+    \global\expandafter\let\csname TY@F\the\count@\endcsname\relax
+    \expandafter\let\csname TY@S\the\count@\expandafter\endcsname
+                     \csname TY@\the\count@\endcsname
+  \fi}%
+    \global\TY@count\@ne
+    \TY@width\xdef{0pt}%
+    \global\TY@tablewidth\z@
+    \global\TY@linewidth#1\relax
+Z\message{^^J^^JTable^^J%
+Z        Target Width: \the\TY@linewidth^^J%
+Z        \string\tabcolsep: \the\tabcolsep\space
+Z        \string\arrayrulewidth: \the\arrayrulewidth\space
+Z        \string\doublerulesep: \the\doublerulesep^^J%
+Z        \string\tymin: \the\tymin\space
+Z        \string\tymax: \the\tymax^^J}%
+    \let\@classz\TY@classz
+    \let\verb\TX@verb
+    \toks@{}\TY@get@body}
+\let\TY@@mkpream\@mkpream
+\def\TY@mkpream{%
+    \def\@addamp{%
+      \if@firstamp \@firstampfalse \else
+      \global\advance\TY@count\@ne
+      \edef\@preamble{\@preamble &}\fi
+      \TY@width\xdef{0pt}}%
+    \def\@acol{%
+      \TY@subwidth\col@sep
+      \@addtopreamble{\hskip\col@sep}}%
+    \let\@arrayrule\TY@arrayrule
+    \let\@classvi\TY@classvi
+    \def\@classv{\save@decl
+      \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
+      \sbox\z@{\d@llarbegin\@nextchar\d@llarend}%
+      \TY@subwidth{\wd\z@}%
+      \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
+      \prepnext@tok}%
+  \global\let\@mkpream\TY@@mkpream
+  \TY@@mkpream}
+\def\TY@arrayrule{%
+  \TY@subwidth\arrayrulewidth
+  \@addtopreamble \vline}
+\def\TY@classvi{\ifcase \@lastchclass
+  \@acol \or
+  \TY@subwidth\doublerulesep
+  \@addtopreamble{\hskip \doublerulesep}\or
+  \@acol \or
+  \@classvii
+  \fi}
+\def\TY@tab{%
+  \setbox\z@\hbox\bgroup
+  \let\[$\let\]$%
+  \let\equation$\let\endequation$%
+    \col@sep\tabcolsep
+    \let\d@llarbegin\begingroup\let\d@llarend\endgroup
+    \let\@mkpream\TY@mkpream
+      \def\multicolumn##1##2##3{\multispan##1\relax}%
+    \CT@start\TY@tabarray}
+\def\TY@tabarray{\@ifnextchar[{\TY@array}{\@array[t]}}
+\def\TY@array[#1]{\@array[t]}
+\def\TY@width#1{%
+  \expandafter#1\csname TY@\the\TY@count\endcsname}
+\def\TY@subwidth#1{%
+  \TY@width\dimen@
+  \advance\dimen@-#1\relax
+  \TY@width\xdef{\the\dimen@}%
+  \global\advance\TY@linewidth-#1\relax}
+\def\endtabulary{%
+  \gdef\@halignto{}%
+  \expandafter\TY@tab\the\toks@
+  \crcr\omit
+  {\xdef\TY@save@row{}%
+     \loop
+    \advance\TY@count\m@ne
+    \ifnum\TY@count>\z@
+    \xdef\TY@save@row{\TY@save@row&\omit}%
+    \repeat}\TY@save@row
+  \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1
+    \unskip\global\setbox1=\lastbox}\egroup
+  \dimen@\TY@linewidth
+  \divide\dimen@\TY@count
+  \ifdim\dimen@<\tymin
+    \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}%
+    \tymin\dimen@
+  \fi
+  \setbox\tw@=\hbox{\unhbox\@ne
+    \loop
+\@tempdima=\lastskip
+\ifdim\@tempdima>\z@
+Z   \message{ecs=\the\@tempdima^^J}%
+   \global\advance\TY@linewidth-\@tempdima
+\fi
+    \unskip
+    \setbox\tw@=\lastbox
+    \ifhbox\tw@
+Z     \message{Col \the\TY@count: Initial=\the\wd\tw@\space}%
+      \ifdim\wd\tw@>\tymax
+        \wd\tw@\tymax
+Z       \message{> max\space}%
+Z     \else
+Z       \message{ \@spaces\space}%
+      \fi
+  \TY@width\dimen@
+Z \message{\the\dimen@\space}%
+  \advance\dimen@\wd\tw@
+Z \message{Final=\the\dimen@\space}%
+   \TY@width\xdef{\the\dimen@}%
+      \ifdim\dimen@<\tymin
+Z        \message{< tymin}%
+         \global\advance\TY@linewidth-\dimen@
+         \expandafter\xdef\csname TY@F\the\TY@count\endcsname
+                                                        {\the\dimen@}%
+       \else
+      \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@
+Z        \message{***}%
+         \global\advance\TY@linewidth-\dimen@
+         \expandafter\xdef\csname TY@F\the\TY@count\endcsname
+                                                        {\the\dimen@}%
+        \else
+Z        \message{> tymin}%
+         \global\advance\TY@tablewidth\dimen@
+         \global\expandafter\let\csname TY@F\the\TY@count\endcsname
+                                                               \maxdimen
+       \fi\fi
+       \advance\TY@count\m@ne
+    \repeat}%
+    \TY@checkmin
+    \TY@checkmin
+    \TY@checkmin
+    \TY@checkmin
+    \TY@count\z@
+    \let\TY@box\TY@box@v
+  {\expandafter\TY@final\the\toks@\endTY@final}%
+  \count@\z@
+  \@tempswatrue
+  \@whilesw\if@tempswa\fi{%
+  \advance\count@\@ne
+  \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax
+    \@tempswafalse
+  \else
+    \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname
+                   \csname TY@SF\the\count@\endcsname
+    \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname
+                   \csname TY@S\the\count@\endcsname
+  \fi}%
+  \TY@linewidth\@ovxx
+  \TY@tablewidth\@ovyy
+    \ifnum0=`{\fi}}
+\def\TY@checkmin{%
+  \let\TY@checkmin\relax
+\ifdim\TY@tablewidth>\z@
+  \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth
+ \ifdim\TY@tablewidth <\linewidth
+   \def\TY@ratio{1}%
+ \fi
+\else
+  \TY@warn{No suitable columns!}%
+  \def\TY@ratio{1}%
+\fi
+\count@\z@
+Z \message{^^JLine Width: \the\TY@linewidth,
+Z             Natural Width: \the\TY@tablewidth,
+Z             Ratio: \TY@ratio^^J}%
+\@tempdima\z@
+\loop
+\ifnum\count@<\TY@count
+\advance\count@\@ne
+  \ifdim\csname TY@F\the\count@\endcsname>\tymin
+    \dimen@\csname TY@\the\count@\endcsname
+    \dimen@\TY@ratio\dimen@
+    \ifdim\dimen@<\tymin
+Z     \message{Column \the\count@\space ->}%
+      \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin
+      \global\advance\TY@linewidth-\tymin
+      \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname
+      \let\TY@checkmin\TY@@checkmin
+    \else
+      \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}%
+      \advance\@tempdima\csname TY@F\the\count@\endcsname
+    \fi
+  \fi
+Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }%
+\repeat
+Z \message{^^JTotal:\the\@tempdima^^J}%
+}
+\let\TY@@checkmin\TY@checkmin
+\newdimen\TY@linewidth
+\def\tyformat{\everypar{{\nobreak\hskip\z@skip}}}
+\newdimen\tymin
+\tymin=10pt
+\newdimen\tymax
+\tymax=2\textwidth
+\def\@testpach{\@chclass
+ \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
+  \ifnum \@lastchclass=7 5 \else
+   \ifnum \@lastchclass=8 \tw@ \else
+    \ifnum \@lastchclass=9 \thr@@
+   \else \z@
+   \ifnum \@lastchclass = 10 \else
+   \edef\@nextchar{\expandafter\string\@nextchar}%
+   \@chnum
+   \if \@nextchar c\z@ \else
+    \if \@nextchar l\@ne \else
+     \if \@nextchar r\tw@ \else
+   \if \@nextchar C7 \else
+    \if \@nextchar L8 \else
+     \if \@nextchar R9 \else
+     \if \@nextchar J10 \else
+   \z@ \@chclass
+   \if\@nextchar |\@ne \else
+    \if \@nextchar !6 \else
+     \if \@nextchar @7 \else
+      \if \@nextchar <8 \else
+       \if \@nextchar >9 \else
+  10
+  \@chnum
+  \if \@nextchar m\thr@@\else
+   \if \@nextchar p4 \else
+    \if \@nextchar b5 \else
+   \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi
+     \fi  \fi  \fi  \fi  \fi  \fi \fi \fi \fi \fi \fi}
+\def\TY@classz{%
+  \@classx
+  \@tempcnta\count@
+  \ifx\TY@box\TY@box@v
+    \global\advance\TY@count\@ne
+  \fi
+  \let\centering c%
+  \let\raggedright\noindent
+  \let\raggedleft\indent
+  \let\arraybackslash\relax
+  \prepnext@tok
+  \ifnum\@chnum<4
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \ifnum\@chnum=6
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \@addtopreamble{%
+    \ifcase\@chnum
+      \hfil \d@llarbegin\insert@column\d@llarend \hfil \or
+      \kern\z@
+       \d@llarbegin \insert@column \d@llarend \hfil \or
+      \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or
+      $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
+      \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \d@llarbegin \insert@column \d@llarend \or% dubious "s" case
+      \TY@box\centering\or
+      \TY@box\raggedright\or
+      \TY@box\raggedleft\or
+      \TY@box\relax
+    \fi}\prepnext@tok}
+\def\TY@box#1{%
+  \ifx\centering#1%
+      \hfil \d@llarbegin\insert@column\d@llarend \hfil \else
+  \ifx\raggedright#1%
+        \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+      \d@llarbegin \insert@column \d@llarend \hfil \else
+  \ifx\raggedleft#1%
+      \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else
+  \ifx\relax#1%
+       \d@llarbegin \insert@column \d@llarend
+  \fi  \fi  \fi  \fi}
+\def\TY@box@v#1{%
+      \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}%
+              #1\arraybackslash\tyformat
+                              \insert@column\@endpbox}
+\newdimen\TY@tablewidth
+\def\Gscale@div#1#2#3{%
+  \setlength\dimen@{#3}%
+  \ifdim\dimen@=\z@
+    \PackageError{graphics}{Division by 0}\@eha
+    \dimen@#2%
+  \fi
+  \edef\@tempd{\the\dimen@}%
+  \setlength\dimen@{#2}%
+  \count@65536\relax
+  \ifdim\dimen@<\z@
+    \dimen@-\dimen@
+    \count@-\count@
+  \fi
+  \loop
+    \ifdim\dimen@<8192\p@
+      \dimen@\tw@\dimen@
+      \divide\count@\tw@
+  \repeat
+  \dimen@ii=\@tempd\relax
+  \divide\dimen@ii\count@
+  \divide\dimen@\dimen@ii
+  \edef#1{\strip@pt\dimen@}}
+\long\def\TY@get@body#1\end
+  {\toks@\expandafter{\the\toks@#1}\TY@find@end}
+\def\TY@find@end#1{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa
+  \else\toks@\expandafter
+    {\the\toks@\end{#1}}\expandafter\TY@get@body\fi}
+\def\TY@warn{%
+  \PackageWarning{tabulary}}
+\catcode`\Z=11
+\AtBeginDocument{
+\@ifpackageloaded{colortbl}{%
+\expandafter\def\expandafter\@mkpream\expandafter#\expandafter1%
+  \expandafter{%
+    \expandafter\let\expandafter\CT@setup\expandafter\relax
+    \expandafter\let\expandafter\CT@color\expandafter\relax
+    \expandafter\let\expandafter\CT@do@color\expandafter\relax
+    \expandafter\let\expandafter\color\expandafter\relax
+    \expandafter\let\expandafter\CT@column@color\expandafter\relax
+    \expandafter\let\expandafter\CT@row@color\expandafter\relax
+    \@mkpream{#1}}
+\let\TY@@mkpream\@mkpream
+\def\TY@classz{%
+  \@classx
+  \@tempcnta\count@
+  \ifx\TY@box\TY@box@v
+    \global\advance\TY@count\@ne
+  \fi
+  \let\centering c%
+  \let\raggedright\noindent
+  \let\raggedleft\indent
+  \let\arraybackslash\relax
+  \prepnext@tok
+\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil
+  \ifnum\@chnum<4
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \ifnum\@chnum=6
+    \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
+  \fi
+  \@addtopreamble{%
+    \setbox\z@\hbox\bgroup\bgroup
+    \ifcase\@chnum
+      \hskip\stretch{.5}\kern\z@
+      \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or
+      \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<
+       \d@llarbegin \insert@column \d@llarend \hfill \or
+      \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or
+      $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
+      \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
+      \d@llarbegin \insert@column \d@llarend \or% dubious s case
+      \TY@box\centering\or
+      \TY@box\raggedright\or
+      \TY@box\raggedleft\or
+      \TY@box\relax
+    \fi
+ \egroup\egroup
+\begingroup
+  \CT@setup
+  \CT@column@color
+  \CT@row@color
+  \CT@do@color
+\endgroup
+        \@tempdima\ht\z@
+        \advance\@tempdima\minrowclearance
+        \vrule\@height\@tempdima\@width\z@
+\unhbox\z@
+}\prepnext@tok}%
+    \def\TY@arrayrule{%
+      \TY@subwidth\arrayrulewidth
+      \@addtopreamble{{\CT@arc@\vline}}}%
+    \def\TY@classvi{\ifcase \@lastchclass
+      \@acol \or
+      \TY@subwidth\doublerulesep
+      \ifx\CT@drsc@\relax
+        \@addtopreamble{\hskip\doublerulesep}%
+      \else
+        \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}%
+      \fi\or
+      \@acol \or
+      \@classvii
+      \fi}%
+}{%
+\let\CT@start\relax
+}
+}
+{\uccode`\*=`\ %
+\uppercase{\gdef\TX@verb{%
+  \leavevmode\null\TX@vwarn
+  {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces
+  \@ifstar{\let~*\TX@vb}{\TX@vb}}}}
+\def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}%
+    \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!}
+\def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= }
+\begingroup
+\catcode`\*=\catcode`\#
+\catcode`\#=12
+\gdef\TX@vfirst{%
+  \if\@tempa#%
+    \def\@tempb{\TX@v@#}%
+  \else
+    \let\@tempb\TX@v@
+    \if\@tempa\space~\else\@tempa\fi
+  \fi
+  \@tempb}
+\gdef\TX@v@*1 *2{%
+  \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2}
+\gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2}
+\endgroup
+\def\TX@vwarn{%
+  \@warning{\noexpand\verb may be unreliable inside tabularx/y}%
+  \global\let\TX@vwarn\@empty}
+\endinput
+%%
+%% End of file `tabulary.sty'.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.