]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/scl/Formatting.scl
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / Formatting.scl
diff --git a/bundles/org.simantics.scl.runtime/scl/Formatting.scl b/bundles/org.simantics.scl.runtime/scl/Formatting.scl
new file mode 100644 (file)
index 0000000..04c3860
--- /dev/null
@@ -0,0 +1,44 @@
+import "Prelude"\r
+import "Vector" as Vec\r
+\r
+@private\r
+importJava "java.lang.String" where\r
+    @JavaName format\r
+    format' :: String -> Vector Dynamic -> String\r
+\r
+"""\r
+> format formatString arguments\r
+Returns the format string where specific tags are replaced by argument values.\r
+See the documentation of java.lang.String.format for details.\r
+Examples:\r
+> > format "%.3f" 1.2345678\r
+> "1.235"\r
+> > format "%d %s %f" (3, "Hello world!", 5.6)\r
+> "3 Hello world! 5.600000"\r
+"""\r
+format :: FormatArgument a => String -> a -> String\r
+format formatString arguments = format' formatString (convertFormatArgumentToVector arguments)\r
+\r
+class FormatArgument a where\r
+    convertFormatArgumentToVector :: a -> Vector Dynamic\r
+\r
+instance FormatArgument Double where\r
+    convertFormatArgumentToVector = Vec.singletonVector . toDynamic\r
+instance FormatArgument Float where\r
+    convertFormatArgumentToVector = Vec.singletonVector . toDynamic\r
+instance FormatArgument Integer where\r
+    convertFormatArgumentToVector = Vec.singletonVector . toDynamic\r
+instance FormatArgument Long where\r
+    convertFormatArgumentToVector = Vec.singletonVector . toDynamic\r
+instance FormatArgument String where\r
+    convertFormatArgumentToVector = Vec.singletonVector . toDynamic\r
+instance FormatArgument (a,b) where\r
+    convertFormatArgumentToVector (a,b) = Vec.vector [toDynamic a, toDynamic b]\r
+instance FormatArgument (a,b,c) where\r
+    convertFormatArgumentToVector (a,b,c) = Vec.vector [toDynamic a, toDynamic b, toDynamic c]\r
+instance FormatArgument (a,b,c,d) where\r
+    convertFormatArgumentToVector (a,b,c,d) = Vec.vector [toDynamic a, toDynamic b, toDynamic c, toDynamic d]\r
+instance FormatArgument (a,b,c,d,e) where\r
+    convertFormatArgumentToVector (a,b,c,d,e) = Vec.vector [toDynamic a, toDynamic b, toDynamic c, toDynamic d, toDynamic e]\r
+instance FormatArgument (a,b,c,d,e,f) where\r
+    convertFormatArgumentToVector (a,b,c,d,e,f) = Vec.vector [toDynamic a, toDynamic b, toDynamic c, toDynamic d, toDynamic e, toDynamic f]
\ No newline at end of file