]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Twitter/Xml.hs
Add the ability to twat a single status (as a debugging tool).
[dead/halcyon.git] / src / Twitter / Xml.hs
index a278081688b2542c59385f5dfff8361ea6a492af..1b1ea48e9015ce1732e6898d4dcbfdf7b98b3176 100644 (file)
@@ -2,7 +2,6 @@
 module Twitter.Xml
 where
 
-import Data.Maybe
 import Test.HUnit
 import Text.Regex (mkRegex, subRegex)
 import Text.XML.HaXml
@@ -16,6 +15,13 @@ get_char_data (CRef ref) = Just (verbatim ref) -- Entities.
 get_char_data _ = Nothing
 
 
+-- |A 'CFilter' returning all top-level <status> elements.
+-- The name is due to the fact that if we retrieve more than
+-- one status, they will be wrapped in a <statuses> tag, and
+-- thus not be top-level.
+single_status :: CFilter
+single_status = (tag "status")
+
 -- |A 'CFilter' returning all <status> tags within <statuses>.
 all_statuses :: CFilter
 all_statuses = (tag "statuses" /> tag "status")
@@ -51,13 +57,15 @@ user_screen_name = keep /> (tag "screen_name") /> txt
 -- character represented by that entity.
 xml_entities :: [(String, String)]
 xml_entities = [("[lr]dquo", "\""),
-                ("quot", "\""),
+                ("quot",     "\""),
                 ("[mn]dash", "-"),
                 ("nbsp",     " "),
                 ("#8217",    "'"),
                 ("amp",      "&"),
                 ("lt",       "<"),
-                ("gt",       ">")]
+                ("gt",       ">"),
+                ("#8230",    "..."),
+                ("hellip",   "...")]
 
 -- |Replace all of the XML entities in target.
 replace_entities :: String -> String
@@ -84,5 +92,5 @@ test_replace_entities :: Test
 test_replace_entities =
     TestCase $ assertEqual "All entities are replaced correctly." expected_text actual_text
     where
-      actual_text = (replace_entities "&quot;The moon is gay,&quot; said &lt;insert the current president of the United States of America&gt;. &ldquo;It&#8217;s OK&mdash;&ndash;he&#8217;s not a real doctor.&rdquo;")
-      expected_text = "\"The moon is gay,\" said <insert the current president of the United States of America>. \"It's OK--he's not a real doctor.\""
+      actual_text = (replace_entities "&quot;The moon is gay&#8230;&hellip;&quot; said &lt;insert the current president of the United States of America&gt;. &ldquo;It&#8217;s OK&mdash;&ndash;he&#8217;s not a real doctor.&rdquo;")
+      expected_text = "\"The moon is gay......\" said <insert the current president of the United States of America>. \"It's OK--he's not a real doctor.\""