Clone nodes as needed. Added __cmp__ to Node. Removed dead function _getEncoder.
authorFrederic Jolliton <frederic@jolliton.com>
Sun, 11 Sep 2005 05:43:30 +0000 (05:43 +0000)
committerFrederic Jolliton <frederic@jolliton.com>
Sun, 11 Sep 2005 05:43:30 +0000 (05:43 +0000)
 * Nodes are cloned when inserted in a tree if they're already part of
   another tree.

 * Added __cmp__ operator, which compare nodes based on string values.

 * Removed dead function _getEncoder.
git-archimport-id: frederic@jolliton.com--2005-main/tx--main--0.1--patch-19

nodes.py

index 6cc7a90..7a0f103 100644 (file)
--- a/nodes.py
+++ b/nodes.py
@@ -56,6 +56,8 @@ def _combineAdjacentText( nodes ) :
        lastTextNode = None
        result = []
        for node in nodes :
+               if node.parent is not None :
+                       node = node.clone()
                if isinstance( node , Text ) :
                        if node.content != '' :
                                if lastTextNode is None :
@@ -81,15 +83,6 @@ def _chainNodes( nodes , parent ) :
                if i > 0 :
                        node._setPrev( nodes[ i - 1 ] )
 
-def _getEncoder( charset , errors = 'strict' ) :
-
-       '''Return a function translating text to charset 'charset' with error
-       handling set to 'errors'.'''
-
-       encoderFunction = codecs.getencoder( charset )
-       encoder = lambda s : encoderFunction( s , errors )[ 0 ]
-       return encoder
-
 def xmlQuoteText( s ) :
 
        '''Return string 's' with & and < characters translated to XML entity
@@ -293,6 +286,11 @@ class Node( object ) :
 
                raise NotImplementedError
 
+       def __cmp__( self , other ) :
+
+               assert isinstance( other , Node )
+               return cmp( self.dmStringValue() , other.dmStringValue() )
+
        def serialize( self , charset = 'utf8' , errors = 'strict' , file = None ) :
 
                if file is None :