[Lxml-checkins] r40876 - in lxml/trunk/src/lxml: . tests
scoder at codespeak.net
scoder at codespeak.net
Wed Mar 21 09:48:19 CET 2007
Author: scoder
Date: Wed Mar 21 09:48:17 2007
New Revision: 40876
Modified:
lxml/trunk/src/lxml/etree.pyx
lxml/trunk/src/lxml/tests/test_etree.py
lxml/trunk/src/lxml/tree.pxd
Log:
'sourceline' property on Elements
Modified: lxml/trunk/src/lxml/etree.pyx
==============================================================================
--- lxml/trunk/src/lxml/etree.pyx (original)
+++ lxml/trunk/src/lxml/etree.pyx Wed Mar 21 09:48:17 2007
@@ -673,6 +673,24 @@
return None
# not in ElementTree, read-only
+ property sourceline:
+ """Original line number as found by the parser or None if unknown.
+ """
+ def __get__(self):
+ cdef long line
+ line = tree.xmlGetLineNo(self._c_node)
+ if line > 0:
+ return line
+ else:
+ return None
+
+ def __set__(self, line):
+ if line < 0:
+ self._c_node.line = 0
+ else:
+ self._c_node.line = line
+
+ # not in ElementTree, read-only
property nsmap:
"""Namespace prefix->URI mapping known in the context of this Element.
"""
Modified: lxml/trunk/src/lxml/tests/test_etree.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_etree.py (original)
+++ lxml/trunk/src/lxml/tests/test_etree.py Wed Mar 21 09:48:17 2007
@@ -1119,6 +1119,37 @@
["tail0", "tail1", "tail2", "TAIL0", "TAIL1", "TAIL2"],
[ el.tail for el in root ])
+ def test_sourceline_XML(self):
+ XML = self.etree.XML
+ root = XML('''<?xml version="1.0"?>
+ <root><test>
+
+ <bla/></test>
+ </root>
+ ''')
+
+ self.assertEquals(
+ [2, 2, 4],
+ [ el.sourceline for el in root.getiterator() ])
+
+ def test_sourceline_parse(self):
+ parse = self.etree.parse
+ tree = parse(fileInTestDir('test_xinclude.xml'))
+
+ self.assertEquals(
+ [1, 2, 3],
+ [ el.sourceline for el in tree.getiterator() ])
+
+ def test_sourceline_element(self):
+ Element = self.etree.Element
+ SubElement = self.etree.SubElement
+ el = Element("test")
+ self.assertEquals(None, el.sourceline)
+
+ child = SubElement(el, "test")
+ self.assertEquals(None, el.sourceline)
+ self.assertEquals(None, child.sourceline)
+
def test_docinfo_public(self):
etree = self.etree
xml_header = '<?xml version="1.0" encoding="ascii"?>'
Modified: lxml/trunk/src/lxml/tree.pxd
==============================================================================
--- lxml/trunk/src/lxml/tree.pxd (original)
+++ lxml/trunk/src/lxml/tree.pxd Wed Mar 21 09:48:17 2007
@@ -97,6 +97,7 @@
xmlAttr* properties
xmlNs* ns
xmlNs* nsDef
+ unsigned short line
ctypedef struct xmlDtd:
char* ExternalID
@@ -198,6 +199,7 @@
cdef xmlNs* xmlSearchNs(xmlDoc* doc, xmlNode* node, char* prefix)
cdef xmlNs* xmlSearchNsByHref(xmlDoc* doc, xmlNode* node, char* href)
cdef int xmlIsBlankNode(xmlNode* node)
+ cdef long xmlGetLineNo(xmlNode* node)
cdef void xmlElemDump(FILE* f, xmlDoc* doc, xmlNode* cur)
cdef void xmlNodeDumpOutput(xmlOutputBuffer* buf,
xmlDoc* doc, xmlNode* cur, int level,
More information about the lxml-checkins
mailing list