type style = [ `Bold | `Italic | `Emphasis | `Superscript | `Subscript ]
module rec Class : sig
type t = string list
end =
Class
and Link : sig
type t = { target : Target.t; content : Inline.t; tooltip : string option }
end =
Link
and Target : sig
type internal = Resolved of Url.t | Unresolved
type href = string
type t = Internal of internal | External of href
end =
Target
and Raw_markup : sig
type target = Odoc_model.Comment.raw_markup_target
and t = target * string
end =
Raw_markup
and Source : sig
type t = token list
and tag = string option
and token = Elt of Inline.t | Tag of tag * t
end =
Source
and Math : sig
type t = string
end =
Math
and Inline : sig
type entity = string
type t = one list
and one = { attr : Class.t; desc : desc }
and desc =
| Text of string
| Entity of entity
| Linebreak
| Styled of style * t
| Link of Link.t
| Source of Source.t
| Math of Math.t
| Raw_markup of Raw_markup.t
end =
Inline
and Description : sig
type one = { attr : Class.t; key : Inline.t; definition : Block.t }
type t = one list
end =
Description
and Heading : sig
type t = {
label : string option;
level : int;
title : Inline.t;
source_anchor : Url.t option;
(** Used for the source link of the item displayed on the page. *)
}
end =
Heading
and Block : sig
type lang_tag = string
type t = one list
and one = { attr : Class.t; desc : desc }
and desc =
| Inline of Inline.t
| Paragraph of Inline.t
| List of list_type * t list
| Description of Description.t
| Source of lang_tag * string list * (string * string) list * Source.t * t
| Math of Math.t
| Verbatim of string
| Raw_markup of Raw_markup.t
| Table of t Table.t
| Image of Target.t * string
| Video of Target.t * string
| Audio of Target.t * string
and list_type = Ordered | Unordered
end =
Block
and Table : sig
type alignment = Left | Center | Right | Default
type 'a t = {
data : ('a * [ `Header | `Data ]) list list;
align : alignment list;
}
end =
Table
and DocumentedSrc : sig
type 'a documented = {
attrs : Class.t;
anchor : Url.Anchor.t option;
code : 'a;
doc : Block.t;
markers : string * string;
}
type t = one list
and one =
| Code of Source.t
| Documented of Inline.t documented
| Nested of t documented
| Subpage of Subpage.t
| Alternative of Alternative.t
end =
DocumentedSrc
and Alternative : sig
type expansion = {
status : [ `Inline | `Open | `Closed | `Default ];
summary : Source.t;
expansion : DocumentedSrc.t;
url : Url.Path.t;
}
type t = Expansion of expansion
end =
Alternative
and Subpage : sig
type status = [ `Inline | `Open | `Closed | `Default ]
type t = { status : status; content : Page.t }
end =
Subpage
and Include : sig
type status = [ `Inline | `Open | `Closed | `Default ]
type t = { status : status; content : Item.t list; summary : Source.t }
end =
Include
and Item : sig
type 'a item = {
attr : Class.t;
anchor : Url.Anchor.t option;
content : 'a;
doc : Block.t;
source_anchor : Url.Anchor.t option;
}
type text = Block.t
type t =
| Text of text
| Heading of Heading.t
| Declaration of DocumentedSrc.t item
| Include of Include.t item
end =
Item
and Page : sig
type t = {
preamble : Item.t list;
items : Item.t list;
url : Url.Path.t;
source_anchor : Url.t option;
(** Url to the corresponding source code. Might be a whole source file
or a sub part. *)
resources : Odoc_extension_registry.resource list;
(** Resources (JS/CSS) to inject into the page, collected from extensions. *)
assets : Odoc_extension_registry.asset list;
(** Binary assets to write alongside this page's HTML output. *)
}
end =
Page
and Source_page : sig
type target = {
documentation : Url.Anchor.t option;
implementation : Url.Anchor.t option;
}
type info = Syntax of string | Anchor of string | Link of target
type code = span list
and span = Tagged_code of info * code | Plain_code of string
type t = { url : Url.Path.t; contents : code }
end =
Source_page
(** Resources that extensions can inject into pages (HTML only) *)
module Resource = struct
type t =
| Js_url of string (** External JavaScript: *)
| Css_inline of string (** Inline CSS: *)
let equal a b =
match (a, b) with
| Js_url a, Js_url b -> String.equal a b
| Css_url a, Css_url b -> String.equal a b
| Js_inline a, Js_inline b -> String.equal a b
| Css_inline a, Css_inline b -> String.equal a b
| _ -> false
end
module Document = struct
type t = Page of Page.t | Source_page of Source_page.t
end
let inline ?(attr = []) desc = Inline.{ attr; desc }
let block ?(attr = []) desc = Block.{ attr; desc }