import Test.HUnit
import Text.Regex (matchRegex, mkRegex)
import Text.XML.HaXml
+import Text.XML.HaXml.Posn (noPos)
import StringUtils (listify)
import Twitter.User
-- |Given some XML content, create a 'Status' from it.
-status_from_content :: Content -> (Maybe Status)
+status_from_content :: Content i -> (Maybe Status)
status_from_content content =
if (length status_ids) == 0
catMaybes maybe_status
where
(Document _ _ root _) = xmlParse xml_file_name xml_data
- root_elem = CElem root
+ root_elem = CElem root noPos
status_element = (single_status root_elem)
maybe_status = map status_from_content status_element
catMaybes maybe_statuses
where
(Document _ _ root _) = xmlParse xml_file_name xml_data
- root_elem = CElem root
+ root_elem = CElem root noPos
status_elements = (all_statuses root_elem)
maybe_statuses = map status_from_content status_elements
-- |Returns the 'CharData' contained within the given 'Content', or
-- 'Nothing' if no acceptable CharData was found. It will parse either
-- a 'CString' ('String') or 'CRef' (XML entity reference).
-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 :: Content i -> (Maybe CharData)
+get_char_data (CString _ cd _) = Just cd
+get_char_data (CRef ref _) = Just (verbatim ref) -- Entities.
get_char_data _ = Nothing
-- 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 :: CFilter i
single_status = (tag "status")
-- |A 'CFilter' returning all <status> tags within <statuses>.
-all_statuses :: CFilter
+all_statuses :: CFilter i
all_statuses = (tag "statuses" /> tag "status")
-- |Finds the text of the <id> element contained within some other
-- content. Called unique_id here because status_id is used elsewhere.
-unique_id :: CFilter
+unique_id :: CFilter i
unique_id = keep /> (tag "id") /> txt
-- |Finds the text of the <created_at> element contained within some
-- other element.
-status_created_at :: CFilter
+status_created_at :: CFilter i
status_created_at = keep /> (tag "created_at") /> txt
-- |Finds the text of the <text> element contained within some
-- other element.
-status_text :: CFilter
+status_text :: CFilter i
status_text = keep /> (tag "text") /> txt
-- |Finds the XML of the <user> element contained within some other
-- element.
-status_user :: CFilter
+status_user :: CFilter i
status_user = keep /> (tag "user")
-- |Finds the text of the <screen_name> element contained within some
-- other element.
-user_screen_name :: CFilter
+user_screen_name :: CFilter i
user_screen_name = keep /> (tag "screen_name") /> txt
-- |A wrapper around the 'read' function which returns either Nothing