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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from xml.dom.minicompat import *
  5. well_known_implementations = {
  6.     'minidom': 'xml.dom.minidom',
  7.     '4DOM': 'xml.dom.DOMImplementation' }
  8. registered = { }
  9.  
  10. def registerDOMImplementation(name, factory):
  11.     registered[name] = factory
  12.  
  13.  
  14. def _good_enough(dom, features):
  15.     for f, v in features:
  16.         if not dom.hasFeature(f, v):
  17.             return 0
  18.     
  19.     return 1
  20.  
  21.  
  22. def getDOMImplementation(name = None, features = ()):
  23.     import os
  24.     creator = None
  25.     mod = well_known_implementations.get(name)
  26.     if mod:
  27.         mod = __import__(mod, { }, { }, [
  28.             'getDOMImplementation'])
  29.         return mod.getDOMImplementation()
  30.     if name:
  31.         return registered[name]()
  32.     if os.environ.has_key('PYTHON_DOM'):
  33.         return getDOMImplementation(name = os.environ['PYTHON_DOM'])
  34.     for creator in registered.values():
  35.         dom = creator()
  36.         if _good_enough(dom, features):
  37.             return dom
  38.     
  39.     for creator in well_known_implementations.keys():
  40.         
  41.         try:
  42.             dom = getDOMImplementation(name = creator)
  43.         except StandardError:
  44.             _good_enough(dom, features)
  45.             _good_enough(dom, features)
  46.             mod if isinstance(features, StringTypes) else name
  47.             continue
  48.         except:
  49.             _good_enough(dom, features)
  50.  
  51.         if _good_enough(dom, features):
  52.             return dom
  53.     
  54.     raise ImportError, 'no suitable DOM implementation found'
  55.  
  56.  
  57. def _parse_feature_string(s):
  58.     features = []
  59.     parts = s.split()
  60.     i = 0
  61.     length = len(parts)
  62.     while i < length:
  63.         feature = parts[i]
  64.         if feature[0] in '0123456789':
  65.             raise ValueError, 'bad feature name: %r' % (feature,)
  66.         feature[0] in '0123456789'
  67.         i = i + 1
  68.         version = None
  69.         if i < length:
  70.             v = parts[i]
  71.             if v[0] in '0123456789':
  72.                 i = i + 1
  73.                 version = v
  74.             
  75.         
  76.         features.append((feature, version))
  77.     return tuple(features)
  78.  
  79.