[py-svn] r63179 - py/extradoc/talk/pycon-us-2009/pytest-advanced
hpk at codespeak.net
hpk at codespeak.net
Sat Mar 21 15:22:27 CET 2009
Author: hpk
Date: Sat Mar 21 15:22:25 2009
New Revision: 63179
Added:
py/extradoc/talk/pycon-us-2009/pytest-advanced/rst2beamer.py (contents, props changed)
Modified:
py/extradoc/talk/pycon-us-2009/pytest-advanced/makepdf
Log:
adding a missing script
Modified: py/extradoc/talk/pycon-us-2009/pytest-advanced/makepdf
==============================================================================
--- py/extradoc/talk/pycon-us-2009/pytest-advanced/makepdf (original)
+++ py/extradoc/talk/pycon-us-2009/pytest-advanced/makepdf Sat Mar 21 15:22:25 2009
@@ -7,7 +7,7 @@
# https://sourceforge.net/tracker/?func=detail&atid=422032&aid=1459707&group_id=38414
BASE=pytest-advanced
-rst2beamer.py --stylesheet=stylesheet.latex --documentoptions=14pt $BASE.txt $BASE.latex || exit
+python rst2beamer.py --stylesheet=stylesheet.latex --documentoptions=14pt $BASE.txt $BASE.latex || exit
sed 's/\\date{}/\\input{author.latex}/' $BASE.latex >tmpfile || exit
sed 's/\\maketitle/\\input{title.latex}/' tmpfile >$BASE.latex || exit
pdflatex $BASE.latex || exit
Added: py/extradoc/talk/pycon-us-2009/pytest-advanced/rst2beamer.py
==============================================================================
--- (empty file)
+++ py/extradoc/talk/pycon-us-2009/pytest-advanced/rst2beamer.py Sat Mar 21 15:22:25 2009
@@ -0,0 +1,170 @@
+#!/usr/bin/env python
+# encoding: utf-8
+"""
+A docutils script converting restructured text into Beamer-flavoured LaTeX.
+
+Beamer is a LaTeX document class for presentations. Via this script, ReST can
+be used to prepare slides. It can be called::
+
+ rst2beamer.py infile.txt > outfile.tex
+
+where ``infile.tex`` contains the produced Beamer LaTeX.
+
+See <http:www.agapow.net/programming/python/rst2beamer> for more details.
+
+"""
+# TODO: modifications for handout sections?
+# TOOD: sections and subsections?
+# TODO: enable beamer themes?
+# TODO: convert document metadata to front page fields?
+# TODO: toc-conversion?
+# TODO: fix descriptions
+
+# Unless otherwise stated, created by P-M Agapow on 2007-08-21
+# and open for academic & non-commercial use and modification .
+
+__docformat__ = 'restructuredtext en'
+__author__ = "Paul-Michael Agapow <agapow at bbsrc.ac.uk>"
+__version__ = "0.2"
+
+
+### IMPORTS ###
+
+import locale
+from docutils.core import publish_cmdline, default_description
+from docutils.writers.latex2e import Writer as Latex2eWriter
+from docutils.writers.latex2e import LaTeXTranslator, DocumentClass
+from docutils import nodes
+
+## CONSTANTS & DEFINES: ###
+
+BEAMER_SPEC = (
+ 'Beamer options',
+ 'These are derived almost entirely from the LaTeX2e options',
+ tuple (
+ [
+ (
+ 'Specify theme.',
+ ['--theme'],
+ {'default': '', }
+ ),
+ (
+ 'Specify document options. Multiple options can be given, '
+ 'separated by commas. Default is "10pt,a4paper".',
+ ['--documentoptions'],
+ {'default': '', }
+ ),
+ ] + list (Latex2eWriter.settings_spec[2][2:])
+ ),
+)
+
+BEAMER_DEFAULTS = {
+ 'output_encoding': 'latin-1',
+ 'documentclass': 'beamer',
+}
+
+
+### IMPLEMENTATION ###
+
+try:
+ locale.setlocale (locale.LC_ALL, '')
+except:
+ pass
+
+class BeamerTranslator (LaTeXTranslator):
+ """
+ A converter for docutils elements to beamer-flavoured latex.
+ """
+
+ def __init__ (self, document):
+ LaTeXTranslator.__init__ (self, document)
+ self.head_prefix = [x for x in self.head_prefix if ('{typearea}' not in x)]
+ hyperref_posn = [i for i in range (len (self.head_prefix)) if ('{hyperref}' in self.head_prefix[i])]
+ self.head_prefix[hyperref_posn[0]] = '\\usepackage{hyperref}\n'
+ self.head_prefix.extend ([
+ '\\definecolor{rrblitbackground}{rgb}{0.55, 0.3, 0.1}\n',
+ '\\newenvironment{rtbliteral}{\n',
+ '\\begin{ttfamily}\n',
+ '\\color{rrblitbackground}\n',
+ '}{\n',
+ '\\end{ttfamily}\n',
+ '}\n',
+ ])
+ # this fixes the hardcoded section titles in docutils 0.4
+ self.d_class = DocumentClass ('article')
+
+ def begin_frametag (self):
+ return '\\begin{frame}\n'
+
+ def end_frametag (self):
+ return '\\end{frame}\n'
+
+ def visit_section (self, node):
+ if (self.section_level == 0):
+ self.body.append (self.begin_frametag())
+ LaTeXTranslator.visit_section (self, node)
+
+ def depart_section (self, node):
+ # Remove counter for potential subsections:
+ LaTeXTranslator.depart_section (self, node)
+ if (self.section_level == 0):
+ self.body.append (self.end_frametag())
+
+ def visit_title (self, node):
+ if (self.section_level == 1):
+ self.body.append ('\\frametitle{%s}\n\n' % self.encode(node.astext()))
+ raise nodes.SkipNode
+ else:
+ LaTeXTranslator.visit_title (self, node)
+
+ def depart_title (self, node):
+ if (self.section_level != 1):
+ LaTeXTranslator.depart_title (self, node)
+
+ def visit_literal_block(self, node):
+ if not self.active_table.is_open():
+ self.body.append('\n\n\\smallskip\n\\begin{rtbliteral}\n')
+ self.context.append('\\end{rtbliteral}\n\\smallskip\n\n')
+ else:
+ self.body.append('\n')
+ self.context.append('\n')
+ if (self.settings.use_verbatim_when_possible and (len(node) == 1)
+ # in case of a parsed-literal containing just a "**bold**" word:
+ and isinstance(node[0], nodes.Text)):
+ self.verbatim = 1
+ self.body.append('\\begin{verbatim}\n')
+ else:
+ self.literal_block = 1
+ self.insert_none_breaking_blanks = 1
+
+ def depart_literal_block(self, node):
+ if self.verbatim:
+ self.body.append('\n\\end{verbatim}\n')
+ self.verbatim = 0
+ else:
+ self.body.append('\n')
+ self.insert_none_breaking_blanks = 0
+ self.literal_block = 0
+ self.body.append(self.context.pop())
+
+
+class BeamerWriter (Latex2eWriter):
+ """
+ A docutils writer that modifies the translator and settings for beamer.
+ """
+ settings_spec = BEAMER_SPEC
+ settings_defaults = BEAMER_DEFAULTS
+
+ def __init__(self):
+ Latex2eWriter.__init__(self)
+ self.translator_class = BeamerTranslator
+
+
+if __name__ == '__main__':
+ description = (
+ "Generates Beamer-flavoured LaTeX for PDF-based presentations." + default_description)
+ publish_cmdline (writer=BeamerWriter(), description=description)
+
+
+### END ######################################################################
+
More information about the pytest-commit
mailing list