changeset 234:39c424b80edd trunk

* Minor simplification of XPath engine. * Updated change log.
author cmlenz
date Tue, 12 Sep 2006 14:08:36 +0000
parents 88ec2b306296
children 41107d1ba1c8
files ChangeLog genshi/path.py genshi/tests/path.py
diffstat 3 files changed, 36 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@
 http://svn.edgewall.org/repos/genshi/tags/0.3.0/
 (?, from branches/stable/0.3.x)
 
+ * The project name was changed from "Markup" to "Genshi". See UPGRADE.txt
+   for upgrade instructions.
  * Expression evaluation now differentiates between undefined variables and
    variables that are defined but set to `None`. This also means that local
    variables can override built-ins even if the local variable are set to
@@ -34,6 +36,8 @@
    to multiple elements (ticket #49).
  * Using namespace prefixes in XPath expressions is now supported.
  * Expressions now correctly handle slices (ticket #51).
+ * A simple text-based template language is now included for generating
+   plain text output (ticket #47).
 
 
 Version 0.2
--- a/genshi/path.py
+++ b/genshi/path.py
@@ -559,7 +559,7 @@
     def __call__(self, kind, data, pos, namespaces, variables):
         if kind is START:
             if self.principal_type is ATTRIBUTE and self.name in data[1]:
-                return TEXT, data[1].get(self.name), pos
+                return data[1].get(self.name)
             else:
                 return data[0].localname == self.name
     def __repr__(self):
@@ -578,7 +578,7 @@
         qname = QName('%s}%s' % (namespaces.get(self.prefix), self.name))
         if kind is START:
             if self.principal_type is ATTRIBUTE and qname in data[1]:
-                return TEXT, data[1].get(qname), pos
+                return data[1].get(qname)
             else:
                 return data[0] == qname
     def __repr__(self):
@@ -731,7 +731,7 @@
     __slots__ = []
     def __call__(self, kind, data, pos, namespaces, variables):
         if kind is START:
-            return TEXT, data[0].localname, pos
+            return data[0].localname
     def __repr__(self):
         return 'local-name()'
 
@@ -742,7 +742,7 @@
     __slots__ = []
     def __call__(self, kind, data, pos, namespaces, variables):
         if kind is START:
-            return TEXT, data[0], pos
+            return data[0]
     def __repr__(self):
         return 'name()'
 
@@ -753,7 +753,7 @@
     __slots__ = []
     def __call__(self, kind, data, pos, namespaces, variables):
         if kind is START:
-            return TEXT, data[0].namespace, pos
+            return data[0].namespace
     def __repr__(self):
         return 'namespace-uri()'
 
--- a/genshi/tests/path.py
+++ b/genshi/tests/path.py
@@ -90,7 +90,7 @@
 
         path = Path('./@foo')
         self.assertEqual('<Path "self::node()/attribute::foo">', repr(path))
-        self.assertEqual('bar', Path('./@foo').select(xml).render())
+        self.assertEqual('bar', path.select(xml).render())
 
     def test_1step_text(self):
         xml = XML('<root>Hey</root>')
@@ -181,8 +181,7 @@
     def test_3step(self):
         xml = XML('<root><foo><bar/></foo></root>')
         path = Path('foo/*')
-        self.assertEqual('<Path "child::foo/child::*">',
-                         repr(path))
+        self.assertEqual('<Path "child::foo/child::*">', repr(path))
         self.assertEqual('<bar/>', path.select(xml).render())
 
     def test_3step_complex(self):
@@ -233,57 +232,57 @@
     def test_simple_union(self):
         xml = XML('<root>Oh <foo>my</foo></root>')
         path = Path('*|text()')
-        self.assertEqual('<Path "child::*|child::text()">',
-                         repr(path))
+        self.assertEqual('<Path "child::*|child::text()">', repr(path))
         self.assertEqual('Oh <foo>my</foo>', path.select(xml).render())
 
     def test_predicate_name(self):
         xml = XML('<root><foo/><bar/></root>')
-        self.assertEqual('<foo/>',
-                         Path('*[name()="foo"]').select(xml).render())
+        path = Path('*[name()="foo"]')
+        self.assertEqual('<foo/>', path.select(xml).render())
 
     def test_predicate_localname(self):
         xml = XML('<root><foo xmlns="NS"/><bar/></root>')
-        self.assertEqual('<foo xmlns="NS"/>',
-                         Path('*[local-name()="foo"]').select(xml).render())
+        path = Path('*[local-name()="foo"]')
+        self.assertEqual('<foo xmlns="NS"/>', path.select(xml).render())
 
     def test_predicate_namespace(self):
         xml = XML('<root><foo xmlns="NS"/><bar/></root>')
-        self.assertEqual('<foo xmlns="NS"/>',
-                         Path('*[namespace-uri()="NS"]').select(xml).render())
+        path = Path('*[namespace-uri()="NS"]')
+        self.assertEqual('<foo xmlns="NS"/>', path.select(xml).render())
 
     def test_predicate_not_name(self):
         xml = XML('<root><foo/><bar/></root>')
-        self.assertEqual('<bar/>',
-                         Path('*[not(name()="foo")]').select(xml).render())
+        path = Path('*[not(name()="foo")]')
+        self.assertEqual('<bar/>', path.select(xml).render())
 
     def test_predicate_attr(self):
         xml = XML('<root><item/><item important="very"/></root>')
-        self.assertEqual('<item important="very"/>',
-                         Path('item[@important]').select(xml).render())
-        self.assertEqual('<item important="very"/>',
-                         Path('item[@important="very"]').select(xml).render())
+        path = Path('item[@important]')
+        self.assertEqual('<item important="very"/>', path.select(xml).render())
+        path = Path('item[@important="very"]')
+        self.assertEqual('<item important="very"/>', path.select(xml).render())
 
     def test_predicate_attr_equality(self):
         xml = XML('<root><item/><item important="notso"/></root>')
-        self.assertEqual('',
-                         Path('item[@important="very"]').select(xml).render())
+        path = Path('item[@important="very"]')
+        self.assertEqual('', path.select(xml).render())
+        path = Path('item[@important!="very"]')
         self.assertEqual('<item/><item important="notso"/>',
-                         Path('item[@important!="very"]').select(xml).render())
+                         path.select(xml).render())
 
     def test_predicate_attr_greater_than(self):
         xml = XML('<root><item priority="3"/></root>')
-        self.assertEqual('',
-                         Path('item[@priority>3]').select(xml).render())
-        self.assertEqual('<item priority="3"/>',
-                         Path('item[@priority>2]').select(xml).render())
+        path = Path('item[@priority>3]')
+        self.assertEqual('', path.select(xml).render())
+        path = Path('item[@priority>2]')
+        self.assertEqual('<item priority="3"/>', path.select(xml).render())
 
     def test_predicate_attr_less_than(self):
         xml = XML('<root><item priority="3"/></root>')
-        self.assertEqual('',
-                         Path('item[@priority<3]').select(xml).render())
-        self.assertEqual('<item priority="3"/>',
-                         Path('item[@priority<4]').select(xml).render())
+        path = Path('item[@priority<3]')
+        self.assertEqual('', path.select(xml).render())
+        path = Path('item[@priority<4]')
+        self.assertEqual('<item priority="3"/>', path.select(xml).render())
 
     def test_predicate_attr_and(self):
         xml = XML('<root><item/><item important="very"/></root>')
Copyright (C) 2012-2017 Edgewall Software