<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel about="http://blog.gmane.org/gmane.text.docutils.cvs">
    <title>gmane.text.docutils.cvs</title>
    <link>http://blog.gmane.org/gmane.text.docutils.cvs</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6035"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6034"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6033"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6032"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6031"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6030"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6029"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6028"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6027"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6026"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6025"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6024"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6023"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6022"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6021"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6020"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6019"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6018"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6017"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.text.docutils.cvs/6016"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6035">
    <title>r5742 - in trunk/docutils:docutils/writers/latex2e/__init__.pytest/functional/expected/standalone_rst_latex.tex</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6035</link>
    <description>Author: milde
Date: 2008-12-01 08:31:53 +0100 (Mon, 01 Dec 2008)
New Revision: 5742

Modified:
   trunk/docutils/docutils/writers/latex2e/__init__.py
   trunk/docutils/test/functional/expected/standalone_rst_latex.tex
Log:
failsave implementation of custom roles in latex2e

The latex2e writer currently translates &lt;inline&gt; nodes with a class
argument (e.g. produced by a custom role or the upcoming
syntax-highlighting souce-code directive) to specific LaTeX macros,
which allows a style sheet to define this macro but leaves the document
uncompilable without a special style sheet.

The patch below lets the latex2ewriter produce code that

1.  compiles without error ignoring the unknown classes

2.  allows styling of the marked-up code in a custom stylesheet


Modified: trunk/docutils/docutils/writers/latex2e/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/latex2e/__init__.py2008-12-01 07:21:03 UTC (rev 5741)
+++ trunk/docutils/docutils/writers/latex2e/__init__.py2008-12-01 07:31:53 UTC (rev 5742)
&lt; at &gt;&lt; at &gt; -366,6 +366,20 &lt; at &gt;&lt; at &gt;
             ]
         }
 
+latex_headings['DUspan'] = r"""
+\makeatletter
+\providecommand{\DUspan}[2]{%
+  {% group ("span") to limit the scope of styling commands
+    \&lt; at &gt;for\node&lt; at &gt;class&lt; at &gt;name:=#1\do{%
+    \ifcsname docutilsrole\node&lt; at &gt;class&lt; at &gt;name\endcsname%
+      \csname docutilsrole\node&lt; at &gt;class&lt; at &gt;name\endcsname%
+    \fi%
+    }%
+    {#2}% node content
+  }% close "span"
+}  
+\makeatother"""
+
 class DocumentClass:
     """Details of a LaTeX document class."""
 
&lt; at &gt;&lt; at &gt; -678,6 +692,9 &lt; at &gt;&lt; at &gt;
         self.table_stack = []
         self.active_table = Table(self,'longtable',settings.table_style)
 
+# Fallback definitions for Docutils-specific commands
+        self.latex_fallbacks = {}
+
         # HACK.  Should have more sophisticated typearea handling.
         if settings.documentclass.find('scr') == -1:
             self.typearea = '\\usepackage[DIV12]{typearea}\n'
&lt; at &gt;&lt; at &gt; -761,10 +778,15 &lt; at &gt;&lt; at &gt;
                 self.head_prefix.append(open(stylesheet).read())
             else:
                 self.head_prefix.append(self.stylesheet % (stylesheet))
+                
+        # Fallback definitions for docutils-specific latex objects
+        required_fallbacks = self.latex_fallbacks.keys()
+        required_fallbacks.sort()
+        for key in required_fallbacks:
+            self.head_prefix.append(self.latex_fallbacks[key])
         # hyperref after stylesheet
         self.head_prefix.append( self.linking % (
                     self.colorlinks, self.hyperlink_color, self.hyperlink_color))
-
         # 
         if self.settings.literal_block_env != '':
             self.settings.use_verbatim_when_possible = True
&lt; at &gt;&lt; at &gt; -781,7 +803,7 &lt; at &gt;&lt; at &gt;
         # self.astext() adds \title{...} \author{...} \date{...}, even if the
         # "..." are empty strings.
         self.head = [ ]
-        # separate title, so we can appen subtitle.
+        # separate title, so we can append subtitle.
         self.title = ''
         # if use_latex_docinfo: collects lists of author/organization/contact/address lines
         self.author_stack = []
&lt; at &gt;&lt; at &gt; -2207,14 +2229,14 &lt; at &gt;&lt; at &gt;
             self.body.append('\n')
 
     def visit_inline(self, node): # titlereference
-        classes = node.get('classes', ['Unknown', ])
-        for cls in classes:
-            self.body.append( '\\docutilsrole%s{' % cls)
-        self.context.append('}'*len(classes))
-
+        # insert fallback definition
+        self.latex_fallbacks['inline'] = latex_headings['DUspan']
+        classes = node.get('classes', [])
+        self.body.append(r'\DUspan{%s}{' %','.join(classes))
+        
     def depart_inline(self, node):
-        self.body.append(self.context.pop())
-
+        self.body.append('}')
+        
     def visit_rubric(self, node):
         self.body.append('\\rubric{')
         self.context.append('}\n')

Modified: trunk/docutils/test/functional/expected/standalone_rst_latex.tex
===================================================================
--- trunk/docutils/test/functional/expected/standalone_rst_latex.tex2008-12-01 07:21:03 UTC (rev 5741)
+++ trunk/docutils/test/functional/expected/standalone_rst_latex.tex2008-12-01 07:31:53 UTC (rev 5742)
&lt; at &gt;&lt; at &gt; -1653,17 +1653,17 &lt; at &gt;&lt; at &gt;
 \item {} 
 A new role.
 
-\docutilsrolecustomnew{one two three}
+\DUspan{customnew}{one two three}
 
 \item {} 
 A role with class attribute.
 
-\docutilsrolespecial{interpreted text}
+\DUspan{special}{interpreted text}
 
 \item {} 
 A role with class attribute.
 
-\docutilsrolevery{\docutilsrolespecial{interpreted text}}
+\DUspan{very,special}{interpreted text}
 
 \end{itemize}
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>milde&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-12-01T07:31:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6034">
    <title>r5741 - trunk/docutils/tools/buildhtml.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6034</link>
    <description>Author: grubert
Date: 2008-12-01 08:21:03 +0100 (Mon, 01 Dec 2008)
New Revision: 5741

Modified:
   trunk/docutils/tools/buildhtml.py
Log:
Fix: os.walk patch


Modified: trunk/docutils/tools/buildhtml.py
===================================================================
--- trunk/docutils/tools/buildhtml.py2008-11-30 10:01:44 UTC (rev 5740)
+++ trunk/docutils/tools/buildhtml.py2008-12-01 07:21:03 UTC (rev 5741)
&lt; at &gt;&lt; at &gt; -182,8 +182,10 &lt; at &gt;&lt; at &gt;
             self.directories = [os.getcwd()]
         for directory in self.directories:
             try:
-                os.path.walk(directory, self.visit, recurse)
+                for root, dirs, files in os.walk(directory):
+                    self.visit(recurse, root, dirs+files)
             except (AttributeError): # python2.2 does not have os.walk
+                print "no os.walk"
                 os.path.walk(directory, self.visit, recurse)
 
     def visit(self, recurse, directory, names):


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>grubert&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-12-01T07:21:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6033">
    <title>r5740 - in trunk/docutils: HISTORY.txtdocutils/nodes.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6033</link>
    <description>Author: grubert
Date: 2008-11-30 11:01:44 +0100 (Sun, 30 Nov 2008)
New Revision: 5740

Modified:
   trunk/docutils/HISTORY.txt
   trunk/docutils/docutils/nodes.py
Log:
Prepare for python 3.0: Node.__nonzero__ returns True instead of 1.


Modified: trunk/docutils/HISTORY.txt
===================================================================
--- trunk/docutils/HISTORY.txt2008-11-30 09:46:40 UTC (rev 5739)
+++ trunk/docutils/HISTORY.txt2008-11-30 10:01:44 UTC (rev 5740)
&lt; at &gt;&lt; at &gt; -19,6 +19,7 &lt; at &gt;&lt; at &gt;
 
 * General:
 
+  - Prepare for python 3.0: Node.__nonzero__ returns True instead of 1.
   - Prepare for python 3.0: use os.walk instead os.path.walk.
   - Prepare for python 3.0: minimize "types" module where possible.
   - Apply [ 1878977 ] make_id(): deaccent characters.

Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py2008-11-30 09:46:40 UTC (rev 5739)
+++ trunk/docutils/docutils/nodes.py2008-11-30 10:01:44 UTC (rev 5740)
&lt; at &gt;&lt; at &gt; -57,7 +57,7 &lt; at &gt;&lt; at &gt;
         Use `len()` to check node length.  Use `None` to represent a boolean
         false value.
         """
-        return 1
+        return True
 
     def __str__(self):
         return unicode(self).encode('raw_unicode_escape')


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>grubert&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-30T10:01:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6032">
    <title>r5739 - in trunk/docutils: HISTORY.txttest/test_functional.py tools/buildhtml.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6032</link>
    <description>Author: grubert
Date: 2008-11-30 10:46:40 +0100 (Sun, 30 Nov 2008)
New Revision: 5739

Modified:
   trunk/docutils/HISTORY.txt
   trunk/docutils/test/test_functional.py
   trunk/docutils/tools/buildhtml.py
Log:
Prepare for python 3.0: use os.walk instead os.path.walk.


Modified: trunk/docutils/HISTORY.txt
===================================================================
--- trunk/docutils/HISTORY.txt2008-11-30 08:59:04 UTC (rev 5738)
+++ trunk/docutils/HISTORY.txt2008-11-30 09:46:40 UTC (rev 5739)
&lt; at &gt;&lt; at &gt; -19,6 +19,7 &lt; at &gt;&lt; at &gt;
 
 * General:
 
+  - Prepare for python 3.0: use os.walk instead os.path.walk.
   - Prepare for python 3.0: minimize "types" module where possible.
   - Apply [ 1878977 ] make_id(): deaccent characters.
   - Backwards-compatible changes to remove python2.6 -3 deprecation warnings

Modified: trunk/docutils/test/test_functional.py
===================================================================
--- trunk/docutils/test/test_functional.py2008-11-30 08:59:04 UTC (rev 5738)
+++ trunk/docutils/test/test_functional.py2008-11-30 09:46:40 UTC (rev 5739)
&lt; at &gt;&lt; at &gt; -39,7 +39,19 &lt; at &gt;&lt; at &gt;
         os.chdir(DocutilsTestSupport.testroot)
         self.clear_output_directory()
         self.added = 0
-        os.path.walk(join_path(datadir, 'tests'), self.walker, None)
+        try:
+            for root, dirs, files in os.walk(join_path(datadir, 'tests')):
+                # Process all config files among `names` in `dirname`. A config
+                # file is a Python file (*.py) which sets several variables.
+                for name in files:
+                    if name.endswith('.py') and not name.startswith('_'):
+                        config_file_full_path = join_path(root, name)
+                        self.addTestCase(FunctionalTestCase, 'test', None, None,
+                                         id=config_file_full_path,
+                                         configfile=config_file_full_path)
+                        self.added += 1
+        except (AttributeError): # python2.2 does not have os.walk
+            os.path.walk(join_path(datadir, 'tests'), self.walker, None)
         assert self.added, 'No functional tests found.'
 
     def clear_output_directory(self):

Modified: trunk/docutils/tools/buildhtml.py
===================================================================
--- trunk/docutils/tools/buildhtml.py2008-11-30 08:59:04 UTC (rev 5738)
+++ trunk/docutils/tools/buildhtml.py2008-11-30 09:46:40 UTC (rev 5739)
&lt; at &gt;&lt; at &gt; -181,7 +181,10 &lt; at &gt;&lt; at &gt;
         else:
             self.directories = [os.getcwd()]
         for directory in self.directories:
-            os.path.walk(directory, self.visit, recurse)
+            try:
+                os.path.walk(directory, self.visit, recurse)
+            except (AttributeError): # python2.2 does not have os.walk
+                os.path.walk(directory, self.visit, recurse)
 
     def visit(self, recurse, directory, names):
         settings = self.get_settings('', directory)


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>grubert&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-30T09:46:42</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6031">
    <title>r5738 - in trunk/docutils: HISTORY.txtdocutils/core.py docutils/frontend.py docutils/io.pydocutils/nodes.py docutils/parsers/rst/states.pydocutils/readers/python/moduleparser.pydocutils/statemachine.py docutils/utils.pydocutils/writers/html4css1/__init__.pydocutils/writers/newlatex2e/__init__.pytest/DocutilsTestSupport.py test/package_unittest.pytest/test_language.py test/test_publisher.pytest/test_readers/test_python/showparse test/test_settings.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6031</link>
    <description>Author: grubert
Date: 2008-11-30 09:59:04 +0100 (Sun, 30 Nov 2008)
New Revision: 5738

Modified:
   trunk/docutils/HISTORY.txt
   trunk/docutils/docutils/core.py
   trunk/docutils/docutils/frontend.py
   trunk/docutils/docutils/io.py
   trunk/docutils/docutils/nodes.py
   trunk/docutils/docutils/parsers/rst/states.py
   trunk/docutils/docutils/readers/python/moduleparser.py
   trunk/docutils/docutils/statemachine.py
   trunk/docutils/docutils/utils.py
   trunk/docutils/docutils/writers/html4css1/__init__.py
   trunk/docutils/docutils/writers/newlatex2e/__init__.py
   trunk/docutils/test/DocutilsTestSupport.py
   trunk/docutils/test/package_unittest.py
   trunk/docutils/test/test_language.py
   trunk/docutils/test/test_publisher.py
   trunk/docutils/test/test_readers/test_python/showparse
   trunk/docutils/test/test_settings.py
Log:
Prepare for python 3.0: minimize "types" module where possible (gbrandl).


Modified: trunk/docutils/HISTORY.txt
===================================================================
--- trunk/docutils/HISTORY.txt2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/HISTORY.txt2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -19,6 +19,7 &lt; at &gt;&lt; at &gt;
 
 * General:
 
+  - Prepare for python 3.0: minimize "types" module where possible.
   - Apply [ 1878977 ] make_id(): deaccent characters.
   - Backwards-compatible changes to remove python2.6 -3 deprecation warnings
   - Text nodes now subclass unicode rather than UserString

Modified: trunk/docutils/docutils/core.py
===================================================================
--- trunk/docutils/docutils/core.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/core.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -16,7 +16,6 &lt; at &gt;&lt; at &gt;
 
 import sys
 import pprint
-from types import StringType
 from docutils import __version__, __version_details__, SettingsSpec
 from docutils import frontend, io, utils, readers, writers
 from docutils.frontend import OptionParser
&lt; at &gt;&lt; at &gt; -53,7 +52,7 &lt; at &gt;&lt; at &gt;
         """A `docutils.writers.Writer` instance."""
 
         for component in 'reader', 'parser', 'writer':
-            assert not isinstance(getattr(self, component), StringType), (
+            assert not isinstance(getattr(self, component), str), (
                 'passed string "%s" as "%s" parameter; pass an instance, '
                 'or use the "%s_name" parameter instead (in '
                 'docutils.core.publish_* convenience functions).'

Modified: trunk/docutils/docutils/frontend.py
===================================================================
--- trunk/docutils/docutils/frontend.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/frontend.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -29,7 +29,6 &lt; at &gt;&lt; at &gt;
 import os
 import os.path
 import sys
-import types
 import warnings
 import ConfigParser as CP
 import codecs
&lt; at &gt;&lt; at &gt; -119,7 +118,7 &lt; at &gt;&lt; at &gt;
 
 def validate_boolean(setting, value, option_parser,
                      config_parser=None, config_section=None):
-    if isinstance(value, types.UnicodeType):
+    if isinstance(value, unicode):
         try:
             return option_parser.booleans[value.strip().lower()]
         except KeyError:
&lt; at &gt;&lt; at &gt; -147,7 +146,7 &lt; at &gt;&lt; at &gt;
 
 def validate_colon_separated_string_list(
     setting, value, option_parser, config_parser=None, config_section=None):
-    if isinstance(value, types.UnicodeType):
+    if isinstance(value, unicode):
         value = value.split(':')
     else:
         last = value.pop()
&lt; at &gt;&lt; at &gt; -195,7 +194,7 &lt; at &gt;&lt; at &gt;
     for key in keys:
         if key in pathdict:
             value = pathdict[key]
-            if isinstance(value, types.ListType):
+            if isinstance(value, list):
                 value = [make_one_path_absolute(base_path, path)
                          for path in value]
             elif value:
&lt; at &gt;&lt; at &gt; -672,7 +671,7 &lt; at &gt;&lt; at &gt;
         """List of paths of configuration files read."""
 
     def read(self, filenames, option_parser):
-        if type(filenames) in (types.StringType, types.UnicodeType):
+        if type(filenames) in (str, unicode):
             filenames = [filenames]
         for filename in filenames:
             try:

Modified: trunk/docutils/docutils/io.py
===================================================================
--- trunk/docutils/docutils/io.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/io.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -15,7 +15,6 &lt; at &gt;&lt; at &gt;
 except:
     pass
 import re
-from types import UnicodeType
 from docutils import TransformSpec
 
 
&lt; at &gt;&lt; at &gt; -67,10 +66,10 &lt; at &gt;&lt; at &gt;
             locale.setlocale(locale.LC_ALL, '')
         """
         if self.encoding and self.encoding.lower() == 'unicode':
