folgerhs-0.3.0.1: app/Folgerhs/Presence.hs
module Folgerhs.Presence (presence) where
import Control.Monad
import Data.List
import Data.Bool
import Folgerhs.Stage as S
import Folgerhs.Parse (parse)
type Row = (Line, [String])
rows :: [Character] -> [StageEvent] -> [Row]
rows chs ses = [ (l, [ presence l ch | ch <- chs ]) | l <- S.lines ses ]
where presence l ch = if lineSpeaker l ses == ch
then "Speaker"
else bool "Absent" "Present" $
(elem ch $ lineStage l ses)
displayRow :: Row -> String
displayRow (l, ss) = l ++ "," ++ intercalate "," ss
displayHeader :: [Character] -> String
displayHeader chs = "Act.Scene.Line," ++ intercalate "," chs
presence :: FilePath -> Bool -> IO ()
presence f wu = do source <- readFile f
let scf = if wu then hasName else const True
ses = selectCharacters scf $ parse source
chs = characters ses
putStrLn $ displayHeader chs
mapM_ (putStrLn . displayRow) (rows chs ses)
return ()