remarks-0.1.8: src/Export/CSV.hs
module Export.CSV (csvRemarks) where
import Ast
import Export.Generic
import Text.PrettyPrint
import Data.List (intersperse)
csvRemarks :: String -> [String] -> [Judgement] -> Doc
csvRemarks delimiter propertyList judgements =
(hcat $ (intersperse (text delimiter)) $ map text propertyList) $$
(vcat $ map (formatJudgement delimiter propertyList) judgements)
formatJudgement :: String -> [String] -> Judgement -> Doc
formatJudgement delimiter properties judgement =
hcat $ (intersperse (text delimiter)) $ map (mapfun judgement) properties
where
mapfun = flip lookupProperty
lookupProperty :: String -> Judgement -> Doc
lookupProperty name (Judgement (_, properties, _, _)) =
case (lookup name (map (\(Property (n,v)) -> (n,v)) properties)) of
Nothing -> error "Property not found."
Just(value) -> formatPropertyExp value
formatPropertyExp :: PropertyExp -> Doc
formatPropertyExp (Lookup (index, name)) =
brackets $ int index <> text "." <> text name
formatPropertyExp (Value value) = text value
formatPropertyExp (Num value) = pointsDoc value