-            assert isinstance(data, UnicodeType), (
+            assert isinstance(data, unicode), (
                 'input encoding is "unicode" '
                 'but input is not a unicode object')
-        if isinstance(data, UnicodeType):
+        if isinstance(data, unicode):
             # Accept unicode even if self.encoding != 'unicode'.
             return data
         if self.encoding:
&lt; at &gt;&lt; at &gt; -187,11 +186,11 &lt; at &gt;&lt; at &gt;
 
     def encode(self, data):
         if self.encoding and self.encoding.lower() == 'unicode':
-            assert isinstance(data, UnicodeType), (
+            assert isinstance(data, unicode), (
                 'the encoding given is "unicode" but the output is not '
                 'a Unicode string')
             return data
-        if not isinstance(data, UnicodeType):
+        if not isinstance(data, unicode):
             # Non-unicode (e.g. binary) output.
             return data
         else:

Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/nodes.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -25,8 +25,7 &lt; at &gt;&lt; at &gt;
 import os
 import re
 import warnings
-from types import IntType, SliceType, StringType, UnicodeType, \
-     TupleType, ListType, ClassType, TypeType
+from types import ClassType, SliceType
 import unicodedata
 
 # ==============================
&lt; at &gt;&lt; at &gt; -226,7 +225,7 &lt; at &gt;&lt; at &gt;
             siblings=1
         # Check if `condition` is a class (check for TypeType for Python
         # implementations that use only new-style classes, like PyPy).
-        if isinstance(condition, (ClassType, TypeType)):
+        if isinstance(condition, (ClassType, type)):
             node_class = condition
             def condition(node, node_class=node_class):
                 return isinstance(node, node_class)
&lt; at &gt;&lt; at &gt; -426,7 +425,7 &lt; at &gt;&lt; at &gt;
     def _dom_node(self, domroot):
         element = domroot.createElement(self.tagname)
         for attribute, value in self.attlist():
-            if isinstance(value, ListType):
+            if isinstance(value, list):
                 value = ' '.join([serial_escape('%s' % v) for v in value])
             element.setAttribute(attribute, '%s' % value)
         for child in self.children:
&lt; at &gt;&lt; at &gt; -466,7 +465,7 &lt; at &gt;&lt; at &gt;
         for name, value in self.attlist():
             if value is None:           # boolean attribute
                 parts.append(name)
-            elif isinstance(value, ListType):
+            elif isinstance(value, list):
                 values = [serial_escape('%s' % v) for v in value]
                 parts.append('%s="%s"' % (name, ' '.join(values)))
             else:
&lt; at &gt;&lt; at &gt; -485,9 +484,9 &lt; at &gt;&lt; at &gt;
         return len(self.children)
 
     def __getitem__(self, key):
-        if isinstance(key, UnicodeType) or isinstance(key, StringType):
+        if isinstance(key, unicode) or isinstance(key, str):
             return self.attributes[key]
-        elif isinstance(key, IntType):
+        elif isinstance(key, int):
             return self.children[key]
         elif isinstance(key, SliceType):
             assert key.step in (None, 1), 'cannot handle slice with stride'
&lt; at &gt;&lt; at &gt; -497,9 +496,9 &lt; at &gt;&lt; at &gt;
                               'an attribute name string')
 
     def __setitem__(self, key, item):
-        if isinstance(key, UnicodeType) or isinstance(key, StringType):
+        if isinstance(key, unicode) or isinstance(key, str):
             self.attributes[str(key)] = item
-        elif isinstance(key, IntType):
+        elif isinstance(key, int):
             self.setup_child(item)
             self.children[key] = item
         elif isinstance(key, SliceType):
&lt; at &gt;&lt; at &gt; -512,9 +511,9 &lt; at &gt;&lt; at &gt;
                               'an attribute name string')
 
     def __delitem__(self, key):
-        if isinstance(key, UnicodeType) or isinstance(key, StringType):
+        if isinstance(key, unicode) or isinstance(key, str):
             del self.attributes[key]
-        elif isinstance(key, IntType):
+        elif isinstance(key, int):
             del self.children[key]
         elif isinstance(key, SliceType):
             assert key.step in (None, 1), 'cannot handle slice with stride'
&lt; at &gt;&lt; at &gt; -658,7 +657,7 &lt; at &gt;&lt; at &gt;
         - `start`: Initial index to check.
         - `end`: Initial index to *not* check.
         """
-        if not isinstance(childclass, TupleType):
+        if not isinstance(childclass, tuple):
             childclass = (childclass,)
         for index in range(start, min(len(self), end)):
             for c in childclass:
&lt; at &gt;&lt; at &gt; -678,7 +677,7 &lt; at &gt;&lt; at &gt;
         - `start`: Initial index to check.
         - `end`: Initial index to *not* check.
         """
-        if not isinstance(childclass, TupleType):
+        if not isinstance(childclass, tuple):
             childclass = (childclass,)
         for index in range(start, min(len(self), end)):
             for c in childclass:
&lt; at &gt;&lt; at &gt; -1411,7 +1410,7 &lt; at &gt;&lt; at &gt;
                 internals.append('%7s%s:' % ('', key))
                 internals.extend(['%9s%s' % ('', line)
                                   for line in value.pformat().splitlines()])
-            elif value and isinstance(value, ListType) \
+            elif value and isinstance(value, list) \
                   and isinstance(value[0], Node):
                 internals.append('%7s%s:' % ('', key))
                 for v in value:

Modified: trunk/docutils/docutils/parsers/rst/states.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/states.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/parsers/rst/states.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -106,7 +106,7 &lt; at &gt;&lt; at &gt;
 import sys
 import re
 import roman
-from types import TupleType, FunctionType, MethodType
+from types import FunctionType, MethodType
 from docutils import nodes, statemachine, utils, urischemes
 from docutils import ApplicationError, DataError
 from docutils.statemachine import StateMachineWS, StateWS
&lt; at &gt;&lt; at &gt; -424,7 +424,7 &lt; at &gt;&lt; at &gt;
     name, prefix, suffix, parts = definition
     part_strings = []
     for part in parts:
-        if type(part) is TupleType:
+        if type(part) is tuple:
             part_strings.append(build_regexp(part, None))
         else:
             part_strings.append(part)

Modified: trunk/docutils/docutils/readers/python/moduleparser.py
===================================================================
--- trunk/docutils/docutils/readers/python/moduleparser.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/readers/python/moduleparser.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -214,7 +214,6 &lt; at &gt;&lt; at &gt;
 import token
 from compiler.consts import OP_ASSIGN
 from compiler.visitor import ASTVisitor
-from types import StringType, UnicodeType, TupleType
 from docutils.readers.python import pynodes
 from docutils.nodes import Text
 
&lt; at &gt;&lt; at &gt; -253,7 +252,7 &lt; at &gt;&lt; at &gt;
 
     def visitConst(self, node):
         if self.documentable:
-            if type(node.value) in (StringType, UnicodeType):
+            if type(node.value) in (str, unicode):
                 self.documentable.append(make_docstring(node.value, node.lineno))
             else:
                 self.documentable = None
&lt; at &gt;&lt; at &gt; -398,7 +397,7 &lt; at &gt;&lt; at &gt;
             node.lineno)
         #print &gt;&gt;sys.stderr, function_parameters
         for argname, default in zip(argnames, defaults):
-            if type(argname) is TupleType:
+            if type(argname) is tuple:
                 parameter = pynodes.parameter_tuple()
                 for tuplearg in argname:
                     parameter.append(make_parameter(tuplearg))
&lt; at &gt;&lt; at &gt; -615,7 +614,7 &lt; at &gt;&lt; at &gt;
                     self._backquote = 0
                     self.note_token()
                 else:                   # ignore these tokens:
