module Csound.Dynamic.Render( renderCsd ) where import qualified Text.PrettyPrint.Leijen as P import Csound.Dynamic.Render.Instr import Csound.Dynamic.Render.Pretty import Csound.Dynamic.Types renderCsd :: Csd -> String renderCsd a = show $ ppCsdFile (renderFlags $ csdFlags a) (renderOrc $ csdOrc a) (renderSco $ csdSco a) (csdPlugins a) renderFlags :: Flags -> Doc renderFlags = P.pretty renderOrc :: Orc -> Doc renderOrc a = vcatSep $ headExpr : instrExprs where headExpr = renderInstrBody (orcHead a) instrExprs = fmap renderInstr (orcInstruments a) renderSco :: Sco -> Doc renderSco a = vcatSep [ P.vcat $ fmap (uncurry ppGen) $ scoGens a , maybe P.empty ppTotalDur $ scoTotalDur a , P.vcat $ fmap (uncurry ppNotes) $ scoNotes a ]