Module Markup

Here, we test the rendering of comment markup.

#sectionsSections

Let's get these done first, because sections will be used to break up the rest of this test.

Besides the section heading above, there are also

#subsection-headingsSubsection headings

and

#sub-subsection-headingsSub-subsection headings

but odoc has banned deeper headings. There are also title headings, but they are only allowed in mld files.

#anchorsAnchors

Sections can have attached Anchors, and it is possible to link to them. Links to section headers should not be set in source code style.

#paragraphParagraph

Individual paragraphs can have a heading.

#subparagraph Subparagraph

Parts of a longer paragraph that can be considered alone can also have headings.

#stylingStyling

This paragraph has some styled elements: bold and italic , bold italic, emphasis, emphasis within emphasis, bold italic, superscript, subscript . The line spacing should be enough for superscripts and subscripts not to look odd.

Note: In italics emphasis is rendered as normal text while emphasis in emphasis is rendered in italics. It also work the same inlinks in italics with emphasis in emphasis.

code is a different kind of markup that doesn't allow nested markup.

It's possible for two markup elements to appear next to each other and have a space, and appear nextto each other with no space. It doesn't matter how much space it was in the source: in this sentence, it was two space characters. And in this one, there is a newline.

This is also true between non-code markup and code.

Code can appear inside ``other`` markup. Its display shouldn't be affected.

#links-and-referencesLinks and references

This is a link. It sends you to the top of this page. Links can have markup inside them: bold , italics, emphasis , superscript, subscript, and `code <#>__. Links can also be nested `inside <#>__ markup. Links cannot be nested inside each other. This link has no replacement text: # . The text is filled in by odoc. This is a shorthand link: #. The text is also filled in by odoc in this case.

This is a reference to `foo <#val-foo>__. References can have replacement text: `the value foo <#val-foo>__. Except for the special lookup support, references are pretty much just like links. The replacement text can have nested styles: bold, italic, emphasis, superscript, subscript, and `code <#val-foo>__. It's also possible to surround a reference in a style: foo <#val-foo>`__ . References can't be nested inside references, and links and references can't be nested inside each other.

#preformatted-textPreformatted text

This is a code block:

let foo = ()
(** There are some nested comments in here, but an unpaired comment
    terminator would terminate the whole doc surrounding comment. It's
    best to keep code blocks no wider than 72 characters. *)

let bar =
  ignore foo

There are also verbatim blocks:

The main difference is these don't get syntax highlighting.

#listsLists

  1. This is a
  2. shorthand numbered list.

just creates a paragraph outside the list.

  1. but there is also the numbered variant.

#unicodeUnicode

The parser supports any ASCII-compatible encoding, in particuλar UTF-8.

#raw-htmlRaw HTML

Raw HTML can be as inline elements into sentences.

If the raw HTML is the only thing in a paragraph, it is treated as a block element, and won't be wrapped in paragraph tags by the HTML generator.

#mathMath

Math elements can be inline: \int_{-\infty}^\infty, or blocks:

% \f is defined as #1f(#2) using the macro
\newcommand{\f}[2]{#1f(#2)}
\f\relax{x} = \int_{-\infty}^\infty
\f\hat\xi\,e^{2 \pi i \xi x}
\,d\xi

#modulesModules

#tagsTags

Each comment can end with zero or more tags. Here are some examples:

#val-foo valfoo : unit

Comments in structure items support markup, t oo.

Some modules to support references.

#module-X module`X <Markup-X.html>__`\\:\sig\...\end\\``

#module-Y module`Y <Markup-Y.html>__`\\:\sig\...\end\\``