-                    assert (self.string in ('*', '**', '\n') 
+                    assert (self.string in ('*', '**', '\n')
                             or self.type == tokenize.COMMENT), (
                         'token=%r' % (self.token,))
             else:
&lt; at &gt;&lt; at &gt; -737,7 +736,7 &lt; at &gt;&lt; at &gt;
     """
     Converts a tuple like ``('a', ('b', 'c'), 'd')`` into ``'(a, (b, c), d)'``
     """
-    if type(name) is TupleType:
+    if type(name) is tuple:
         return '(%s)' % ', '.join([normalize_parameter_name(n) for n in name])
     else:
         return name

Modified: trunk/docutils/docutils/statemachine.py
===================================================================
--- trunk/docutils/docutils/statemachine.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/statemachine.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -1410,7 +1410,7 &lt; at &gt;&lt; at &gt;
             return                      # new in Python 2.4
         for i in range(len(self.data)):
             line = self.data[i]
-            if isinstance(line, types.UnicodeType):
+            if isinstance(line, unicode):
                 new = []
                 for char in line:
                     new.append(char)

Modified: trunk/docutils/docutils/utils.py
===================================================================
--- trunk/docutils/docutils/utils.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/utils.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -11,10 +11,8 &lt; at &gt;&lt; at &gt;
 import sys
 import os
 import os.path
-import types
 import warnings
 import unicodedata
-from types import StringType, UnicodeType
 from docutils import ApplicationError, DataError
 from docutils import nodes
 
&lt; at &gt;&lt; at &gt; -110,12 +108,12 &lt; at &gt;&lt; at &gt;
 
         if stream is None:
             stream = sys.stderr
-        elif type(stream) in (StringType, UnicodeType):
+        elif type(stream) in (str, unicode):
             # Leave stream untouched if it's ''.
             if stream != '':
-                if type(stream) == StringType:
+                if type(stream) == str:
                     stream = open(stream, 'w')
-                elif type(stream) == UnicodeType:
+                elif type(stream) == unicode:
                     stream = open(stream.encode(), 'w')
 
         self.stream = stream
&lt; at &gt;&lt; at &gt; -508,7 +506,7 &lt; at &gt;&lt; at &gt;
 column widths."""
 
 def east_asian_column_width(text):
-    if isinstance(text, types.UnicodeType):
+    if isinstance(text, unicode):
         total = 0
         for c in text:
             total += east_asian_widths[unicodedata.east_asian_width(c)]

Modified: trunk/docutils/docutils/writers/html4css1/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/html4css1/__init__.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/writers/html4css1/__init__.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -19,7 +19,6 &lt; at &gt;&lt; at &gt;
 import os.path
 import time
 import re
-from types import ListType
 try:
     import Image                        # check for the Python Imaging Library
 except ImportError:
&lt; at &gt;&lt; at &gt; -384,7 +383,7 &lt; at &gt;&lt; at &gt;
             # value=None was used for boolean attributes without
             # value, but this isn't supported by XHTML.
             assert value is not None
-            if isinstance(value, ListType):
+            if isinstance(value, list):
                 values = [unicode(v) for v in value]
                 parts.append('%s="%s"' % (name.lower(),
                                           self.attval(' '.join(values))))

Modified: trunk/docutils/docutils/writers/newlatex2e/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/newlatex2e/__init__.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/docutils/writers/newlatex2e/__init__.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -15,7 +15,6 &lt; at &gt;&lt; at &gt;
 
 import re
 import os.path
-from types import ListType
 
 import docutils
 from docutils import nodes, writers, utils
&lt; at &gt;&lt; at &gt; -659,7 +658,7 &lt; at &gt;&lt; at &gt;
         numatts = 0
         pass_contents = self.pass_contents(node)
         for key, value in attlist:
-            if isinstance(value, ListType):
+            if isinstance(value, list):
                 self.append(r'\renewcommand{\DEVattrlen}{%s}' % len(value))
                 for i in range(len(value)):
                     self.append(r'\DECattr{%s}{%s}{%s}{%s}{' %
&lt; at &gt;&lt; at &gt; -735,7 +734,7 &lt; at &gt;&lt; at &gt;
                 self.append(r'\renewcommand{\DEVparent}{%s}'
                             % self.node_name(node.parent))
                 for name, value in node.attlist():
-                    if not isinstance(value, ListType) and not ':' in name:
+                    if not isinstance(value, list) and not ':' in name:
                         # For non-list and non-special (like
                         # 'xml:preserve') attributes, set
                         # \DEVcurrentN&lt;nodename&gt;A&lt;attribute&gt; to the

Modified: trunk/docutils/test/DocutilsTestSupport.py
===================================================================
--- trunk/docutils/test/DocutilsTestSupport.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/DocutilsTestSupport.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -47,7 +47,6 &lt; at &gt;&lt; at &gt;
 import inspect
 import traceback
 from pprint import pformat
-from types import UnicodeType, StringType
 
 testroot = os.path.abspath(os.path.dirname(__file__) or os.curdir)
 os.chdir(testroot)
&lt; at &gt;&lt; at &gt; -190,11 +189,11 &lt; at &gt;&lt; at &gt;
 
     def compare_output(self, input, output, expected):
         """`input`, `output`, and `expected` should all be strings."""
-        if isinstance(input, UnicodeType):
+        if isinstance(input, unicode):
             input = input.encode('raw_unicode_escape')
-        if isinstance(output, UnicodeType):
+        if isinstance(output, unicode):
             output = output.encode('raw_unicode_escape')
-        if isinstance(expected, UnicodeType):
+        if isinstance(expected, unicode):
             expected = expected.encode('raw_unicode_escape')
         try:
             self.assertEquals(output, expected)
&lt; at &gt;&lt; at &gt; -847,10 +846,10 &lt; at &gt;&lt; at &gt;
     return_tuple = []
     for i in args:
         r = repr(i)
-        if ( (isinstance(i, StringType) or isinstance(i, UnicodeType))
+        if ( (isinstance(i, str) or isinstance(i, unicode))
              and '\n' in i):
             stripped = ''
-            if isinstance(i, UnicodeType):
+            if isinstance(i, unicode):
                 # stripped = 'u' or 'U'
                 stripped = r[0]
                 r = r[1:]

Modified: trunk/docutils/test/package_unittest.py
===================================================================
--- trunk/docutils/test/package_unittest.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/package_unittest.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -116,8 +116,7 &lt; at &gt;&lt; at &gt;
                 continue
             if type(suite) == types.FunctionType:
                 testSuite.addTest(suite())
-            elif type(suite) == types.InstanceType \
-                  and isinstance(suite, unittest.TestSuite):
+            elif isinstance(suite, unittest.TestSuite):
                 testSuite.addTest(suite)
             else:
                 raise AssertionError, "don't understand suite (%s)" % mod

Modified: trunk/docutils/test/test_language.py
===================================================================
--- trunk/docutils/test/test_language.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/test_language.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -15,7 +15,6 &lt; at &gt;&lt; at &gt;
 import sys
 import os
 import re
-from types import UnicodeType
 import DocutilsTestSupport              # must be imported before docutils
 import docutils.languages
 import docutils.parsers.rst.languages
&lt; at &gt;&lt; at &gt; -145,7 +144,7 &lt; at &gt;&lt; at &gt;
         if failures:
             text = ('Module docutils.parsers.rst.languages.%s:\n    %s'
                     % (self.language, '\n    '.join(failures)))
-            if type(text) == UnicodeType:
+            if type(text) is unicode:
                 text = text.encode('raw_unicode_escape')
             self.fail(text)
 
&lt; at &gt;&lt; at &gt; -180,7 +179,7 &lt; at &gt;&lt; at &gt;
         if failures:
             text = ('Module docutils.parsers.rst.languages.%s:\n    %s'
                     % (self.language, '\n    '.join(failures)))
-            if type(text) == UnicodeType:
+            if type(text) is unicode:
                 text = text.encode('raw_unicode_escape')
             self.fail(text)
 

Modified: trunk/docutils/test/test_publisher.py
===================================================================
--- trunk/docutils/test/test_publisher.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/test_publisher.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -9,7 +9,6 &lt; at &gt;&lt; at &gt;
 """
 
 import pickle
-from types import StringType, DictType
 import DocutilsTestSupport              # must be imported before docutils
 import docutils
 from docutils import core, nodes, io
&lt; at &gt;&lt; at &gt; -96,7 +95,7 &lt; at &gt;&lt; at &gt;
            reader_name='doctree', source_class=io.DocTreeInput,
            source=doctree, source_path='test', writer_name='html',
            settings_spec=self)
-        self.assert_(isinstance(parts, DictType))
+        self.assert_(isinstance(parts, dict))
 
     def test_publish_pickle(self):
         # Test publishing a document tree with pickling and unpickling.
&lt; at &gt;&lt; at &gt; -122,7 +121,7 &lt; at &gt;&lt; at &gt;
         doctree.transformer = None
 
         doctree_pickled = pickle.dumps(doctree)
-        self.assert_(isinstance(doctree_pickled, StringType))
+        self.assert_(isinstance(doctree_pickled, str))
         del doctree
 
         # Unpickle the document.

