Package pygccxml :: Package parser :: Module etree_scanner

Source Code for Module pygccxml.parser.etree_scanner

 1  # Copyright 2004-2008 Roman Yakovenko. 
 2  # Distributed under the Boost Software License, Version 1.0. (See 
 3  # accompanying file LICENSE_1_0.txt or copy at 
 4  # http://www.boost.org/LICENSE_1_0.txt) 
 5   
 6  import scanner 
 7  import xml.etree.cElementTree as ElementTree 
 8   
9 -class etree_saxifier_t(object):
10 - def __init__(self, etree, handler):
11 self.__root_elem = etree.getroot() 12 self.__handler = handler
13
14 - def saxify(self):
15 self.__handler.startDocument() 16 self.__recursive_saxify( self.__root_elem ) 17 self.__handler.endDocument()
18
19 - def __recursive_saxify(self, element ):
20 self.__handler.startElement( element.tag, element.attrib ) 21 map( self.__recursive_saxify, element ) 22 self.__handler.endElement( element.tag )
23
24 -class etree_scanner_t( scanner.scanner_t ):
25 - def __init__(self, gccxml_file, decl_factory, *args ):
26 scanner.scanner_t.__init__( self, gccxml_file, decl_factory, *args )
27
28 - def read( self ):
29 tree = ElementTree.parse( self.gccxml_file ) 30 saxifier = etree_saxifier_t( tree, self ) 31 saxifier.saxify()
32
33 -class ietree_scanner_t( scanner.scanner_t ):
34 - def __init__(self, gccxml_file, decl_factory, *args ):
35 scanner.scanner_t.__init__( self, gccxml_file, decl_factory, *args )
36
37 - def read( self ):
38 context = ElementTree.iterparse(self.gccxml_file, events=("start", "end")) 39 for event, elem in context: 40 if event == 'start': 41 self.startElement( elem.tag, elem.attrib ) 42 else: 43 self.endElement( elem.tag ) 44 elem.clear() 45 self.endDocument()
46 47 etree_scanner_t = ietree_scanner_t 48