-- | Parsers.hs -- Chans parsers. module Parsers ( parsePage ) where import Config import Parsers.Post --- import Parsers.Wakaba import Parsers.Dobrochan import Parsers.Nowai --- import Control.OldException import Data.List parsers = [ ("wakaba_thread", wakabaThread) , ("wakaba_board", wakabaBoard) , ("dobrochan_thread", dobrochanThread) , ("dobrochan_board", dobrochanBoard) , ("nowai_thread", nowaiThread) , ("nowai_board", nowaiBoard) ] -- | Function what find parser and return new msgs. parsePage :: Chan -> Integer -> String -> IO (Maybe (Integer, String)) parsePage chan lastPost body = case lookup (cengine chan) parsers of -- find parser, let's parse it Just parser -> do let ps = parser lastPost body len <- try (evaluate $ length ps) case len of -- err Left _ -> return Nothing -- no new posts Right 0 -> return Nothing _ -> do -- test for errors err <- try (evaluate $ snd $ last ps) return $ case err of Left _ -> Nothing Right _ -> Just (fst $ last ps ,intercalate "\n\n" $ map (showPost chan) ps) -- no parser for such engine _ -> return Nothing