Modified: trunk/docutils/test/test_readers/test_python/showparse
===================================================================
--- trunk/docutils/test/test_readers/test_python/showparse2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/test_readers/test_python/showparse2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -17,7 +17,6 &lt; at &gt;&lt; at &gt;
 """
 
 import sys
-import types
 import parser
 import token
 import symbol
&lt; at &gt;&lt; at &gt; -32,7 +31,7 &lt; at &gt;&lt; at &gt;
         name = names[ast[0]]
         ast[0] = '%s (%s)' % (name, ast[0])
     for node in ast[1:]:
-        if type(node) == types.ListType:
+        if type(node) is list:
             name_elements(node)
 
 if len(sys.argv) &gt; 1:

Modified: trunk/docutils/test/test_settings.py
===================================================================
--- trunk/docutils/test/test_settings.py2008-11-28 22:02:00 UTC (rev 5737)
+++ trunk/docutils/test/test_settings.py2008-11-30 08:59:04 UTC (rev 5738)
&lt; at &gt;&lt; at &gt; -14,7 +14,6 &lt; at &gt;&lt; at &gt;
 import pprint
 import warnings
 import unittest
-from types import StringType
 import DocutilsTestSupport              # must be imported before docutils
 from docutils import frontend, utils
 from docutils.writers import html4css1, pep_html


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>grubert&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-30T08:59:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6030">
    <title>r5737 - in trunk/sandbox/OpenDocument:README.txt docs/odtwriter.txt odtwriter/__init__.py setup.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6030</link>
    <description>Author: dkuhlman
Date: 2008-11-28 23:02:00 +0100 (Fri, 28 Nov 2008)
New Revision: 5737

Modified:
   trunk/sandbox/OpenDocument/README.txt
   trunk/sandbox/OpenDocument/docs/odtwriter.txt
   trunk/sandbox/OpenDocument/odtwriter/__init__.py
   trunk/sandbox/OpenDocument/setup.py
Log:
Fixes to endnotes/footnotes and tables

Modified: trunk/sandbox/OpenDocument/README.txt
===================================================================
--- trunk/sandbox/OpenDocument/README.txt2008-11-28 11:01:42 UTC (rev 5736)
+++ trunk/sandbox/OpenDocument/README.txt2008-11-28 22:02:00 UTC (rev 5737)
&lt; at &gt;&lt; at &gt; -46,7 +46,9 &lt; at &gt;&lt; at &gt;
 of the document instead of at the end of the page.  Generates
 endnotes instead of footnotes.
 
+A fix to table generation.
 
+
 2008/10/23 -- Version 1.3c
 --------------------------
 

Modified: trunk/sandbox/OpenDocument/docs/odtwriter.txt
===================================================================
--- trunk/sandbox/OpenDocument/docs/odtwriter.txt2008-11-28 11:01:42 UTC (rev 5736)
+++ trunk/sandbox/OpenDocument/docs/odtwriter.txt2008-11-28 22:02:00 UTC (rev 5737)
&lt; at &gt;&lt; at &gt; -8,7 +8,7 &lt; at &gt;&lt; at &gt;
 :address: dkuhlman&lt; at &gt;rexx.com
     http://www.rexx.com/~dkuhlman
 
-:revision: 1.3c
+:revision: 1.3d
 :date: |date|
 
 .. |date| date:: %B %d, %Y
&lt; at &gt;&lt; at &gt; -54,8 +54,8 &lt; at &gt;&lt; at &gt;
 The source distribution of 
 ODF/ODT writer for Docutils 
 is here:
-`http://www.rexx.com/~dkuhlman/odtwriter-1.3c.tar.gz
-&lt;http://www.rexx.com/~dkuhlman/odtwriter-1.3c.tar.gz&gt;`_.
+`http://www.rexx.com/~dkuhlman/odtwriter-1.3d.tar.gz
+&lt;http://www.rexx.com/~dkuhlman/odtwriter-1.3d.tar.gz&gt;`_.
 
 ``odtwriter`` is also available via Subversion from
 the Docutils repository under

Modified: trunk/sandbox/OpenDocument/odtwriter/__init__.py
===================================================================
--- trunk/sandbox/OpenDocument/odtwriter/__init__.py2008-11-28 11:01:42 UTC (rev 5736)
+++ trunk/sandbox/OpenDocument/odtwriter/__init__.py2008-11-28 22:02:00 UTC (rev 5737)
&lt; at &gt;&lt; at &gt; -156,6 +156,8 &lt; at &gt;&lt; at &gt;
 except ImportError, exp:
     Image = None
 
+## import warnings
+## warnings.warn('importing IPShellEmbed', UserWarning)
 ## from IPython.Shell import IPShellEmbed
 ## args = ['-pdb', '-pi1', 'In &lt;\\#&gt;: ', '-pi2', '   .\\D.: ',
 ##         '-po', 'Out&lt;\\#&gt;: ', '-nosep']
&lt; at &gt;&lt; at &gt; -2602,6 +2604,9 &lt; at &gt;&lt; at &gt;
         if morecols &gt; 0:
             attrib['table:number-columns-spanned'] = '%d' % (morecols + 1,)
             self.column_count += morecols
+        morerows = node.get('morerows', 0)
+        if morerows &gt; 0:
+            attrib['table:number-rows-spanned'] = '%d' % (morerows + 1,)
         el1 = self.append_child('table:table-cell', attrib=attrib)
         self.set_current_element(el1)
 

Modified: trunk/sandbox/OpenDocument/setup.py
===================================================================
--- trunk/sandbox/OpenDocument/setup.py2008-11-28 11:01:42 UTC (rev 5736)
+++ trunk/sandbox/OpenDocument/setup.py2008-11-28 22:02:00 UTC (rev 5737)
&lt; at &gt;&lt; at &gt; -5,7 +5,7 &lt; at &gt;&lt; at &gt;
 
 
 setup(name="odtwriter",
-    version="1.3c",
+    version="1.3d",
     description="convert rst to ODF/odt/odp.",
     author="Dave Kuhlman",
     author_email="dkuhlman&lt; at &gt;rexx.com",


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>dkuhlman&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-28T22:02:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6029">
    <title>r5736 - trunk/sandbox/latex-variants/README.txt</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6029</link>
    <description>Author: milde
Date: 2008-11-28 12:01:42 +0100 (Fri, 28 Nov 2008)
New Revision: 5736

Modified:
   trunk/sandbox/latex-variants/README.txt
Log:
Default font and font encoding proposal; trim whitespace

Modified: trunk/sandbox/latex-variants/README.txt
===================================================================
--- trunk/sandbox/latex-variants/README.txt2008-11-26 22:59:52 UTC (rev 5735)
+++ trunk/sandbox/latex-variants/README.txt2008-11-28 11:01:42 UTC (rev 5736)
&lt; at &gt;&lt; at &gt; -14,9 +14,8 &lt; at &gt;&lt; at &gt;
 
 #. alternative latex writers for special needs.
 
-.. contents:: 
+.. contents::
 
-
 ``latex2e`` writer extensions
 *****************************
 
&lt; at &gt;&lt; at &gt; -30,16 +29,23 &lt; at &gt;&lt; at &gt;
 
 3. Did you ever use `custom roles`_ and realise that the exported
    LaTeX code does not compile?
-   
+
 4. Did you ever use `custom roles`_, ``myclass``, say, and define a
    ``\docutilsrole&lt;myclassname&gt;`` LaTeX command for it?
-      
+
 5. If YES, how important is backwards compatibility?
    Would you update your style-sheets if the interface improves
    significantly but non-compatible?
-      
-6. Which default font do you prefer for the output?
 
+6. Which `default font`_ do you prefer for the output?
+
+7. Which default `font encoding`_ do you prefer for the output?
+
+   Did you have problems with missing ``aeguill.sty`` package?
+   
+   Did you have problems with Find or Export of words with
+   non-ASCII chars (e.g. Umlauts) in the PDF reader (Acrobat, xpdf, ...)
+
 #. Feature wishes or ideas of improvement for the `latex2e` writer.
 
 Users of ``rst2latex2.py`` are encouraged to respond by mail to the
&lt; at &gt;&lt; at &gt; -74,7 +80,6 &lt; at &gt;&lt; at &gt;
 
   -1  not backwards compatible.
 
-
 LaTeX inclusion: ``&lt;name&gt;.tex``
   Input with ``\input{&lt;name&gt;}`` or ``\input{&lt;name.tex&gt;}``.
   Expects file extension ".tex".
&lt; at &gt;&lt; at &gt; -88,15 +93,14 &lt; at &gt;&lt; at &gt;
 
   +1  Backwards compatible.
 
-
 Proposal
 --------
 
 "intelligent" handling: use ``\usepackage`` if style sheet has ``.sty`` or no
 extension and ``\input`` else
 
-Rationale: 
-  while ``\input`` works withe extension as well as without extension,
+Rationale:
+  while ``\input`` works with extension as well as without extension,
   ``\usepackage`` expects the package name without extension. (The latex2e
   writer will drop a ``.sty`` extension to be more liberal.)
 
&lt; at &gt;&lt; at &gt; -108,22 +112,21 &lt; at &gt;&lt; at &gt;
          self.head_prefix.append(r"\usepackage{%s}" % (stylesheet))
      else
          self.head_prefix.append(r"\input{%s}" % (stylesheet))
-     
+
 Examples::
 
   rst2latex.py --stylesheet==mathptmx      # use mathptmx.sty package
-  
-  rst2latex.py --stylesheet==mathptmx.sty  # use mathptmx.sty package 
 
+  rst2latex.py --stylesheet==mathptmx.sty  # use mathptmx.sty package
+
   rst2latex.py --stylesheet==preamble.tex  # input preamble.tex
 
   rst2latex.py --stylesheet==preamble.mystyle  # input preamble.mystyle
 
-
 Put this in a loop over all arguments, so that ::
 
   rst2latex.py --stylesheet==mathptmx,parskip,preamble.tex
-  
+
 uses packages `mathptmx` (Times fonts) and `parskip` (separate paragraphs by
 vertical white-space) as well as the tex snippet ``preamble.tex``
 
&lt; at &gt;&lt; at &gt; -133,13 +136,12 &lt; at &gt;&lt; at &gt;
 Currently, if no filename extension is given in the ``stylesheet`` argument,
 ``.tex`` is assumed (by latex).
 
-This behaviour will change. 
+This behaviour will change.
 
-Needed Action: 
-  Always specify the extension if you want the style sheet to be 
+Needed Action:
+  Always specify the extension if you want the style sheet to be
   ``\input`` by LaTeX.
 
-
 Custom roles
 ============
 
&lt; at &gt;&lt; at &gt; -147,17 +149,15 &lt; at &gt;&lt; at &gt;
 not compile?
 
   yes
-  
+
   I don't use custom roles, primarily because I'm afraid of such problems.
 
 If YES, how important is backwards compatibility? Would you update your
 style-sheets if the interface improves significantly but non-compatible?
-  
+
   I would update, but as I suggested in the other thread, I do not see any
   advantage in using a shorter prefix than 'docutils'.
 
-
-
 Default font
 ============
 
&lt; at &gt;&lt; at &gt; -179,13 +179,51 &lt; at &gt;&lt; at &gt;
 
 Not yet.
 
-If a default different from Computer Modern is preferred, this should be
-implemented as a default for the stylesheet option, so it can be easily
-overridden.
-
 Font embedding must be configured in the LaTeX installation.
 
+Proposal
+--------
 
+Use one of the Postscript default fonts supported by
+standard LaTeX (pp 10 and 11 of the `PSNFSS documentation`_)
+
+Bookman
+  -2 very very wide
+Charter
+  +0 nonspectacular
+  -1 no "Base35" font 
+New Century Schoolbook
+  -1 very wide
+Palatino
+  +1 recommended by font experts
+Times
+  ±0 used everywhere, 
+  -1 narrow (devised for multi-column layouts)
+Utopia
+  +1 recommended by font experts
+  -1 no "Base35" font, not regarded as a "required" part of LaTeX any more.
+
+* Implement as default stylesheet option, so it can be easily
+  overridden.
+
+Font encoding
+=============
+
+In modern LaTeX distributions (MikTeX, TeXLive, teTeX) T1 encoded fonts
+belong to the "core" while the "ae" (and even more the "aeguill")
+workarounds are optional (and not always installed by default).
+
+"ae" uses the original 7-bit encoded CM fonts and combines additional
+(non-ASCII) characters. This can lead to suboptimal appearance and to
+problems if text shall be extracted from (or found in) the generated
+PDF document.
+
+Proposal
+--------
+
+Use the T1 font encoding as default.
+
+
 Adaptive preamble
 =================
 
&lt; at &gt;&lt; at &gt; -193,7 +231,7 &lt; at &gt;&lt; at &gt;
   rst2latex also requires a bunch of extra .sty packages, even if they
   aren't used in the current document.
 
-Solution: 
+Solution:
   include only package loading commands and definitions that are
   needed in the current document.
 
&lt; at &gt;&lt; at &gt; -206,7 +244,7 &lt; at &gt;&lt; at &gt;
         self.latex_fallbacks = {}
 
 ...
-
+
         # Fallback definitions for docutils-specific latex objects
         required_fallbacks = self.latex_fallbacks.keys()
         required_fallbacks.sort()
&lt; at &gt;&lt; at &gt; -214,19 +252,16 &lt; at &gt;&lt; at &gt;
             self.head_prefix.append(self.latex_fallbacks[key])
 
  ...
-
+
 def visit_inline(self, node): # titlereference
         # insert fallback definition
         self.latex_fallbacks['inline'] = latex_headings['DUspan']
         classes = node.get('classes', [])
         self.body.append(r'\DUspan{%s}{' %','.join(classes))
 
-
 Allow customising in a style sheet by use of ``\ProvideCommand`` for the
 fallback definition.
 
-
-
 Implementations
 ***************
 
&lt; at &gt;&lt; at &gt; -252,7 +287,7 &lt; at &gt;&lt; at &gt;
 * `latex2e_listings` provides an alternative implementation of the new
   ``--literal-env`` option to select the environment for
   typesetting literal blocks.
-  
+
   This options allows e.g. to choose `lstlisting` from the ``listings.sty``
   LaTeX package. See also `&lt;docs/syntax-highlight-with-listings.html&gt;`_
 
&lt; at &gt;&lt; at &gt; -270,3 +305,7 &lt; at &gt;&lt; at &gt;
 * `&lt;../latex_directive&gt;`__, and
 * `&lt;../verse-writer&gt;`__.
 
+.. References
+   ==========
+.. _PSNFSS documentation:
+   http://dante.ctan.org/CTAN/macros/latex/required/psnfss/psnfss2e.pdf


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
_______________________________________________
Docutils-checkins mailing list
Docutils-checkins&lt; at &gt;lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/docutils-checkins
</description>
    <dc:creator>milde&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-28T11:01:42</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6028">
    <title>r5735 - in trunk/sandbox/rst2beamer:latexbeamer/__init__.py tools/rst2beamer.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6028</link>
    <description>Author: smerten
Date: 2008-11-26 23:59:52 +0100 (Wed, 26 Nov 2008)
New Revision: 5735

Modified:
   trunk/sandbox/rst2beamer/latexbeamer/__init__.py
   trunk/sandbox/rst2beamer/tools/rst2beamer.py
Log:
Class `handout` is removed.


Modified: trunk/sandbox/rst2beamer/latexbeamer/__init__.py
===================================================================
--- trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:13:29 UTC (rev 5734)
+++ trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 22:59:52 UTC (rev 5735)
&lt; at &gt;&lt; at &gt; -6,6 +6,8 &lt; at &gt;&lt; at &gt;
 
 from docutils import frontend, nodes
 from docutils.writers import latex2e
+from docutils.readers import standalone
+from docutils.transforms import references, Transform, TransformError
 
 class Writer(latex2e.Writer):
 
&lt; at &gt;&lt; at &gt; -253,4 +255,31 &lt; at &gt;&lt; at &gt;
         return ''.join(self.head_prefix + [head] + self.head + [pdfinfo]
                         + self.body_prefix  + self.body + self.body_suffix)
 
-# TODO Class `handout` must be suppressed - may be by a preprocessor
+# Use an own reader to modify transformations done.
+class Reader(standalone.Reader):
+
+    def get_transforms(self):
+        default = standalone.Reader.get_transforms(self)
+        return ([ i
+                  for i in default
+                  if i is not references.DanglingReferences ]
+                + [ RemoveClassHandout, ])
+
+class RemoveClassHandout(Transform):
+
+    """
+    Remove all elements with a given class attribute.
+    """
+
+    classToRemove = 'handout'
+
+    # Must be less than
+    # docutils.transforms.misc.ClassAttribute.default_priority
+    default_priority = 120
+
+    def apply(self):
+        for node in self.document.traverse(nodes.Element):
+            if node.has_key('classes'):
+                if self.classToRemove in node['classes']:
+                    if node.parent:
+                        node.parent.remove(node)

Modified: trunk/sandbox/rst2beamer/tools/rst2beamer.py
===================================================================
--- trunk/sandbox/rst2beamer/tools/rst2beamer.py2008-11-26 21:13:29 UTC (rev 5734)
+++ trunk/sandbox/rst2beamer/tools/rst2beamer.py2008-11-26 22:59:52 UTC (rev 5735)
&lt; at &gt;&lt; at &gt; -18,8 +18,11 &lt; at &gt;&lt; at &gt;
 
 from docutils.core import publish_cmdline, default_description
 
+from docutils.writers.latexbeamer import Writer, Reader
 
 description = ('Generates LaTeX Beamer documents from standalone reStructuredText '
                'sources.  ' + default_description)
 
-publish_cmdline(writer_name='latexbeamer', description=description)
+writer = Writer()
+reader = Reader()
+publish_cmdline(reader=reader, writer=writer, description=description)


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>smerten&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T22:59:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6027">
    <title>r5734 -trunk/sandbox/rst2beamer/latexbeamer/__init__.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6027</link>
    <description>Author: smerten
Date: 2008-11-26 22:13:29 +0100 (Wed, 26 Nov 2008)
New Revision: 5734

Modified:
   trunk/sandbox/rst2beamer/latexbeamer/__init__.py
Log:
Improved comments.


Modified: trunk/sandbox/rst2beamer/latexbeamer/__init__.py
===================================================================
--- trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:11:58 UTC (rev 5733)
+++ trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:13:29 UTC (rev 5734)
&lt; at &gt;&lt; at &gt; -129,7 +129,9 &lt; at &gt;&lt; at &gt;
 
             Level is 1,2,3..., as level 0 is the title."""
 
