`, ``, ``, etc. — must be separated from
> surrounding content by blank lines, and the start and end tags of the
-> block should not be indented with tabs or spaces.
+> block should not be indented with spaces or tabs.
In some ways Gruber's rule is more restrictive than the one given
here:
@@ -3141,14 +3133,15 @@ deleted. The exception is inside `
` tags, but as described
## Link reference definitions
A [link reference definition](@)
-consists of a [link label], indented up to three spaces, followed
-by a colon (`:`), optional [whitespace] (including up to one
+consists of a [link label], optionally preceded by up to three spaces of
+indentation, followed
+by a colon (`:`), optional spaces or tabs (including up to one
[line ending]), a [link destination],
-optional [whitespace] (including up to one
+optional spaces or tabs (including up to one
[line ending]), and an optional [link
title], which if it is present must be separated
-from the [link destination] by [whitespace].
-No further [non-whitespace characters] may occur on the line.
+from the [link destination] by spaces or tabs.
+No further character may occur.
A [link reference definition]
does not correspond to a structural element of a document. Instead, it
@@ -3266,7 +3259,7 @@ The link destination may not be omitted:
````````````````````````````````
The title must be separated from the link destination by
-whitespace:
+spaces or tabs:
```````````````````````````````` example
[foo]: (baz)
@@ -3357,7 +3350,7 @@ bar
This is not a link reference definition, because there are
-[non-whitespace characters] after the title:
+characters other than spaces or tabs after the title:
```````````````````````````````` example
[foo]: /url "title" ok
@@ -3508,7 +3501,7 @@ kinds of blocks forms a [paragraph](@).
The contents of the paragraph are the result of parsing the
paragraph's raw content as inlines. The paragraph's raw content
is formed by concatenating the lines and removing initial and final
-[whitespace].
+spaces or tabs.
A simple example with two paragraphs:
@@ -3551,7 +3544,7 @@ bbb
````````````````````````````````
-Leading spaces are skipped:
+Leading spaces or tabs are skipped:
```````````````````````````````` example
aaa
@@ -3576,8 +3569,8 @@ ccc
````````````````````````````````
-However, the first line may be indented at most three spaces,
-or an indented code block will be triggered:
+However, the first line may be preceded by up to three spaces of indentation.
+Four spaces of indentation is too many:
```````````````````````````````` example
aaa
@@ -3598,7 +3591,7 @@ bbb
````````````````````````````````
-Final spaces are stripped before inline parsing, so a paragraph
+Final spaces or tabs are stripped before inline parsing, so a paragraph
that ends with two or more spaces will not end with a [hard line
break]:
@@ -3657,9 +3650,11 @@ these constructions. (A recipe is provided below in the section entitled
## Block quotes
-A [block quote marker](@)
-consists of 0-3 spaces of initial indent, plus (a) the character `>` together
-with a following space, or (b) a single character `>` not followed by a space.
+A [block quote marker](@),
+optionally preceded by up to three spaces of indentation,
+consists of (a) the character `>` together with a following space of
+indentation, or (b) a single character `>` not followed by a space of
+indentation.
The following rules define [block quotes]:
@@ -3671,8 +3666,8 @@ The following rules define [block quotes]:
2. **Laziness.** If a string of lines *Ls* constitute a [block
quote](#block-quotes) with contents *Bs*, then the result of deleting
the initial [block quote marker] from one or
- more lines in which the next [non-whitespace character] after the [block
- quote marker] is [paragraph continuation
+ more lines in which the next character other than a space or tab after the
+ [block quote marker] is [paragraph continuation
text] is a block quote with *Bs* as its content.
[Paragraph continuation text](@) is text
that will be parsed as part of the content of a paragraph, but does
@@ -3698,7 +3693,7 @@ baz
````````````````````````````````
-The spaces after the `>` characters can be omitted:
+The space or tab after the `>` characters can be omitted:
```````````````````````````````` example
># Foo
@@ -3713,7 +3708,7 @@ baz
````````````````````````````````
-The `>` characters can be indented 1-3 spaces:
+The `>` characters can be preceded by up to three spaces of indentation:
```````````````````````````````` example
> # Foo
@@ -3728,7 +3723,7 @@ baz
````````````````````````````````
-Four spaces gives us a code block:
+Four spaces of indentation is too many:
```````````````````````````````` example
> # Foo
@@ -4063,8 +4058,8 @@ baz
When including an indented code block in a block quote,
remember that the [block quote marker] includes
-both the `>` and a following space. So *five spaces* are needed after
-the `>`:
+both the `>` and a following space of indentation. So *five spaces* are needed
+after the `>`:
```````````````````````````````` example
> code
@@ -4099,10 +4094,10 @@ in some browsers.)
The following rules define [list items]:
1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of
- blocks *Bs* starting with a [non-whitespace character], and *M* is a
- list marker of width *W* followed by 1 ≤ *N* ≤ 4 spaces, then the result
- of prepending *M* and the following spaces to the first line of
- *Ls*, and indenting subsequent lines of *Ls* by *W + N* spaces, is a
+ blocks *Bs* starting with a character other than a space or tab, and *M* is
+ a list marker of width *W* followed by 1 ≤ *N* ≤ 4 spaces of indentation,
+ then the result of prepending *M* and the following spaces to the first line
+ of Ls*, and indenting subsequent lines of *Ls* by *W + N* spaces, is a
list item with *Bs* as its contents. The type of the list item
(bullet or ordered) is determined by the type of its list marker.
If the list item is ordered, then it is also assigned a start
@@ -4167,8 +4162,8 @@ with two lines.
The most important thing to notice is that the position of
the text after the list marker determines how much indentation
is needed in subsequent blocks in the list item. If the list
-marker takes up two spaces, and there are three spaces between
-the list marker and the next [non-whitespace character], then blocks
+marker takes up two spaces of indentation, and there are three spaces between
+the list marker and the next character other than a space or tab, then blocks
must be indented five spaces in order to fall under the list
item.
@@ -4229,10 +4224,10 @@ put under the list item:
It is tempting to think of this in terms of columns: the continuation
-blocks must be indented at least to the column of the first
-[non-whitespace character] after the list marker. However, that is not quite right.
-The spaces after the list marker determine how much relative indentation
-is needed. Which column this indentation reaches will depend on
+blocks must be indented at least to the column of the first character other than
+a space or tab after the list marker. However, that is not quite right.
+The spaces of indentation after the list marker determine how much relative
+indentation is needed. Which column this indentation reaches will depend on
how the list item is embedded in other constructions, as shown by
this example:
@@ -4279,7 +4274,7 @@ far enough past the blockquote marker:
````````````````````````````````
-Note that at least one space is needed between the list marker and
+Note that at least one space or tab is needed between the list marker and
any following content, so these are not list items:
```````````````````````````````` example
@@ -4411,16 +4406,16 @@ A start number may not be negative:
2. **Item starting with indented code.** If a sequence of lines *Ls*
constitute a sequence of blocks *Bs* starting with an indented code
block, and *M* is a list marker of width *W* followed by
- one space, then the result of prepending *M* and the following
- space to the first line of *Ls*, and indenting subsequent lines of
- *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents.
+ one space of indentation, then the result of prepending *M* and the
+ following space to the first line of *Ls*, and indenting subsequent lines
+ of *Ls* by *W + 1* spaces, is a list item with *Bs* as its contents.
If a line is empty, then it need not be indented. The type of the
list item (bullet or ordered) is determined by the type of its list
marker. If the list item is ordered, then it is also assigned a
start number, based on the ordered list marker.
-An indented code block will have to be indented four spaces beyond
-the edge of the region where text will be included in the list item.
+An indented code block will have to be preceded by four spaces of indentation
+beyond the edge of the region where text will be included in the list item.
In the following case that is 6 spaces:
```````````````````````````````` example
@@ -4456,8 +4451,8 @@ And in this case it is 11 spaces:
If the *first* block in the list item is an indented code block,
-then by rule #2, the contents must be indented *one* space after the
-list marker:
+then by rule #2, the contents must be preceded by *one* space of indentation
+after the list marker:
```````````````````````````````` example
indented code
@@ -4493,7 +4488,7 @@ paragraph
````````````````````````````````
-Note that an additional space indent is interpreted as space
+Note that an additional space of indentation is interpreted as space
inside the code block:
```````````````````````````````` example
@@ -4517,10 +4512,10 @@ inside the code block:
Note that rules #1 and #2 only apply to two cases: (a) cases
in which the lines to be included in a list item begin with a
-[non-whitespace character], and (b) cases in which
+characer other than a space or tab, and (b) cases in which
they begin with an indented code
block. In a case like the following, where the first block begins with
-a three-space indent, the rules do not allow us to form a list item by
+three spaces of indentation, the rules do not allow us to form a list item by
indenting the whole thing and prepending a list marker:
```````````````````````````````` example
@@ -4545,8 +4540,8 @@ bar
````````````````````````````````
-This is not a significant restriction, because when a block begins
-with 1-3 spaces indent, the indentation can always be removed without
+This is not a significant restriction, because when a block is preceded by up to
+three spaces of indentation, the indentation can always be removed without
a change in interpretation, allowing rule #1 to be applied. So, in
the above case:
@@ -4568,8 +4563,8 @@ the above case:
starting with a single [blank line] constitute a (possibly empty)
sequence of blocks *Bs*, and *M* is a list marker of width *W*,
then the result of prepending *M* to the first line of *Ls*, and
- indenting subsequent lines of *Ls* by *W + 1* spaces, is a list
- item with *Bs* as its contents.
+ preceding subsequent lines of *Ls* by *W + 1* spaces of indentation, is a
+ list item with *Bs* as its contents.
If a line is empty, then it need not be indented. The type of the
list item (bullet or ordered) is determined by the type of its list
marker. If the list item is ordered, then it is also assigned a
@@ -4644,7 +4639,7 @@ Here is an empty bullet list item:
````````````````````````````````
-It does not matter whether there are spaces following the [list marker]:
+It does not matter whether there are spaces or tabs following the [list marker]:
```````````````````````````````` example
- foo
@@ -4701,9 +4696,9 @@ foo
4. **Indentation.** If a sequence of lines *Ls* constitutes a list item
- according to rule #1, #2, or #3, then the result of indenting each line
- of *Ls* by 1-3 spaces (the same for each line) also constitutes a
- list item with the same contents and attributes. If a line is
+ according to rule #1, #2, or #3, then the result of preceding each line
+ of *Ls* by up to three spaces of indentation (the same for each line) also
+ constitutes a list item with the same contents and attributes. If a line is
empty, then it need not be indented.
Indented one space:
@@ -4802,7 +4797,7 @@ Four spaces indent gives a code block:
5. **Laziness.** If a string of lines *Ls* constitute a [list
item](#list-items) with contents *Bs*, then the result of deleting
some or all of the indentation from one or more lines in which the
- next [non-whitespace character] after the indentation is
+ next character other than a space or tab after the indentation is
[paragraph continuation text] is a
list item with the same contents and attributes. The unindented
lines are called
@@ -4887,7 +4882,7 @@ continued here.
The rules for sublists follow from the general rules
[above][List items]. A sublist must be indented the same number
-of spaces a paragraph would need to be in order to be included
+of spaces of indentation a paragraph would need to be in order to be included
in the list item.
So, in this case we need two spaces indent:
@@ -5120,8 +5115,8 @@ The choice of four spaces is arbitrary. It can be learned, but it is
not likely to be guessed, and it trips up beginners regularly.
Would it help to adopt a two-space rule? The problem is that such
-a rule, together with the rule allowing 1--3 spaces indentation of the
-initial list marker, allows text that is indented *less than* the
+a rule, together with the rule allowing up to three spaces of indentation for
+the initial list marker, allows text that is indented *less than* the
original list marker to be included in the list item. For example,
`Markdown.pl` parses
@@ -5513,8 +5508,8 @@ item:
````````````````````````````````
-Note, however, that list items may not be indented more than
-three spaces. Here `- e` is treated as a paragraph continuation
+Note, however, that list items may not be preceded by more than
+three spaces of indentation. Here `- e` is treated as a paragraph continuation
line, because it is indented more than three spaces:
```````````````````````````````` example
@@ -5600,7 +5595,7 @@ So is this, with a empty second item:
````````````````````````````````
-These are loose lists, even though there is no space between the items,
+These are loose lists, even though there are no blank lines between the items,
because one of the items directly contains two block-level elements
with a blank line between them:
@@ -6137,17 +6132,17 @@ a non-backslash-escaped `_` character.
A [left-flanking delimiter run](@) is
a [delimiter run] that is (1) not followed by [Unicode whitespace],
-and either (2a) not followed by a [punctuation character], or
-(2b) followed by a [punctuation character] and
-preceded by [Unicode whitespace] or a [punctuation character].
+and either (2a) not followed by a [Unicode punctuation character], or
+(2b) followed by a [Unicode punctuation character] and
+preceded by [Unicode whitespace] or a [Unicode punctuation character].
For purposes of this definition, the beginning and the end of
the line count as Unicode whitespace.
A [right-flanking delimiter run](@) is
a [delimiter run] that is (1) not preceded by [Unicode whitespace],
-and either (2a) not preceded by a [punctuation character], or
-(2b) preceded by a [punctuation character] and
-followed by [Unicode whitespace] or a [punctuation character].
+and either (2a) not preceded by a [Unicode punctuation character], or
+(2b) preceded by a [Unicode punctuation character] and
+followed by [Unicode whitespace] or a [Unicode punctuation character].
For purposes of this definition, the beginning and the end of
the line count as Unicode whitespace.
@@ -6202,7 +6197,7 @@ The following rules define emphasis and strong emphasis:
it is part of a [left-flanking delimiter run]
and either (a) not part of a [right-flanking delimiter run]
or (b) part of a [right-flanking delimiter run]
- preceded by punctuation.
+ preceded by a [Unicode punctuation character].
3. A single `*` character [can close emphasis](@)
iff it is part of a [right-flanking delimiter run].
@@ -6211,7 +6206,7 @@ The following rules define emphasis and strong emphasis:
it is part of a [right-flanking delimiter run]
and either (a) not part of a [left-flanking delimiter run]
or (b) part of a [left-flanking delimiter run]
- followed by punctuation.
+ followed by a [Unicode punctuation character].
5. A double `**` [can open strong emphasis](@)
iff it is part of a [left-flanking delimiter run].
@@ -6220,7 +6215,7 @@ The following rules define emphasis and strong emphasis:
it is part of a [left-flanking delimiter run]
and either (a) not part of a [right-flanking delimiter run]
or (b) part of a [right-flanking delimiter run]
- preceded by punctuation.
+ preceded by a [Unicode punctuation character].
7. A double `**` [can close strong emphasis](@)
iff it is part of a [right-flanking delimiter run].
@@ -6229,7 +6224,7 @@ The following rules define emphasis and strong emphasis:
it is part of a [right-flanking delimiter run]
and either (a) not part of a [left-flanking delimiter run]
or (b) part of a [left-flanking delimiter run]
- followed by punctuation.
+ followed by a [Unicode punctuation character].
9. Emphasis begins with a delimiter that [can open emphasis] and ends
with a delimiter that [can close emphasis], and that uses the same
@@ -6441,7 +6436,7 @@ whitespace:
````````````````````````````````
-A newline also counts as whitespace:
+A line ending also counts as whitespace:
```````````````````````````````` example
*foo bar
@@ -6606,7 +6601,7 @@ __ foo bar__
````````````````````````````````
-A newline counts as whitespace:
+A line ending counts as whitespace:
```````````````````````````````` example
__
foo bar__
@@ -6885,7 +6880,7 @@ emphasis sections in this example:
The same condition ensures that the following
cases are all strong emphasis nested inside
-emphasis, even when the interior spaces are
+emphasis, even when the interior whitespace is
omitted:
@@ -7462,12 +7457,12 @@ following rules apply:
A [link destination](@) consists of either
- a sequence of zero or more characters between an opening `<` and a
- closing `>` that contains no line breaks or unescaped
+ closing `>` that contains no line endings or unescaped
`<` or `>` characters, or
- a nonempty sequence of characters that does not start with `<`,
does not include [ASCII control characters][ASCII control character]
- or [whitespace][], and includes parentheses only if (a) they are
+ or [space] character, and includes parentheses only if (a) they are
backslash-escaped or (b) they are part of a balanced pair of
unescaped parentheses.
(Implementations may impose limits on parentheses nesting to
@@ -7492,10 +7487,14 @@ Although [link titles] may span multiple lines, they may not contain
a [blank line].
An [inline link](@) consists of a [link text] followed immediately
-by a left parenthesis `(`, optional [whitespace], an optional
-[link destination], an optional [link title] separated from the link
-destination by [whitespace], optional [whitespace], and a right
-parenthesis `)`. The link's text consists of the inlines contained
+by a left parenthesis `(`, an optional [link destination], an optional
+[link title], and a right parenthesis `)`.
+These four components may be separated by spaces, tabs, and up to one line
+ending.
+If both [link destination] and [link title] are present, they *must* be
+separated by spaces, tabs, and up to one line ending.
+
+The link's text consists of the inlines contained
in the [link text] (excluding the enclosing square brackets).
The link's URI consists of the link destination, excluding enclosing
`<...>` if present, with backslash-escapes in effect as described
@@ -7563,7 +7562,7 @@ enclosed in pointy brackets:
link
````````````````````````````````
-The destination cannot contain line breaks,
+The destination cannot contain line endings,
even if enclosed in pointy brackets:
```````````````````````````````` example
@@ -7738,7 +7737,8 @@ may be used in titles:
````````````````````````````````
-Titles must be separated from the link using a [whitespace].
+Titles must be separated from the link using spaces, tabs, and up to one line
+ending.
Other [Unicode whitespace] like non-breaking space doesn't work.
```````````````````````````````` example
@@ -7781,7 +7781,8 @@ titles with no closing quotation mark, though 1.0.2b8 does not.
It seems preferable to adopt a simple, rational rule that works
the same way in inline links and link reference definitions.)
-[Whitespace] is allowed around the destination and title:
+Spaces, tabs, and up to one line ending is allowed around the destination and
+title:
```````````````````````````````` example
[link]( /uri
@@ -7932,7 +7933,8 @@ that [matches] a [link reference definition] elsewhere in the document.
A [link label](@) begins with a left bracket (`[`) and ends
with the first right bracket (`]`) that is not backslash-escaped.
-Between these brackets there must be at least one [non-whitespace character].
+Between these brackets there must be at least one character that is not a space,
+tab, or line ending.
Unescaped square bracket characters are not allowed inside the
opening and closing square brackets of [link labels]. A link
label can have at most 999 characters inside the square
@@ -7942,8 +7944,8 @@ One label [matches](@)
another just in case their normalized forms are equal. To normalize a
label, strip off the opening and closing brackets,
perform the *Unicode case fold*, strip leading and trailing
-[whitespace] and collapse consecutive internal
-[whitespace] to a single space. If there are multiple
+spaces, tabs, and line endings, and collapse consecutive internal
+spaces, tabs, and line endings to a single space. If there are multiple
matching reference link definitions, the one that comes first in the
document is used. (It is desirable in such cases to emit a warning.)
@@ -8101,7 +8103,7 @@ Unicode case fold is used:
````````````````````````````````
-Consecutive internal [whitespace] is treated as one space for
+Consecutive internal spaces, tabs, and line endings are treated as one space for
purposes of determining matching:
```````````````````````````````` example
@@ -8114,7 +8116,7 @@ purposes of determining matching:
````````````````````````````````
-No [whitespace] is allowed between the [link text] and the
+No spaces, tabs, or line endings are allowed between the [link text] and the
[link label]:
```````````````````````````````` example
@@ -8244,7 +8246,8 @@ Note that in this example `]` is not backslash-escaped:
````````````````````````````````
-A [link label] must contain at least one [non-whitespace character]:
+A [link label] must contain at least one character that is not a space, tab, or
+line ending:
```````````````````````````````` example
[]
@@ -8309,7 +8312,7 @@ The link labels are case-insensitive:
-As with full reference links, [whitespace] is not
+As with full reference links, spaces, tabs, or line endings are not
allowed between the two sets of brackets:
```````````````````````````````` example
@@ -8637,7 +8640,7 @@ The labels are case-insensitive:
````````````````````````````````
-As with reference links, [whitespace] is not allowed
+As with reference links, spaces, tabs, and line endings, are not allowed
between the two sets of brackets:
```````````````````````````````` example
@@ -8731,7 +8734,7 @@ a link to the URI, with the URI as the link's label.
An [absolute URI](@),
for these purposes, consists of a [scheme] followed by a colon (`:`)
followed by zero or more characters other [ASCII control
-characters][ASCII control character] or [whitespace][] , `<`, and `>`.
+characters][ASCII control character], [space], `<`, and `>`.
If the URI includes these characters, they must be percent-encoded
(e.g. `%20` for a space).
@@ -8918,7 +8921,7 @@ A [tag name](@) consists of an ASCII letter
followed by zero or more ASCII letters, digits, or
hyphens (`-`).
-An [attribute](@) consists of [whitespace],
+An [attribute](@) consists of spaces, tabs, and up to one line ending,
an [attribute name], and an optional
[attribute value specification].
@@ -8928,9 +8931,9 @@ letters, digits, `_`, `.`, `:`, or `-`. (Note: This is the XML
specification restricted to ASCII. HTML5 is laxer.)
An [attribute value specification](@)
-consists of optional [whitespace],
-a `=` character, optional [whitespace], and an [attribute
-value].
+consists of optional spaces, tabs, and up to one line ending,
+a `=` character, optional spaces, tabs, and up to one line ending,
+and an [attribute value].
An [attribute value](@)
consists of an [unquoted attribute value],
@@ -8938,7 +8941,7 @@ a [single-quoted attribute value], or a [double-quoted attribute value].
An [unquoted attribute value](@)
is a nonempty string of characters not
-including [whitespace], `"`, `'`, `=`, `<`, `>`, or `` ` ``.
+including spaces, tabs, line endings, `"`, `'`, `=`, `<`, `>`, or `` ` ``.
A [single-quoted attribute value](@)
consists of `'`, zero or more
@@ -8949,11 +8952,12 @@ consists of `"`, zero or more
characters not including `"`, and a final `"`.
An [open tag](@) consists of a `<` character, a [tag name],
-zero or more [attributes], optional [whitespace], an optional `/`
-character, and a `>` character.
+zero or more [attributes], optional spaces, tabs, and up to one line ending,
+an optional `/` character, and a `>` character.
A [closing tag](@) consists of the string ``, a
-[tag name], optional [whitespace], and the character `>`.
+[tag name], optional spaces, tabs, and up to one line ending, and the character
+`>`.
An [HTML comment](@) consists of ``,
where *text* does not start with `>` or `->`, does not end with `-`,
@@ -8994,7 +8998,7 @@ Empty elements:
````````````````````````````````
-[Whitespace] is allowed:
+Whitespace is allowed:
```````````````````````````````` example
<
@@ -9067,7 +9071,7 @@ bim!bop />
````````````````````````````````
-Missing [whitespace]:
+Missing whitespace:
```````````````````````````````` example
@@ -9179,7 +9183,7 @@ foo
## Hard line breaks
-A line break (not in a code span or HTML tag) that is preceded
+A line ending (not in a code span or HTML tag) that is preceded
by two or more spaces and does not occur at the end of a block
is parsed as a [hard line break](@) (rendered
in HTML as a `
` tag):
@@ -9194,7 +9198,7 @@ baz
For a more visible alternative, a backslash before the
-[line ending] may be used instead of two spaces:
+[line ending] may be used instead of two or more spaces:
```````````````````````````````` example
foo\
@@ -9236,7 +9240,7 @@ bar
````````````````````````````````
-Line breaks can occur inside emphasis, links, and other constructs
+Hard line breaks can occur inside emphasis, links, and other constructs
that allow inline content:
```````````````````````````````` example
@@ -9257,7 +9261,7 @@ bar
````````````````````````````````
-Line breaks do not occur inside code spans
+Hard line breaks do not occur inside code spans
```````````````````````````````` example
`code
@@ -9329,9 +9333,9 @@ foo
## Soft line breaks
-A regular line break (not in a code span or HTML tag) that is not
+A regular line ending (not in a code span or HTML tag) that is not
preceded by two or more spaces or a backslash is parsed as a
-[softbreak](@). (A softbreak may be rendered in HTML either as a
+[softbreak](@). (A soft line break may be rendered in HTML either as a
[line ending] or as a space. The result will be the same in
browsers. In the examples here, a [line ending] will be used.)
@@ -9357,7 +9361,7 @@ baz
A conforming parser may render a soft line break in HTML either as a
-line break or as a space.
+line ending or as a space.
A renderer may also provide an option to render soft line breaks
as hard line breaks.
@@ -9728,4 +9732,3 @@ closers:
After we're done, we remove all delimiters above `stack_bottom` from the
delimiter stack.
-
--
cgit v1.2.3