module Csound.Typed.Gui.Cabbage.CabbageLang(
Lang, Line(..), Property(..), Arg(..), ppCabbage
) where
import Text.PrettyPrint.Leijen
type Lang = [Line]
data Line = Line
{ lineDef :: String
, lineProperties :: [Property]
}
data Property = Property
{ propertyName :: String
, propertyArgs :: [Arg]
}
data Arg = StringArg String | FloatArg Float | IntArg Int | ColonArg Float Float
ppCabbage :: Lang -> Doc
ppCabbage xs = vcat $ fmap ppLine xs
ppLine :: Line -> Doc
ppLine (Line name props) = text name <+> hcat (punctuate comma (fmap ppProp props))
ppProp :: Property -> Doc
ppProp (Property name args) = text name <> tupled (fmap ppArg args)
ppArg :: Arg -> Doc
ppArg x = case x of
StringArg s -> dquotes (text s)
FloatArg a -> float a
IntArg a -> int a
ColonArg a b -> float a <> colon <> float b