+++ /dev/null
-(* $Id$
- * ----------------------------------------------------------------------
- *)
-
-open Markup_types
-open Markup_dtd
-open Markup_document
-
-type config =
- { warner : collect_warnings;
- errors_with_line_numbers : bool;
- processing_instructions_inline : bool;
- virtual_root : bool;
- debugging_mode : bool;
- }
-
-
-type source =
- Entity of ((dtd -> Pxp_entity.entity) * Markup_reader.resolver)
- | Channel of in_channel
- | File of string
- | Latin1 of string
- | ExtID of (ext_id * Markup_reader.resolver)
-
-type 'ext domspec =
- { map : (node_type, 'ext node) Hashtbl.t;
- default_element : 'ext node;
- }
-
-
-class default_ext =
- object(self)
- val mutable node = (None : ('a extension node as 'a) option)
- method clone = {< >}
- method node =
- match node with
- None ->
- assert false
- | Some n -> n
- method set_node n =
- node <- Some n
- end
-;;
-
-
-let default_extension = new default_ext;;
-
-let default_config =
- { warner = new collect_warnings;
- errors_with_line_numbers = true;
- processing_instructions_inline = false;
- virtual_root = false;
- debugging_mode = false;
- }
-
-
-let default_dom =
- let d = Hashtbl.create 2 in
- Hashtbl.add d T_data (new data_impl default_extension "");
- { map = d;
- default_element = new element_impl default_extension
- }
-;;
-
-
-let pxp_config cfg =
- { Pxp_yacc.default_config with
- Pxp_yacc.warner = (cfg.warner :> Pxp_types.collect_warnings);
- Pxp_yacc.errors_with_line_numbers = cfg.errors_with_line_numbers;
- Pxp_yacc.enable_pinstr_nodes = cfg.processing_instructions_inline;
- Pxp_yacc.enable_super_root_node = cfg.virtual_root;
- Pxp_yacc.encoding = `Enc_iso88591;
- Pxp_yacc.recognize_standalone_declaration = false;
- Pxp_yacc.debugging_mode = cfg.debugging_mode;
- }
-;;
-
-
-class pxp_resolver r =
- object (self)
- val markup_resolver = r
-
- method init_rep_encoding enc =
- assert (enc = `Enc_iso88591 )
-
- method init_warner w =
- ()
-
- method rep_encoding = `Enc_iso88591
-
- method open_in xid =
- markup_resolver # open_in xid
-
- method close_in =
- markup_resolver # close_in
-
- method close_all =
- markup_resolver # close_in
-
- method change_encoding enc =
- markup_resolver # change_encoding enc
-
- method clone =
- ( {< markup_resolver = markup_resolver # clone >}
- : #Pxp_reader.resolver :> Pxp_reader.resolver )
- end
-;;
-
-
-let pxp_source src =
- match src with
- Entity (mkent, res) -> Pxp_yacc.Entity(mkent, new pxp_resolver res)
- | ExtID (id, res) -> Pxp_yacc.ExtID(id, new pxp_resolver res)
- | Channel ch -> Pxp_yacc.from_channel
- ~system_encoding:`Enc_iso88591 ch
- | File f -> Pxp_yacc.from_file
- ~system_encoding:`Enc_iso88591 f
- | Latin1 s -> Pxp_yacc.from_string ~fixenc:`Enc_iso88591 s
-;;
-
-
-let pxp_dom dom =
- let dex =
- try Hashtbl.find dom.map T_data
- with Not_found -> assert false
- in
- let eex = dom.default_element in
- let m = Hashtbl.create 100 in
- Hashtbl.iter
- (fun nt ex ->
- match nt with
- T_element name when name <> "-vr" && name <> "-pi" ->
- let pxp_ex = ex # pxp_node in
- Hashtbl.add m name pxp_ex
- | _ -> ()
- )
- dom.map;
- let srex =
- try
- Some ((Hashtbl.find dom.map (T_element "-vr")) # pxp_node)
- with
- Not_found -> None
- in
- let piex =
- try
- Some ((Hashtbl.find dom.map (T_element "-pi")) # pxp_node)
- with
- Not_found -> None
- in
- Pxp_document.make_spec_from_mapping
- ?super_root_exemplar:srex
- ?default_pinstr_exemplar:piex
- ~data_exemplar:(dex # pxp_node)
- ~default_element_exemplar:(eex # pxp_node)
- ~element_mapping:m
- ()
-;;
-
-
-let markup_document w index doc =
- let mdoc = new document w in
- mdoc # init_xml_version (doc # xml_version);
- mdoc # init_xml_standalone (doc # xml_standalone);
- let r = doc # root # extension in
- r # set_index index;
- mdoc # init_root (r # markup_node);
- List.iter
- (fun piname ->
- let l = doc # pinstr piname in
- List.iter
- (fun pi -> mdoc # add_pinstr pi)
- l)
- (doc # pinstr_names);
- mdoc
-;;
-
-
-
-let parse_dtd_entity cfg src =
- Pxp_yacc.parse_dtd_entity
- (pxp_config cfg)
- (pxp_source src)
-;;
-
-
-let parse_document_entity cfg src dom =
- let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
- markup_document
- cfg.warner
- index
- (Pxp_yacc.parse_document_entity
- ~id_index:index
- (pxp_config cfg)
- (pxp_source src)
- (pxp_dom dom))
-;;
-
-
-let parse_content_entity cfg src dtd dom =
- let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
- let n =
- (Pxp_yacc.parse_content_entity
- ~id_index:index
- (pxp_config cfg)
- (pxp_source src)
- dtd
- (pxp_dom dom)) # extension in
- n # set_index index;
- n # markup_node
-;;
-
-
-let parse_wf_entity cfg src dom =
- let index = (new Pxp_yacc.hash_index :> 'ext Pxp_yacc.index) in
- (* Restriction: index is not filled! *)
- markup_document
- cfg.warner
- index
- (Pxp_yacc.parse_wfdocument_entity
- (pxp_config cfg)
- (pxp_source src)
- (pxp_dom dom))
-;;
-
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1 2000/11/17 09:57:30 lpadovan
- * Initial revision
- *
- * Revision 1.4 2000/08/18 20:19:16 gerd
- * Updates in the emulation because of PXP changes.
- *
- * Revision 1.3 2000/07/14 21:35:35 gerd
- * Updated because of the simplification of Pxp_types.collect_warnings.
- *
- * Revision 1.2 2000/07/08 17:40:50 gerd
- * Updated the simulation.
- *
- * Revision 1.1 2000/05/29 23:43:51 gerd
- * Initial compatibility revision.
- *
- *)