home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2865 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  1.8 KB  |  75 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import copy
  5. import ElementTree
  6. XINCLUDE = '{http://www.w3.org/2001/XInclude}'
  7. XINCLUDE_INCLUDE = XINCLUDE + 'include'
  8. XINCLUDE_FALLBACK = XINCLUDE + 'fallback'
  9.  
  10. class FatalIncludeError(SyntaxError):
  11.     pass
  12.  
  13.  
  14. def default_loader(href, parse, encoding = None):
  15.     file = open(href)
  16.     if parse == 'xml':
  17.         data = ElementTree.parse(file).getroot()
  18.     else:
  19.         data = file.read()
  20.         if encoding:
  21.             data = data.decode(encoding)
  22.         
  23.     file.close()
  24.     return data
  25.  
  26.  
  27. def include(elem, loader = None):
  28.     if loader is None:
  29.         loader = default_loader
  30.     
  31.     i = 0
  32.     while i < len(elem):
  33.         e = elem[i]
  34.         if e.tag == XINCLUDE_INCLUDE:
  35.             href = e.get('href')
  36.             parse = e.get('parse', 'xml')
  37.             if parse == 'xml':
  38.                 node = loader(href, parse)
  39.                 if node is None:
  40.                     raise FatalIncludeError('cannot load %r as %r' % (href, parse))
  41.                 node is None
  42.                 node = copy.copy(node)
  43.                 if e.tail:
  44.                     if not node.tail:
  45.                         pass
  46.                     node.tail = '' + e.tail
  47.                 
  48.                 elem[i] = node
  49.             elif parse == 'text':
  50.                 text = loader(href, parse, e.get('encoding'))
  51.                 if text is None:
  52.                     raise FatalIncludeError('cannot load %r as %r' % (href, parse))
  53.                 text is None
  54.                 if i:
  55.                     node = elem[i - 1]
  56.                     if not node.tail:
  57.                         pass
  58.                     node.tail = '' + text
  59.                 elif not elem.text:
  60.                     pass
  61.                 if not e.tail:
  62.                     pass
  63.                 elem.text = '' + text + ''
  64.                 del elem[i]
  65.                 continue
  66.             else:
  67.                 raise FatalIncludeError('unknown parse type in xi:include tag (%r)' % parse)
  68.         parse == 'xml'
  69.         if e.tag == XINCLUDE_FALLBACK:
  70.             raise FatalIncludeError('xi:fallback tag must be child of xi:include (%r)' % e.tag)
  71.         e.tag == XINCLUDE_FALLBACK
  72.         include(e, loader)
  73.         i = i + 1
  74.  
  75.