summaryrefslogtreecommitdiff
path: root/sandbox/dkuhlman/docutils/docutils/writers/python_latex.py
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/dkuhlman/docutils/docutils/writers/python_latex.py')
-rw-r--r--sandbox/dkuhlman/docutils/docutils/writers/python_latex.py1114
1 files changed, 0 insertions, 1114 deletions
diff --git a/sandbox/dkuhlman/docutils/docutils/writers/python_latex.py b/sandbox/dkuhlman/docutils/docutils/writers/python_latex.py
deleted file mode 100644
index 62f4c0363..000000000
--- a/sandbox/dkuhlman/docutils/docutils/writers/python_latex.py
+++ /dev/null
@@ -1,1114 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:Author: Dave Kuhlman
-:Contact: dkuhlman@rexx.com
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-LaTeX2e document tree Writer.
-"""
-
-__docformat__ = 'reStructuredText'
-
-# convention deactivate code by two # e.g. ##.
-
-import sys
-import time
-import re
-import string
-import urllib, urlparse
-from docutils import writers, nodes, languages
-
-## from IPython.Shell import IPShellEmbed
-## args = ''
-## ipshell = IPShellEmbed(args,
-## banner = 'Dropping into IPython',
-## exit_msg = 'Leaving Interpreter, back to program.')
-
-
-# To turn off debug printing, set to 0.
-DEBUG_FLAG = 1
-
-# Constants and globals:
-
-COMMENT_RE_SUB = re.compile('\n').sub
-PROGRAMOPT_RE = re.compile('(--[_\-a-zA-Z0-9]+)')
-EMAILADDR_RE = re.compile(r'[_\-a-zA-Z0-9.]+@[_\-a-zA-Z0-9.]+')
-WEBADDR_RE = re.compile(r'http://[_\-a-zA-Z0-9./~]+')
-
-TABLE_MODE_NONE = 0
-TABLE_MODE_HEAD = 1
-TABLE_MODE_BODY = 2
-
-class TableSpec:
- def __init__(self):
- self.columnCount = 0
- self.mode = TABLE_MODE_NONE
- def getColumnCount(self): return self.columnCount
- def setColumnCount(self, columnCount): self.columnCount = columnCount
- def getMode(self): return self.mode
- def setMode(self, mode): self.mode = mode
-
-
-class Writer(writers.Writer):
-
- supported = ('latex','latex2e')
- """Formats this writer supports."""
-
- settings_spec = (
- 'Documenting Python LaTeX Specific Options',
- 'The LaTeX "--output-encoding" default is "latin-1:strict".',
- (('Specify documentclass (one of howto, manual, module). Default is "howto".',
-# (('Specify documentclass (one of howto, manual). Default is "howto".',
- ['--documentclass'],
- {'default': 'howto', }),
- ))
-
- #settings_defaults = {}
- settings_defaults = {'output_encoding': 'latin-1'}
-
- output = None
- """Final translated form of `document`."""
-
- def translate(self):
- visitor = DocPyTranslator(self.document)
- self.document.walkabout(visitor)
- #import pdb
- #pdb.run('self.document.walkabout(visitor)', globals(), locals())
- self.output = visitor.astext()
-
-
-class DocPyTranslator(nodes.NodeVisitor):
- latex_head = '\\documentclass{%s}\n'
- # add a generated on day , machine by user using docutils version.
- generator = '\n%% generator -- Docutils: http://docutils.sourceforge.net/\n' \
- '%% writer -- documenting_python\n' \
- '%% generated on -- %s\n\n' % time.ctime()
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.docinfo = {}
- self.settings = settings = document.settings
- if self.settings.documentclass == 'module':
- raise NotImplementedError, 'Error: module document type not yet implemented.'
- self.head_prefix = [
- self.latex_head % (self.settings.documentclass, ),
- #self.encoding,
- #self.linking % (self.colorlinks, self.hyperlink_color, self.hyperlink_color),
- # geometry and fonts might go into style.tex.
- #self.geometry % (self.d_paper, self.d_margins),
- #
- self.generator,
- '\\usepackage{html}\n',
- ]
-
- # NOTE: Latex wants a date and an author, rst puts this into
- # docinfo, so normally we donot want latex author/date handling.
- # latex article has its own handling of date and author, deactivate.
- self.latex_docinfo = 0
- self.head = [ ]
- self.body_prefix = []
- # separate title, so we can appen subtitle.
- self.title = ""
- self.body = []
- self.body_suffix = ['\n']
- self.section_level = 0
- self.context = []
- self.topic_class = ''
- # Flags to encode
- # ---------------
- # verbatim: to tell encode not to encode.
- self.verbatim = 0
- # insert_newline: to tell encode to replace blanks by "~".
- self.insert_none_breaking_blanks = 0
- # insert_newline: to tell encode to add latex newline.
- self.insert_newline = 0
- # mbox_newline: to tell encode to add mbox and newline.
- self.mbox_newline = 0
-
- # inside literal block: no quote mangling.
- self.literal = 0
- self.seealso = 0
- self.title_before_section = 0
- self.seen_section = 0
-
- def pdebug(self, msg):
- if DEBUG_FLAG >= 1:
- self.body.append(msg)
-
- def encode(self, text):
- """
- Encode special characters in `text` & return.
- # $ % & ~ _ ^ \ { }
- Escaping with a backslash does not help with backslashes, ~ and ^.
-
- < > are only available in math-mode (really ?)
- $ starts math- mode.
- AND quotes:
-
- """
- if self.verbatim:
- return text
- # compile the regexps once. do it here so one can see them.
- #
- # first the braces.
- if not self.__dict__.has_key('encode_re_braces'):
- self.encode_re_braces = re.compile(r'([{}])')
- text = self.encode_re_braces.sub(r'{\\\1}',text)
- if not self.__dict__.has_key('encode_re_bslash'):
- # find backslash: except in the form '{\{}' or '{\}}'.
- self.encode_re_bslash = re.compile(r'(?<!{)(\\)(?![{}]})')
- # then the backslash: except in the form from line above:
- # either '{\{}' or '{\}}'.
- text = self.encode_re_bslash.sub(r'{\\textbackslash}', text)
-
- # then dollar
- text = text.replace("$", '{\\$}')
- # then all that needs math mode
- text = text.replace("<", '{$<$}')
- text = text.replace(">", '{$>$}')
- # then
- text = text.replace("&", '{\\&}')
- text = text.replace("_", '{\\_}')
- # the ^:
- # * verb|^| does not work in mbox.
- # * mathmode has wedge. hat{~} would also work.
- text = text.replace("^", '{\\ensuremath{^\\wedge}}')
- text = text.replace("%", '{\\%}')
- text = text.replace("#", '{\\#}')
- text = text.replace("~", '{\\~{}}')
- if self.insert_newline:
- # HACK: insert a blank before the newline, to avoid
- # ! LaTeX Error: There's no line here to end.
- text = text.replace("\n", '~\\\\\n')
- elif self.mbox_newline:
- text = text.replace("\n", '}\\\\\n\\mbox{')
- if self.insert_none_breaking_blanks:
- text = text.replace(' ', '~')
- # unicode !!!
- text = text.replace(u'\u2020', '{$\\dagger$}')
- return text
-
- def attval(self, text,
- whitespace=re.compile('[\n\r\t\v\f]')):
- """Cleanse, encode, and return attribute value text."""
- return self.encode(whitespace.sub(' ', text))
-
- def replace_email_addr(self, mo):
- addr = mo.group(0)
- outtext = '\\ulink{%s}{mailto:%s}' % (addr, addr)
- return outtext
-
- def replace_web_addr(self, mo):
- addr = mo.group(0)
- outtext = '\\ulink{%s}{%s}' % (addr, addr)
- return outtext
-
- def linkify(self, intext):
- # If it looks like an email address, convert it to a "mailto" URL.
- text1 = EMAILADDR_RE.sub(self.replace_email_addr, intext)
- # If it looks like a URL, convert it to a ulink.
- text2 = WEBADDR_RE.sub(self.replace_web_addr, text1)
- return text2
-
- def astext(self):
- title = '\\title{%s}\n' % self.title
- if self.docinfo.has_key('revision'):
- self.head.append('\\release{%s}\n' % self.docinfo['revision'])
- if self.docinfo.has_key('date'):
- self.head.append('\\date{%s}\n' % self.docinfo['date'])
- if self.docinfo.has_key('author'):
- self.head.append('\\author{%s}\n' % self.docinfo['author'])
- if self.docinfo.has_key('address'):
- self.pdebug('%% [(astext) text: %s]\n' % self.docinfo['address'])
- self.head.append('\\authoraddress{%s}\n' % \
- #self.linkify(self.cleanHref(self.docinfo['address'])))
- self.cleanHref(self.linkify(
- self.docinfo['address'])).replace('\n', '\\\\\n'))
- self.body_prefix.append('\\maketitle\n')
- self.body_prefix.append('\\ifhtml\n')
- self.body_prefix.append('\\chapter*{Front Matter\\label{front}}\n')
- self.body_prefix.append('\\fi\n')
- if self.docinfo.has_key('copyright'):
- self.body_prefix.append('\n%s\n' % self.docinfo['copyright'])
- if self.docinfo.has_key('abstract'):
- self.body_prefix.append('\\begin{abstract}\n\\noindent\n')
- self.body_prefix.append('%s\n' % self.docinfo['abstract'])
- self.body_prefix.append('\\end{abstract}\n')
- self.body_prefix.append('\\tableofcontents\n')
- result = ''.join(
- self.head_prefix +
- [title] +
- self.head +
- self.body_prefix +
- self.body +
- self.body_suffix)
- return result
-
- def visit_Text(self, node):
- self.body.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_address(self, node):
- self.visit_docinfo_item(node, 'address')
- raise nodes.SkipNode
-
- def depart_address(self, node):
- self.depart_docinfo_item(node)
-
- def visit_admonition(self, node, name):
- self.body.append('\\begin{center}\\begin{sffamily}\n')
- self.body.append('\\fbox{\\parbox{\\admonitionwidth}{\n')
- self.body.append('\\textbf{\\large '+ self.language.labels[name] + '}\n');
- self.body.append('\\vspace{2mm}\n')
-
-
- def depart_admonition(self):
- self.body.append('}}\n') # end parbox fbox
- self.body.append('\\end{sffamily}\n\\end{center}\n');
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_author(self, node):
- #self.pdebug('%% [(visit_author) node: %s]\n' % str(node))
- self.visit_docinfo_item(node, 'author')
- raise nodes.SkipNode
-
- def depart_author(self, node):
- self.depart_docinfo_item(node)
-
- def visit_authors(self, node):
- # ignore. visit_author is called for each one
- # self.visit_docinfo_item(node, 'author')
- pass
-
- def depart_authors(self, node):
- # self.depart_docinfo_item(node)
- pass
-
- def visit_block_quote(self, node):
- # If the block quote contains a single object and that object
- # is a list, then generate a list not a block quote.
- # This lets us indent lists.
- done = 0
- if len(node.children) == 1:
- child = node.children[0]
- if isinstance(child, nodes.bullet_list) or \
- isinstance(child, nodes.enumerated_list):
- done = 1
- if not done:
- self.body.append('\\begin{quote}\n')
-
- def depart_block_quote(self, node):
- done = 0
- if len(node.children) == 1:
- child = node.children[0]
- if isinstance(child, nodes.bullet_list) or \
- isinstance(child, nodes.enumerated_list):
- done = 1
- if not done:
- self.body.append('\\end{quote}\n')
-
- def visit_bullet_list(self, node):
- self.body.append('\\begin{itemize}\n' )
-
- def depart_bullet_list(self, node):
- self.body.append('\\end{itemize}\n' )
-
- def visit_enumerated_list(self, node):
- self.body.append('\\begin{enumerate}\n' )
-
- def depart_enumerated_list(self, node):
- self.body.append('\\end{enumerate}\n')
-
- def visit_caption(self, node):
- self.body.append('\\caption{' )
-
- def depart_caption(self, node):
- self.body.append('}')
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- self.visit_footnote(node)
-
- def depart_citation(self, node):
- self.depart_footnote(node)
-
- def visit_title_reference(self, node):
- # BUG title-references are what?
- pass
-
- def depart_title_reference(self, node):
- pass
-
- def visit_citation_reference(self, node):
- pass
-
- def depart_citation_reference(self, node):
- pass
-
- def visit_classifier(self, node):
- pass
-
- def depart_classifier(self, node):
- pass
-
- def visit_colspec(self, node):
- pass
-
- def depart_colspec(self, node):
- pass
-
- def visit_comment(self, node):
- """Escape end of line by a ne comment start in comment text."""
- self.body.append('\n%% %s \n' % COMMENT_RE_SUB('\n% ', node.astext()))
- raise nodes.SkipNode
-
- def visit_contact(self, node):
- self.visit_docinfo_item(node, 'contact')
-
- def depart_contact(self, node):
- self.depart_docinfo_item(node)
-
- def visit_copyright(self, node):
- self.visit_docinfo_item(node, 'copyright')
- raise nodes.SkipNode
-
- def depart_copyright(self, node):
- self.depart_docinfo_item(node)
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
- def visit_date(self, node):
- ## self.pdebug('%% [(visit_date) node: %s]\n' % str(node))
- self.visit_docinfo_item(node, 'date')
- raise nodes.SkipNode
-
- def depart_date(self, node):
- self.depart_docinfo_item(node)
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- #self.body.append('% [(visit_definition)]\n')
- pass
-
- def depart_definition(self, node):
- self.body.append('\n')
- #self.body.append('%[(depart_definition)]\n')
-
- def visit_definition_list(self, node):
- self.body.append( '\n\\begin{description}\n' )
-
- def depart_definition_list(self, node):
- self.body.append( '\\end{description}\n' )
-
- def visit_definition_list_item(self, node):
- #self.body.append('%[(visit_definition_list_item)]\n')
- pass
-
- def depart_definition_list_item(self, node):
- #self.body.append('%[(depart_definition_list_item)]\n')
- pass
-
- def visit_description(self, node):
- self.body.append( ' ' )
-
- def depart_description(self, node):
- pass
-
- def visit_docinfo(self, node):
- self.docinfo = {}
-
- def depart_docinfo(self, node):
- pass
-
- def visit_docinfo_item(self, node, name):
- self.docinfo[name] = node.astext()
-
- def depart_docinfo_item(self, node):
- pass
-
- def visit_doctest_block(self, node):
- self.body.append('\\begin{verbatim}\n' )
- self.verbatim = 1
-
- def depart_doctest_block(self, node):
- self.body.append( '\n\\end{verbatim}\n' )
- self.verbatim = 0
-
- def visit_document(self, node):
- self.body_prefix.append('\\begin{document}\n')
-
- def depart_document(self, node):
- if self.seealso:
- self.body.append('\\end{seealso}\n')
- self.body_suffix.append('\\end{document}\n')
-
- def visit_emphasis(self, node):
- self.body.append('\\emph{')
-
- def depart_emphasis(self, node):
- self.body.append('}')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- # real output is done in siblings: _argument, _body, _name
- raise nodes.SkipNode
- pass
-
- def depart_field(self, node):
- self.body.append('\n')
- ##self.body.append('%[depart_field]\n')
-
- def visit_field_argument(self, node):
- #self.pdebug('%% [(visit_field_argument) node: %s]\n' % str(node))
- #self.pdebug('% [visit_field_argument]\n')
- pass
-
- def depart_field_argument(self, node):
- #self.pdebug('% [(depart_field_argument)]\n')
- pass
-
- def visit_field_body(self, node):
- #self.pdebug('%% [(visit_field_body) node: %s]\n' % str(node))
- # BUG by attach as text we loose references.
-## if self.docinfo and self.current_field_name:
-## self.docinfo[self.current_field_name] += '%s \\\\\n' % node.astext()
-## raise nodes.SkipNode
- pass
-
- def depart_field_body(self, node):
-## self.body.append( '\n' )
- pass
-
- def visit_field_list(self, node):
-## if not self.docinfo:
-## self.body.append('\\begin{quote}\n')
-## self.body.append('\\begin{description}\n')
- pass
-
- def depart_field_list(self, node):
-## if not self.docinfo:
-## self.body.append('\\end{description}\n')
-## self.body.append('\\end{quote}\n')
- pass
-
- def visit_field_name(self, node):
-## self.pdebug('%% [(visit_field_name) content: %s]\n' % node.astext())
-## self.pdebug('%% [(visit_field_name) node: %s\n' % str(node))
-## self.docinfo[node.astext()] = ''
-## self.current_field_name = node.astext()
- pass
-
- def depart_field_name(self, node):
- pass
-
- def visit_figure(self, node):
- self.body.append( '\\begin{figure}\n' )
-
- def depart_figure(self, node):
- self.body.append( '\\end{figure}\n' )
-
- def visit_footer(self, node):
- self.context.append(len(self.body))
-
- def depart_footer(self, node):
- start = self.context.pop()
- footer = (['\n\\begin{center}\small\n']
- + self.body[start:] + ['\n\\end{center}\n'])
- self.body_suffix[:0] = footer
- del self.body[start:]
-
- def visit_footnote(self, node):
- notename = node['id']
- self.body.append('\\begin{figure}[b]')
- self.body.append('\\hypertarget{%s}' % notename)
-
- def depart_footnote(self, node):
- self.body.append('\\end{figure}\n')
-
- def visit_footnote_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = node['refid']
- elif node.has_key('refname'):
- href = self.document.nameids[node['refname']]
- format = self.settings.footnote_references
- if format == 'brackets':
- suffix = '['
- self.context.append(']')
- elif format == 'superscript':
- suffix = '\\raisebox{.5em}[0em]{\\scriptsize'
- self.context.append('}')
- else: # shouldn't happen
- raise AssertionError('Illegal footnote reference format.')
- self.body.append('%s\\hyperlink{%s}{' % (suffix,href))
-
- def depart_footnote_reference(self, node):
- self.body.append('}%s' % self.context.pop())
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_header(self, node):
- self.body.append('%% [(visit_header) node: %s\n' % str(node))
- self.context.append(len(self.body))
-
- def depart_header(self, node):
- start = self.context.pop()
- self.body_prefix.append('\n\\verb|begin_header|\n')
- self.body_prefix.extend(self.body[start:])
- self.body_prefix.append('\n\\verb|end_header|\n')
- del self.body[start:]
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- atts = node.attributes.copy()
- href = atts['uri']
- ##self.body.append('\\begin{center}\n')
- self.body.append('\n\\includegraphics{%s}\n' % href)
- ##self.body.append('\\end{center}\n')
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_interpreted(self, node):
- # @@@ Incomplete, pending a proper implementation on the
- # Parser/Reader end.
- self.visit_literal(node)
-
- def depart_interpreted(self, node):
- self.depart_literal(node)
-
- def visit_label(self, node):
- # footnote/citation label
- self.body.append('[')
-
- def depart_label(self, node):
- self.body.append(']')
-
- def visit_legend(self, node):
- self.body.append('{\\small ')
-
- def depart_legend(self, node):
- self.body.append('}')
-
- def visit_line_block(self, node):
- """line-block:
- * whitespace (including linebreaks) is significant
- * inline markup is supported.
- * serif typeface
- """
- self.body.append('\\begin{flushleft}\n')
- self.insert_none_breaking_blanks = 1
- self.line_block_without_mbox = 1
- if self.line_block_without_mbox:
- self.insert_newline = 1
- else:
- self.mbox_newline = 1
- self.body.append('\\mbox{')
-
- def depart_line_block(self, node):
- if self.line_block_without_mbox:
- self.insert_newline = 0
- else:
- self.body.append('}')
- self.mbox_newline = 0
- self.insert_none_breaking_blanks = 0
- self.body.append('\n\\end{flushleft}\n')
-
- def visit_list_item(self, node):
- self.body.append('\\item ')
-
- def depart_list_item(self, node):
- self.body.append('\n')
-
- def visit_literal(self, node):
- ## self.literal = 1
- content = node.astext().strip()
- if re.search('[ \t\n]', content):
- self.body.append('\\samp{%s}' % content)
- else:
- self.body.append('\\code{%s}' % content)
- raise nodes.SkipNode
-
- def depart_literal(self, node):
- pass
-
- def visit_literal_block(self, node):
- self.verbatim = 1
- self.body.append('\n\\begin{verbatim}\n')
-
- def depart_literal_block(self, node):
- self.body.append('\n\\end{verbatim}\n')
- self.verbatim = 0
-
- def visit_meta(self, node):
- self.body.append('[visit_meta]\n')
-
- def depart_meta(self, node):
- self.body.append('[depart_meta]\n')
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
-
- def visit_option(self, node):
- if self.context[-1]:
- # this is not the first option
- self.body.append(', ')
-
- def depart_option(self, node):
- # flag tha the first option is done.
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- """The delimiter betweeen an option and its argument."""
- self.body.append(node.get('delimiter', ' '))
-
- def depart_option_argument(self, node):
- pass
-
- def visit_option_group(self, node):
- self.body.append('\\item [')
- self.context.append(0)
-
- def depart_option_group(self, node):
- self.context.pop() # the flag
- self.body.append('] ')
-
- def visit_option_list(self, node):
- self.body.append('\\begin{description}\n')
-
- def depart_option_list(self, node):
- self.body.append('\\end{description}\n')
-
- def visit_option_list_item(self, node):
- pass
-
- def depart_option_list_item(self, node):
- pass
-
- def re_repl_long(self, mo):
- result = '\\longprogramopt{%s}' % mo.group(0)[2:]
- return result
-
- def visit_option_string(self, node):
- content = node.astext()
- content = re.sub(PROGRAMOPT_RE, self.re_repl_long, content)
- self.body.append(content)
- raise nodes.SkipNode
-
- def depart_option_string(self, node):
- pass
-
-
- def visit_organization(self, node):
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- self.depart_docinfo_item(node)
-
- def visit_paragraph(self, node):
- if not self.topic_class == 'contents':
- self.body.append('\n')
-
- def depart_paragraph(self, node):
- self.body.append('\n')
-
- def visit_problematic(self, node):
- self.body.append('{\\color{red}\\bfseries{}')
-
- def depart_problematic(self, node):
- self.body.append('}')
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'].lower() == 'latex':
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def cleanHref(self, href):
- href = href.replace('~', '\\~{}')
- href = href.replace('#', '\\#{}')
- return href
-
-## def visit_reference(self, node):
-## self.pdebug('%% [(visit_reference) node: %s]\n' % str(node))
-## if node.has_key('refuri'):
-## self.href = node['refuri']
-## elif node.has_key('refid'):
-## self.href = '#' + node['refid']
-## elif node.has_key('refname'):
-## self.href = '#' + self.document.nameids[node['refname']]
-## self.href = self.cleanHref(self.href)
-## if self.seealso:
-## self.body.append('\\seeurl{%s}{' % self.href)
-## else:
-## self.body.append('\\ulink{')
-##
-## def depart_reference(self, node):
-## if self.seealso:
-## self.body.append('}')
-## else:
-## self.body.append('}{%s}' % self.href)
-
- def visit_reference(self, node):
- #self.pdebug('%% [(visit_reference) node: %s]\n' % str(node))
- if self.seealso:
- if node.has_key('refuri'):
- href = node['refuri']
- href = self.cleanHref(href)
- self.body.append('\\seeurl{%s}{' % href)
- else:
- if node.has_key('refuri'):
- # External hyperlink
- self.body.append('\\ulink{')
- elif node.has_key('refid'):
- # Internal hyperlink
- href = node['refid']
- href = self.cleanHref(href)
- self.body.append('\\ref{%s}' % href)
- raise nodes.SkipNode
-
- def depart_reference(self, node):
- if self.seealso:
- self.body.append('}')
- else:
- if node.has_key('refuri'):
- # External hyperlink
- href = node['refuri']
- href = self.cleanHref(href)
- self.body.append('}{%s}' % href)
- elif node.has_key('refid'):
- # Internal hyperlink
- pass
-
- def visit_revision(self, node):
- ## self.pdebug('%% [(visit_revision) node: "%s"]\n' % str(node))
- self.visit_docinfo_item(node, 'revision')
- raise nodes.SkipNode
-
- def depart_revision(self, node):
- self.depart_docinfo_item(node)
-
- def visit_section(self, node):
- # If the document title came before the first (outer-most)
- # section, then the first section is really the first section.
- # If the document title is *in* the first section, then
- # the first section is a container that has the document title.
- # So, if the document title came before the first section,
- # then alwasy increment the section_level.
- # But, if the document title is *in* the first section, then
- # increment the section_level only on the *second* and
- # subsequent sections.
- ## self.pdebug('%% [(visit_section) node: %s]\n' % repr(node))
- if self.title_before_section or self.seen_section:
- self.section_level += 1
- self.seen_section = 1
-
- def depart_section(self, node):
- ## self.pdebug('%% [(depart_section) node: %s]\n' % repr(node))
- if self.title_before_section:
- self.section_level -= 1
-
- def visit_sidebar(self, node):
- # BUG: this is just a hack to make sidebars render something
- self.body.append('\\begin{center}\\begin{sffamily}\n')
- self.body.append('\\fbox{\\colorbox[gray]{0.80}{\\parbox{\\admonitionwidth}{\n')
-
- def depart_sidebar(self, node):
- self.body.append('}}}\n') # end parbox colorbox fbox
- self.body.append('\\end{sffamily}\n\\end{center}\n');
-
-
- attribution_formats = {'dash': ('---', ''),
- 'parentheses': ('(', ')'),
- 'parens': ('(', ')'),
- 'none': ('', '')}
-
- def visit_attribution(self, node):
- prefix, suffix = self.attribution_formats[self.settings.attribution]
- self.body.append('\n\\begin{flushright}\n')
- self.body.append(prefix)
- self.context.append(suffix)
-
- def depart_attribution(self, node):
- self.body.append(self.context.pop() + '\n')
- self.body.append('\\end{flushright}\n')
-
- def visit_status(self, node):
- self.visit_docinfo_item(node, 'status')
-
- def depart_status(self, node):
- self.depart_docinfo_item(node)
-
- def visit_strong(self, node):
- self.body.append('\\strong{')
-
- def depart_strong(self, node):
- self.body.append('}')
-
- def visit_substitution_definition(self, node):
- raise nodes.SkipNode
-
- def visit_substitution_reference(self, node):
- self.unimplemented_visit(node)
-
- def visit_subtitle(self, node):
- self.title = self.title + \
- '\\\\\n\\large{%s}\n' % self.encode(node.astext())
- raise nodes.SkipNode
-
- def depart_subtitle(self, node):
- pass
-
- def visit_system_message(self, node):
- if node['level'] < self.document.reporter['writer'].report_level:
- raise nodes.SkipNode
-
-
- def depart_system_message(self, node):
- self.body.append('\n')
-
- def visit_target(self, node):
- #self.pdebug('%% [(visit_target) node: %s]\n' % str(node))
- pass
-## if not (node.has_key('refuri') or node.has_key('refid')
-## or node.has_key('refname')):
-## self.body.append('\\hypertarget{%s}{' % node['name'])
-## self.context.append('}')
-## else:
-## self.context.append('')
-
- def depart_target(self, node):
- pass
-## self.body.append(self.context.pop())
-
- def visit_table(self, node):
- self.tableSpec = TableSpec()
-
- def depart_table(self, node):
- self.tablSpec = None
-
- def visit_tgroup(self, node):
- columnCount = int(node.get('cols', 0))
- self.tableSpec.setColumnCount(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}')
-
- def depart_tgroup(self, node):
- if self.tableSpec.getColumnCount() == 2:
- self.body.append('\n\\end{tableii}\n')
- elif self.tableSpec.getColumnCount() == 3:
- self.body.append('\n\\end{tableiii}\n')
- elif self.tableSpec.getColumnCount() == 4:
- self.body.append('\n\\end{tableiv}\n')
- elif self.tableSpec.getColumnCount() == 5:
- self.body.append('\n\\end{tablev}\n')
-
- def visit_thead(self, node):
- self.tableSpec.setMode(TABLE_MODE_HEAD)
-
- def depart_thead(self, node):
- self.tableSpec.setMode(TABLE_MODE_NONE)
-
- def visit_tbody(self, node):
- self.tableSpec.setMode(TABLE_MODE_BODY)
-
- def depart_tbody(self, node):
- self.tableSpec.setMode(TABLE_MODE_NONE)
-
- def visit_row(self, node):
- if self.tableSpec.getMode() == TABLE_MODE_HEAD:
- pass
- elif self.tableSpec.getMode() == TABLE_MODE_BODY:
- if self.tableSpec.getColumnCount() == 2:
- self.body.append('\n\\lineii')
- elif self.tableSpec.getColumnCount() == 3:
- self.body.append('\n\\lineiii')
- elif self.tableSpec.getColumnCount() == 4:
- self.body.append('\n\\lineiv')
- elif self.tableSpec.getColumnCount() == 5:
- self.body.append('\n\\linev')
-
- def depart_row(self, node):
- if self.tableSpec.getMode() == TABLE_MODE_HEAD:
- pass
- elif self.tableSpec.getMode() == TABLE_MODE_BODY:
- pass
-
- def visit_entry(self, node):
- if self.tableSpec.getMode() == TABLE_MODE_HEAD:
- #self.body.append('%% [(visit_entry) text: +%s+]' % node.astext())
- self.body.append('{%s}' % node.astext().strip(' '))
- raise nodes.SkipNode
- elif self.tableSpec.getMode() == TABLE_MODE_BODY:
- #self.body.append('%% [(visit_entry) text: +%s+]' % node.astext())
- self.body.append('{%s}' % node.astext().strip(' '))
- raise nodes.SkipNode
-
- def depart_entry(self, node):
- pass
-## if self.tableSpec.getMode() == TABLE_MODE_HEAD:
-## self.body.append('}')
-## elif self.tableSpec.getMode() == TABLE_MODE_BODY:
-## self.body.append('}')
-
- def visit_term(self, node):
- self.body.append('\\item[')
-
- def depart_term(self, node):
- # definition list term.
- self.body.append(':]\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
-## def string_to_label(self, text):
-## text = text.replace(' ', '-')
-## text = text.replace('_', '-')
-## return text
-
- def visit_title(self, node):
- #self.pdebug('%% [(visit_title) section_level: %d node.astext: "%s"]\n' % \
- # (self.section_level, node.astext()))
- #self.pdebug('%% [(visit_title) section_level: %d node.astext.encode: "%s"]\n' % \
- # (self.section_level, self.encode(node.astext())))
- if self.section_level == 0:
- self.title_before_section = 1
- if self.seealso:
- self.body.append('\\end{seealso}\n')
- self.seealso = 0
- if node.astext().lower() == 'see also':
- self.body.append('\\begin{seealso}\n')
- self.seealso = 1
- raise nodes.SkipNode
- else:
- if self.section_level == 0:
- # It's the document title before any section.
- self.title = self.encode(node.astext())
- else:
- # It's a title for a section in-side the document.
- self.body.append('\n\n')
- self.body.append('%' + '_' * 75)
- self.body.append('\n\n')
- s1 = self.encode(node.astext())
- # Remove the non-breaking space character.
- # Not needed. Using output-encoding=latin-1 fixes this.
- #s1 = s1.replace(u'\xa0', ' ')
- s2 = nodes.make_id(node.astext())
-
- #ipshell('(visit_title) Entering ipshell.\nHit Ctrl-D to exit ipshell.')
-
- if (self.section_level == 1):
- self.body.append('\\section{%s\\label{%s}}\n' % (s1, s2))
- #self.body.append(
- # '\\section{\htmladdnormallink[%s]{%s}{}}\n' % \
- # (s2, s1))
- elif (self.section_level == 2):
- self.body.append('\\subsection{%s\\label{%s}}\n' % (s1, s2))
- elif (self.section_level == 3):
- self.body.append('\\subsubsection{%s\\label{%s}}\n' % (s1, s2))
- elif (self.section_level == 4):
- self.body.append('\\paragraph{%s\\label{%s}}\n' % (s1, s2))
- else:
- self.body.append('\\subparagraph{%s\\label{%s}}\n' % (s1, s2))
- raise nodes.SkipNode
-
- def depart_title(self, node):
- pass
-
- def visit_topic(self, node):
- topic_class = node.get('class')
- if topic_class == 'abstract':
- self.docinfo['abstract'] = node.astext()[9:]
- raise nodes.SkipNode
- else:
- raise nodes.SkipNode
-
- def depart_topic(self, node):
- pass
-
- def visit_rubric(self, node):
- self.body.append('% [(visit_rubric)]\n')
-
- def depart_rubric(self, node):
- self.body.append('% [(depart_rubric)]\n')
-
- def visit_transition(self, node):
- self.body.append('\n\n')
- self.body.append('%' + '_' * 75)
- self.body.append('\n\\hrule{}\n\n')
-
- def depart_transition(self, node):
- pass
-
- def visit_version(self, node):
- self.visit_docinfo_item(node, 'version')
-
- def depart_version(self, node):
- self.depart_docinfo_item(node)
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-