]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.data/scl/Data/XML.scl
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.data / scl / Data / XML.scl
diff --git a/bundles/org.simantics.scl.data/scl/Data/XML.scl b/bundles/org.simantics.scl.data/scl/Data/XML.scl
new file mode 100644 (file)
index 0000000..05fef9c
--- /dev/null
@@ -0,0 +1,128 @@
+import "OSGi"\r
+\r
+importJava "org.jdom2.Document" where\r
+    data Document\r
+    \r
+    @JavaName "<init>"\r
+    createDocument :: Element -> <Proc> Document\r
+    \r
+    @JavaName getRootElement\r
+    rootElementOf :: Document -> <Proc> Element\r
+    \r
+    @JavaName setRootElement\r
+    setRootElement :: Document -> Element -> <Proc> ()\r
+    \r
+importJava "org.jdom2.Element" where\r
+    data Element\r
+    \r
+    @JavaName "<init>"\r
+    createElement :: String -> <Proc> Element\r
+    \r
+    @JavaName getName\r
+    nameOf :: Element -> <Proc> String\r
+    \r
+    @JavaName getText\r
+    textOf :: Element -> <Proc> String\r
+    \r
+    @JavaName getParentElement\r
+    parentOf :: Element -> <Proc> Maybe Element\r
+    \r
+    @JavaName getChildren\r
+    childrenWithNameOf :: Element -> String -> <Proc> [Element]\r
+    \r
+    @JavaName getChildren\r
+    childrenOf :: Element -> <Proc> [Element]\r
+    \r
+    @JavaName getChild\r
+    childWithNameOf :: Element -> String -> <Proc> Maybe Element\r
+    \r
+    @JavaName getAttributeValue\r
+    attributeOf :: Element -> String -> <Proc> Maybe String\r
+    \r
+    @JavaName getAttributes\r
+    attributesOf :: Element -> <Proc> [Attribute]\r
+    \r
+    @JavaName addContent\r
+    addChild :: Element -> Element -> <Proc> ()\r
+    \r
+    setName :: Element -> String -> <Proc> ()\r
+    \r
+    setText :: Element -> String -> <Proc> ()\r
+    \r
+    setAttribute :: Element -> String -> String -> <Proc> ()\r
+    \r
+    @JavaName equals\r
+    equalsElement :: Element -> Element -> Boolean\r
+\r
+instance Eq Element where\r
+    (==) = equalsElement\r
+\r
+importJava "org.jdom2.Attribute" where\r
+    data Attribute\r
+    \r
+    @JavaName getValue\r
+    valueOfAttribute :: Attribute -> <Proc> String\r
+    \r
+    @JavaName getName\r
+    nameOfAttribute :: Attribute -> <Proc> String\r
+\r
+Element ?parentElement ?childName ?childElement :-\r
+    @ffb 1.0\r
+    ?childName = nameOf ?childElement\r
+    Optional ?parentElement (parentOf ?childElement)\r
+        \r
+    @bbf 10.0\r
+    ?childElement <- childrenWithNameOf ?parentElement ?childName\r
+\r
+    @bff 10.0\r
+    ?childElement <- childrenOf ?parentElement\r
+    ?childName = nameOf ?childElement\r
+    \r
+    @enforce\r
+    Execute (addNamedChild ?parentElement ?childName ?childElement)\r
+    \r
+Attribute ?element ?attributeName ?attributeValue :-\r
+    @bbf 0.95\r
+    Optional ?attributeValue (attributeOf ?element ?attributeName)\r
+\r
+    @bff 4.0\r
+    ?attribute <- attributesOf ?element\r
+    ?attributeName = nameOfAttribute ?attribute\r
+    ?attributeValue = valueOfAttribute ?attribute\r
+\r
+    @enforce\r
+    Execute do\r
+        setAttribute ?element ?attributeName ?attributeValue\r
+\r
+TextContent ?element ?textContent :-\r
+    @bf 1\r
+    ?textContent = textOf ?element\r
+    \r
+    @enforce\r
+    Execute do\r
+        setText ?element ?textContent\r
+\r
+XPathElement ?parentElement ?xpathExpression ?childElement :-\r
+    @bbf 10\r
+    ?childElement <- elementsByXPath ?parentElement ?xpathExpression\r
+\r
+importJava "org.simantics.scl.data.xml.JDomHelper" where\r
+    parseString :: String -> <Proc> Document\r
+    parseFile :: String -> <Proc> Document\r
+    outputString :: Document -> <Proc> String\r
+    \r
+    elementsByXPath :: Element -> String -> <Proc> [Element]\r
+    addNamedChild :: Element -> String -> Element -> <Proc> ()\r
+    setNamespace :: Document -> String -> <Proc> ()\r
+    setElementNamespace :: Element -> String -> <Proc> ()\r
+    clearNamespace :: Document -> <Proc> ()\r
+    clearElementNamespace :: Element -> <Proc> ()\r
+    sortChildrenWith :: (Element -> Element -> <e> Integer) -> Element -> <Proc,e> () \r
+    \r
+    parseStringWithSchemaFile :: String -> String -> <Proc> Document\r
+    //parseStringWithSchemaURL  :: URL    -> String -> <Proc> Document\r
+    parseFileWithSchemaFile   :: String -> String -> <Proc> Document\r
+    //parseFileWithSchemaURL    :: URL    -> String -> <Proc> Document\r
+\r
+sortChildrenBy :: Ord a => (Element -> <e> a) -> Element -> <Proc,e> ()\r
+sortChildrenBy f el = sortChildrenWith (\x y -> compare (f x) (f y)) el 
\ No newline at end of file