]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mlminidom/ominidom.ml
This commit was manufactured by cvs2svn to create branch 'start'.
[helm.git] / helm / DEVEL / mlminidom / ominidom.ml
diff --git a/helm/DEVEL/mlminidom/ominidom.ml b/helm/DEVEL/mlminidom/ominidom.ml
new file mode 100644 (file)
index 0000000..343dfa3
--- /dev/null
@@ -0,0 +1,176 @@
+(* Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
+ *
+ * This file is part of mlminidom, the Ocaml binding for minidom.
+ * 
+ * mlminidom is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * mlminidom is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with mlminidom; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * 
+ * For details, send a mail to the author.
+ *)
+
+exception Node_has_no_parent;;
+exception Node_has_no_sibling of string;;
+exception Node_has_no_children;;
+exception Node_has_no_attributes;;
+exception Attribute_has_no_sibling of string;;
+exception Attribute_has_no_parent;;
+exception Undefined_entity;;
+
+let option_to_exception v e =
+  match v with
+    Some x -> x
+  | None   -> raise e
+;;
+
+class o_mDOMString (str: Minidom.mDOMString) =
+  object
+    method get_dom_string = str
+    method get_string = Minidom.string_of_mDOMString str
+  end;;
+  
+let o_mDOMString_of_string str =
+  new o_mDOMString (Minidom.mDOMString_of_string str)
+
+class o_mDOMEntity (ent : Minidom.mDOMEntity) =
+  object
+    method get_dom_entity = ent
+    method get_content =
+      new o_mDOMString (Minidom.entity_get_content ent)
+  end
+;;
+
+class o_mDOMDoc (doc : Minidom.mDOMDoc) =
+  object
+    method get_dom_doc = doc
+
+    method get_root_node =
+      new o_mDOMNode (Minidom.doc_get_root_node doc)
+    method add_entity (name : o_mDOMString) (value : o_mDOMString) =
+      new o_mDOMEntity
+        (Minidom.doc_add_entity doc
+         (name#get_dom_string) (value#get_dom_string)
+       )
+    method get_entity (name : o_mDOMString) =
+      match Minidom.doc_get_entity doc (name#get_dom_string) with
+      | Some x -> new o_mDOMEntity x
+      | None -> raise Undefined_entity
+    method get_predefined_entity (name : o_mDOMString) =
+      match Minidom.doc_get_predefined_entity doc (name#get_dom_string) with
+      | Some x -> new o_mDOMEntity x
+      | None -> raise Undefined_entity
+  end
+and o_mDOMNode (node : Minidom.mDOMNode) =
+  object
+    method get_dom_node = node
+
+    method is_text = Minidom.node_is_text node
+    method is_element = Minidom.node_is_element node
+    method is_blank = Minidom.node_is_blank node
+    method is_entity_ref = Minidom.node_is_entity_ref node
+
+    method get_type = Minidom.node_get_type node
+    method get_name = 
+      match Minidom.node_get_name node with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_ns_uri =
+      match Minidom.node_get_ns_uri node with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_attribute (name : o_mDOMString) =
+      match Minidom.node_get_attribute node (name#get_dom_string) with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_attribute_ns (name : o_mDOMString) (uri : o_mDOMString) =
+      match 
+        Minidom.node_get_attribute_ns node
+         (name#get_dom_string) (uri#get_dom_string)
+      with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_content =
+      match Minidom.node_get_content node with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_parent =
+      new o_mDOMNode
+       (option_to_exception (Minidom.node_get_parent node) Node_has_no_parent)
+    method get_prev_sibling =
+      new o_mDOMNode
+       (option_to_exception
+        (Minidom.node_get_prev_sibling node)
+        (Node_has_no_sibling "left")
+       )
+    method get_next_sibling =
+      new o_mDOMNode
+       (option_to_exception
+        (Minidom.node_get_next_sibling node)
+        (Node_has_no_sibling "right")
+       )
+    method get_first_child =
+      new o_mDOMNode
+       (option_to_exception
+        (Minidom.node_get_first_child node)
+        (Node_has_no_children)
+       )
+    method get_first_attribute =
+      new o_mDOMAttr
+       (option_to_exception
+         (Minidom.node_get_first_attribute node)
+         (Node_has_no_attributes)
+       )
+    method is_first = Minidom.node_is_first node
+    method is_last = Minidom.node_is_last node
+
+    method get_children =
+      List.map (function x -> new o_mDOMNode x) (Minidom.node_get_children node)
+    method get_attributes = List.map
+      (function x -> new o_mDOMAttr x) (Minidom.node_get_attributes node)
+  end
+and o_mDOMAttr (attr : Minidom.mDOMAttr) =
+  object
+    method get_dom_attr = attr
+
+    method get_name =
+      match Minidom.attr_get_name attr with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_ns_uri =
+      match Minidom.attr_get_ns_uri attr with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_value =
+      match Minidom.attr_get_value attr with
+      | Some x -> Some (new o_mDOMString x)
+      | None   -> None
+    method get_prev_sibling =
+      new o_mDOMAttr
+        (option_to_exception
+         (Minidom.attr_get_prev_sibling attr)
+         (Attribute_has_no_sibling "left")
+       )
+    method get_next_sibling =
+      new o_mDOMAttr
+        (option_to_exception
+         (Minidom.attr_get_next_sibling attr)
+         (Attribute_has_no_sibling "right")
+       )
+    method get_parent =
+      new o_mDOMNode
+        (option_to_exception
+         (Minidom.attr_get_parent attr) Attribute_has_no_parent
+       )
+  end
+;;
+