-        # TODO Level where sections become frames must be an option
+        # TODO Level where sections become frames must be an option - might be
+        # determined by a preprocessor, then it is also not fixed - might be
+        # driven by the first content under a section
         sections = [ 'section', "begin{frame}\n\\frametitle", ]
         if level &lt;= len(sections):
             return sections[level-1]
&lt; at &gt;&lt; at &gt; -142,7 +144,7 &lt; at &gt;&lt; at &gt;
 
             Level is 1,2,3..., as level 0 is the title."""
 
-        # TODO Level where sections become frames must be an option
+        # TODO See above
         sections = [ '', "\n\\end{frame}\n", ]
         if level &lt;= len(sections):
             return sections[level-1]
&lt; at &gt;&lt; at &gt; -169,7 +171,8 &lt; at &gt;&lt; at &gt;
                                  '}\n',
                                  '\n',
                                  ))
-        # TODO Must be an option including the level where this happens
+        # TODO Must be an option including the level where this happens - must
+        # be present only if there is a toc
         self.head_prefix.extend(('\n',
                                  '\\AtBeginSection[]\n',
                                  '{\n',
&lt; at &gt;&lt; at &gt; -184,6 +187,7 &lt; at &gt;&lt; at &gt;
 
     def visit_docinfo(self, node):
         self.docinfo = []
+        # TODO :Organization: should be handled as institute
 
     def depart_docinfo(self, node):
         self.docinfo = None
&lt; at &gt;&lt; at &gt; -193,7 +197,8 &lt; at &gt;&lt; at &gt;
         self.topic_classes = node['classes']
         if 'contents' in node['classes']:
             # TODO Name of outline slide must be an option and could be the
-            # name given for the contents (is a `title` element)
+            # name given for the contents (is a `title` element) - might be
+            # determined by a preprocessor
             self.body.append( '\n\\begin{frame}\n  \\frametitle{Outline}\n  \\tableofcontents\n\\end{frame}')
             self.topic_classes = []
             raise nodes.SkipNode
&lt; at &gt;&lt; at &gt; -248,3 +253,4 &lt; at &gt;&lt; at &gt;
         return ''.join(self.head_prefix + [head] + self.head + [pdfinfo]
                         + self.body_prefix  + self.body + self.body_suffix)
 
+# TODO Class `handout` must be suppressed - may be by a preprocessor


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>smerten&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T21:13:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6026">
    <title>r5733 -trunk/sandbox/rst2beamer/latexbeamer/__init__.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6026</link>
    <description>Author: smerten
Date: 2008-11-26 22:11:58 +0100 (Wed, 26 Nov 2008)
New Revision: 5733

Modified:
   trunk/sandbox/rst2beamer/latexbeamer/__init__.py
Log:
Settings are explicitly handled.


Modified: trunk/sandbox/rst2beamer/latexbeamer/__init__.py
===================================================================
--- trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:09:43 UTC (rev 5732)
+++ trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:11:58 UTC (rev 5733)
&lt; at &gt;&lt; at &gt; -4,7 +4,7 &lt; at &gt;&lt; at &gt;
 
 __docformat__ = 'reStructuredText'
 
-from docutils import nodes
+from docutils import frontend, nodes
 from docutils.writers import latex2e
 
 class Writer(latex2e.Writer):
&lt; at &gt;&lt; at &gt; -12,6 +12,107 &lt; at &gt;&lt; at &gt;
     supported = ('latexbeamer')
     """Formats this writer supports."""
 
+    settings_spec = (
+        'LaTeX Beamer Specific Options',
+        'The LaTeX "--output-encoding" default is "latin-1:strict".',
+        (('Specify document options.  Multiple options can be given, '
+          'separated by commas.  Default is no options.',
+          ['--documentoptions'],
+          {'default': '', }),
+         ('Use LaTeX footnotes. LaTeX supports only numbered footnotes (does it?). '
+          'Default: no, uses figures.',
+          ['--use-latex-footnotes'],
+          {'default': 0, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Format for footnote references: one of "superscript" or '
+          '"brackets".  Default is "superscript".',
+          ['--footnote-references'],
+          {'choices': ['superscript', 'brackets'], 'default': 'superscript',
+           'metavar': '&lt;format&gt;',
+           'overrides': 'trim_footnote_reference_space'}),
+         ('Use LaTeX citations. '
+          'Default: no, uses figures which might get mixed with images.',
+          ['--use-latex-citations'],
+          {'default': 0, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Format for block quote attributions: one of "dash" (em-dash '
+          'prefix), "parentheses"/"parens", or "none".  Default is "dash".',
+          ['--attribution'],
+          {'choices': ['dash', 'parentheses', 'parens', 'none'],
+           'default': 'dash', 'metavar': '&lt;format&gt;'}),
+         ('Specify a stylesheet file. The file will be "input" by latex in '
+          'the document header.  Default is no stylesheet ("").  '
+          'Overrides --stylesheet-path.',
+          ['--stylesheet'],
+          {'default': '', 'metavar': '&lt;file&gt;',
+           'overrides': 'stylesheet_path'}),
+         ('Specify a stylesheet file, relative to the current working '
+          'directory.  Overrides --stylesheet.',
+          ['--stylesheet-path'],
+          {'metavar': '&lt;file&gt;', 'overrides': 'stylesheet'}),
+         ('Table of contents by docutils (default) or latex. Latex (writer) '
+          'supports only one ToC per document, but docutils does not write '
+          'pagenumbers.',
+          ['--use-latex-toc'],
+          {'default': 0, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Color of any hyperlinks embedded in text '
+          '(default: "0" (disabled)).',
+          ['--hyperlink-color'], {'default': '0'}),
+         ('Enable compound enumerators for nested enumerated lists '
+          '(e.g. "1.2.a.ii").  Default: disabled.',
+          ['--compound-enumerators'],
+          {'default': None, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Disable compound enumerators for nested enumerated lists.  This is '
+          'the default.',
+          ['--no-compound-enumerators'],
+          {'action': 'store_false', 'dest': 'compound_enumerators'}),
+         ('Enable section ("." subsection ...) prefixes for compound '
+          'enumerators.  This has no effect without --compound-enumerators.  '
+          'Default: disabled.',
+          ['--section-prefix-for-enumerators'],
+          {'default': None, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Disable section prefixes for compound enumerators.  '
+          'This is the default.',
+          ['--no-section-prefix-for-enumerators'],
+          {'action': 'store_false', 'dest': 'section_prefix_for_enumerators'}),
+         ('Set the separator between section number and enumerator '
+          'for compound enumerated lists.  Default is "-".',
+          ['--section-enumerator-separator'],
+          {'default': '-', 'metavar': '&lt;char&gt;'}),
+         ('When possibile, use verbatim for literal-blocks. '
+          'Default is to always use the mbox environment.',
+          ['--use-verbatim-when-possible'],
+          {'default': 0, 'action': 'store_true',
+           'validator': frontend.validate_boolean}),
+         ('Table style. "standard" with horizontal and vertical lines, '
+          '"booktabs" (LaTeX booktabs style) only horizontal lines '
+          'above and below the table and below the header or "nolines".  '
+          'Default: "standard"',
+          ['--table-style'],
+          {'choices': ['standard', 'booktabs','nolines'], 'default': 'standard',
+           'metavar': '&lt;format&gt;'}),
+         ('LaTeX graphicx package option. '
+          'Possible values are "dvips", "pdftex". "auto" includes LaTeX code '
+          'to use "pdftex" if processing with pdf(la)tex and dvips otherwise. '
+          'Default is no option.',
+          ['--graphicx-option'],
+          {'default': ''}),
+         ('LaTeX font encoding. '
+          'Possible values are "T1", "OT1", "" or some other fontenc option. '
+          'The font encoding influences available symbols, e.g. "&lt;&lt;" as one '
+          'character. Default is "" which leads to package "ae" (a T1 '
+          'emulation using CM fonts).',
+          ['--font-encoding'],
+          {'default': ''}),
+         ('LaTeX Beamer theme to use. '
+          'Default is JuanLesPins.',
+          ['--beamer-theme'],
+          {'default': 'JuanLesPins'})
+          ),)
+
     def __init__(self):
         latex2e.Writer.__init__(self)
         self.translator_class = BeamerTranslator
&lt; at &gt;&lt; at &gt; -41,7 +142,7 &lt; at &gt;&lt; at &gt;
 
             Level is 1,2,3..., as level 0 is the title."""
 
-        # TODO Level where sections become frames are must be an option
+        # TODO Level where sections become frames must be an option
         sections = [ '', "\n\\end{frame}\n", ]
         if level &lt;= len(sections):
             return sections[level-1]
&lt; at &gt;&lt; at &gt; -51,24 +152,19 &lt; at &gt;&lt; at &gt;
 class BeamerTranslator(latex2e.LaTeXTranslator):
 
     def __init__(self, document):
-        # TODO Should be done via explicit settings
         document.settings.documentclass = 'beamer'
-        # TODO Should be done via explicit settings - should be none but the
-        # language
-        document.settings.documentoptions = '10pt'
-        # TODO Should be done via explicit settings
         document.settings.use_latex_docinfo = 1
         latex2e.LaTeXTranslator.__init__(self, document)
         # TODO Should be done via explicit head_prefix
         self.head_prefix = [ line
                 for line in self.head_prefix
                 if 'typearea' not in line and 'hyperref' not in line ]
