augur-2008.10.19: src/Parse.hs
module Parse where
import Types
import Config
import Storage
import Data.Classify.Rank
import Data.Classify.Parser
import Data.Classify.Printer
import Data.Classify.DataTypes
import Control.Monad
import qualified Data.Map as M
import Data.Map (Map)
parse :: Config -> String -> [String] -> IO [String]
parse cfg format eps
= do series <- listAllSeries
forM eps $ \ep -> case getElement (M.fromList [ (trunc name, name) | name <- series ]) ep of
Nothing -> return ep
Just elt -> do titles <- getTitles cfg (name elt)
case lookup (versionToIndex (version elt)) titles of
Nothing -> return $ ppElement format elt
Just txt -> return $ ppElement format elt{title = txt}
versionToIndex (Version season episode) = EpIdx season episode
versionToIndex (DateVersion y m d) = DateIdx y m d
getElement :: Map String String -> String -> Maybe Element
getElement set str
= let elts = run (parseElement set) str
in if null elts
then Nothing
else Just (selectBest elts)