From: Michael Orlitzky Date: Thu, 31 May 2012 16:47:50 +0000 (-0400) Subject: Unescape ampersands twice in the status text. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=5454ac1d1f84984a7ce85cb1be340d18a86a5cfb;p=dead%2Fhalcyon.git Unescape ampersands twice in the status text. --- diff --git a/src/Twitter/Xml.hs b/src/Twitter/Xml.hs index 0e23cb7..871d216 100644 --- a/src/Twitter/Xml.hs +++ b/src/Twitter/Xml.hs @@ -79,15 +79,20 @@ entity_from_codepoint codepoint = Just num -> [(chr num)] --- |A list of tuples whose first entry is a regular expression --- matching XML entities, and whose second entry is the ASCII --- character represented by that entity. +-- | A list of tuples whose first entry is a regular expression +-- matching XML entities, and whose second entry is the ASCII +-- character represented by that entity. +-- +-- For some reason, ampersands are escaped twice in the status +-- text. Rather than unescape everything twice, we just stick "amp" +-- in the list again. xml_entities :: [(String, String)] xml_entities = [("[lr]dquo", "\""), ("quot", "\""), ("[mn]dash", "-"), ("nbsp", " "), ("amp", "&"), + ("amp", "&"), ("lt", "<"), ("gt", ">"), ("hellip", "…")] @@ -130,7 +135,7 @@ unescape_recursive replacements target = xml_tests :: [Test] -xml_tests = [ test_replace_entities ] +xml_tests = [ test_replace_entities, test_double_unescape ] test_replace_entities :: Test @@ -139,3 +144,11 @@ test_replace_entities = where actual_text = (replace_entities ""The moon is gay……" said <insert the current president of the United States of America>. “It’s OK—–he’s not a real doctor.”") expected_text = "\"The moon is gay……\" said . \"It’s OK--he’s not a real doctor.\"" + + +test_double_unescape :: Test +test_double_unescape = + TestCase $ assertEqual "The status text is unescaped twice." expected_text actual_text + where + actual_text = (replace_entities "As a kid, I'd pull a girl's hair to let her know I liked her, but now that I'm older &amp; wiser I simply hit her with my car.") + expected_text = "As a kid, I'd pull a girl's hair to let her know I liked her, but now that I'm older & wiser I simply hit her with my car."