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)