module PlayTurbo where import Numeric (showFFloat) import Turbo import TurboDef -- Run a Turbo program (using your runTurbo), save the SVG path commands in an -- SVG file. You can load the SVG file in a web browser to see the drawing. -- The drawing space shown is 400x300, origin at centre. -- -- Example: svg "mysquare.svg" square svg :: FilePath -> Stmt -> IO () svg filename stmt = writeFile filename (prologue ++ path epilogue) where prologue = "\n\ \\n\ \\n\ \\n" epilogue = "\n" cmds = runTurbo stmt path = ("\n" ++) (map cmdToSVG cmds) cmdToSVG (MoveTo x y) = ("m " ++) . showsCoord x y cmdToSVG (LineTo x y) = ("l " ++) . showsCoord x y showsCoord x y = showFFloat (Just 0) x . (" " ++) . showFFloat (Just 0) y . (" " ++) square = Seq [ Forward (RLit 50) , Turn (RLit 90) , Forward (RLit 50) , PenDown , For "i" (RLit 0) (RLit 3) [ Turn (RLit 90) , Forward (RLit 100) ] ] pentagon = Seq [ Forward (RLit 50) , Turn (RLit 126) , PenDown , For "i" (RLit 0) (RLit 4) [ Forward (RLit 58.78) , Turn (RLit 72) ] ] spiral = Seq [ PenDown , "s" := RLit 12 , For "i" (RLit 0) (RLit 60) [ Forward (RVar "s") , "s" := RVar "s" :*: RLit 0.99 , Turn (RVar "i" :*: RLit 0.8) ] ]