X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Ftest.ml;h=42dc011990d5a86b0baa17775f04e095f36ab000;hp=8b69fd82a32850957390a973c6a0709622b915c4;hb=a43a51c51314468a47a36904c2b904f5a9a14bca;hpb=5a9c2accf1b54294cd71b90ca5cca5f69ac8e76e diff --git a/src/test.ml b/src/test.ml index 8b69fd8..42dc011 100644 --- a/src/test.ml +++ b/src/test.ml @@ -14,35 +14,63 @@ (***********************************************************************) -(** use: xml_file "XPath querie" - or : xml_file -f XPath_querie_file - only the first line of XPath_querie_file is read +(** use: [./test xml_file "XPath querie"] + or : [./test xml_file -f XPath_querie_file] + only the first line of [XPath_querie_file] is read *) +open Format -let doc = +let doc () = let fd = open_in Sys.argv.(1) in let d = Tree.load_xml_file fd in - close_in fd; d - + close_in fd; + fprintf err_formatter "Parse Tree OK ! "; + d -let query = +let query () = let arg2 = Sys.argv.(2) in if arg2 = "-f" then let fq = open_in Sys.argv.(3) in - let q = XPath.parse_file fq in - close_in fq; q - else XPath.parse_string arg2 + let q = XPath.parse_file fq in + close_in fq; + fprintf err_formatter "Parse query OK ! "; + q + else let q = XPath.parse_string arg2 in + fprintf err_formatter "Parse query OK ! "; + q -open Format +let build_asta query = + let asta = Compil.trans query in + fprintf err_formatter "Compil OK ! "; + asta -let asta = Compil.trad query +let compute_run doc query = + let run = Run.compute doc query in + fprintf err_formatter "Run OK ! \n"; + run let () = - fprintf err_formatter "Query: %a\n%!" XPath.Ast.print query; - fprintf err_formatter "Asta: %a\n%!" Asta.print asta; - fprintf err_formatter "Document:\n%!"; + let doc = doc () in + let query = query () in + let asta = build_asta query in + let run = compute_run doc asta in + let selected_nodes = Run.selected_nodes doc asta in + Format.pp_set_margin err_formatter 80; + fprintf err_formatter "@[##### Query #####@. %a@]\n" + XPath.Ast.print query; + output_string stderr "\n##### Doc #####\n"; Tree.print_xml stderr doc (Tree.root doc); + output_string stderr "\n"; + Asta.print err_formatter asta; + Run.print err_formatter run; + output_string stderr "\n # Doc with positions: \n"; + Tree.print_xml_preorder stderr doc (Tree.root doc); + let rec print_selec fmt l = match l with + | [x] -> fprintf fmt "%s" (string_of_int x) + | x :: tl -> fprintf fmt "%s" ((string_of_int x)^"; ");print_selec fmt tl + | [] -> fprintf fmt "%s" "ø" in + fprintf err_formatter "@.@. # Selected nodes: {%a}@." + print_selec selected_nodes; exit 0 -