/[svn]/runtime/load_xml.ml
ViewVC logotype

Diff of /runtime/load_xml.ml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 171 by abate, Tue Jul 10 17:09:08 2007 UTC revision 172 by abate, Tue Jul 10 17:12:31 2007 UTC
# Line 36  Line 36 
36        | Some x -> curr := x        | Some x -> curr := x
37        | None -> () in        | None -> () in
38    
39      let txt = Buffer.create 1024 in
40    
41    let rec parse_elt name att =    let rec parse_elt name att =
42      let att = List.map (fun (l,v) -> Types.LabelPool.mk l, string v nil) att in      let att = List.map (fun (l,v) -> Types.LabelPool.mk l, string v nil) att in
43      let att = SortedMap.from_list (fun _ _ -> assert false) att in      let att = SortedMap.from_list (fun _ _ -> assert false) att in
44      let child = parse_seq true in      let child = parse_seq () in
45    
46      let elt = Xml      let elt = Xml
47                  (Atom (Types.AtomPool.mk name),                  (Atom (Types.AtomPool.mk name),
# Line 51  Line 53 
53      elt      elt
54    
55    
56    and parse_seq dropws =    and dump_txt q =
57        let data = Buffer.contents txt in
58        Buffer.clear txt;
59        if (is_ws data) then q () else string data (q ())
60    
61      and parse_seq () =
62      match !curr with      match !curr with
63        | E_start_tag (name,att,_) ->        | E_start_tag (name,att,_) ->
64            get ();            get ();
65              dump_txt (fun () ->
66            let e1 = parse_elt name att in            let e1 = parse_elt name att in
67            let rest = parse_seq true in                        let rest = parse_seq () in
68            Pair (e1, rest)            Pair (e1, rest)
69                       )
70        | E_char_data data ->        | E_char_data data ->
71            get ();            get ();
72            if dropws && (is_ws data)            Buffer.add_string txt data;
73            then parse_seq true            parse_seq ()
           else string data (parse_seq false)  
74        | E_end_tag (_,_) ->        | E_end_tag (_,_) ->
75            nil            dump_txt (fun () -> nil)
76        | _ -> failwith "Expect start_tag, char_data, or end_tag"        | _ -> failwith "Expect start_tag, char_data, or end_tag"
77    
78    and parse_doc () =    and parse_doc () =

Legend:
Removed from v.171  
changed lines
  Added in v.172

CVS Admin">CVS Admin
ViewVC Help
Powered by ViewVC 1.1.5