remarks-0.1.13: src/Export/MD.hs
module Export.MD (mdRemarks) where
import Ast
import Export.Generic
import Text.PrettyPrint
import Data.List (intersperse)
mdRemarks :: [Judgement] -> String
mdRemarks = render . vcat . intersperse (text "") . map (formatJudgement 1)
formatJudgement :: Int -> Judgement -> Doc
formatJudgement depth (j @ (Bonus (_, _, _))) =
(text $ replicate depth '#') <+> text "Bonus" <> colon <+> text "+" <>
lookupTotal j
formatJudgement depth (j @ (Judgement (_, _, comments, judgements))) =
formatHeader depth j $+$
(nest 2 $ vcat $ map formatComment comments) $+$
text "" $+$
(vcat $ map (formatJudgement (depth + 1)) judgements)
formatHeader :: Int -> Judgement -> Doc
formatHeader depth j =
(text $ replicate depth '#') <+> lookupTitle j <> colon <> space <>
lookupTotal j <> text "/" <> lookupMaxPoints j
formatComment :: Comment -> Doc
formatComment (Comment (mood, commentParts)) =
text "*" <+> formatMood mood <+> (vcat $ map formatCommentPart commentParts)
formatMood :: Mood -> Doc
formatMood Positive = text "(+)"
formatMood Negative = text "(-)"
formatMood Neutral = text ""
formatMood Impartial = text "(?)"
formatMood Warning = text "(!)"
formatCommentPart :: CommentPart -> Doc
formatCommentPart (CommentStr string) = text string
formatCommentPart (CommentCmt comment) = nest 2 $ formatComment comment