@@ -201,11 +201,12 @@ let load_html state hooks page_file =
201
201
else Ok page_source
202
202
| None -> Ok page_source
203
203
204
- let parse_html settings page_source =
204
+ let parse_html ?( fragment = true ) settings page_source =
205
205
(* As of lambdasoup 0.7.2, Soup.parse never fails, only returns empty element trees,
206
206
so there's no need to handle errors here.
207
207
*)
208
- Ok (Html_utils. parse_html ~encoding: settings.page_character_encoding page_source)
208
+ let context = if fragment then (`Fragment " body" ) else `Document in
209
+ Ok (Html_utils. parse_html ~context: context ~encoding: settings.page_character_encoding page_source)
209
210
210
211
(* The built-in HTML rendering function that is used when the "render" hook is not configured. *)
211
212
let render_html_builtin settings soup =
@@ -501,7 +502,11 @@ let process_page state page_data index index_hash widgets hooks =
501
502
let () = Cache. refresh_page_cache settings page_file content in
502
503
Ok content
503
504
in
504
- let * content = parse_html settings page_source in
505
+ (* If we are in generator mode, tell the parser to interpret pages
506
+ as HTML fragments that will go inside <body>,
507
+ otherwise treat them as documents. *)
508
+ let fragment = if settings.generator_mode then true else false in
509
+ let * content = parse_html ~fragment: fragment settings page_source in
505
510
let page_name = FP. basename page_file |> FP. chop_extension in
506
511
let orig_path = nav_path in
507
512
let nav_path = fix_nav_path settings nav_path page_name in
0 commit comments