--- /dev/null
+#include "xml-tree-builder.hpp"
+#include "common_stub.hpp"
+
+using namespace SXSI;
+
+static xml_tree_builder*& OBJ_VAL(value v)
+{
+ return Obj_val<xml_tree_builder*>(v);
+}
+
+extern "C" value caml_xml_tree_builder_create(value unit)
+{
+ CAMLparam1(unit);
+ CAMLlocal1(result);
+ result = sxsi_alloc_custom<xml_tree_builder*>();
+ OBJ_VAL(result) = new xml_tree_builder();
+
+ CAMLreturn(result);
+}
+
+extern "C" value caml_xml_tree_builder_open_document(value vbuilder,
+ value vsrate,
+ value vdtc,
+ value vidxtype)
+{
+ CAMLparam4(vbuilder, vsrate, vdtc, vidxtype);
+ int sample_rate = Int_val(vsrate);
+ bool disable_tc = Bool_val(vdtc);
+ TextCollectionBuilder::index_type_t idx_type;
+ switch (Int_val(vidxtype)){
+ case 0:
+ idx_type = TextCollectionBuilder::index_type_default;
+ break;
+ case 1:
+ idx_type = TextCollectionBuilder::index_type_swcsa;
+ break;
+ case 2:
+ idx_type = TextCollectionBuilder::index_type_rlcsa;
+ break;
+ default:
+ sxsi_raise_msg("Invalid Index Type");
+ };
+
+ OBJ_VAL(vbuilder)->open_document(disable_tc,
+ sample_rate,
+ idx_type);
+ CAMLreturn (Val_unit);
+}
+
+extern "C" value caml_xml_tree_builder_close_document(value vbuilder)
+{
+ CAMLparam1(vbuilder);
+ CAMLlocal1(result);
+ xml_tree *tree = OBJ_VAL(vbuilder)->close_document();
+ if (tree == NULL)
+ sxsi_raise_msg("caml_close_document");
+ result = sxsi_alloc_custom<xml_tree*>();
+ Obj_val<xml_tree*>(result) = tree;
+ CAMLreturn (result);
+}
+
+extern "C" value caml_xml_tree_builder_open_tag(value vbuilder, value vtag)
+{
+ CAMLparam2(vbuilder, vtag);
+ const char * tag = String_val(vtag);
+ OBJ_VAL(vbuilder)->open_tag(std::string(tag));
+ CAMLreturn (Val_unit);
+}
+
+extern "C" value caml_xml_tree_builder_close_tag(value vbuilder, value vtag)
+{
+ CAMLparam2(vbuilder, vtag);
+ const char * tag = String_val(vtag);
+ OBJ_VAL(vbuilder)->close_tag(std::string(tag));
+ CAMLreturn (Val_unit);
+}
+
+extern "C" value caml_xml_tree_builder_text(value vbuilder, value vtext)
+{
+ CAMLparam2(vbuilder, vtext);
+ const char * text = String_val(vtext);
+ OBJ_VAL(vbuilder)->text(std::string(text));
+ CAMLreturn (Val_unit);
+}