X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fpxp%2Fpxp%2Fcompatibility%2Fmarkup_reader.mli;fp=helm%2FDEVEL%2Fpxp%2Fpxp%2Fcompatibility%2Fmarkup_reader.mli;h=8e5e2c8fc902daa4b21bdcbf80b309f0a9d749f9;hb=c03d2c1fdab8d228cb88aaba5ca0f556318bebc5;hp=0000000000000000000000000000000000000000;hpb=758057e85325f94cd88583feb1fdf6b038e35055;p=helm.git diff --git a/helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli b/helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli new file mode 100644 index 000000000..8e5e2c8fc --- /dev/null +++ b/helm/DEVEL/pxp/pxp/compatibility/markup_reader.mli @@ -0,0 +1,141 @@ +(* $Id$ + * ---------------------------------------------------------------------- + * Markup! The validating XML parser for Objective Caml. + * Copyright by Gerd Stolpmann. See LICENSE for details. + * + * THIS IS THE markup-0.2.10 COMPATIBLE INTERFACE TO markup_reader.mli. + * It corresponds to revision 1.3 of markup_reader.mli. + *) + +open Markup_types;; + + +(* The class type resolver is the official type of all "resolvers". + * Resolvers get file names (or better, external identifiers) and + * return lexbufs, scanning the file for tokens. Resolvers may be + * cloned, and clones can interpret relative file names relative to + * their creator. + *) + +class type resolver = + object + (* A resolver can open a character source, and returns this source as + * Lexing.lexbuf. + * The resolver should recode the source into ISO-8859-1. By default, + * a resolver should assume UTF-8 or UTF-16 encoding. Before + * 'change_encoding' is invoked, the resolver should only return + * lexbufs with one character. After 'change_encoding' has been invoked, + * there is no character limit anymore. + * 'change_encoding' can only be invoked once. This method is usually + * called after the prolog of the entity has been read. + * If this method is not called, it is up to the resolver to find out + * if UTF-8 or UTF-16 is used. It is recommended to invoke this method + * with an empty string to indicate this situation. + *) + method open_in : ext_id -> Lexing.lexbuf + method close_in : unit + method change_encoding : string -> unit + + + (* Every resolver can be cloned. The clone does not inherit the connection + * with the external object, i.e. it is closed. + *) + method clone : resolver + + end +;; + + +(* The following class is the current main implementation of resolvers. + * It fetches strings from an arbitrary source (by calling init_in, and + * then repeatedly next_string), recodes them to ISO-8859-1, and creates + * lexbufs for them. + * It is not complete, as the source is missing. + * + * Note that 'resolve_general' may change in future revisions; it is ugly. + *) + +(* -- This API simulation does not provide 'resolve_general' any longer + +class virtual resolve_general : + collect_warnings -> + object + val mutable encoding : string + val mutable encoding_requested : bool + val warner : collect_warnings + + method clone : resolver + + method private warn : int -> unit + method private autodetect : string -> unit + + method private virtual next_string : string -> int -> int -> int + method private virtual init_in : ext_id -> unit + method virtual close_in : unit + + method open_in : ext_id -> Lexing.lexbuf + + method change_encoding : string -> unit + end +*) + + +(* The next classes are resolvers for concrete input sources. *) + +class resolve_read_channel : + in_channel -> collect_warnings -> resolver;; + + (* Reads from the passed channel (it may be even a pipe). Note that this + * resolver cannot handle file inclusions, as it is pre-bound to a + * specific channel and is not able to interpret file names. + * That means, if there is a entity reference (something like &name; or + * %name;) to parse, and the definition points to another file, the + * resolver will fail. + *) + + +class resolve_read_string : + string -> resolver;; + + (* Reads from the passed string. As 'resolver_read_channel', this + * resolver cannot handle file inclusions. + *) + + +class resolve_as_file : + collect_warnings -> resolver;; + + (* Reads from the local file system. Every file name is interpreted as + * file name of the local file system, and the referred file is read. + * This resolver can handle file inclusions as long as they do not + * exceed the scope of the local file system (i.e. no URLs). + *) + +(* ====================================================================== + * History: + * + * $Log$ + * Revision 1.1 2000/11/17 09:57:30 lpadovan + * Initial revision + * + * 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. + * + * ====================================================================== + * OLD LOGS: + * + * Revision 1.3 2000/05/29 21:14:57 gerd + * Changed the type 'encoding' into a polymorphic variant. + * + * Revision 1.2 2000/05/20 20:31:40 gerd + * Big change: Added support for various encodings of the + * internal representation. + * + * Revision 1.1 2000/03/13 23:41:54 gerd + * Initial revision. + * + * + *)