packages feed

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)