diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2002-10-26 14:50:45 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2002-10-26 14:50:45 (GMT) |
commit | 74b51ac1e5fb76250251a66d8d326baaaf1f1cee (patch) | |
tree | 2fd291bbcbfd19c22193e1102b204989ecebeab6 /Lib | |
parent | edb6bff67fdb72718ed656d39ac71317ada37a04 (diff) | |
download | cpython-74b51ac1e5fb76250251a66d8d326baaaf1f1cee.zip cpython-74b51ac1e5fb76250251a66d8d326baaaf1f1cee.tar.gz cpython-74b51ac1e5fb76250251a66d8d326baaaf1f1cee.tar.bz2 |
Patch #613256: Add nescape method to xml.sax.saxutils.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/output/test_sax | 5 | ||||
-rw-r--r-- | Lib/test/test_sax.py | 14 | ||||
-rw-r--r-- | Lib/xml/sax/saxutils.py | 32 |
3 files changed, 43 insertions, 8 deletions
diff --git a/Lib/test/output/test_sax b/Lib/test/output/test_sax index 8aa5a77..cfb56cb 100644 --- a/Lib/test/output/test_sax +++ b/Lib/test/output/test_sax @@ -29,6 +29,9 @@ Passed test_nsattrs_wattr Passed test_quoteattr_basic Passed test_single_double_quoteattr Passed test_single_quoteattr +Passed test_unescape_all +Passed test_unescape_basic +Passed test_unescape_extra Passed test_xmlgen_attr_escape Passed test_xmlgen_basic Passed test_xmlgen_content @@ -36,4 +39,4 @@ Passed test_xmlgen_content_escape Passed test_xmlgen_ignorable Passed test_xmlgen_ns Passed test_xmlgen_pi -37 tests, 0 failures +40 tests, 0 failures diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py index 1200329..3c5b11a 100644 --- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -8,7 +8,8 @@ try: except SAXReaderNotAvailable: # don't try to test this module if we cannot create a parser raise ImportError("no XML parsers available") -from xml.sax.saxutils import XMLGenerator, escape, quoteattr, XMLFilterBase +from xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \ + XMLFilterBase from xml.sax.expatreader import create_parser from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl from cStringIO import StringIO @@ -70,6 +71,17 @@ def test_escape_all(): def test_escape_extra(): return escape("Hei på deg", {"å" : "å"}) == "Hei på deg" +# ===== unescape + +def test_unescape_basic(): + return unescape("Donald Duck & Co") == "Donald Duck & Co" + +def test_unescape_all(): + return unescape("<Donald Duck & Co>") == "<Donald Duck & Co>" + +def test_unescape_extra(): + return unescape("Hei på deg", {"å" : "å"}) == "Hei på deg" + # ===== quoteattr def test_quoteattr_basic(): 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. |