summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJensDiemer <git@jensdiemer.de>2011-05-25 16:29:58 +0200
committerJensDiemer <git@jensdiemer.de>2011-05-25 16:29:58 +0200
commit8e0c796530a5bd5174d053e31b96d883bba86d02 (patch)
tree5226ed8b05a9adafd594ea2d235b39b9b65a8987
parent7566b9b892209db23ac73f7864278fa8b0ffe586 (diff)
downloadcreole-callable-unknown.tar.gz
* Change version string to v0.5, because API changedcallable-unknown
* update README * add a unittest for \"use_html_macro\" callable * update 'cross compage' unittests (newline after headline) * some code cleanup
-rw-r--r--README4
-rw-r--r--creole/__init__.py5
-rw-r--r--creole/html2creole.py17
-rw-r--r--tests/test_cross_compare.py21
-rw-r--r--tests/test_html2creole.py31
5 files changed, 68 insertions, 10 deletions
diff --git a/README b/README
index 6bdf25d..2bf82cc 100644
--- a/README
+++ b/README
@@ -41,6 +41,10 @@ See also: http://github.com/jedie/python-creole/blob/master/demo.py
history
=========
+- v0.5
+
+ - API changed: Html2CreoleEmitter optinal argument 'unknown_emit' taks now a callable for handle unknown html tags.
+
- v0.4
- only emit children of empty tags like div and span (contributed by Eric O'Connell)
diff --git a/creole/__init__.py b/creole/__init__.py
index 7d75dd2..6b7554f 100644
--- a/creole/__init__.py
+++ b/creole/__init__.py
@@ -1,5 +1,6 @@
# coding: utf-8
+
"""
python-creole
~~~~~~~~~~~~~
@@ -17,7 +18,8 @@
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
-__version__ = (0, 4, 1, "pre")
+
+__version__ = (0, 5, 0, "pre")
__api__ = (1, 0) # Creole 1.0 spec - http://wikicreole.org/
@@ -30,6 +32,7 @@ from html2creole import Html2CreoleParser, Html2CreoleEmitter
from html2creole import raise_unknown_node, use_html_macro, \
escape_unknown_nodes, transparent_unknown_nodes
+
try:
from django.utils.version import get_svn_revision
except ImportError:
diff --git a/creole/html2creole.py b/creole/html2creole.py
index 2730d11..5219aed 100644
--- a/creole/html2creole.py
+++ b/creole/html2creole.py
@@ -557,14 +557,19 @@ class Deentity(object):
def raise_unknown_node(emitter, node):
"""
+ unknown_emit callable for Html2CreoleEmitter
+
Raise NotImplementedError on unknown tags.
"""
raise NotImplementedError(
"Node from type '%s' is not implemented!" % node.kind
)
+
def use_html_macro(emitter, node):
"""
+ unknown_emit callable for Html2CreoleEmitter
+
Use the <<html>> macro to mask unknown tags.
"""
attrs = node.get_attrs_as_string()
@@ -586,8 +591,11 @@ def use_html_macro(emitter, node):
return start_tag + content + end_tag
+
def escape_unknown_nodes(emitter, node):
"""
+ unknown_emit callable for Html2CreoleEmitter
+
All unknown tags should be escaped.
"""
attrs = node.get_attrs_as_string()
@@ -609,7 +617,14 @@ def escape_unknown_nodes(emitter, node):
return start_tag + content + end_tag
+
def transparent_unknown_nodes(emitter, node):
+ """
+ unknown_emit callable for Html2CreoleEmitter
+
+ Remove all unknown html tags and show only
+ their child nodes' content.
+ """
return emitter._emit_content(node)
@@ -866,7 +881,7 @@ class Html2CreoleEmitter(object):
content = emit_method(node)
else:
content = self._unknown_emit(self, node)
-
+
if not isinstance(content, unicode):
raise AssertionError(
"Method '%s' returns no unicode (returns: %r)" % (
diff --git a/tests/test_cross_compare.py b/tests/test_cross_compare.py
index fb495bc..a5b54ee 100644
--- a/tests/test_cross_compare.py
+++ b/tests/test_cross_compare.py
@@ -12,7 +12,7 @@
Note: This only works fine if there is no problematic whitespace handling.
In this case, we must test in test_creole2html.py or test_html2creole.py
- :copyleft: 2008-2009 by python-creole team, see AUTHORS for more details.
+ :copyleft: 2008-2011 by python-creole team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
@@ -21,9 +21,6 @@ import unittest
from tests.utils.base_unittest import BaseCreoleTest
-from creole.html2creole import RAISE_UNKNOWN_NODES, HTML_MACRO_UNKNOWN_NODES, \
- ESCAPE_UNKNOWN_NODES
-
class CrossCompareTests(BaseCreoleTest):
"""
@@ -135,6 +132,7 @@ class CrossCompareTests(BaseCreoleTest):
def test_pre_contains_braces(self):
self.assertCreole(r"""
=== Closing braces in nowiki:
+
{{{
if (x != NULL) {
for (i = 0; i < size; i++) {
@@ -144,6 +142,7 @@ class CrossCompareTests(BaseCreoleTest):
}}}
""", """
<h3>Closing braces in nowiki:</h3>
+
<pre>
if (x != NULL) {
for (i = 0; i &lt; size; i++) {
@@ -217,21 +216,35 @@ class CrossCompareTests(BaseCreoleTest):
def test_headlines(self):
self.assertCreole(r"""
= Level 1 (largest)
+
== Level 2
+
=== Level 3
+
==== Level 4
+
===== Level 5
+
====== Level 6
+
=== **not** \\ //parsed//
+
No == headline == or?
""", r"""
<h1>Level 1 (largest)</h1>
+
<h2>Level 2</h2>
+
<h3>Level 3</h3>
+
<h4>Level 4</h4>
+
<h5>Level 5</h5>
+
<h6>Level 6</h6>
+
<h3>**not** \\ //parsed//</h3>
+
<p>No == headline == or?</p>
""")
diff --git a/tests/test_html2creole.py b/tests/test_html2creole.py
index 3705e40..dfa02f1 100644
--- a/tests/test_html2creole.py
+++ b/tests/test_html2creole.py
@@ -56,6 +56,8 @@ class TestHtml2CreoleMarkup(BaseCreoleTest):
<i>italic</i></p>
""")
+ #--------------------------------------------------------------------------
+
def test_raise_unknown_node(self):
"""
Test creole.html2creole.raise_unknown_node callable:
@@ -67,6 +69,25 @@ class TestHtml2CreoleMarkup(BaseCreoleTest):
unknown_emit=raise_unknown_node
)
+ def test_use_html_macro(self):
+ """
+ Test creole.html2creole.use_html_macro callable:
+ Use the <<html>> macro to mask unknown tags.
+ """
+ self.assertCreole(r"""
+ 111 <<html>><unknown><</html>>foo<<html>></unknown><</html>> 222
+ 333<<html>><unknown foo1="bar1" foo2="bar2"><</html>>foobar<<html>></unknown><</html>>444
+
+ 555<<html>><unknown /><</html>>666
+ """, """
+ <p>111 <unknown>foo</unknown> 222<br />
+ 333<unknown foo1="bar1" foo2="bar2">foobar</unknown>444</p>
+
+ <p>555<unknown />666</p>
+ """,
+ unknown_emit=use_html_macro
+ )
+
def test_escape_unknown_nodes(self):
"""
Test creole.html2creole.escape_unknown_nodes callable:
@@ -85,7 +106,7 @@ class TestHtml2CreoleMarkup(BaseCreoleTest):
""",
unknown_emit=escape_unknown_nodes
)
-
+
def test_transparent_unknown_nodes(self):
"""
Test creole.html2creole.transparent_unknown_nodes callable:
@@ -96,7 +117,7 @@ class TestHtml2CreoleMarkup(BaseCreoleTest):
//baz//, **quux**
""", """
<form class="foo" id="bar"><label><em>baz</em></label>, <strong>quux</strong></form>
- """, unknown_emit = transparent_unknown_nodes)
+ """, unknown_emit=transparent_unknown_nodes)
def test_transparent_unknown_nodes_block_elements(self):
"""
@@ -111,8 +132,10 @@ class TestHtml2CreoleMarkup(BaseCreoleTest):
""", """
<div><em>baz</em>,</div> <fieldset><strong>quux</strong></fieldset>
<span>spam, </span><label>ham, </label>and eggs
- """, unknown_emit = transparent_unknown_nodes)
-
+ """, unknown_emit=transparent_unknown_nodes)
+
+ #--------------------------------------------------------------------------
+
def test_entities(self):
"""
Test html entities.