let indent t = H([],[skip;t]);;
-(* MathML prefix *)
+(* BoxML prefix *)
let prefix = "b";;
-let rec print_box =
- let module X = Xml in
- function
- Text (attr,s) -> X.xml_nempty ~prefix "text" attr (X.xml_cdata s)
- | Space attr -> X.xml_empty ~prefix "space" attr
- | Ink attr -> X.xml_empty ~prefix "ink" attr
- | H (attr,l) ->
- X.xml_nempty ~prefix "h" attr
- [< (List.fold_right (fun x i -> [< (print_box x) ; i >]) l [<>])
- >]
- | V (attr,l) ->
- X.xml_nempty ~prefix "v" attr
- [< (List.fold_right (fun x i -> [< (print_box x) ; i >]) l [<>])
- >]
- | Object (attr,m) ->
- X.xml_nempty ~prefix "obj" attr [< Mpresentation.print_mpres m >]
- | Action (attr,l) ->
- X.xml_nempty ~prefix "action" attr
- [< (List.fold_right (fun x i -> [< (print_box x) ; i >]) l [<>])
- >]
+let box2xml ~obj2xml box =
+ let rec aux =
+ let module X = Xml in
+ function
+ Text (attr,s) -> X.xml_nempty ~prefix "text" attr (X.xml_cdata s)
+ | Space attr -> X.xml_empty ~prefix "space" attr
+ | Ink attr -> X.xml_empty ~prefix "ink" attr
+ | H (attr,l) ->
+ X.xml_nempty ~prefix "h" attr
+ [< (List.fold_right (fun x i -> [< (aux x) ; i >]) l [<>])
+ >]
+ | V (attr,l) ->
+ X.xml_nempty ~prefix "v" attr
+ [< (List.fold_right (fun x i -> [< (aux x) ; i >]) l [<>])
+ >]
+ | Object (attr,m) ->
+ X.xml_nempty ~prefix "obj" attr [< obj2xml m >]
+ | Action (attr,l) ->
+ X.xml_nempty ~prefix "action" attr
+ [< (List.fold_right (fun x i -> [< (aux x) ; i >]) l [<>]) >]
+ in
+ aux box
;;
-let document_of_box pres =
+let rec map f = function
+ | (Text _) as box -> box
+ | (Space _) as box -> box
+ | (Ink _) as box -> box
+ | H (attr, l) -> H (attr, List.map (map f) l)
+ | V (attr, l) -> V (attr, List.map (map f) l)
+ | Action (attr, l) -> Action (attr, List.map (map f) l)
+ | Object (attr, obj) -> Object (attr, f obj)
+;;
+
+(*
+let document_of_box ~obj2xml pres =
[< Xml.xml_cdata "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" ;
Xml.xml_cdata "\n";
Xml.xml_nempty ~prefix "box"
Some "xmlns","xlink","http://www.w3.org/1999/xlink"
] (print_box pres)
>]
+*)
let b_h a b = H(a,b)
let b_v a b = V(a,b)