Skip to content

Commit b47663e

Browse files
committed
HTML renderer: option to output content only
1 parent 182cc22 commit b47663e

File tree

6 files changed

+37
-11
lines changed

6 files changed

+37
-11
lines changed

src/html/config.ml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ type t = {
99
open_details : bool;
1010
omit_breadcrumbs : bool;
1111
omit_toc : bool;
12+
content_only : bool;
1213
}
1314

14-
let v ?theme_uri ?support_uri ~semantic_uris ~indent ~flat ~open_details ~omit_breadcrumbs ~omit_toc () =
15-
{ theme_uri; support_uri; semantic_uris; indent; flat; open_details; omit_breadcrumbs; omit_toc }
15+
let v ?theme_uri ?support_uri ~semantic_uris ~indent ~flat ~open_details ~omit_breadcrumbs ~omit_toc ~content_only () =
16+
{ theme_uri; support_uri; semantic_uris; indent; flat; open_details; omit_breadcrumbs; omit_toc; content_only }
1617

1718
let theme_uri config =
1819
match config.theme_uri with None -> Types.Relative None | Some uri -> uri
@@ -30,4 +31,6 @@ let open_details config = config.open_details
3031

3132
let omit_breadcrumbs config = config.omit_breadcrumbs
3233

33-
let omit_toc config = config.omit_toc
34+
let omit_toc config = config.omit_toc
35+
36+
let content_only config = config.content_only

src/html/config.mli

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ val v :
1111
open_details:bool ->
1212
omit_breadcrumbs:bool ->
1313
omit_toc:bool ->
14+
content_only:bool ->
1415
unit ->
1516
t
1617

@@ -28,4 +29,6 @@ val open_details : t -> bool
2829

2930
val omit_breadcrumbs : t -> bool
3031

31-
val omit_toc : t -> bool
32+
val omit_toc : t -> bool
33+
34+
val content_only : t -> bool

src/html/tree.ml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,19 @@ let page_creator ~config ~url name header toc content =
138138
@ toc
139139
@ [ Html.div ~a:[ Html.a_class [ "odoc-content" ] ] content ]
140140
in
141-
Html.html head (Html.body ~a:[ Html.a_class [ "odoc" ] ] body)
141+
let htmlpp_elt = Html.pp_elt ~indent:(Config.indent config) () in
142+
let htmlpp = Html.pp ~indent:(Config.indent config) () in
143+
if Config.content_only config
144+
then begin
145+
let content ppf = htmlpp_elt ppf (Html.div ~a:[ Html.a_class [ "odoc" ] ] body) in
146+
content
147+
end else begin
148+
let html = Html.html head (Html.body ~a:[ Html.a_class [ "odoc" ] ] body) in
149+
let content ppf = htmlpp ppf html in
150+
content
151+
end
142152

143153
let make ~config ~url ~header ~toc title content children =
144154
let filename = Link.Path.as_filename ~is_flat:(Config.flat config) url in
145-
let html = page_creator ~config ~url title header toc content in
146-
let content ppf = (Html.pp ~indent:(Config.indent config) ()) ppf html in
155+
let content = page_creator ~config ~url title header toc content in
147156
[ { Odoc_document.Renderer.filename; content; children } ]

src/odoc/bin/main.ml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,16 +527,22 @@ module Odoc_html_args = struct
527527
"Don't emit the table of contents div"
528528
in
529529
Arg.(value & flag & info ~docs ~doc [ "omit-toc"])
530+
531+
let content_only =
532+
let doc =
533+
"Only emit the content of the page, not the html, head and body elements"
534+
in
535+
Arg.(value & flag & info ~docs ~doc [ "content-only"])
530536

531537
let extra_args =
532-
let config semantic_uris closed_details indent theme_uri support_uri flat omit_breadcrumbs omit_toc =
538+
let config semantic_uris closed_details indent theme_uri support_uri flat omit_breadcrumbs omit_toc content_only =
533539
let open_details = not closed_details in
534540
Odoc_html.Config.v ~theme_uri ~support_uri ~semantic_uris ~indent ~flat
535-
~open_details ~omit_breadcrumbs ~omit_toc ()
541+
~open_details ~omit_breadcrumbs ~omit_toc ~content_only ()
536542
in
537543
Term.(
538544
const config $ semantic_uris $ closed_details $ indent $ theme_uri
539-
$ support_uri $ flat $ omit_breadcrumbs $ omit_toc)
545+
$ support_uri $ flat $ omit_breadcrumbs $ omit_toc $ content_only)
540546
end
541547

542548
module Odoc_html = Make_renderer (Odoc_html_args)

src/odoc/html_fragment.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ let from_mld ~xref_base_uri ~resolver ~output ~warnings_options input =
2626
let page = Odoc_document.Comment.to_ir resolved.content in
2727
let config =
2828
Odoc_html.Config.v ~semantic_uris:false ~indent:false ~flat:false
29-
~open_details:false ~omit_breadcrumbs:false ~omit_toc:false ()
29+
~open_details:false ~omit_breadcrumbs:false ~omit_toc:false ~content_only:false ()
3030
in
3131
let html = Odoc_html.Generator.doc ~config ~xref_base_uri page in
3232
let oc = open_out (Fs.File.to_string output) in

test/generators/html_opts.t/run.t

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,9 @@ Check omission of toc:
4040
$ grep odoc-toc html/test/Test/index.html
4141
[1]
4242

43+
Check content-only output:
44+
$ odoc html-generate test.odocl -o html --indent --content-only
45+
$ head -n 1 html/test/Test/index.html
46+
<div class="odoc">
47+
4348

0 commit comments

Comments
 (0)