Skip to content

Commit

Permalink
hask to get open elements in all cases
Browse files Browse the repository at this point in the history
  • Loading branch information
craff committed Jul 17, 2023
1 parent b7fb998 commit 1132dba
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 7 deletions.
11 changes: 6 additions & 5 deletions src/html_parser.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,8 @@ end



let parse requested_context report (tokens, set_tokenizer_state, set_foreign) =
let parse ?(get_opens=ref None) requested_context report
(tokens, set_tokenizer_state, set_foreign) =
let context = Context.uninitialized () in

let throw = ref (fun _ -> ()) in
Expand All @@ -1036,14 +1037,14 @@ let parse requested_context report (tokens, set_tokenizer_state, set_foreign) =
set_foreign (fun () ->
Stack.current_element_is_foreign context open_elements);

let report l error throw k =
let elts = List.map
let opens () = List.map
(fun e ->
let (ns, s) = e.element_name in
((Ns.to_string ns, s), e.location, e.attributes))
!open_elements
in
report elts l error throw k in
in
get_opens := Some opens;
let report l error throw k = report (opens ()) l error throw k in
let report_if = Error.report_if report in
let unmatched_end_tag l name k =
report l (`Unmatched_end_tag name) !throw k in
Expand Down
1 change: 1 addition & 0 deletions src/html_parser.mli
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
open Common

val parse :
?get_opens:((unit -> open_elements) option ref) ->
[< `Document | `Fragment of string ] option ->
(open_elements -> Error.parse_handler) ->
(location * Html_tokenizer.token) Kstream.t *
Expand Down
6 changes: 4 additions & 2 deletions src/markup.ml
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,15 @@ struct
|> Utility.strings_to_bytes

let parse_html report ?encoding context source =
let report' = report [] in
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 with_encoding (encoding : Encoding.t) k =
source
|> encoding ~report:report'
|> Input.preprocess Common.is_valid_html_char report'
|> Html_tokenizer.tokenize report'
|> Html_parser.parse context report
|> parse context report
|> k
in

Expand Down

0 comments on commit 1132dba

Please sign in to comment.