Frama-C API - Markdown
Markdown Document
Structured representation of Markdown content.
type href =
| URL of string
(*URL href is printed as it is.
*)| Page of string
(*URL relative to a common root. During pretty-printing, if given the path of the current document, the string will be modified accordingly. For instance, when writing to
*)foo/bar.md
,Page "foo/bla.md"
will be output as(bla.md)
.| Section of string * string
(*URL of an anchor within a
*)Page
, see above.
Local refs and URLs
and text = inline list
Inline elements separated by spaces
and block = block_element list
and element =
| Comment of string
(*markdown comment, printed <!-- like this -->
*)| Block of block
| Table of table
| Raw of string list
(*Each element of the list is printed as-is on its own line. A blank line separates the
*)Raw
node from the next one.| H1 of text * string option
| H2 of text * string option
| H3 of text * string option
| H4 of text * string option
| H5 of text * string option
| H6 of text * string option
and elements = element list
Formatting Utilities
Remark: text
values are list of inline
values, hence you may combined with the (@)
operator or with the glue ?sep
utility function (see below).
val plain : string -> text
Plain markdown
val emph : string -> text
Emph text
val bold : string -> text
Bold text
val code : string -> text
Inline code
val image : alt:string -> file:string -> text
Image
val format : ('a, Stdlib.Format.formatter, unit, text) Stdlib.format4 -> 'a
Plain markdown content of the formatted string
Blocks Utilities
Remark: block
values are list of block_element
values, hence you may combined with the (@)
operator or with the glue ?sep
utility function (see below).
val codeblock : ?lang:string -> ('a, Stdlib.Format.formatter, unit, block) Stdlib.format4 -> 'a
codeblock lang "...."
returns a Code_block
for code
, written in lang
with the given formatted content. The code block content placed inside an englobing hv-box, trimed and finally splitted into lines.
Document Elements
Remark: elements
values are list of element
values, hence you may combined with the (@)
operator or with the glue ?sep
utility function (see below).
val rawfile : string -> elements
Get the content of a file as raw markdown.
Document Structure
val pandoc : ?title:text -> ?authors:text list -> ?date:text -> elements -> pandoc_markdown
Creates a document from a list of elements and optional metadatas. Defaults are:
- title: empty
- authors: empty list
- date: current day, in ISO format
Adds a H1
header with the given title
on top of the given elements. If name is not explicitly provided, the header will have as associated anchor id title
subsections header body
returns a list of element
s where the body
's headers have been increased by one (i.e. H1
becomes H2
). H5
stays at H5
, though.
Other Utilities
Glue fragments, typically used for combining text
, block
and elements
. Default separator is empty. The function is tail-recursive.
Transforms a string into an anchor name, roughly following pandoc's conventions. This function is automatically used by pretty-printers and smart constructors to normalize section names and local links.
Pretty-printers
val pp_inline : ?page:string -> Stdlib.Format.formatter -> inline -> unit
val pp_text : ?page:string -> Stdlib.Format.formatter -> text -> unit
val pp_block_element : ?page:string -> Stdlib.Format.formatter -> block_element -> unit
val pp_block : ?page:string -> Stdlib.Format.formatter -> block -> unit
val pp_element : ?page:string -> Stdlib.Format.formatter -> element -> unit
val pp_elements : ?page:string -> Stdlib.Format.formatter -> elements -> unit
val pp_pandoc : ?page:string -> Stdlib.Format.formatter -> pandoc_markdown -> unit