diff options
Diffstat (limited to 'Lib/xml/sax')
-rw-r--r-- | Lib/xml/sax/saxutils.py | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py index 8a96be6..c369f98 100644 --- a/Lib/xml/sax/saxutils.py +++ b/Lib/xml/sax/saxutils.py @@ -12,20 +12,40 @@ try: except AttributeError: _StringTypes = [types.StringType] +def __dict_replace(s, d): + """Replace substrings of a string using a dictionary.""" + for key, value in d.items(): + s = s.replace(key, value) + return s def escape(data, entities={}): """Escape &, <, and > in a string of data. - + You can escape other strings of data by passing a dictionary as the optional entities parameter. The keys and values must all be strings; each key will be replaced with its corresponding value. """ + + # must do ampersand first data = data.replace("&", "&") - data = data.replace("<", "<") - data = data.replace(">", ">") - for chars, entity in entities.items(): - data = data.replace(chars, entity) - return data + data = __dict_replace(data, {"<" : "<", + ">" : ">", + }) + return __dict_replace(data, entities) + +def unescape(data, entities={}): + """Unescape &, <, and > in a string of data. + + You can unescape other strings of data by passing a dictionary as + the optional entities parameter. The keys and values must all be + strings; each key will be replaced with its corresponding value. + """ + data = __dict_replace(data, {"<" : "<", + ">" : ">", + }) + # must do ampersand last + data = data.replace("&", "&") + return __dict_replace(data, entities) def quoteattr(data, entities={}): """Escape and quote an attribute value. |