X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fnaive_tree.ml;h=6625be0cfe22e08e84e054998b5171c31fc0a691;hp=b7c0be641833b117a587a67f2364768eee5137d4;hb=9a127b83fbb1171ebd36e6f42780093412a5e91a;hpb=b00bff88c7902e828804c06b7f9dc55222fdc84e diff --git a/src/naive_tree.ml b/src/naive_tree.ml index b7c0be6..6625be0 100644 --- a/src/naive_tree.ml +++ b/src/naive_tree.ml @@ -13,10 +13,6 @@ (* *) (***********************************************************************) -(* - Time-stamp: -*) - type node = { tag : QName.t; preorder : int; @@ -208,20 +204,29 @@ struct let node = top ctx in node.next_sibling <- nil; consume_closing ctx node; - match ctx.stack with - [ root ] -> - root.next_sibling <- nil; - { root = root; - size = ctx.current_preorder - } - | _ -> raise (Expat.Expat_error Expat.UNCLOSED_TOKEN) + Expat.final psr; + let root = List.hd ctx.stack in + root.next_sibling <- nil; + { root = root; + size = ctx.current_preorder + } ) + let error e parser_ = + let msg = Printf.sprintf "%i.%i %s" + (Expat.get_current_line_number parser_) + (Expat.get_current_column_number parser_) + (Expat.xml_error_to_string e) + in + raise (Tree.Parse_error msg) let parse_string s = let parser_, finalize = create_parser () in - Expat.parse parser_ s; - finalize () + try + Expat.parse parser_ s; + finalize () + with + Expat.Expat_error e -> error e parser_ let parse_file fd = let buffer = String.create 4096 in @@ -231,7 +236,10 @@ struct if read != 0 then let () = Expat.parse_sub parser_ buffer 0 read in loop () - in loop (); finalize () + in try + loop (); finalize () + with + Expat.Expat_error e -> error e parser_ end