Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1try: 

2 str = unicode 

3except NameError: 

4 long = int 

5 

6from .tokenize import iter_xml 

7from .tokenize import iter_text 

8from .parser import ElementParser 

9from .namespaces import XML_NS 

10from .namespaces import XMLNS_NS 

11 

12 

13class ElementProgram(object): 

14 DEFAULT_NAMESPACES = { 

15 'xmlns': XMLNS_NS, 

16 'xml': XML_NS, 

17 } 

18 

19 tokenizers = { 

20 'xml': iter_xml, 

21 'text': iter_text, 

22 } 

23 

24 restricted_namespace = True 

25 

26 def __init__(self, source, mode="xml", filename=None, tokenizer=None): 

27 if tokenizer is None: 

28 tokenizer = self.tokenizers[mode] 

29 tokens = tokenizer(source, filename) 

30 parser = ElementParser(tokens, self.DEFAULT_NAMESPACES, self.restricted_namespace) 

31 

32 self.body = [] 

33 

34 for kind, args in parser: 

35 node = self.visit(kind, args) 

36 if node is not None: 

37 self.body.append(node) 

38 

39 def visit(self, kind, args): 

40 visitor = getattr(self, "visit_%s" % kind) 

41 return visitor(*args)