module DataFlow.PlantUML.Renderer (
renderPlantUML
) where
import Text.Printf
import DataFlow.PrettyRenderer
import DataFlow.PlantUML
class Renderable t where
render :: t -> Renderer ()
instance Renderable Stmt where
render (SkinParam name value) = do
write "skinparam "
write name
write " "
writeln value
render (Box name stmts) = do
writeln $ printf "box \"%s\"" name
withIndent $ render stmts
writeln "end box"
render (Participant id' name) =
writeln $ printf "participant \"%s\" as %s" name id'
render (Database id' name) =
writeln $ printf "database \"%s\" as %s" name id'
render (Entity id' name) =
writeln $ printf "entity \"%s\" as %s" name id'
render (Edge i1 i2 description) =
writeln $ printf "%s -> %s : %s" i1 i2 description
instance Renderable StmtList where
render = mapM_ render
instance Renderable Diagram where
render (SequenceDiagram stmts) = do
writeln "@startuml"
render stmts
writeln "@enduml"
renderPlantUML :: Diagram -> String
renderPlantUML = renderWithIndent . render