packages feed

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 ()