diff --git a/dsc b/dsc index 27df3c0..2b12e81 100755 Binary files a/dsc and b/dsc differ diff --git a/imperative-shell/converter.sml b/imperative-shell/converter.sml index 4e529c6..5aaa4bc 100644 --- a/imperative-shell/converter.sml +++ b/imperative-shell/converter.sml @@ -1,5 +1,35 @@ structure Converter = struct + fun loadIO (io, str) = + case TextIO.inputLine io of + SOME line => loadIO (io, str ^ line) + | NONE => str + + fun convertFile fullPath = + let + val io = TextIO.openIn fullPath + val text = loadIO (io, "") + val () = TextIO.closeIn io + in + case Parser.parse text of + SOME (canvasWidth, canvasHeight, tree) => + let + val maxSide = Int.max (canvasWidth, canvasHeight) + val squares = LayerTree.flatten (maxSide, tree) + val exportString = + CollisionTree.toExportString (squares, canvasWidth, canvasHeight) + + val pathWithoutExtension = String.substring + (fullPath, 0, String.size fullPath - 4) + val outputFilePath = pathWithoutExtension ^ ".sml" + val io = TextIO.openOut outputFilePath + val () = TextIO.output (io, exportString) + in + TextIO.closeOut io + end + | NONE => (* we have an error, but ignore *) () + end + fun endsWithDsc str = if String.size str >= 4 then let @@ -11,14 +41,11 @@ struct else false - fun convertFile path = () - fun loop (dir, rootPath) = case OS.FileSys.readDir dir of SOME path => let val folderPath = String.concat [rootPath, "/", path] - val () = print (folderPath ^ "\n") val () = if OS.FileSys.isDir folderPath then (* handle recursive directory *)