Module Markdown

module Markdown: sig .. end

Markdown Document

Structured representation of Markdown content.

type align = 
| Left
| Center
| Right
Table columns alignment
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
type inline = 
| Plain of string (*
Printed as it is
*)
| Emph of string (*
Printed as "_……_"
*)
| Bold of string (*
Printed as "**……**"
*)
| Inline_code of string (*
Printed as "`……`"
*)
| Link of text * href (*
Hyperlink with text and URL
*)
| Image of string * string (*
Image(alt,path) with alternative text and image file
*)
type text = inline list 
Inline elements separated by spaces
type block_element = 
| Text of text (*
Single paragraph of text.
*)
| Block_quote of element list
| UL of block list
| OL of block list
| DL of (text * text) list (*
definition list
*)
| EL of (string option * text) list (*
example list
*)
| Code_block of string * string list
type block = block_element list 
type table = {
   caption : text option;
   header : (text * align) list;
   content : text list list;
}
type 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
type elements = element list 
type pandoc_markdown = {
   title : text;
   authors : text list;
   date : text;
   elements : elements;
}

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 href : ?text:text -> href -> text
Href link
val link : ?text:text -> ?page:string -> ?name:string -> unit -> text
Local links
val url : ?text:text -> string -> text
URL links
val format : ('a, Format.formatter, unit, text) Pervasives.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 text : text -> block
Text Block
val list : block list -> block
Itemized list
val enum : block list -> block
Enumerated list
val description : (text * text) list -> block
Description list
val codeblock : ?lang:string ->
('a, Format.formatter, unit, block) Pervasives.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 par : text -> elements
Single Paragraph element
val block : block -> elements
Block element
val rawfile : string -> elements
Get the content of a file as raw markdown.
Raises Sys_error if there's no such file.

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:
val section : ?name:string -> title:string -> elements -> elements
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
val subsections : elements -> elements list -> elements
subsections header body returns a list of elements where the body's headers have been increased by one (i.e. H1 becomes H2). H5 stays at H5, though.

Other Utilities


val glue : ?sep:'a list -> 'a list list -> 'a list
Glue fragments, typically used for combining text, block and elements. Default separator is empty. The function is tail-recursive.
val label : string -> string
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 -> Format.formatter -> inline -> unit
val pp_text : ?page:string -> Format.formatter -> text -> unit
val pp_block_element : ?page:string -> Format.formatter -> block_element -> unit
val pp_block : ?page:string -> Format.formatter -> block -> unit
val pp_element : ?page:string -> Format.formatter -> element -> unit
val pp_elements : ?page:string -> Format.formatter -> elements -> unit
val pp_pandoc : ?page:string -> Format.formatter -> pandoc_markdown -> unit