Mercurial > genshi > mirror
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>')