Skip to content

Commit

Permalink
same for xml_parser
Browse files Browse the repository at this point in the history
  • Loading branch information
craff committed Jul 17, 2023
1 parent 1132dba commit 90a2cef
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
14 changes: 9 additions & 5 deletions src/markup.ml
Expand Up @@ -93,12 +93,15 @@ struct
let parse_xml
report ?encoding namespace entity context source =
let with_encoding (encoding : Encoding.t) k =
let report' = report [] in
let get_opens = ref None in
let parse = Xml_parser.parse ~get_opens context namespace report in
let report' x =
report (match !get_opens with None -> [] | Some f -> f ()) x in
source
|> encoding ~report:report'
|> Input.preprocess Common.is_valid_xml_char report'
|> Xml_tokenizer.tokenize report' entity
|> Xml_parser.parse context namespace report
|> parse
|> k
in

Expand All @@ -120,14 +123,15 @@ struct

let parse_html report ?encoding context source =
let get_opens = ref None in
let parse = Html_parser.parse ~get_opens in
let report' = report (match !get_opens with None -> [] | Some f -> f ()) in
let parse = Html_parser.parse ~get_opens context report in
let report' x =
report (match !get_opens with None -> [] | Some f -> f ()) x in
let with_encoding (encoding : Encoding.t) k =
source
|> encoding ~report:report'
|> Input.preprocess Common.is_valid_html_char report'
|> Html_tokenizer.tokenize report'
|> parse context report
|> parse
|> k
in

Expand Down
8 changes: 5 additions & 3 deletions src/xml_parser.ml
Expand Up @@ -7,11 +7,13 @@ open Token_tag

let is_whitespace_only strings = List.for_all is_whitespace_only strings

let parse context namespace report tokens =
let parse ?(get_opens=ref None) context namespace report tokens =
let open_elements = ref [] in
let report =
report (List.map (fun (l,name,_,attrs) -> (name,l,attrs)) !open_elements)
let opens () =
List.map (fun (l,name,_,attrs) -> (name,l,attrs)) !open_elements
in
get_opens := Some opens;
let report l error throw k = report (opens ()) l error throw k in
let namespaces = Namespace.Parsing.init namespace in
let is_fragment = ref false in
let fragment_allowed = ref true in
Expand Down
1 change: 1 addition & 0 deletions src/xml_parser.mli
Expand Up @@ -4,6 +4,7 @@
open Common

val parse :
?get_opens : ((unit -> open_elements) option ref) ->
[< `Document | `Fragment ] option ->
(string -> string option) ->
(open_elements -> Error.parse_handler) ->
Expand Down

0 comments on commit 90a2cef

Please sign in to comment.