sig
type async
type sync
type ('a, 's) stream
type location = int * int
module Error :
sig
type t =
[ `Bad_content of string
| `Bad_document of string
| `Bad_namespace of string
| `Bad_token of string * string * string
| `Decoding_error of string * string
| `Misnested_tag of string * string * (string * string) list
| `Unexpected_eoi of string
| `Unmatched_end_tag of string
| `Unmatched_start_tag of string ]
val to_string : ?location:Markup.location -> Markup.Error.t -> string
end
module Encoding :
sig
type t
val decode :
?report:(Markup.location -> Markup.Error.t -> unit) ->
Markup.Encoding.t ->
(char, 's) Markup.stream -> (int, 's) Markup.stream
val utf_8 : Markup.Encoding.t
val utf_16be : Markup.Encoding.t
val utf_16le : Markup.Encoding.t
val utf_16 : Markup.Encoding.t
val iso_8859_1 : Markup.Encoding.t
val us_ascii : Markup.Encoding.t
val windows_1251 : Markup.Encoding.t
val windows_1252 : Markup.Encoding.t
val ucs_4be : Markup.Encoding.t
val ucs_4le : Markup.Encoding.t
val ucs_4be_transposed : Markup.Encoding.t
val ucs_4le_transposed : Markup.Encoding.t
val ebcdic : Markup.Encoding.t
end
type name = string * string
type xml_declaration = {
version : string;
encoding : string option;
standalone : bool option;
}
type doctype = {
doctype_name : string option;
public_identifier : string option;
system_identifier : string option;
raw_text : string option;
force_quirks : bool;
}
type signal =
[ `Comment of string
| `Doctype of Markup.doctype
| `End_element
| `PI of string * string
| `Start_element of Markup.name * (Markup.name * string) list
| `Text of string list
| `Xml of Markup.xml_declaration ]
val signal_to_string : [< Markup.signal ] -> string
type 's parser
val signals : 's Markup.parser -> (Markup.signal, 's) Markup.stream
val location : 'a Markup.parser -> Markup.location
val parse_xml :
?report:(Markup.location -> Markup.Error.t -> unit) ->
?encoding:Markup.Encoding.t ->
?namespace:(string -> string option) ->
?entity:(string -> string option) ->
?context:[< `Document | `Fragment ] ->
(char, 's) Markup.stream -> 's Markup.parser
val write_xml :
?report:(Markup.signal * int -> Markup.Error.t -> unit) ->
?prefix:(string -> string option) ->
([< Markup.signal ], 's) Markup.stream -> (char, 's) Markup.stream
val parse_html :
?report:(Markup.location -> Markup.Error.t -> unit) ->
?encoding:Markup.Encoding.t ->
?context:[< `Document | `Fragment of string ] ->
(char, 's) Markup.stream -> 's Markup.parser
val write_html :
?escape_attribute:(string -> string) ->
?escape_text:(string -> string) ->
([< Markup.signal ], 's) Markup.stream -> (char, 's) Markup.stream
val string : string -> (char, Markup.sync) Markup.stream
val buffer : Stdlib.Buffer.t -> (char, Markup.sync) Markup.stream
val channel : Stdlib.in_channel -> (char, Markup.sync) Markup.stream
val file : string -> (char, Markup.sync) Markup.stream * (unit -> unit)
val fn : (unit -> char option) -> (char, Markup.sync) Markup.stream
val to_string : (char, Markup.sync) Markup.stream -> string
val to_buffer : (char, Markup.sync) Markup.stream -> Stdlib.Buffer.t
val to_channel :
Stdlib.out_channel -> (char, Markup.sync) Markup.stream -> unit
val to_file : string -> (char, Markup.sync) Markup.stream -> unit
val stream : (unit -> 'a option) -> ('a, Markup.sync) Markup.stream
val next : ('a, Markup.sync) Markup.stream -> 'a option
val peek : ('a, Markup.sync) Markup.stream -> 'a option
val transform :
('a -> 'b -> 'c list * 'a option) ->
'a -> ('b, 's) Markup.stream -> ('c, 's) Markup.stream
val fold : ('a -> 'b -> 'a) -> 'a -> ('b, Markup.sync) Markup.stream -> 'a
val map : ('a -> 'b) -> ('a, 's) Markup.stream -> ('b, 's) Markup.stream
val filter :
('a -> bool) -> ('a, 's) Markup.stream -> ('a, 's) Markup.stream
val filter_map :
('a -> 'b option) -> ('a, 's) Markup.stream -> ('b, 's) Markup.stream
val iter : ('a -> unit) -> ('a, Markup.sync) Markup.stream -> unit
val drain : ('a, Markup.sync) Markup.stream -> unit
val of_list : 'a list -> ('a, Markup.sync) Markup.stream
val to_list : ('a, Markup.sync) Markup.stream -> 'a list
val content :
([< Markup.signal ], 's) Markup.stream ->
(Markup.signal, 's) Markup.stream
val tree :
?text:(string list -> 'a) ->
?element:(Markup.name -> (Markup.name * string) list -> 'a list -> 'a) ->
?comment:(string -> 'a) ->
?pi:(string -> string -> 'a) ->
?xml:(Markup.xml_declaration -> 'a) ->
?doctype:(Markup.doctype -> 'a) ->
([< Markup.signal ], Markup.sync) Markup.stream -> 'a option
val trees :
?text:(string list -> 'a) ->
?element:(Markup.name -> (Markup.name * string) list -> 'a list -> 'a) ->
?comment:(string -> 'a) ->
?pi:(string -> string -> 'a) ->
?xml:(Markup.xml_declaration -> 'a) ->
?doctype:(Markup.doctype -> 'a) ->
([< Markup.signal ], 's) Markup.stream -> ('a, 's) Markup.stream
type 'a node =
[ `Comment of string
| `Doctype of Markup.doctype
| `Element of Markup.name * (Markup.name * string) list * 'a list
| `PI of string * string
| `Text of string
| `Xml of Markup.xml_declaration ]
val from_tree :
('a -> 'a Markup.node) ->
'a -> (Markup.signal, Markup.sync) Markup.stream
val elements :
(Markup.name -> (Markup.name * string) list -> bool) ->
([< Markup.signal ] as 'a, 's) Markup.stream ->
(('a, 's) Markup.stream, 's) Markup.stream
val text :
([< Markup.signal ], 's) Markup.stream -> (char, 's) Markup.stream
val trim :
(Markup.signal, 's) Markup.stream -> (Markup.signal, 's) Markup.stream
val normalize_text :
([> `Text of string list ] as 'a, 's) Markup.stream ->
('a, 's) Markup.stream
val pretty_print :
(Markup.signal, 's) Markup.stream -> (Markup.signal, 's) Markup.stream
val html5 :
([< Markup.signal ], 's) Markup.stream ->
(Markup.signal, 's) Markup.stream
val xhtml :
?dtd:[< `Frameset_1_0 | `Strict_1_0 | `Strict_1_1 | `Transitional_1_0 ] ->
([< Markup.signal ], 's) Markup.stream ->
(Markup.signal, 's) Markup.stream
val xhtml_entity : string -> string option
val strings_to_bytes :
(string, 's) Markup.stream -> (char, 's) Markup.stream
val compare_locations : Markup.location -> Markup.location -> int
module Ns :
sig
val html : string
val svg : string
val mathml : string
val xml : string
val xmlns : string
val xlink : string
end
module type IO =
sig
type 'a t
val return : 'a -> 'a Markup.IO.t
val of_cps : ((exn -> unit) -> ('a -> unit) -> unit) -> 'a Markup.IO.t
val to_cps :
(unit -> 'a Markup.IO.t) -> (exn -> unit) -> ('a -> unit) -> unit
end
module type ASYNCHRONOUS =
sig
type 'a io
module Encoding :
sig
type t = Markup.Encoding.t
val decode :
?report:(Markup.location ->
Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
Markup.Encoding.t ->
(char, 'a) Markup.stream -> (int, Markup.async) Markup.stream
end
val parse_xml :
?report:(Markup.location ->
Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
?encoding:Markup.ASYNCHRONOUS.Encoding.t ->
?namespace:(string -> string option) ->
?entity:(string -> string option) ->
?context:[< `Document | `Fragment ] ->
(char, 'a) Markup.stream -> Markup.async Markup.parser
val write_xml :
?report:(Markup.signal * int ->
Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
?prefix:(string -> string option) ->
([< Markup.signal ], 'a) Markup.stream ->
(char, Markup.async) Markup.stream
val parse_html :
?report:(Markup.location ->
Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
?encoding:Markup.ASYNCHRONOUS.Encoding.t ->
?context:[< `Document | `Fragment of string ] ->
(char, 'a) Markup.stream -> Markup.async Markup.parser
val write_html :
?escape_attribute:(string -> string) ->
?escape_text:(string -> string) ->
([< Markup.signal ], 'a) Markup.stream ->
(char, Markup.async) Markup.stream
val fn :
(unit -> char option Markup.ASYNCHRONOUS.io) ->
(char, Markup.async) Markup.stream
val to_string :
(char, 'a) Markup.stream -> string Markup.ASYNCHRONOUS.io
val to_buffer :
(char, 'a) Markup.stream -> Stdlib.Buffer.t Markup.ASYNCHRONOUS.io
val stream :
(unit -> 'a option Markup.ASYNCHRONOUS.io) ->
('a, Markup.async) Markup.stream
val next : ('a, 'b) Markup.stream -> 'a option Markup.ASYNCHRONOUS.io
val peek : ('a, 'b) Markup.stream -> 'a option Markup.ASYNCHRONOUS.io
val transform :
('a -> 'b -> ('c list * 'a option) Markup.ASYNCHRONOUS.io) ->
'a -> ('b, 'd) Markup.stream -> ('c, Markup.async) Markup.stream
val fold :
('a -> 'b -> 'a Markup.ASYNCHRONOUS.io) ->
'a -> ('b, 'c) Markup.stream -> 'a Markup.ASYNCHRONOUS.io
val map :
('a -> 'b Markup.ASYNCHRONOUS.io) ->
('a, 'c) Markup.stream -> ('b, Markup.async) Markup.stream
val filter :
('a -> bool Markup.ASYNCHRONOUS.io) ->
('a, 'b) Markup.stream -> ('a, Markup.async) Markup.stream
val filter_map :
('a -> 'b option Markup.ASYNCHRONOUS.io) ->
('a, 'c) Markup.stream -> ('b, Markup.async) Markup.stream
val iter :
('a -> unit Markup.ASYNCHRONOUS.io) ->
('a, 'b) Markup.stream -> unit Markup.ASYNCHRONOUS.io
val drain : ('a, 'b) Markup.stream -> unit Markup.ASYNCHRONOUS.io
val to_list : ('a, 'b) Markup.stream -> 'a list Markup.ASYNCHRONOUS.io
val load :
('a, 'b) Markup.stream ->
('a, Markup.sync) Markup.stream Markup.ASYNCHRONOUS.io
val tree :
?text:(string list -> 'a) ->
?element:(Markup.name -> (Markup.name * string) list -> 'a list -> 'a) ->
?comment:(string -> 'a) ->
?pi:(string -> string -> 'a) ->
?xml:(Markup.xml_declaration -> 'a) ->
?doctype:(Markup.doctype -> 'a) ->
([< Markup.signal ], 'b) Markup.stream ->
'a option Markup.ASYNCHRONOUS.io
end
module Asynchronous :
functor (IO : IO) ->
sig
module Encoding :
sig
type t = Encoding.t
val decode :
?report:(location -> Error.t -> unit IO.t) ->
Encoding.t -> (char, 'a) stream -> (int, async) stream
end
val parse_xml :
?report:(location -> Error.t -> unit IO.t) ->
?encoding:Encoding.t ->
?namespace:(string -> string option) ->
?entity:(string -> string option) ->
?context:[< `Document | `Fragment ] ->
(char, 'a) stream -> async parser
val write_xml :
?report:(signal * int -> Error.t -> unit IO.t) ->
?prefix:(string -> string option) ->
([< signal ], 'a) stream -> (char, async) stream
val parse_html :
?report:(location -> Error.t -> unit IO.t) ->
?encoding:Encoding.t ->
?context:[< `Document | `Fragment of string ] ->
(char, 'a) stream -> async parser
val write_html :
?escape_attribute:(string -> string) ->
?escape_text:(string -> string) ->
([< signal ], 'a) stream -> (char, async) stream
val fn : (unit -> char option IO.t) -> (char, async) stream
val to_string : (char, 'a) stream -> string IO.t
val to_buffer : (char, 'a) stream -> Buffer.t IO.t
val stream : (unit -> 'a option IO.t) -> ('a, async) stream
val next : ('a, 'b) stream -> 'a option IO.t
val peek : ('a, 'b) stream -> 'a option IO.t
val transform :
('a -> 'b -> ('c list * 'a option) IO.t) ->
'a -> ('b, 'd) stream -> ('c, async) stream
val fold : ('a -> 'b -> 'a IO.t) -> 'a -> ('b, 'c) stream -> 'a IO.t
val map : ('a -> 'b IO.t) -> ('a, 'c) stream -> ('b, async) stream
val filter :
('a -> bool IO.t) -> ('a, 'b) stream -> ('a, async) stream
val filter_map :
('a -> 'b option IO.t) -> ('a, 'c) stream -> ('b, async) stream
val iter : ('a -> unit IO.t) -> ('a, 'b) stream -> unit IO.t
val drain : ('a, 'b) stream -> unit IO.t
val to_list : ('a, 'b) stream -> 'a list IO.t
val load : ('a, 'b) stream -> ('a, sync) stream IO.t
val tree :
?text:(string list -> 'a) ->
?element:(name -> (name * string) list -> 'a list -> 'a) ->
?comment:(string -> 'a) ->
?pi:(string -> string -> 'a) ->
?xml:(xml_declaration -> 'a) ->
?doctype:(doctype -> 'a) ->
([< signal ], 'b) stream -> 'a option IO.t
end
val preprocess_input_stream :
(int, 's) Markup.stream ->
(Markup.location * int, 's) Markup.stream * (unit -> Markup.location)
end