-        # TODO Theme must be an option
         # Montpellier, Warsaw, JuanLesPins, Darmstadt, Antibes
         self.head_prefix.extend(('\n',
                                  '\\mode&lt;presentation&gt;\n',
                                  '{\n',
-                                 '  \\usetheme{JuanLesPins}\n',
+                                 '  \\usetheme{%s}\n'
+                                 % ( document.settings.beamer_theme, ),
                                  '  \\setbeamercovered{transparent}\n',
                                  '}\n',
                                  '\n',
&lt; at &gt;&lt; at &gt; -97,7 +193,7 &lt; at &gt;&lt; at &gt;
         self.topic_classes = node['classes']
         if 'contents' in node['classes']:
             # TODO Name of outline slide must be an option and could be the
-            # name given for the contents
+            # name given for the contents (is a `title` element)
             self.body.append( '\n\\begin{frame}\n  \\frametitle{Outline}\n  \\tableofcontents\n\\end{frame}')
             self.topic_classes = []
             raise nodes.SkipNode


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>smerten&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T21:11:59</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6025">
    <title>r5732 - in trunk/sandbox/rst2beamer:latexbeamer/ latexbeamer/__init__.py tools/ tools/rst2beamer.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6025</link>
    <description>Author: smerten
Date: 2008-11-26 22:09:43 +0100 (Wed, 26 Nov 2008)
New Revision: 5732

Added:
   trunk/sandbox/rst2beamer/latexbeamer/
   trunk/sandbox/rst2beamer/latexbeamer/__init__.py
   trunk/sandbox/rst2beamer/tools/
   trunk/sandbox/rst2beamer/tools/rst2beamer.py
Log:
First steps towards a LaTeX beamer writer.


Added: trunk/sandbox/rst2beamer/latexbeamer/__init__.py
===================================================================
--- trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 20:53:12 UTC (rev 5731)
+++ trunk/sandbox/rst2beamer/latexbeamer/__init__.py2008-11-26 21:09:43 UTC (rev 5732)
&lt; at &gt;&lt; at &gt; -0,0 +1,154 &lt; at &gt;&lt; at &gt;
+"""
+LaTeX Beamer document tree Writer.
+"""
+
+__docformat__ = 'reStructuredText'
+
+from docutils import nodes
+from docutils.writers import latex2e
+
+class Writer(latex2e.Writer):
+
+    supported = ('latexbeamer')
+    """Formats this writer supports."""
+
+    def __init__(self):
+        latex2e.Writer.__init__(self)
+        self.translator_class = BeamerTranslator
+
+class DocumentClass(latex2e.DocumentClass):
+    """Details of a LaTeX document class."""
+
+    def __init__(self):
+        pass
+
+    def section(self, level):
+        """ Return the section name at the given level for the specific
+            document class.
+
+            Level is 1,2,3..., as level 0 is the title."""
+
+        # TODO Level where sections become frames must be an option
+        sections = [ 'section', "begin{frame}\n\\frametitle", ]
+        if level &lt;= len(sections):
+            return sections[level-1]
+        else:
+            return sections[-1]
+
+    def section_end(self, level):
+        """ Return the section name at the given level for the specific
+            document class.
+
+            Level is 1,2,3..., as level 0 is the title."""
+
+        # TODO Level where sections become frames are must be an option
+        sections = [ '', "\n\\end{frame}\n", ]
+        if level &lt;= len(sections):
+            return sections[level-1]
+        else:
+            return sections[-1]
+
+class BeamerTranslator(latex2e.LaTeXTranslator):
+
+    def __init__(self, document):
+        # TODO Should be done via explicit settings
+        document.settings.documentclass = 'beamer'
+        # TODO Should be done via explicit settings - should be none but the
+        # language
+        document.settings.documentoptions = '10pt'
+        # TODO Should be done via explicit settings
+        document.settings.use_latex_docinfo = 1
+        latex2e.LaTeXTranslator.__init__(self, document)
+        # TODO Should be done via explicit head_prefix
+        self.head_prefix = [ line
+                for line in self.head_prefix
+                if 'typearea' not in line and 'hyperref' not in line ]
+        # TODO Theme must be an option
+        # Montpellier, Warsaw, JuanLesPins, Darmstadt, Antibes
+        self.head_prefix.extend(('\n',
+                                 '\\mode&lt;presentation&gt;\n',
+                                 '{\n',
+                                 '  \\usetheme{JuanLesPins}\n',
+                                 '  \\setbeamercovered{transparent}\n',
+                                 '}\n',
+                                 '\n',
+                                 ))
+        # TODO Must be an option including the level where this happens
+        self.head_prefix.extend(('\n',
+                                 '\\AtBeginSection[]\n',
+                                 '{\n',
+                                 '  \\begin{frame}&lt;beamer&gt;\n',
+                                 '    \\frametitle{Outline}\n',
+                                 '    \\tableofcontents[currentsection,currentsubsection]\n',
+                                 '  \\end{frame}\n',
+                                 '}\n',
+                                 ))
+        self.d_class = DocumentClass()
+        self.subtitle = ''
+
+    def visit_docinfo(self, node):
+        self.docinfo = []
+
+    def depart_docinfo(self, node):
+        self.docinfo = None
+        # Do not output this because relevant data has been gathered
+
+    def visit_topic(self, node):
+        self.topic_classes = node['classes']
+        if 'contents' in node['classes']:
+            # TODO Name of outline slide must be an option and could be the
+            # name given for the contents
+            self.body.append( '\n\\begin{frame}\n  \\frametitle{Outline}\n  \\tableofcontents\n\\end{frame}')
+            self.topic_classes = []
+            raise nodes.SkipNode
+
+    def depart_topic(self, node):
+        self.topic_classes = []
+        self.body.append('\n')
+
+    def visit_title(self, node):
+        """Section and other titles."""
+
+        if (isinstance(node.parent, nodes.topic)
+            or isinstance(node.parent, nodes.sidebar)
+            or isinstance(node.parent, nodes.admonition)
+            or isinstance(node.parent, nodes.table)
+            or self.section_level == 0):
+            latex2e.LaTeXTranslator.visit_title(self, node)
+        else:
+            self.body.append('\n\n')
+            self.body.append('%' + '_' * 75)
+            self.body.append('\n\n')
+            self.bookmark(node)
+
+            section_name = self.d_class.section(self.section_level)
+            self.body.append('\\%s{' % (section_name, ))
+            self.context.append('}\n')
+
+    def visit_subtitle(self, node):
+        if isinstance(node.parent, nodes.document):
+            self.subtitle = self.encode(node.astext())
+            raise nodes.SkipNode
+        else:
+            latex2e.LaTeXTranslator.visit_subtitle(self, node)
+
+    def depart_section(self, node):
+        self.body.append(self.d_class.section_end(self.section_level))
+        latex2e.LaTeXTranslator.depart_section(self, node)
+
+    def astext(self):
+        if self.pdfinfo is not None:
+            if self.pdfauthor:
+                self.pdfinfo.append('pdfauthor={%s}' % self.pdfauthor)
+        if self.pdfinfo:
+            pdfinfo = '\\hypersetup{\n' + ',\n'.join(self.pdfinfo) + '\n}\n'
+        else:
+            pdfinfo = ''
+        head = '\\title{%s}\n\\subtitle{%s}\n\\author{%s}\n\\date{%s}\n' % \
+               (self.title, self.subtitle,
+                ' \\and\n'.join(['~\\\\\n'.join(author_lines)
+                                 for author_lines in self.author_stack]),
+                self.date)
+        return ''.join(self.head_prefix + [head] + self.head + [pdfinfo]
+                        + self.body_prefix  + self.body + self.body_suffix)
+


Property changes on: trunk/sandbox/rst2beamer/latexbeamer/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/sandbox/rst2beamer/tools/rst2beamer.py
===================================================================
--- trunk/sandbox/rst2beamer/tools/rst2beamer.py2008-11-26 20:53:12 UTC (rev 5731)
+++ trunk/sandbox/rst2beamer/tools/rst2beamer.py2008-11-26 21:09:43 UTC (rev 5732)
&lt; at &gt;&lt; at &gt; -0,0 +1,25 &lt; at &gt;&lt; at &gt;
+#!/usr/bin/python
+
+# Author: David Goodger
+# Contact: goodger&lt; at &gt;users.sourceforge.net
+# Revision: $Revision$
+# Date: $Date$
+# Copyright: This module has been placed in the public domain.
+
+"""
+A minimal front end to the Docutils Publisher, producing LaTeX Beamer.
+"""
+
+try:
+    import locale
+    locale.setlocale(locale.LC_ALL, '')
+except:
+    pass
+
+from docutils.core import publish_cmdline, default_description
+
+
+description = ('Generates LaTeX Beamer documents from standalone reStructuredText '
+               'sources.  ' + default_description)
+
+publish_cmdline(writer_name='latexbeamer', description=description)


Property changes on: trunk/sandbox/rst2beamer/tools/rst2beamer.py
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>smerten&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T21:09:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6024">
    <title>r5731 - trunk/sandbox/rst2beamer/</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6024</link>
    <description>Author: smerten
Date: 2008-11-26 21:53:12 +0100 (Wed, 26 Nov 2008)
New Revision: 5731

Added:
   trunk/sandbox/rst2beamer/
Log:
Added directory for `rst2beamer`.



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>smerten&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T20:53:12</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6023">
    <title>r5730 -trunk/docutils/tools/editors/emacs/README.txt</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6023</link>
    <description>Author: goodger
Date: 2008-11-26 19:07:47 +0100 (Wed, 26 Nov 2008)
New Revision: 5730

Modified:
   trunk/docutils/tools/editors/emacs/README.txt
Log:
added links

Modified: trunk/docutils/tools/editors/emacs/README.txt
===================================================================
--- trunk/docutils/tools/editors/emacs/README.txt2008-11-25 14:48:11 UTC (rev 5729)
+++ trunk/docutils/tools/editors/emacs/README.txt2008-11-26 18:07:47 UTC (rev 5730)
&lt; at &gt;&lt; at &gt; -8,7 +8,7 &lt; at &gt;&lt; at &gt;
 
 This directory contains the following Emacs lisp package files:
 
-* rst.el: Emacs support for reStructuredText_.  This file contains a
+* `&lt;rst.el&gt;`_: Emacs support for reStructuredText_.  This file contains a
   major mode that provides:
 
   * Section decoration/adornment creation and updating (M. Blais);
&lt; at &gt;&lt; at &gt; -17,7 +17,7 &lt; at &gt;&lt; at &gt;
   * Some handy editing functions (D. Goodger).
   * Some functions for converting rest documents from within emacs (M. Blais).  
 
-* tests subdirectory: automated tests for some of the features in rst.el.
+* `&lt;tests/&gt;`_ subdirectory: automated tests for some of the features in rst.el.
   Please make sure the tests pass if you change the LISP code.  Just type "make"
   to run the tests.
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>goodger&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-26T18:07:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6022">
    <title>r5729 - in trunk/sandbox/stylesheets: index.txttransition-stars.css</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6022</link>
    <description>Author: milde
Date: 2008-11-25 15:48:11 +0100 (Tue, 25 Nov 2008)
New Revision: 5729

Added:
   trunk/sandbox/stylesheets/transition-stars.css
Modified:
   trunk/sandbox/stylesheets/index.txt
Log:
Added style sheet for customising transitions

Modified: trunk/sandbox/stylesheets/index.txt
===================================================================
--- trunk/sandbox/stylesheets/index.txt2008-11-20 16:55:38 UTC (rev 5728)
+++ trunk/sandbox/stylesheets/index.txt2008-11-25 14:48:11 UTC (rev 5729)
&lt; at &gt;&lt; at &gt; -33,6 +33,16 &lt; at &gt;&lt; at &gt;
 * `&lt;voidspace.css&gt;`_: Blue boxes around section headings, more
   borders, and somewhat more colorful than the default stylesheet.
 
+* `&lt;transition-stars.css&gt;`_: 
+  Example/Template for customising the transition__ element.
+  
+  Replaces the horizontal line with three stars as often seen in novels.
+
+__ http://docutils.sf.net/docs/ref/rst/restructuredtext.html#transitions
+
+
+.. References:
+
 .. _Docutils: http://docutils.sourceforge.net/
 .. _Docutils-users:
    http://docutils.sf.net/docs/user/mailing-lists.html#docutils-users

Added: trunk/sandbox/stylesheets/transition-stars.css
===================================================================
--- trunk/sandbox/stylesheets/transition-stars.css2008-11-20 16:55:38 UTC (rev 5728)
+++ trunk/sandbox/stylesheets/transition-stars.css2008-11-25 14:48:11 UTC (rev 5729)
&lt; at &gt;&lt; at &gt; -0,0 +1,31 &lt; at &gt;&lt; at &gt;
+/* transiton-stars.css: Style a Docutils transition */
+/* :Author:    Günter Milde */
+/* :Copyright: © 2008 G. Milde */
+/*             This stylesheet is released under the GPL v. 2 or later */
+
+/* Style sheet for use with Docutils */
+
+You can use this style as a template for customising  the transition
+element. 
+
+/* extends the standard docutils style sheet */
+&lt; at &gt;import url("html4css1.css");
+
+hr.docutils {
+  /* make the hrule invisible but enable replacement string */
+    border-width: 0px; 
+  /* set the spacing */
+    padding: 1.5ex;
+    /* margin: 1.5ex; */ /* alternatie to padding */
+  /* influence the horizontal alignment of the replacment text */
+    width: 30ex;      
+}
+
+/* Replacement string for the transition element */
+
+/* if your html document is in UTF-8 encoding, you can use */
+/* any Unicode string as replacement */
+/* comment out to get a void transition */
+hr.docutils:before { 
+  content:"*    *    *"; /* uses non-breaking spaces */
+}


Property changes on: trunk/sandbox/stylesheets/transition-stars.css
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
_______________________________________________
Docutils-checkins mailing list
Docutils-checkins&lt; at &gt;lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/docutils-checkins
</description>
    <dc:creator>milde&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-25T14:48:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6021">
    <title>r5728 - trunk/web/.htaccess</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6021</link>
    <description>Author: goodger
Date: 2008-11-20 17:55:38 +0100 (Thu, 20 Nov 2008)
New Revision: 5728

Modified:
   trunk/web/.htaccess
Log:
global directory index access

Modified: trunk/web/.htaccess
===================================================================
--- trunk/web/.htaccess2008-11-13 11:51:19 UTC (rev 5727)
+++ trunk/web/.htaccess2008-11-20 16:55:38 UTC (rev 5728)
&lt; at &gt;&lt; at &gt; -1,3 +1,5 &lt; at &gt;&lt; at &gt;
+Options Indexes
+
 # Redirects
 # =========
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>goodger&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-20T16:55:38</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6020">
    <title>r5727 - trunk/sandbox/latex-variants/README.txt</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6020</link>
    <description>Author: milde
Date: 2008-11-13 12:51:19 +0100 (Thu, 13 Nov 2008)
New Revision: 5727

Modified:
   trunk/sandbox/latex-variants/README.txt
Log:
the SVN viewing URL at berlios.de changed (/viewcvs/ -&gt; /viewvc/)

Modified: trunk/sandbox/latex-variants/README.txt
===================================================================
--- trunk/sandbox/latex-variants/README.txt2008-11-13 11:41:05 UTC (rev 5726)
+++ trunk/sandbox/latex-variants/README.txt2008-11-13 11:51:19 UTC (rev 5727)
&lt; at &gt;&lt; at &gt; -12,8 +12,11 &lt; at &gt;&lt; at &gt;
 
 #. enhancements or improvements of the latex2e writer, or
 
-#. `alternative latex writers`_ for special needs.
+#. alternative latex writers for special needs.
 
+.. contents:: 
+
+
 ``latex2e`` writer extensions
 *****************************
 
&lt; at &gt;&lt; at &gt; -227,9 +230,10 &lt; at &gt;&lt; at &gt;
 Implementations
 ***************
 
-Browse the SVN repository at berlios.de:
-http://svn.berlios.de/viewcvs/docutils/trunk/sandbox/latex-variants/
+Browse the `SVN repository at berlios.de`__
 
+__ http://svn.berlios.de/viewvc/docutils/trunk/sandbox/latex-variants/
+
 * The `docs` dir contains generic documentation and discussion.
 
   Writer specific documentation is placed in the respective "literate"


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>milde&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-13T11:51:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6019">
    <title>r5726 - trunk/sandbox/latex-variants/README.txt</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6019</link>
    <description>Author: milde
Date: 2008-11-13 12:41:05 +0100 (Thu, 13 Nov 2008)
New Revision: 5726

Modified:
   trunk/sandbox/latex-variants/README.txt
Log:
latex-variants/README: questionnaire and new ideas 

Modified: trunk/sandbox/latex-variants/README.txt
===================================================================
--- trunk/sandbox/latex-variants/README.txt2008-11-04 07:28:56 UTC (rev 5725)
+++ trunk/sandbox/latex-variants/README.txt2008-11-13 11:41:05 UTC (rev 5726)
&lt; at &gt;&lt; at &gt; -1,53 +1,265 &lt; at &gt;&lt; at &gt;
 ..                            -*- rst-mode -*-
 
-===============================================
+=====================
 Latex Writer Variants
-===============================================
+=====================
 
-:Author: Guenter Milde &lt;milde&lt; at &gt;users.berlios.de&gt;
+:Author: Günter Milde &lt;milde&lt; at &gt;users.berlios.de&gt;
 :Date: $Date$
 
 This sandbox project is a place to try out and discuss variants of the
-latex2e writer.
+latex2e writer. Latex writer variants in this project are
 
-Latex writer variants could be:
+#. enhancements or improvements of the latex2e writer, or
 
-* enhancements or improvements of the "standard" latex writer, or
+#. `alternative latex writers`_ for special needs.
 
-* custom latex writers for special needs.
+``latex2e`` writer extensions
+*****************************
 
-See the `index`_ for already existing writer variants, e.g.
+Questionnaire
+=============
 
-* `&lt;latex2e_adaptive_preamble&gt;`_ reduces the size of the generated preamble
-  by only including stuff really needed in the document.
+1. Do you use custom `LaTeX style sheets`_ with Docutils-generated LaTeX
+   files?
 
-* `&lt;latex2e_external_stylesheet&gt;`_ replaces most of the generated preamble by
+2. Would you prefer the style sheet to be a LaTeX package or inclusion?
+
+3. Did you ever use `custom roles`_ and realise that the exported
+   LaTeX code does not compile?
+   
+4. Did you ever use `custom roles`_, ``myclass``, say, and define a
+   ``\docutilsrole&lt;myclassname&gt;`` LaTeX command for it?
+      
+5. If YES, how important is backwards compatibility?
+   Would you update your style-sheets if the interface improves
+   significantly but non-compatible?
+      
+6. Which default font do you prefer for the output?
+
+#. Feature wishes or ideas of improvement for the `latex2e` writer.
+
+Users of ``rst2latex2.py`` are encouraged to respond by mail to the
+docutils-users list.
+
+
+LaTeX style sheets
+==================
+
+Would you prefer the style sheet to be a LaTeX *package* or *inclusion*?
+
+  No preference for .sty or .tex.
+
+  Maybe it would be useful to have both stylesheets (``*.sty``) and tex
+  snippets.
+
+Comparison
+----------
+
+LaTeX package: ``&lt;name&gt;.sty``
+  Input with ``\usepackage{&lt;name&gt;}``, expects the file extension ``.sty``.
+
+  +2  Existing LaTeX packages can be used as --stylesheet argument.
+
+  +1  Command names can contain the char &lt; at &gt; (no \makeatletter needed).
+
+  -1  Warnings, if home-made style sheets do not use the proper LaTeX
+      package commands.
+
+  +1  Clear distinction between self-contained, complete LaTeX
+      documents and style sheets (cf. ``*.html`` vs. ``*.css``).
+
+  -1  not backwards compatible.
+
+
+LaTeX inclusion: ``&lt;name&gt;.tex``
+  Input with ``\input{&lt;name&gt;}`` or ``\input{&lt;name.tex&gt;}``.
+  Expects file extension ".tex".
+
+  -1  Some existing LaTeX packages fail if given as ``--stylesheet`` argument
+      (as they must be called via \usepackage, e.g. in a home-made custom
+      style sheet).
+
+  -0  Command names with char &lt; at &gt; must be wrapped in ``\makeatletter``
+      ``\makeatother``.
+
+  +1  Backwards compatible.
+
+
+Proposal
+--------
+
+"intelligent" handling: use ``\usepackage`` if style sheet has ``.sty`` or no
+extension and ``\input`` else
+
+Rationale: 
+  while ``\input`` works withe extension as well as without extension,
+  ``\usepackage`` expects the package name without extension. (The latex2e
+  writer will drop a ``.sty`` extension to be more liberal.)
+
+::
+
+  if stylesheet:
+     (stylesheet, styleformat) = os.path.splitext(stylesheet)
+     if styleformat in ["", ".sty"]::
+         self.head_prefix.append(r"\usepackage{%s}" % (stylesheet))
+     else
+         self.head_prefix.append(r"\input{%s}" % (stylesheet))
+     
+Examples::
+
+  rst2latex.py --stylesheet==mathptmx      # use mathptmx.sty package
+  
+  rst2latex.py --stylesheet==mathptmx.sty  # use mathptmx.sty package 
+
+  rst2latex.py --stylesheet==preamble.tex  # input preamble.tex
+
+  rst2latex.py --stylesheet==preamble.mystyle  # input preamble.mystyle
+
+
+Put this in a loop over all arguments, so that ::
+
+  rst2latex.py --stylesheet==mathptmx,parskip,preamble.tex
+  
+uses packages `mathptmx` (Times fonts) and `parskip` (separate paragraphs by
+vertical white-space) as well as the tex snippet ``preamble.tex``
+
+Backwards compatibility
+-----------------------
+
+Currently, if no filename extension is given in the ``stylesheet`` argument,
+``.tex`` is assumed (by latex).
+
+This behaviour will change. 
+
+Needed Action: 
+  Always specify the extension if you want the style sheet to be 
+  ``\input`` by LaTeX.
+
+
+Custom roles
+============
+
+Did you ever use custom roles and realise that the exported LaTeX code does
+not compile?
+
+  yes
+  
+  I don't use custom roles, primarily because I'm afraid of such problems.
+
+If YES, how important is backwards compatibility? Would you update your
+style-sheets if the interface improves significantly but non-compatible?
+  
+  I would update, but as I suggested in the other thread, I do not see any
+  advantage in using a shorter prefix than 'docutils'.
+
+
+
+Default font
+============
+
+Which default font do you prefer for the output?
+
+  By default, PDFLaTeX uses embedded computer modern family, which look good
+  on paper but poor on LCDs (even if outlined, due to suboptimal hinting),
+  and result in large PDFs.  rst2pdf uses the "standard" PDF fonts by
+  default (Times, Helvetica, Courier) which IMO look reasonable both on
+  screen and on paper.  Because they aren't embedded, it also results in a
+  smaller file size.
+
+Using different fonts (e.g. standard postscript fonts) can be achieved
+easily with the ``--stylesheet=times`` (or similar) command line option or
+configuration setting or by choosing a font package in the style-sheet.
+
+  Hmm, is this documented in and easy-to-discover place in the docutils /
+  rst2latex documentation?  I don't remember seeing it mentioned before.
+
+Not yet.
+
+If a default different from Computer Modern is preferred, this should be
+implemented as a default for the stylesheet option, so it can be easily
+overridden.
+
+Font embedding must be configured in the LaTeX installation.
+
+
+Adaptive preamble
+=================
+
+  TeXlive is a large download, and in addition to the base package
+  rst2latex also requires a bunch of extra .sty packages, even if they
+  aren't used in the current document.
+
+Solution: 
+  include only package loading commands and definitions that are
+  needed in the current document.
+
+Proposal
+--------
+
+sample definitions and commands in a dictionary, e.g.::
+
+# Fallback definitions for Docutils-specific commands
+        self.latex_fallbacks = {}
+
+...
+
+        # Fallback definitions for docutils-specific latex objects
+        required_fallbacks = self.latex_fallbacks.keys()
+        required_fallbacks.sort()
+        for key in required_fallbacks:
+            self.head_prefix.append(self.latex_fallbacks[key])
+
+ ...
+
+def visit_inline(self, node): # titlereference
+        # insert fallback definition
+        self.latex_fallbacks['inline'] = latex_headings['DUspan']
+        classes = node.get('classes', [])
+        self.body.append(r'\DUspan{%s}{' %','.join(classes))
+
+
+Allow customising in a style sheet by use of ``\ProvideCommand`` for the
+fallback definition.
+
+
+
+Implementations
+***************
+
+Browse the SVN repository at berlios.de:
+http://svn.berlios.de/viewcvs/docutils/trunk/sandbox/latex-variants/
+
+* The `docs` dir contains generic documentation and discussion.
+
+  Writer specific documentation is placed in the respective "literate"
+  source.
+
+latex2e branches
+================
+
+* `latex2e_external_stylesheet` replaces most of the generated preamble by
   a latex stylesheet.
 
-* `&lt;latex2e_headings_as_multi_line_strings.py&gt;`_ tries to make the latex2e
+* `latex2e_headings_as_multi_line_strings.py` tries to make the latex2e
   writer source more readable by the use of raw literal strings
-  instead of escaped backslashes (see also
-  `&lt;latex2e_headings_as_multi_line_strings.diff&gt;`_)
+  instead of escaped backslashes.
 
-* `&lt;latex2e_listings&gt;`_ provides an alternative implementation of the new
+* `latex2e_listings` provides an alternative implementation of the new
   ``--literal-env`` option to select the environment for
   typesetting literal blocks.
   
-  This options allows e.g. to choose `lstlisting` from the ``listings.sty`` LaTeX
-  package. See also `&lt;docs/syntax-highlight-with-listings.html&gt;`_
+  This options allows e.g. to choose `lstlisting` from the ``listings.sty``
+  LaTeX package. See also `&lt;docs/syntax-highlight-with-listings.html&gt;`_
 
-The `&lt;docs&gt;`_ dir contains generic documentation and discussion.
-Writer specific documentation is placed in the respective "literate"
-source.
+alternative latex writers
+=========================
 
-.. _index: .
+Currently none.
 
----------
+related sandbox projects
+========================
 
-See also the latex-writer related sandbox projects
-
-.. `&lt;an_anonymous_relative_link&gt;`__
-
 * `&lt;../dkuhlman/Docs&gt;`__,
 * `&lt;../docpy-writer&gt;`__,
 * `&lt;../jensj/latex_math&gt;`__,


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
_______________________________________________
Docutils-checkins mailing list
Docutils-checkins&lt; at &gt;lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/docutils-checkins
</description>
    <dc:creator>milde&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-13T11:41:06</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6018">
    <title>r5725 -trunk/sandbox/OpenDocument/odpwriter/__init__.py</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6018</link>
    <description>Author: matt_harrison
Date: 2008-11-04 08:28:56 +0100 (Tue, 04 Nov 2008)
New Revision: 5725

Modified:
   trunk/sandbox/OpenDocument/odpwriter/__init__.py
Log:
[odp] change list styles to Default-outlineN, initial work on footer, and removing topics

Modified: trunk/sandbox/OpenDocument/odpwriter/__init__.py
===================================================================
--- trunk/sandbox/OpenDocument/odpwriter/__init__.py2008-10-31 18:48:54 UTC (rev 5724)
+++ trunk/sandbox/OpenDocument/odpwriter/__init__.py2008-11-04 07:28:56 UTC (rev 5725)
&lt; at &gt;&lt; at &gt; -155,9 +155,9 &lt; at &gt;&lt; at &gt;
     def __init__(self, document):
         odt.ODFTranslator.__init__(self, document)
         self.styles_seen = {}
+        self.footer_text = None # only one for the whole doc
         self._reset_values()
 
-
     def _reset_values(self):
         """we reset on each section/slide"""
         self.text_stack = [] # styles to apply to text
&lt; at &gt;&lt; at &gt; -165,11 +165,15 &lt; at &gt;&lt; at &gt;
         self.text_box = None # only supporting one text box (inside frame) (not including title)
         self.page = None
         self.handout_text = None
+
         self.in_enumerated_list = False
         self.in_bullet = False
+        self.list_depth = 0
+        self.prev_current = None
         self.prev_stack = None
         self.in_handout = False
         self.in_comment = False
+        self.in_topic = False
 
         # not a new one, but needs to be reset
         self.paragraph_style_stack = [self.rststyle('textbody'),]
&lt; at &gt;&lt; at &gt; -206,6 +210,16 &lt; at &gt;&lt; at &gt;
                         'text:name': id})
         self.pending_ids = [ ]
 
