module Data.Classify.Printer
( ppElement
, applyMarkup
) where
import Data.Classify.DataTypes
import Data.Classify.Parser
import Data.Maybe
import Data.List
import Data.Char
buffering :: String -> Int -> String
buffering s len = replicate l '0'++s
where l = max 0 (lenlength s)
ppElement :: String
-> Element
-> String
ppElement format element
= applyMarkup markup layout
where layout = elementLayout element
markup = generateMarkup format
elementLayout :: Element -> [MarkupLayout]
elementLayout (s@Series {})
= [Replace 'S' (name s),
Replace 'E' (title s),
Replace 'l' (map toLower $ lastname s),
Function 's' (buffering (show $ season (version s))),
Function 'e' (buffering (show $ episode (version s)))]
applyMarkup :: [MarkupStyle] -> [MarkupLayout] -> String
applyMarkup [] _ = ""
applyMarkup (Literate c:xs) l = c:applyMarkup xs l
applyMarkup (Symbol c:xs) l = s ++ applyMarkup xs l
where s = fromMaybe "" findReplacement
findReplacement = case find findReplace l of
Nothing -> Nothing
Just (Replace _ s) -> Just s
Just (Function _ f) -> Just (f 0)
where findReplace (Replace a _) = a==c
findReplace (Function a _) = a==c
applyMarkup (Numeric c n:xs) l =numeric ++ applyMarkup xs l
where numeric = fromMaybe "" findNumeric
findNumeric = case find findFunction l of
Nothing -> Nothing
Just (Function _ f) -> Just (f n)
where findFunction (Function a _) = a==c
findFunction _ = False