module Twitter.Xml where import Data.Maybe import Text.Regex (mkRegex, subRegex) import Text.XML.HaXml get_char_data :: Content -> (Maybe CharData) get_char_data (CString _ cd) = Just cd get_char_data (CRef ref) = Just (verbatim ref) -- Entities. get_char_data _ = Nothing all_statuses :: CFilter all_statuses = (tag "statuses" /> tag "status") -- Called unique_id here because status_id is used elsewhere. unique_id :: CFilter unique_id = keep /> (tag "id") /> txt status_created_at :: CFilter status_created_at = keep /> (tag "created_at") /> txt status_text :: CFilter status_text = keep /> (tag "text") /> txt status_user :: CFilter status_user = keep /> (tag "user") user_screen_name :: CFilter user_screen_name = keep /> (tag "screen_name") /> txt xml_entities :: [(String, String)] xml_entities = [("[lr]dquo", "\""), ("[mn]dash", "-"), ("nbsp", " "), ("#8217", "'"), ("amp", "&"), ("lt", "<"), ("gt", ">")] replace_entities :: String -> String replace_entities target = unescape_recursive xml_entities target unescape_recursive :: [(String, String)] -> String -> String unescape_recursive [] target = target unescape_recursive replacements target = unescape_recursive (tail replacements) (subRegex (mkRegex from) target to) where replacement = (replacements !! 0) from = "&" ++ (fst replacement) ++ ";" to = (snd replacement)