Fixed / overloading when enabling true division.
[tx] / rxpcompat.py
1 # -*- coding:utf-8 -*-
2
3 # RXP Compat
4 # Copyright (C) 2005  Frédéric Jolliton <frederic@jolliton.com>
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20 from nodes import Document, Element, Attribute, Text
21
22 def isNodeTuple( node ) :
23
24         return isinstance( node , tuple ) and 3 <= len( node ) <= 4
25
26 def nodeIsRaw( node ) :
27
28         return isNodeTuple( node ) \
29                 and node[ 0 ] is None \
30                 and isinstance( node[ 2 ] , basestring )
31
32 def nodeIsElement( node ) :
33
34         return isNodeTuple( node ) \
35                 and node[ 0 ] is not None
36
37 def nodeIsText( node ) :
38
39         return isinstance( node , basestring )
40
41 def nodeIsDocument( node ) :
42
43         return isNodeTuple( node ) \
44                 and node[ 0 ] is None \
45                 and isinstance( node[ 2 ] , list )
46
47 def fromRxp( tree ) :
48
49         if nodeIsRaw( tree ) :
50                 raise 'Not supported' # FIXME: Support Text with CDATA/PCDATA ?
51         elif nodeIsText( tree ) :
52                 return Text( tree )
53         elif nodeIsDocument( tree ) :
54                 return Document( map( fromRxp , tree[ 2 ] or [] ) )
55         elif nodeIsElement( tree ) :
56                 return Element( tree[ 0 ] ,
57                                                 [ Attribute( k , v ) for k , v in ( tree[ 1 ] or {} ).items() ] ,
58                                                 map( fromRxp , tree[ 2 ] or [] ) )
59         else :
60                 raise 'Unexpected case'
61
62 # Local Variables:
63 # tab-width: 4
64 # python-indent: 4
65 # End: