} //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);
}