--- title: GitLab Flavored Markdown (GLFM) Spec version: alpha ... # Introduction TODO: Write a GitLab-specific version of the GitHub Flavored Markdown intro section. # Preliminaries ## Characters and lines Any sequence of [characters] is a valid CommonMark document. A [character](@) is a Unicode code point. Although some code points (for example, combining accents) do not correspond to characters in an intuitive sense, all code points count as characters for purposes of this spec. This spec does not specify an encoding; it thinks of lines as composed of [characters] rather than bytes. A conforming parser may be limited to a certain encoding. A [line](@) is a sequence of zero or more [characters] other than newline (`U+000A`) or carriage return (`U+000D`), followed by a [line ending] or by the end of file. A [line ending](@) is a newline (`U+000A`), a carriage return (`U+000D`) not followed by a newline, or a carriage return and a following newline. A line containing no characters, or a line containing only spaces (`U+0020`) or tabs (`U+0009`), is called a [blank line](@). The following definitions of character classes will be used in this spec: A [whitespace character](@) is a space (`U+0020`), tab (`U+0009`), newline (`U+000A`), line tabulation (`U+000B`), form feed (`U+000C`), or carriage return (`U+000D`). [Whitespace](@) is a sequence of one or more [whitespace characters]. A [Unicode whitespace character](@) is any code point in the Unicode `Zs` general category, or a tab (`U+0009`), carriage return (`U+000D`), newline (`U+000A`), or form feed (`U+000C`). [Unicode whitespace](@) is a sequence of one or more [Unicode whitespace characters]. A [space](@) is `U+0020`. A [non-whitespace character](@) is any character that is not a [whitespace character]. An [ASCII punctuation character](@) is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, `*`, `+`, `,`, `-`, `.`, `/` (U+0021–2F), `:`, `;`, `<`, `=`, `>`, `?`, `@` (U+003A–0040), `[`, `\`, `]`, `^`, `_`, `` ` `` (U+005B–0060), `{`, `|`, `}`, or `~` (U+007B–007E). A [punctuation character](@) is an [ASCII punctuation character] or anything in the general Unicode categories `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. ## Tabs Tabs in lines are not expanded to [spaces]. However, in contexts where whitespace helps to define block structure, tabs behave as if they were replaced by spaces with a tab stop of 4 characters. Thus, for example, a tab can be used instead of four spaces in an indented code block. (Note, however, that internal tabs are passed through as literal tabs, not expanded to spaces.) ```````````````````````````````` example →foo→baz→→bim .
foo→baz→→bim
````````````````````````````````
```````````````````````````````` example
→foo→baz→→bim
.
foo→baz→→bim
````````````````````````````````
```````````````````````````````` example
a→a
ὐ→a
.
a→a
ὐ→a
````````````````````````````````
In the following example, a continuation paragraph of a list
item is indented with a tab; this has exactly the same effect
as indentation with four spaces would:
```````````````````````````````` example
- foo
→bar
.
foo
bar
foo
bar
```````````````````````````````` ```````````````````````````````` example -→→foo .foo
foo
foo
bar
````````````````````````````````
```````````````````````````````` example
- foo
- bar
→ - baz
.
+++
```````````````````````````````` ```````````````````````````````` example === .===
```````````````````````````````` Not enough characters: ```````````````````````````````` example -- ** __ .-- ** __
```````````````````````````````` One to three spaces indent are allowed: ```````````````````````````````` example *** *** *** .***
````````````````````````````````
```````````````````````````````` example
Foo
***
.
Foo ***
```````````````````````````````` More than three characters may be used: ```````````````````````````````` example _____________________________________ ._ _ _ _ a
a------
---a---
```````````````````````````````` It is required that all of the [non-whitespace characters] be the same. So, this is not a thematic break: ```````````````````````````````` example *-* .-
```````````````````````````````` Thematic breaks do not need blank lines before or after: ```````````````````````````````` example - foo *** - bar .Foo
bar
```````````````````````````````` If a line of dashes that meets the above conditions for being a thematic break could also be interpreted as the underline of a [setext heading], the interpretation as a [setext heading] takes precedence. Thus, for example, this is a setext heading, not a paragraph followed by a thematic break: ```````````````````````````````` example Foo --- bar .bar
```````````````````````````````` When both a thematic break and a list item are possible interpretations of a line, the thematic break takes precedence: ```````````````````````````````` example * Foo * * * * Bar .####### foo
```````````````````````````````` At least one space is required between the `#` characters and the heading's contents, unless the heading is empty. Note that many implementations currently do not require the space. However, the space was required by the [original ATX implementation](http://www.aaronsw.com/2002/atx/atx.py), and it helps prevent things like the following from being parsed as headings: ```````````````````````````````` example #5 bolt #hashtag .#5 bolt
#hashtag
```````````````````````````````` This is not a heading, because the first `#` is escaped: ```````````````````````````````` example \## foo .## foo
```````````````````````````````` Contents are parsed as inlines: ```````````````````````````````` example # foo *bar* \*baz\* .# foo
````````````````````````````````
```````````````````````````````` example
foo
# bar
.
foo # bar
```````````````````````````````` A closing sequence of `#` characters is optional: ```````````````````````````````` example ## foo ## ### bar ### .Foo bar
Bar foo
```````````````````````````````` ATX headings can be empty: ```````````````````````````````` example ## # ### ### . ```````````````````````````````` ## Setext headings A [setext heading](@) consists of one or more lines of text, each containing at least one [non-whitespace character], with no more than 3 spaces indentation, followed by a [setext heading underline]. The lines of text must be such that, were they not followed by the setext heading underline, they would be interpreted as a paragraph: they cannot be interpretable as a [code fence], [ATX heading][ATX headings], [block quote][block quotes], [thematic break][thematic breaks], [list item][list items], or [HTML block][HTML blocks]. A [setext heading underline](@) is a sequence of `=` characters or a sequence of `-` characters, with no more than 3 spaces indentation and any number of trailing spaces. If a line containing a single `-` can be interpreted as an empty [list items], it should be interpreted this way and not as a [setext heading underline]. The heading is a level 1 heading if `=` characters are used in the [setext heading underline], and a level 2 heading if `-` characters are used. The contents of the heading are the result of parsing the preceding lines of text as CommonMark inline content. In general, a setext heading need not be preceded or followed by a blank line. However, it cannot interrupt a paragraph, so when a setext heading comes after a paragraph, a blank line is needed between them. Simple examples: ```````````````````````````````` example Foo *bar* ========= Foo *bar* --------- .Foo
---
Foo
Foo ---
```````````````````````````````` The setext heading underline cannot contain internal spaces: ```````````````````````````````` example Foo = = Foo --- - .Foo = =
Foo
`
of dashes"/>
```````````````````````````````` The setext heading underline cannot be a [lazy continuation line] in a list item or block quote: ```````````````````````````````` example > Foo --- .Foo
```````````````````````````````` ```````````````````````````````` example - Foo --- .foo bar ===
Baz
```````````````````````````````` Setext headings cannot be empty: ```````````````````````````````` example ==== .====
```````````````````````````````` Setext heading text lines must not be interpretable as block constructs other than paragraphs. So, the line of dashes in these examples gets interpreted as a thematic break: ```````````````````````````````` example --- --- .foo
foo
Foo
baz
```````````````````````````````` Authors who want interpretation 2 can put blank lines around the thematic break, ```````````````````````````````` example Foo bar --- baz .Foo bar
baz
```````````````````````````````` or use a thematic break that cannot count as a [setext heading underline], such as ```````````````````````````````` example Foo bar * * * baz .Foo bar
baz
```````````````````````````````` Authors who want interpretation 3 can use backslash escapes: ```````````````````````````````` example Foo bar \--- baz .Foo bar --- baz
```````````````````````````````` ## Indented code blocks An [indented code block](@) is composed of one or more [indented chunks] separated by blank lines. An [indented chunk](@) is a sequence of non-blank lines, each indented four or more spaces. The contents of the code block are the literal contents of the lines, including trailing [line endings], minus four spaces of indentation. An indented code block has no [info string]. An indented code block cannot interrupt a paragraph, so there must be a blank line between a paragraph and a following indented code block. (A blank line is not needed, however, between a code block and a following paragraph.) ```````````````````````````````` example a simple indented code block .a simple
indented code block
````````````````````````````````
If there is any ambiguity between an interpretation of indentation
as a code block and as indicating that material belongs to a [list
item][list items], the list item interpretation takes precedence:
```````````````````````````````` example
- foo
bar
.
foo
bar
foo
<a/>
*hi*
- one
````````````````````````````````
Here we have three chunks separated by blank lines:
```````````````````````````````` example
chunk1
chunk2
chunk3
.
chunk1
chunk2
chunk3
````````````````````````````````
Any initial spaces beyond four will be included in the content, even
in interior blank lines:
```````````````````````````````` example
chunk1
chunk2
.
chunk1
chunk2
````````````````````````````````
An indented code block cannot interrupt a paragraph. (This
allows hanging indents and the like.)
```````````````````````````````` example
Foo
bar
.
Foo bar
```````````````````````````````` However, any non-blank line with fewer than four leading spaces ends the code block immediately. So a paragraph may occur immediately after indented code: ```````````````````````````````` example foo bar .foo
bar
```````````````````````````````` And indented code can occur immediately before and after other kinds of blocks: ```````````````````````````````` example # Heading foo Heading ------ foo ---- .foo
foo
foo
bar
````````````````````````````````
Blank lines preceding or following an indented code block
are not included in it:
```````````````````````````````` example
foo
.
foo
````````````````````````````````
Trailing spaces are included in the code block's content:
```````````````````````````````` example
foo
.
foo
````````````````````````````````
## Fenced code blocks
A [code fence](@) is a sequence
of at least three consecutive backtick characters (`` ` ``) or
tildes (`~`). (Tildes and backticks cannot be mixed.)
A [fenced code block](@)
begins with a code fence, indented no more than three spaces.
The line with the opening code fence may optionally contain some text
following the code fence; this is trimmed of leading and trailing
whitespace and called the [info string](@). If the [info string] comes
after a backtick fence, it may not contain any backtick
characters. (The reason for this restriction is that otherwise
some inline code would be incorrectly interpreted as the
beginning of a fenced code block.)
The content of the code block consists of all subsequent lines, until
a closing [code fence] of the same type as the code block
began with (backticks or tildes), and with at least as many backticks
or tildes as the opening code fence. If the leading code fence is
indented N spaces, then up to N spaces of indentation are removed from
each line of the content (if present). (If a content line is not
indented, it is preserved unchanged. If it is indented less than N
spaces, all of the indentation is removed.)
The closing code fence may be indented up to three spaces, and may be
followed only by spaces, which are ignored. If the end of the
containing block (or document) is reached and no closing code fence
has been found, the code block contains all of the lines after the
opening code fence until the end of the containing block (or
document). (An alternative spec would require backtracking in the
event that a closing code fence is not found. But this makes parsing
much less efficient, and there seems to be no real down side to the
behavior described here.)
A fenced code block may interrupt a paragraph, and does not require
a blank line either before or after.
The content of a code fence is treated as literal text, not parsed
as inlines. The first word of the [info string] is typically used to
specify the language of the code sample, and rendered in the `class`
attribute of the `code` tag. However, this spec does not mandate any
particular treatment of the [info string].
Here is a simple example with backticks:
```````````````````````````````` example
```
<
>
```
.
<
>
````````````````````````````````
With tildes:
```````````````````````````````` example
~~~
<
>
~~~
.
<
>
````````````````````````````````
Fewer than three backticks is not enough:
```````````````````````````````` example
``
foo
``
.
foo
aaa
~~~
````````````````````````````````
```````````````````````````````` example
~~~
aaa
```
~~~
.
aaa
```
````````````````````````````````
The closing code fence must be at least as long as the opening fence:
```````````````````````````````` example
````
aaa
```
``````
.
aaa
```
````````````````````````````````
```````````````````````````````` example
~~~~
aaa
~~~
~~~~
.
aaa
~~~
````````````````````````````````
Unclosed code blocks are closed by the end of the document
(or the enclosing [block quote][block quotes] or [list item][list items]):
```````````````````````````````` example
```
.
````````````````````````````````
```````````````````````````````` example
`````
```
aaa
.
```
aaa
````````````````````````````````
```````````````````````````````` example
> ```
> aaa
bbb
.
aaa
bbb
```````````````````````````````` A code block can have all empty lines as its content: ```````````````````````````````` example ``` ``` .
````````````````````````````````
A code block can be empty:
```````````````````````````````` example
```
```
.
````````````````````````````````
Fences can be indented. If the opening fence is indented,
content lines will have equivalent opening indentation removed,
if present:
```````````````````````````````` example
```
aaa
aaa
```
.
aaa
aaa
````````````````````````````````
```````````````````````````````` example
```
aaa
aaa
aaa
```
.
aaa
aaa
aaa
````````````````````````````````
```````````````````````````````` example
```
aaa
aaa
aaa
```
.
aaa
aaa
aaa
````````````````````````````````
Four spaces indentation produces an indented code block:
```````````````````````````````` example
```
aaa
```
.
```
aaa
```
````````````````````````````````
Closing fences may be indented by 0-3 spaces, and their indentation
need not match that of the opening fence:
```````````````````````````````` example
```
aaa
```
.
aaa
````````````````````````````````
```````````````````````````````` example
```
aaa
```
.
aaa
````````````````````````````````
This is not a closing fence, because it is indented 4 spaces:
```````````````````````````````` example
```
aaa
```
.
aaa
```
````````````````````````````````
Code fences (opening and closing) cannot contain internal spaces:
```````````````````````````````` example
``` ```
aaa
.
aaa
aaa
~~~ ~~
````````````````````````````````
Fenced code blocks can interrupt paragraphs, and can be followed
directly by paragraphs, without a blank line between:
```````````````````````````````` example
foo
```
bar
```
baz
.
foo
bar
baz
```````````````````````````````` Other blocks can also occur before and after fenced code blocks without an intervening blank line: ```````````````````````````````` example foo --- ~~~ bar ~~~ # baz .bar
def foo(x)
return 3
end
````````````````````````````````
```````````````````````````````` example
~~~~ ruby startline=3 $%@#$
def foo(x)
return 3
end
~~~~~~~
.
def foo(x)
return 3
end
````````````````````````````````
```````````````````````````````` example
````;
````
.
````````````````````````````````
[Info strings] for backtick code blocks cannot contain backticks:
```````````````````````````````` example
``` aa ```
foo
.
aa
foo
foo
````````````````````````````````
Closing code fences cannot have [info strings]:
```````````````````````````````` example
```
``` aaa
```
.
``` aaa
````````````````````````````````
## HTML blocks
An [HTML block](@) is a group of lines that is treated
as raw HTML (and will not be escaped in HTML output).
There are seven kinds of [HTML block], which can be defined by their
start and end conditions. The block begins with a line that meets a
[start condition](@) (after up to three spaces optional indentation).
It ends with the first subsequent line that meets a matching [end
condition](@), or the last line of the document, or the last line of
the [container block](#container-blocks) containing the current HTML
block, if no line is encountered that meets the [end condition]. If
the first line meets both the [start condition] and the [end
condition], the block will contain just that line.
1. **Start condition:** line begins with the string ``, ``, or `` (case-insensitive; it
need not match the start tag).
2. **Start condition:** line begins with the string ``.
3. **Start condition:** line begins with the string ``.\
**End condition:** line contains the string `?>`.
4. **Start condition:** line begins with the string ``.
5. **Start condition:** line begins with the string
``.
6. **Start condition:** line begins the string `<` or ``
followed by one of the strings (case-insensitive) `address`,
`article`, `aside`, `base`, `basefont`, `blockquote`, `body`,
`caption`, `center`, `col`, `colgroup`, `dd`, `details`, `dialog`,
`dir`, `div`, `dl`, `dt`, `fieldset`, `figcaption`, `figure`,
`footer`, `form`, `frame`, `frameset`,
`h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `head`, `header`, `hr`,
`html`, `iframe`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`,
`nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`,
`section`, `summary`, `table`, `tbody`, `td`,
`tfoot`, `th`, `thead`, `title`, `tr`, `track`, `ul`, followed
by [whitespace], the end of the line, the string `>`, or
the string `/>`.\
**End condition:** line is followed by a [blank line].
7. **Start condition:** line begins with a complete [open tag]
(with any [tag name] other than `script`,
`style`, or `pre`) or a complete [closing tag],
followed only by [whitespace] or the end of the line.\
**End condition:** line is followed by a [blank line].
HTML blocks continue until they are closed by their appropriate
[end condition], or the last line of the document or other [container
block](#container-blocks). This means any HTML **within an HTML
block** that might otherwise be recognised as a start condition will
be ignored by the parser and passed through as-is, without changing
the parser's state.
For instance, `` within a HTML block started by `