From f8de21c51bed1823a1a906562705ce84d9c4603d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 26 Jan 2003 09:04:35 +0000 Subject: [PATCH] Merge with PyXML 1.3: Add support for the DOM Level 3 (draft) DOMImplementationSource interface to the xml.dom and xml.dom.minidom modules. Note API issue: the draft spec says to return null when there is no suitable implementation, while the Python getDOMImplementation() function raises ImportError (minor). --- Lib/xml/dom/domreg.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Lib/xml/dom/domreg.py b/Lib/xml/dom/domreg.py index 14b87d6a998..0e6e615d35e 100644 --- a/Lib/xml/dom/domreg.py +++ b/Lib/xml/dom/domreg.py @@ -2,6 +2,8 @@ directly. Instead, the functions getDOMImplementation and registerDOMImplementation should be imported from xml.dom.""" +from xml.dom.minicompat import * # isinstance, StringTypes + # This is a list of well-known implementations. Well-known names # should be published by posting to xml-sig@python.org, and are # subsequently recorded in this file. @@ -60,6 +62,8 @@ def getDOMImplementation(name = None, features = ()): # User did not specify a name, try implementations in arbitrary # order, returning the one that has the required features + if isinstance(features, StringTypes): + features = _parse_feature_string(features) for creator in registered.values(): dom = creator() if _good_enough(dom, features): @@ -74,3 +78,22 @@ def getDOMImplementation(name = None, features = ()): return dom raise ImportError,"no suitable DOM implementation found" + +def _parse_feature_string(s): + features = [] + parts = s.split() + i = 0 + length = len(parts) + while i < length: + feature = parts[i] + if feature[0] in "0123456789": + raise ValueError, "bad feature name: " + `feature` + i = i + 1 + version = None + if i < length: + v = parts[i] + if v[0] in "0123456789": + i = i + 1 + version = v + features.append((feature, version)) + return tuple(features)