} //extern C
#include "XMLDocShredder.h"
+#include "XMLTree.h"
+#include "TextCollection/TextCollection.h"
+#include "Utils.h"
+
#define CAMLRAISECPP(e) (caml_failwith( ((e).what())))
-#define NOT_IMPLEMENTED (caml_failwith("Not Implemented!!!"))
+#define NOT_IMPLEMENTED(s) (caml_failwith(s))
+#define XMLTREE(x) ((XMLTree *)(x))
+#define TEXTCOLLECTION(x)
+#define TREENODEVAL(i) ((treeNode) (Int_val(i)))
extern "C" CAMLprim value caml_call_shredder_uri(value uri){
CAMLparam1(uri);
};
}
-extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){
- CAMLparam2(tree,id);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+extern "C" CAMLprim value caml_text_collection_get_text(value tc, value id){
+ CAMLparam2(tc,id);
+
+ const char* txt = (const char*) ((TextCollection*) tc)->GetText((DocID) Int_val(id));
+ CAMLreturn (caml_copy_string(txt));
}
+
extern "C" CAMLprim value caml_xml_tree_root(value tree){
CAMLparam1(tree);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLreturn (TREENODEVAL(XMLTREE(tree)->Root()));
+}
+extern "C" CAMLprim value caml_xml_tree_text_collection(value tree){
+ CAMLparam1(tree);
+ CAMLreturn((value) XMLTREE(tree)->GetTextCollection());
}
-extern "C" CAMLprim value caml_xml_tree_text_collection(value tree, value id){
- CAMLparam2(tree,id);
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){
+ CAMLparam2(tree,id);
+ CAMLlocal1(res);
+ DPRINT("BEFORE!!!");
+ DPRINT(XMLTREE(tree)->flag);
+ DPRINT("ID is " << Int_val(id));
+ res = Val_int (XMLTREE(tree)->FirstChild(TREENODEVAL(id)));
+ DPRINT("AFTER!!!" << Int_val(res));
+ CAMLreturn(res);
}
extern "C" CAMLprim value caml_xml_tree_next_sibling(value tree, value id){
CAMLparam2(tree,id);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLreturn(Val_int (XMLTREE(tree)->NextSibling(TREENODEVAL(id))));
}
-extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){
- CAMLparam2(tree,id);
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
-}
extern "C" CAMLprim value caml_xml_tree_prev_text(value tree, value id){
CAMLparam2(tree,id);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLlocal1(res);
+ res = Val_int((XMLTREE(tree)->PrevText(TREENODEVAL(id))));
+ cerr << "AFTER PREV TEXT" << Int_val(res);
+ CAMLreturn(res);
}
extern "C" CAMLprim value caml_xml_tree_next_text(value tree, value id){
CAMLparam2(tree,id);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLreturn(Val_int((XMLTREE(tree)->NextText(TREENODEVAL(id)))));
}
extern "C" CAMLprim value caml_xml_tree_my_text(value tree, value id){
CAMLparam2(tree,id);
-
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLreturn(Val_int((XMLTREE(tree)->MyText(TREENODEVAL(id)))));
}
extern "C" CAMLprim value caml_xml_tree_text_xml_id(value tree, value id){
CAMLparam2(tree,id);
- NOT_IMPLEMENTED;
+ NOT_IMPLEMENTED("caml_xml_tree_text_xml_id");
CAMLreturn (Val_unit);
}
extern "C" CAMLprim value caml_xml_tree_node_xml_id(value tree, value id){
CAMLparam2(tree,id);
- NOT_IMPLEMENTED;
+ NOT_IMPLEMENTED("caml_xml_tree_node_xml_id");
CAMLreturn (Val_unit);
}
extern "C" CAMLprim value caml_xml_tree_tag(value tree, value id){
CAMLparam2(tree,id);
+ const char* tag;
+ tag =(const char*) XMLTREE(tree)->GetTagName(XMLTREE(tree)->Tag(TREENODEVAL(id)));
- NOT_IMPLEMENTED;
- CAMLreturn (Val_unit);
+ CAMLreturn (caml_copy_string(tag));
}
extern "C" CAMLprim value caml_xml_tree_nullt(value unit){
CAMLparam1(unit);
- CAMLreturn (Val_int(-1));
-
+ CAMLreturn (NULLT);
}
;;
let total_time () = List.fold_left (+.) 0. !l;;
+let test filename query output =
+ Printf.eprintf "Parsing document : %!";
+ let v = time Tree.Binary.parse_xml_uri filename in
+ Tree.Binary.print_xml_fast stderr v
+
+
let main filename query output =
Printf.eprintf "Parsing document : %!";
let v = time Tree.Binary.parse_xml_uri filename in
MM(v,__LOCATION__);
a := Some (v);
a := None;
+ Tree.Binary.print_xml_fast stderr v;
Printf.eprintf "Parsing query : ";
let query = try
time
(prerr_endline ("usage : " ^ Sys.argv.(0) ^ " <document> \'query\'[ <output> ]");
exit 1)
;;
-main Sys.argv.(1) Sys.argv.(2) (if argc == 4 then Some Sys.argv.(3) else None) ;;
+
+
+test Sys.argv.(1) Sys.argv.(2) (if argc == 4 then Some Sys.argv.(3) else None) ;;