@@ -114,6 +114,7 @@ type t = {
114114 os_type_enabled : bool ;
115115 set_variables : (string * string ) list ;
116116 unset_variables : string list ;
117+ delim : string option ;
117118 value : value ;
118119}
119120
@@ -160,19 +161,45 @@ let rec error_padding = function
160161 let xs = error_padding xs in
161162 x :: xs
162163
163- let pp_errors ppf t =
164+ let pp_error ?syntax ?delim ppf outputs =
165+ match syntax with
166+ | Some Syntax. Markdown ->
167+ Fmt. pf ppf " ```\n ```mdx-error\n %a\n "
168+ Fmt. (list ~sep: (any " \n " ) Output. pp)
169+ outputs
170+ | Some Syntax. Mli | Some Syntax. Mld ->
171+ Fmt. pf ppf " ]%a[\n {err@mdx-error[\n %a\n ]err}"
172+ Fmt. (option string )
173+ delim
174+ Fmt. (list ~sep: (any " \n " ) Output. pp)
175+ outputs
176+ | _ -> ()
177+
178+ let has_output t =
179+ match t.value with
180+ | OCaml { errors = [] ; _ } -> false
181+ | OCaml { errors = _ ; _ } -> true
182+ | _ -> false
183+
184+ let pp_value ?syntax ppf t =
185+ let delim = t.delim in
164186 match t.value with
165187 | OCaml { errors = [] ; _ } -> ()
166188 | OCaml { errors; _ } ->
167189 let errors = error_padding errors in
168- Fmt. pf ppf " ```mdx-error\n %a\n ```\n "
169- Fmt. (list ~sep: (any " \n " ) Output. pp)
170- errors
190+ pp_error ?syntax ?delim ppf errors
171191 | _ -> ()
172192
173- let pp_footer ?syntax ppf _ =
193+ let pp_footer ?syntax ppf t =
194+ let delim =
195+ if has_output t then (
196+ pp_value ?syntax ppf t;
197+ None )
198+ else t.delim
199+ in
174200 match syntax with
175- | Some Syntax. Mli | Some Syntax. Mld -> Fmt. string ppf " ]}"
201+ | Some Syntax. Mli | Some Syntax. Mld ->
202+ Fmt. pf ppf " ]%a}" Fmt. (option string ) delim
176203 | Some Syntax. Cram -> Fmt. string ppf " \n "
177204 | Some Syntax. Markdown | None -> Fmt. string ppf " ```\n "
178205
@@ -216,7 +243,9 @@ let pp_header ?syntax ppf t =
216243 | [] -> ()
217244 | labels -> Fmt. pf ppf " %a" (pp_labels ?syntax) labels
218245 in
219- Fmt. pf ppf " {%a%a[" pp_lang_header lang_headers pp_labels other_labels
246+ Fmt. pf ppf " {%a%a%a["
247+ Fmt. (option string )
248+ t.delim pp_lang_header lang_headers pp_labels other_labels
220249 | Some Syntax. Cram -> pp_labels ?syntax ppf t.labels
221250 | Some Syntax. Markdown | None ->
222251 if t.legacy_labels then
@@ -231,8 +260,7 @@ let pp_header ?syntax ppf t =
231260let pp ?syntax ppf b =
232261 pp_header ?syntax ppf b;
233262 pp_contents ?syntax ppf b;
234- pp_footer ?syntax ppf b;
235- pp_errors ppf b
263+ pp_footer ?syntax ppf b
236264
237265let directory t = t.dir
238266let file t = match t.value with Include t -> Some t.file_included | _ -> None
@@ -415,7 +443,7 @@ let infer_block ~loc ~config ~header ~contents ~errors =
415443 let + () = check_no_errors ~loc errors in
416444 Raw { header })
417445
418- let mk ~loc ~section ~labels ~legacy_labels ~header ~contents ~errors =
446+ let mk ~loc ~section ~labels ~legacy_labels ~header ~delim ~ contents ~errors =
419447 let block_kind =
420448 get_label (function Block_kind x -> Some x | _ -> None ) labels
421449 in
@@ -442,6 +470,7 @@ let mk ~loc ~section ~labels ~legacy_labels ~header ~contents ~errors =
442470 os_type_enabled;
443471 set_variables = config.set_variables;
444472 unset_variables = config.unset_variables;
473+ delim;
445474 value;
446475 }
447476
@@ -450,7 +479,7 @@ let mk_include ~loc ~section ~labels =
450479 | Some file_inc ->
451480 let header = Header. infer_from_file file_inc in
452481 mk ~loc ~section ~labels ~legacy_labels: false ~header ~contents: []
453- ~errors: []
482+ ~errors: [] ~delim: None
454483 | None -> label_required ~loc ~label: " file" ~kind: " include"
455484
456485let parse_labels ~label_cmt ~legacy_labels =
@@ -476,6 +505,7 @@ let from_raw raw =
476505 in
477506 Util.Result. to_error_list
478507 @@ mk ~loc ~section ~header ~contents ~labels ~legacy_labels ~errors
508+ ~delim: None
479509
480510let is_active ?section :s t =
481511 let active =
0 commit comments