+    def append_child(self, tag, attrib=None, parent=None, location=-1):
+        """
+        I want to be able to append children as the first item
+        """
+        child = odt.ODFTranslator.append_child(self, tag, attrib=attrib, parent=parent)
+        if location != -1:
+            parent.remove(child)
+            parent.insert(location, child)
+        return child
+
     def visit_document(self, node):
         print "DOC", node
 
&lt; at &gt;&lt; at &gt; -213,12 +227,18 &lt; at &gt;&lt; at &gt;
         self._reset_values()
         self.section_count += 1
         style_name = "dp1"
+        page_attrib={"draw:name":"page%d" % self.section_count,
+                "draw:style-name":style_name,
+                "draw:master-page-name":"Default",
+                "presentation:presentation-page-layout-name":"AL1T0"
+                }
+
+        if not self.footer_text is None:
+            # set footers
+
+            page_attrib['presentation:user-footer-name'] = 'ftr1'
         self.page = self.append_child('draw:page', 
-                                      attrib={"draw:name":"page%d" % self.section_count,
-                                              "draw:style-name":style_name,
-                                              "draw:master-page-name":"Default",
-                                              "presentation:presentation-page-layout-name":"AL1T0"
-                                              },
+                                      attrib=page_attrib,
                                       parent=self.body_text_element)
         self.append_child('office:forms',
                           attrib={"form:apply-design-mode":"false",
&lt; at &gt;&lt; at &gt; -236,6 +256,9 &lt; at &gt;&lt; at &gt;
         """
         text:h in super class crashes OOo!!!
         """
+        if self.in_topic: 
+            return
+
         if self.page is None:
             self.visit_section(node)
         #style_name = 'pr1'
&lt; at &gt;&lt; at &gt; -251,6 +274,9 &lt; at &gt;&lt; at &gt;
 
 
     def depart_title(self, node):
+        if self.in_topic: 
+            return
+
         self.current_element = self.page
         self.text_box = None
 
&lt; at &gt;&lt; at &gt; -330,29 +356,68 &lt; at &gt;&lt; at &gt;
         self.in_handout = False
         odt.ODFTranslator.depart_container(self, node)
 
+    def visit_footer(self, node):
+        #ipshell('At visit_footer')
+        self.in_footer = True
+        self.prev_current = self.current_element
+
+    def depart_footer(self, node):
+        #ipshell('At depart_footer')
+        self.in_footer = False
+        self.current_element = self.prev_current
+
     def visit_paragraph(self, node):
+        if self.in_topic: 
+            return
+
         if self.text_box is None:
             self._create_text_area()
 
+        if self.in_footer:
+            if self.footer_text is None:
+                self.create_footer_text()
+            self.current_element = self.footer_text
+            #return 
+
         classes = node.attributes.get('classes', [])
         if not self.in_handout:
             self.in_handout = 'handout' in classes
-        self.para_stack.append(' '.join(classes))
 
+        if not self.in_handout:
+
+            self.para_stack.append(' '.join(classes))
+
         ##odt.ODFTranslator.visit_paragraph(self, node)
         #style_name = self.paragraph_style_stack[-1]
-        style_name = generate_paragraph_style(self, self.para_stack)
-        el = self.append_child('text:p',
-                               attrib={'text:style-name': self.rststyle(style_name)})
-        self.append_pending_ids(el)
-        self.set_current_element(el)
+            style_name = generate_paragraph_style(self, self.para_stack)
+            el = self.append_child('text:p',
+                                   attrib={'text:style-name': self.rststyle(style_name)})
+            self.append_pending_ids(el)
+            self.set_current_element(el)
 
         
 
     def depart_paragraph(self, node):
-        self.in_handout = False
-        self.para_stack.pop()
+        if self.in_topic: 
+            return
+
+        if self.in_handout:
+            self.para_stack.pop()
+
         odt.ODFTranslator.depart_paragraph(self, node)
+        self.in_handout = False        
+
+    def visit_reference(self, node):
+        if self.in_topic: 
+            return
+        odt.ODFTranslator.visit_reference(self, node)
+
+    def depart_reference(self, node):
+        if self.in_topic: 
+            return
+        odt.ODFTranslator.depart_reference(self, node)
+
+    
         
     def visit_literal_block(self, node):
         if self.text_box is None:
&lt; at &gt;&lt; at &gt; -373,6 +438,15 &lt; at &gt;&lt; at &gt;
                 return True
             node = node.parent
         return False
+
+    def visit_topic(self, node):
+        """
+        s5 put's topics in handout....  Currently this isn't implemented
+        """
+        self.in_topic = True
+
+    def depart_topic(self, node):
+        self.in_topic = False
         
     def visit_inline(self, node):
         classes = node.attributes.get('classes', [])
&lt; at &gt;&lt; at &gt; -448,6 +522,8 &lt; at &gt;&lt; at &gt;
         odt.ODFTranslator.depart_enumerated_list(self, node)
 
     def visit_bullet_list(self, node):
+        if self.in_topic: 
+            return
         if self.text_box is None:
             self._create_text_area()
 
&lt; at &gt;&lt; at &gt; -455,6 +531,9 &lt; at &gt;&lt; at &gt;
 
 
     def depart_bullet_list(self, node):
+        if self.in_topic: 
+            return
+
         odt.ODFTranslator.depart_bullet_list(self, node)
         self.in_bullet = False
 
&lt; at &gt;&lt; at &gt; -463,21 +542,51 &lt; at &gt;&lt; at &gt;
         !!!odt bullet handling isn't correct
         doesn't put &lt;/text:list&gt; around EVERY item
         """
+        if self.in_topic: 
+            return
+        self.list_depth += 1
         if self.in_bullet:
-            odt.ODFTranslator.visit_bullet_list(self, node)
+            ## odt.ODFTranslator.visit_bullet_list(self, node)
+            style = 'Default-outline-%d' % self.list_depth
+            el = odt.SubElement(self.current_element, 'text:list', attrib={
+                    'text:style-name': style,
+                    })
+
+            self.list_style_stack.append(self.rststyle('bulletitem'))
+            self.set_current_element(el)
         if self.in_enumerated_list:
             odt.ODFTranslator.visit_enumerated_list(self, node)
         
         odt.ODFTranslator.visit_list_item(self, node)
-
             
     def depart_list_item(self, node):
+        if self.in_topic: 
+            return
+        self.list_depth -= 1
         odt.ODFTranslator.depart_list_item(self, node)
         #need an extra dosing here, for bug in lists
         self.set_to_parent()
 
     
+    def create_footer_text(self):
+        if not self.footer_text is None:
+            return
 
+        self.footer_text = self.append_child('presentation:footer-decl',
+                                             attrib={'presentation:name':'ftr1'},
+                                             parent = self.body_text_element,
+                                             location=0)
+        self._add_style('style:style',
+                        {'style:name':'dp1',
+                         'style:family':'drawing-page'},
+                        'style:drawing-page-properties',
+                        {'presentation:display-footer':'true',
+                         'presentation:background-visible':'true',
+                         'presentation:background-objects-visible':'true',
+                         'presentation:display-page-number':'false',
+                         'presentation:display-date-time':'true'})
+
+
     def create_handout_text(self):
         if not self.handout_text is None:
             return
&lt; at &gt;&lt; at &gt; -568,7 +677,7 &lt; at &gt;&lt; at &gt;
         self.current_element = old
         self.in_paragraph = prev_para
 
-    def _add_style(self, name, parent_attr, child_tag=None,child_attr=None):
+    def _add_style(self, name, parent_attr, child_tag=None, child_attr=None):
         if name not in self.styles_seen:
             self.styles_seen[name] = 1
             e1 = odt.SubElement(self.automatic_styles, 'style:style',
&lt; at &gt;&lt; at &gt; -632,8 +741,6 &lt; at &gt;&lt; at &gt;
     * bgcolor:color_name (#cc32f5 or `transparent`)
     * size:[huge|big|small|tiny]
     """
-    color2hex = dict(black="black",
-                     gray="gray")
     text_name = flatten_stack(text_stack)
     text_attrs = {}
     for items in text_stack:


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>matt_harrison&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-11-04T07:28:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6017">
    <title>r5724 -trunk/sandbox/infrastructure/docutils-update.local</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6017</link>
    <description>Author: goodger
Date: 2008-10-31 19:48:54 +0100 (Fri, 31 Oct 2008)
New Revision: 5724

Modified:
   trunk/sandbox/infrastructure/docutils-update.local
Log:
removed unused code

Modified: trunk/sandbox/infrastructure/docutils-update.local
===================================================================
--- trunk/sandbox/infrastructure/docutils-update.local2008-10-31 18:37:29 UTC (rev 5723)
+++ trunk/sandbox/infrastructure/docutils-update.local2008-10-31 18:48:54 UTC (rev 5724)
&lt; at &gt;&lt; at &gt; -153,12 +153,6 &lt; at &gt;&lt; at &gt;
 # plant the snapshots
 mv -f *snapshot.tgz $htdocsdest
 
-# if [ -d $snapshotdest ] ; then
-#     mv -f *snapshot.tgz $snapshotdest
-# else
-#     echo "Skip snapshots, directory $snapshotdest does not exist"
-# fi
-
 # revert and touch (to avoid updating the web site only because of the
 # changed timestamp)
 svn -q revert $project/$project/__init__.py


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>goodger&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-10-31T18:48:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6016">
    <title>r5723 - in trunk:sandbox/infrastructure/docutils-update.local web/.htaccess</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6016</link>
    <description>Author: goodger
Date: 2008-10-31 19:37:29 +0100 (Fri, 31 Oct 2008)
New Revision: 5723

Modified:
   trunk/sandbox/infrastructure/docutils-update.local
   trunk/web/.htaccess
Log:
fix snapshot creation, and put snapshots on sourceforge.net directly (not via ftp to berlios)

Modified: trunk/sandbox/infrastructure/docutils-update.local
===================================================================
--- trunk/sandbox/infrastructure/docutils-update.local2008-10-31 18:01:58 UTC (rev 5722)
+++ trunk/sandbox/infrastructure/docutils-update.local2008-10-31 18:37:29 UTC (rev 5723)
&lt; at &gt;&lt; at &gt; -42,8 +42,8 &lt; at &gt;&lt; at &gt;
 # Where to create the snapshots (non-public).
 snapshotdir=$auxdir/snapshots
 test -d $snapshotdir || mkdir $snapshotdir
-# Where to publish the snapshots (public).
-snapshotdest=/home/groups/ftp/pub/docutils
+# # Where to publish the snapshots (public).
+# snapshotdest=/home/groups/ftp/pub/docutils
 bindir=$auxdir/bin
 test -d $bindir || mkdir $bindir
 
&lt; at &gt;&lt; at &gt; -151,12 +151,14 &lt; at &gt;&lt; at &gt;
   tar -cz $exclude -f ../../docfactory-snapshot.tgz docfactory )
 
 # plant the snapshots
-if [ -d $snapshotdest ] ; then
-    mv -f *snapshot.tgz $snapshotdest
-else
-    echo "Skip snapshots, directory $snapshotdest does not exist"
-fi
+mv -f *snapshot.tgz $htdocsdest
 
+# if [ -d $snapshotdest ] ; then
+#     mv -f *snapshot.tgz $snapshotdest
+# else
+#     echo "Skip snapshots, directory $snapshotdest does not exist"
+# fi
+
 # revert and touch (to avoid updating the web site only because of the
 # changed timestamp)
 svn -q revert $project/$project/__init__.py

Modified: trunk/web/.htaccess
===================================================================
--- trunk/web/.htaccess2008-10-31 18:01:58 UTC (rev 5722)
+++ trunk/web/.htaccess2008-10-31 18:37:29 UTC (rev 5723)
&lt; at &gt;&lt; at &gt; -12,11 +12,6 &lt; at &gt;&lt; at &gt;
 Redirect permanent /sandbox/ax- http://docutils.sourceforge.net/sandbox/axk
 Redirect permanent /sandbox/dkuhlman/OpenDocument http://docutils.sourceforge.net/sandbox/OpenDocument
 
-# Redirect snapshots to BerliOS.  The target URL may change in the
-# future, so use a temporary redirect (status 302).
-
-RedirectMatch temp /(.*-snapshot.tgz) ftp://ftp.berlios.de/pub/docutils/$1
-
 # Redirection from old URLs to new URLs after a site reorganization.
 
 Redirect permanent /docs/config.html http://docutils.sourceforge.net/docs/user/config.html


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>goodger&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-10-31T18:37:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.text.docutils.cvs/6015">
    <title>r5722 - trunk/sandbox/OpenDocument/README.txt</title>
    <link>http://comments.gmane.org/gmane.text.docutils.cvs/6015</link>
    <description>Author: goodger
Date: 2008-10-31 19:01:58 +0100 (Fri, 31 Oct 2008)
New Revision: 5722

Modified:
   trunk/sandbox/OpenDocument/README.txt
Log:
markup fixes

Modified: trunk/sandbox/OpenDocument/README.txt
===================================================================
--- trunk/sandbox/OpenDocument/README.txt2008-10-31 17:54:08 UTC (rev 5721)
+++ trunk/sandbox/OpenDocument/README.txt2008-10-31 18:01:58 UTC (rev 5722)
&lt; at &gt;&lt; at &gt; -56,7 +56,7 &lt; at &gt;&lt; at &gt;
 
 Fixes to footnotes.  Auto-numbered and auto-symbol footnotes seem
 to work correctly now.  There is a constant (footnote_chars)
-containing the symbols (*, **, ***, ++, etc).  
+containing the symbols (\*, \**, \***, ++, etc).  
 
 Added support for citations.
 
&lt; at &gt;&lt; at &gt; -82,7 +82,7 &lt; at &gt;&lt; at &gt;
 
 Added support for the meta directive.  See docs.
 
-Added support for additional visit_/depart_ methods.
+Added support for additional ``visit_``/``depart_`` methods.
 
 Regularized some of the methods that generated fields: revision,
 version, date, address, contact, copyright, organization, etc.


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK &amp; win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&amp;url=/
</description>
    <dc:creator>goodger&lt; at &gt;users.berlios.de</dc:creator>
    <dc:date>2008-10-31T18:01:59</dc:date>
  </item>
  <textinput about="http://search.gmane.org/?group=$group=gmane.text.docutils.cvs">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.text.docutils.cvs</link>
  </textinput>
</rdf:RDF>
