[Checkins] SVN: zope.structuredtext/trunk/ Output valid html
Laurence Rowe
l at lrowe.co.uk
Tue Mar 31 14:42:09 EDT 2009
Log message for revision 98715:
Output valid html
Changed:
U zope.structuredtext/trunk/CHANGES.txt
U zope.structuredtext/trunk/buildout.cfg
A zope.structuredtext/trunk/convert.py
U zope.structuredtext/trunk/setup.py
U zope.structuredtext/trunk/src/zope/structuredtext/html.py
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/Acquisition.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/ExtensionClass.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/InnerLinks.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/Links.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/MultiMapping.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples1.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/index.ref
U zope.structuredtext/trunk/src/zope/structuredtext/regressions/table.ref
-=-
Modified: zope.structuredtext/trunk/CHANGES.txt
===================================================================
--- zope.structuredtext/trunk/CHANGES.txt 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/CHANGES.txt 2009-03-31 18:42:08 UTC (rev 98715)
@@ -1,6 +1,11 @@
Change History
==============
+3.5.0 (unreleased)
+------------------
+
+Output valid html
+
3.4.0 (2007/09/01)
------------------
Modified: zope.structuredtext/trunk/buildout.cfg
===================================================================
--- zope.structuredtext/trunk/buildout.cfg 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/buildout.cfg 2009-03-31 18:42:08 UTC (rev 98715)
@@ -1,7 +1,12 @@
[buildout]
develop = .
-parts = test
+parts = test py
[test]
recipe = zc.recipe.testrunner
eggs = zope.structuredtext
+
+[py]
+recipe = zc.recipe.egg
+eggs = zope.structuredtext
+interpreter = py
Added: zope.structuredtext/trunk/convert.py
===================================================================
--- zope.structuredtext/trunk/convert.py (rev 0)
+++ zope.structuredtext/trunk/convert.py 2009-03-31 18:42:08 UTC (rev 98715)
@@ -0,0 +1,16 @@
+"""Utility to convert stx to html
+"""
+
+import sys
+from zope.structuredtext import stng
+from zope.structuredtext.document import Document
+from zope.structuredtext.html import HTML
+
+def convert(raw_text):
+ doc = stng.structurize(raw_text)
+ doc = Document()(doc)
+ return HTML()(doc)
+
+if __name__ == '__main__':
+ fname = sys.argv[1]
+ print convert(open(fname).read())
Modified: zope.structuredtext/trunk/setup.py
===================================================================
--- zope.structuredtext/trunk/setup.py 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/setup.py 2009-03-31 18:42:08 UTC (rev 98715)
@@ -39,7 +39,7 @@
setup(
name='zope.structuredtext',
- version = '3.4.1dev',
+ version = '3.5.0dev',
url='http://pypi.python.org/pypi/zope.structuredtext',
author='Zope Corporation and Contributors',
author_email='zope3-dev at zope.org',
Modified: zope.structuredtext/trunk/src/zope/structuredtext/html.py
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/html.py 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/html.py 2009-03-31 18:42:08 UTC (rev 98715)
@@ -22,8 +22,21 @@
class HTML:
- element_types = {
+ paragraph_nestable = {
'#text': '_text',
+ 'StructuredTextLiteral': 'literal',
+ 'StructuredTextEmphasis': 'emphasis',
+ 'StructuredTextStrong': 'strong',
+ 'StructuredTextLink': 'link',
+ 'StructuredTextXref': 'xref',
+ 'StructuredTextInnerLink':'innerLink',
+ 'StructuredTextNamedLink':'namedLink',
+ 'StructuredTextUnderline':'underline',
+ 'StructuredTextSGML':'sgml', # this might or might not be valid
+ }
+
+ element_types = paragraph_nestable.copy()
+ element_types.update({
'StructuredTextDocument': 'document',
'StructuredTextParagraph': 'paragraph',
'StructuredTextExample': 'example',
@@ -34,19 +47,9 @@
'StructuredTextDescriptionBody': 'descriptionBody',
'StructuredTextSection': 'section',
'StructuredTextSectionTitle': 'sectionTitle',
- 'StructuredTextLiteral': 'literal',
- 'StructuredTextEmphasis': 'emphasis',
- 'StructuredTextStrong': 'strong',
- 'StructuredTextLink': 'link',
- 'StructuredTextXref': 'xref',
- 'StructuredTextInnerLink':'innerLink',
- 'StructuredTextNamedLink':'namedLink',
- 'StructuredTextUnderline':'underline',
'StructuredTextTable':'table',
- 'StructuredTextSGML':'sgml',
- }
+ })
-
def dispatch(self, doc, level, output):
getattr(self, self.element_types[doc.getNodeName()])(doc, level, output)
@@ -147,14 +150,18 @@
def paragraph(self, doc, level, output):
output('<p>')
+ in_p = True
for c in doc.getChildNodes():
- if c.getNodeName() in ['StructuredTextParagraph']:
- getattr(self, self.element_types[c.getNodeName()])(
- c, level, output)
+ if c.getNodeName() in self.paragraph_nestable:
+ if not in_p:
+ output('<p>')
+ self.dispatch(c, level, output)
else:
- getattr(self, self.element_types[c.getNodeName()])(
- c, level, output)
- output('</p>\n')
+ output('</p>\n')
+ in_p = False
+ self.dispatch(c, level, output)
+ if in_p:
+ output('</p>\n')
def link(self, doc, level, output):
output('<a href="%s">' % doc.href)
@@ -242,7 +249,10 @@
class HTMLWithImages(HTML):
- element_types = HTML.element_types
+ paragraph_nestable = HTML.paragraph_nestable.copy()
+ paragraph_nestable.update({'StructuredTextImage': 'image'})
+
+ element_types = HTML.element_types.copy()
element_types.update({'StructuredTextImage': 'image'})
def image(self, doc, level, output):
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/Acquisition.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/Acquisition.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/Acquisition.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -13,7 +13,8 @@
extension base classes that can be used to add acquisition as a
feature to extension subclasses. These mix-in classes use the
context-wrapping feature of ExtensionClasses to implement
- acquisition. Consider the following example:
+ acquisition. Consider the following example:</p>
+
<pre>
import ExtensionClass, Acquisition
@@ -39,7 +40,6 @@
a.report() # raises an attribute error
</pre>
-</p>
<p> The class <code>A</code> inherits acquisition behavior from
<code>Acquisition.Implicit</code>. The object, <code>a</code>, "has" the color of
objects <code>c</code> and <code>d</code> when it is accessed through them, but it
@@ -56,21 +56,21 @@
cannot be found in <code>a</code>.</p>
<p> Aquisition wrappers provide access to the wrapped objects
through the attributes <code>aq_parent</code>, <code>aq_self</code>, <code>aq_base</code>.
- In the example above, the expressions:
+ In the example above, the expressions:</p>
+
<pre>
'c.a.aq_parent is c'
</pre>
-</p>
-<p> and:
+<p> and:</p>
+
<pre>
'c.a.aq_self is a'
</pre>
-</p>
-<p> both evaluate to true, but the expression:
+<p> both evaluate to true, but the expression:</p>
+
<pre>
'c.a is a'
</pre>
-</p>
<p> evaluates to false, because the expression <code>c.a</code> evaluates
to an acquisition wrapper around <code>c</code> and <code>a</code>, not <code>a</code> itself.</p>
<p> The attribute <code>aq_base</code> is similar to <code>aq_self</code>. Wrappers may be
@@ -91,11 +91,11 @@
<h3> Explicit Acquisition</h3>
<p> When explicit acquisition is used, attributes are not
automatically obtained from the environment. Instead, the
- method <code>aq_aquire</code> must be used, as in:
+ method <code>aq_aquire</code> must be used, as in:</p>
+
<pre>
print c.a.aq_acquire('color')
</pre>
-</p>
<p> To support explicit acquisition, an object should inherit
from the mix-in class <code>Acquisition.Explicit</code>.</p>
<h3> Controlled Acquisition</h3>
@@ -107,7 +107,8 @@
<li>setting all attributes that should be acquired to the special
value: <code>Acquisition.Acquired</code>. Setting an attribute to this
value also allows inherited attributes to be overridden with
- acquired ones.<p> For example, in:
+ acquired ones.<p> For example, in:</p>
+
<pre>
class C(Acquisition.Explicit):
id=1
@@ -115,7 +116,6 @@
color=Acquisition.Acquired
__roles__=Acquisition.Acquired
</pre>
-</p>
<p> The <em>only</em> attributes that are automatically acquired from
containing objects are <code>color</code>, and <code>__roles__</code>. Note also
that the <code>__roles__</code> attribute is acquired even though it's
@@ -145,7 +145,8 @@
</ul>
<p> If the filter returns a true object that the object found is
returned, otherwise, the acquisition search continues.</p>
-<p> For example, in:
+<p> For example, in:</p>
+
<pre>
from Acquisition import Explicit
@@ -174,15 +175,14 @@
print a.b.c.aq_acquire('p', find_nice)
</pre>
-</p>
<p> The filtered acquisition in the last line skips over the first
attribute it finds with the name <code>p</code>, because the attribute
doesn't satisfy the condition given in the filter. The output of
- the last line is:
+ the last line is:</p>
+
<pre>
spam(Nice) and I am nice!
</pre>
-</p>
<h2> Acquisition and methods</h2>
<p> Python methods of objects that support acquisition can use
acquired attributes as in the <code>report</code> method of the first example
@@ -196,7 +196,8 @@
this time. This is because wrapper objects do not conform to the
data structures expected by these methods.</p>
<h2> Acquiring Acquiring objects</h2>
-<p> Consider the following example:
+<p> Consider the following example:</p>
+
<pre>
from Acquisition import Implicit
@@ -216,7 +217,6 @@
o=a.b.c.x
</pre>
-</p>
<p> The expression <code>o.color</code> might be expected to return <code>"red"</code>. In
earlier versions of ExtensionClass, however, this expression
failed. Acquired acquiring objects did not acquire from the
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/ExtensionClass.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/ExtensionClass.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/ExtensionClass.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -251,18 +251,19 @@
</ul>
<p> where <code>name</code> is the module name and <code>type</code> is the extension class
- type object.<h2> Attribute lookup</h2>
+ type object.</p>
+<h2> Attribute lookup</h2>
<p> Attribute lookup is performed by calling the base extension class
<code>getattr</code> operation for the base extension class that includes C
data, or for the first base extension class, if none of the base
extension classes include C data. <code>ExtensionClass.h</code> defines a
macro <code>Py_FindAttrString</code> that can be used to find an object's
attributes that are stored in the object's instance dictionary or
- in the object's class or base classes:
+ in the object's class or base classes:</p>
+
<pre>
v = Py_FindAttrString(self,name);
</pre>
-</p>
<p> where <code>name</code> is a C string containing the attribute name.</p>
<p> In addition, a macro is provided that replaces <code>Py_FindMethod</code>
calls with logic to perform the same sort of lookup that is
@@ -270,6 +271,7 @@
<p> If an attribute name is contained in a Python string object,
rather than a C string object, then the macro <code>Py_FindAttr</code> should
be used to look up an attribute value.</p>
+</p>
<h2> Linking</h2>
<p> The extension class mechanism was designed to be useful with
dynamically linked extension modules. Modules that implement
@@ -277,10 +279,10 @@
class library. The macro <code>PyExtensionClass_Export</code> imports the
<code>ExtensionClass</code> module and uses objects imported from this module
to initialize an extension class with necessary behavior.</p>
+</p>
<h2> Example: MultiMapping objects</h2>
<p> An <a href="MultiMapping.html">example</a>, is provided that illustrates the
changes needed to convert an existing type to an ExtensionClass.</p>
-</p>
<h2> Implementing base extension class constructors</h2>
<p> Some care should be taken when implementing or overriding base
class constructors. When a Python class overrides a base class
@@ -300,7 +302,8 @@
This was not done above to simplify the example.</p>
<h2> Overriding methods inherited from Python base classes</h2>
<p> A problem occurs when trying to overide methods inherited from
- Python base classes. Consider the following example:
+ Python base classes. Consider the following example:</p>
+
<pre>
from ExtensionClass import Base
@@ -315,7 +318,6 @@
Spam.__init__(self,name)
self.favorite_color=favorite_color
</pre>
-</p>
<p> This implementation will fail when an <code>ECSpam</code> object is
instantiated. The problem is that <code>ECSpam.__init__</code> calls
<code>Spam.__init__</code>, and <code>Spam.__init__</code> can only be called with a
@@ -326,7 +328,8 @@
<code>inheritedAttribute</code> that can be used to obtain an inherited
attribute that is suitable for calling with an extension class
instance. Using the <code>inheritedAttribute</code> method, the above
- example can be rewritten as:
+ example can be rewritten as:</p>
+
<pre>
from ExtensionClass import Base
@@ -341,7 +344,6 @@
ECSpam.inheritedAttribute('__init__')(self,name)
self.favorite_color=favorite_color
</pre>
-</p>
<p> This isn't as pretty but does provide the desired result.</p>
<h2> New class and instance semantics</h2>
<h3> Context Wrapping</h3>
@@ -370,7 +372,8 @@
extension class that defines an <code>__of__</code> method, then when the
attribute is accessed through an instance, it's <code>__of__</code> method
will be called to create a bound method.</p>
-<p> Consider the following example:
+<p> Consider the following example:</p>
+
<pre>
import ExtensionClass
@@ -393,7 +396,6 @@
x=bar()
hi=x.hi()
</pre>
-</p>
<p> Note that <code>ExtensionClass.Base</code> is a base extension class that
provides very basic ExtensionClass behavior. </p>
<p> When run, this program outputs: <code>a bar was called</code>.</p>
@@ -408,17 +410,19 @@
computed attributes. First, we define a ComputedAttribute
class. a ComputedAttribute is constructed with a function to
be used to compute an attribute, and calls the function when
- it's <code>__of__</code> method is called:<p> import ExtensionClass</p>
+ it's <code>__of__</code> method is called:</p>
+<p> import ExtensionClass</p>
+</p>
<h5> class ComputedAttribute(ExtensionClass.Base):</h5>
<p> def __init__(self, func): self.func=func</p>
<p> def __of__(self, parent): return self.func(parent)</p>
+<p> Then we can use this class to create computed attributes. In the
+ example below, we create a computed attribute, 'radius':</p>
+<p> from math import sqrt</p>
</p>
-<p> Then we can use this class to create computed attributes. In the
- example below, we create a computed attribute, 'radius':<p> from math import sqrt</p>
<h5> class Point(ExtensionClass.Base):</h5>
<p> def __init__(self, x, y): self.x, self.y = x, y</p>
<p> radius=ComputedAttribute(lambda self: sqrt(self.x<strong>2+self.y</strong>2))</p>
-</p>
<h5> which we can use just like an ordinary attribute:</h5>
<p> p=Point(2,2)
print p.radius</p>
@@ -450,7 +454,8 @@
<h3> Method attributes</h3>
<p> Methods of ExtensionClass instances can have user-defined
attributes, which are stored in their associated instances.</p>
-<p> For example:
+<p> For example:</p>
+
<pre>
class C(ExtensionClass.Base):
@@ -467,7 +472,6 @@
print C.f.__roles__ # fails, unbound method
</pre>
-</p>
<p> A bound method attribute is set by setting an attribute in it's
instance with a name consisting of the concatination of the
method's <code>__name__</code> attribute and the attribute name.
@@ -581,16 +585,18 @@
Synchonized classes have also been used in recent products.</p>
<h2> Summary</h2>
<p> The extension-class mechanism described here provides a way to add
- class services to extension types. It allows:
+ class services to extension types. It allows:</p>
+
<ul>
<li>Sub-classing extension classes in Python,</li>
+</p>
<li>Construction of extension class instances by calling extension
classes,</li>
+</p>
<li>Extension classes to provide meta-data, such as unbound methods
and their documentation string.</li>
</ul>
-</p>
<p> In addition, the extension class module provides a relatively
concise example of the use of mechanisms that were added to Python
to support MESS <a href="#ref6">[6]</a>, and that were described at the fourth Python
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/InnerLinks.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/InnerLinks.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/InnerLinks.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -9,3 +9,4 @@
<p> <a name="ref2">[2]</a> "Python Book" by Guido van Rossum</p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/Links.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/Links.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/Links.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -21,3 +21,4 @@
<a href="http://www.zope-is-kewl.com">Link 2</a> and <a href="http://www.freshmeat.net">one more link - yeah.</a></p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/MultiMapping.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/MultiMapping.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/MultiMapping.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -11,7 +11,8 @@
object, the encapsulated mapping objects are searched until an
object is found.</p>
<p> Consider an implementation of a MultiMapping extension type,
- without use of the extension class mechanism:
+ without use of the extension class mechanism:</p>
+
<pre>
#include "Python.h"
@@ -170,7 +171,6 @@
Py_FatalError("can't initialize module MultiMapping");
}
</pre>
-</p>
<p> This module defines an extension type, <code>MultiMapping</code>, and exports a
module function, <code>MultiMapping</code>, that creates <code>MultiMapping</code>
Instances. The type provides two methods, <code>push</code>, and <code>pop</code>, for
@@ -179,7 +179,8 @@
and subscript operators but not mapping a subscript assignment
operator.</p>
<p> Now consider an extension class implementation of MultiMapping
- objects:
+ objects:</p>
+
<pre>
#include "Python.h"
#include "ExtensionClass.h"
@@ -360,23 +361,23 @@
Py_FatalError("can't initialize module MultiMapping");
}
</pre>
-</p>
<p> This version includes <code>ExtensionClass.h</code>. The two declarations of
<code>MMtype</code> have been changed from <code>PyTypeObject</code> to <code>PyExtensionClass</code>.
The <code>METHOD_CHAIN</code> macro has been used to add methods to the end of
the definition for <code>MMtype</code>. The module function, newMMobject has
been replaced by the <code>MMtype</code> method, <code>MM__init__</code>. Note that this
- method does not create or return a new object. Finally, the lines:
+ method does not create or return a new object. Finally, the lines:</p>
+
<pre>
d = PyModule_GetDict(m);
PyExtensionClass_Export(d,"MultiMapping",MMtype);
</pre>
-</p>
<p> Have been added to both initialize the extension class and to export
it in the module dictionary.</p>
<p> To use this module, compile, link, and import it as with any other
extension module. The following python code illustrates the
- module's use:
+ module's use:</p>
+
<pre>
from MultiMapping import MultiMapping
m=MultiMapping()
@@ -387,13 +388,13 @@
m['ham'] # returns 4
m['foo'] # raises a key error
</pre>
-</p>
<p> Creating the <code>MultiMapping</code> object took three steps, one to create
an empty <code>MultiMapping</code>, and two to add mapping objects to it. We
might wish to simplify the process of creating MultiMapping
objects by providing a constructor that takes source mapping
objects as parameters. We can do this by sub-classing MultiMapping
- in Python:
+ in Python:</p>
+
<pre>
from MultiMapping import MultiMapping
class ExtendedMultiMapping(MultiMapping):
@@ -407,9 +408,9 @@
m['ham'] # returns 4
m['foo'] # raises a key error
</pre>
-</p>
<p> Note that the source file included in the ExtensionClass
distribution has numerous enhancements beyond the version shown in
this document.</p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -29,20 +29,26 @@
</ul>
<p><a name="ref1">[1]</a> (The referring text should be a paragraph, not a header, and
-should contain a reference to this footnote, footnote "<a href="#ref1">[1]</a>".)<p> Some hrefs, in a definition list:</p>
+should contain a reference to this footnote, footnote "<a href="#ref1">[1]</a>".)</p>
+<p> Some hrefs, in a definition list:</p>
+</p>
<dl>
<dt> <u>Regular</u></dt>
<dd><a href="http://www.zope.org">http://www.zope.org/</a></dd>
+</p>
<dt> <u>W/trailing punctuation</u></dt>
<dd><a href="http://www.zope.org">http://www.zope.org/</a>.</dd>
+</p>
<dt> <u>W protocol implicit</u></dt>
<dd><a href=":locallink">locallink</a></dd>
+</p>
<dt> <u>W protocol implicit</u>, alternate</dt>
<dd>"locallink", :locallink</dd>
</dl>
+</p>
<p> |||| A Simple Two-column Table ||
|| Column A || Column B ||
|| Apples || Oranges ||</p>
-</p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples1.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples1.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/examples1.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -4,12 +4,13 @@
</head>
<body>
<h1>Test</h1>
-<p> For instance:
+<p> For instance:</p>
+
<pre>
<table border="0">
<tr><td>blabla</td></tr>
</table>
</pre>
-</p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/index.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/index.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/index.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -46,3 +46,4 @@
Python 1.5.1 using Microsoft Visual C++ 5.0 in "Release" mode.</p>
</body>
</html>
+
Modified: zope.structuredtext/trunk/src/zope/structuredtext/regressions/table.ref
===================================================================
--- zope.structuredtext/trunk/src/zope/structuredtext/regressions/table.ref 2009-03-31 18:26:09 UTC (rev 98714)
+++ zope.structuredtext/trunk/src/zope/structuredtext/regressions/table.ref 2009-03-31 18:42:08 UTC (rev 98715)
@@ -70,3 +70,4 @@
</table>
</body>
</html>
+
More information about the Checkins
mailing list