diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/spec.txt | 266 |
1 files changed, 113 insertions, 153 deletions
diff --git a/test/spec.txt b/test/spec.txt index c7b1fcd..4c3de7a 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -336,9 +336,14 @@ the Unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. ## Tabs Tabs in lines are not expanded to [spaces]. However, -in contexts where indentation is significant for the -document's structure, tabs behave as if they were replaced -by spaces with a tab stop of 4 characters. +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 exmaple, 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 @@ -347,7 +352,6 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` - ```````````````````````````````` example →foo→baz→→bim . @@ -355,7 +359,6 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` - ```````````````````````````````` example a→a ὐ→a @@ -365,6 +368,9 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` +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 @@ -393,6 +399,15 @@ by spaces with a tab stop of 4 characters. </ul> ```````````````````````````````` +Normally the `>` that begins a block quote may be followed +optionally by a space, which is not considered part of the +content. In the following case `>` is followed by a tab, +which is treated as if it were expanded into spaces. +Since one of theses spaces is considered part of the +delimiter, `foo` is considered to be indented six spaces +inside the block quote context, so we get an indented +code block starting with two spaces. + ```````````````````````````````` example >→→foo . @@ -441,6 +456,17 @@ bar </ul> ```````````````````````````````` +```````````````````````````````` example +#→Foo +. +<h1>Foo</h1> +```````````````````````````````` + +```````````````````````````````` example +*→*→*→ +. +<hr /> +```````````````````````````````` ## Insecure characters @@ -779,15 +805,6 @@ headings: ```````````````````````````````` -A tab will not work: - -```````````````````````````````` example -#→foo -. -<p>#→foo</p> -```````````````````````````````` - - This is not a heading, because the first `#` is escaped: ```````````````````````````````` example @@ -1968,7 +1985,7 @@ 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, if no line is encountered that meets the +the document or other [container 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. @@ -3604,14 +3621,19 @@ An [ordered list marker](@) is a sequence of 1--9 arabic digits (`0-9`), followed by either a `.` character or a `)` character. (The reason for the length limit is that with 10 digits we start seeing integer overflows -in some browsers.) +in some browsers.) Exception: In cases where ordered list +markers interrupt paragraphs---that is, when they occur on a +line that would otherwise count as [paragraph continuation +text]---list markers must be followed by some content other than +spaces before the end of the line, and for ordered list markers, +only `1.` and `1)` are allowed. 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 not separated from each other by more than one blank line, and *M* is a list - marker of width *W* followed by 0 < *N* < 5 spaces, then the result + 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 list item with *Bs* as its contents. The type of the list item @@ -3793,66 +3815,20 @@ any following content, so these are not list items: ```````````````````````````````` -A list item may not contain blocks that are separated by more than -one blank line. Thus, two blank lines will end a list, unless the -two blanks are contained in a [fenced code block]. +A list item may contain blocks that are separated by more than +one blank line. ```````````````````````````````` example - foo - bar - -- foo - - - bar - -- ``` - foo - bar - ``` - -- baz - - + ``` - foo - - - bar - ``` . <ul> <li> <p>foo</p> <p>bar</p> </li> -<li> -<p>foo</p> -</li> -</ul> -<p>bar</p> -<ul> -<li> -<pre><code>foo - - -bar -</code></pre> -</li> -<li> -<p>baz</p> -<ul> -<li> -<pre><code>foo - - -bar -</code></pre> -</li> -</ul> -</li> </ul> ```````````````````````````````` @@ -3885,15 +3861,14 @@ A list item may contain any kind of block: A list item that contains an indented code block will preserve -empty lines within the code block verbatim, unless there are two -or more empty lines in a row (since as described above, two -blank lines end the list): +empty lines within the code block verbatim. ```````````````````````````````` example - Foo bar + baz . <ul> @@ -3901,33 +3876,13 @@ blank lines end the list): <p>Foo</p> <pre><code>bar -baz -</code></pre> -</li> -</ul> -```````````````````````````````` - - -```````````````````````````````` example -- Foo - bar - - - baz -. -<ul> -<li> -<p>Foo</p> -<pre><code>bar +baz </code></pre> </li> </ul> -<pre><code> baz -</code></pre> ```````````````````````````````` - Note that ordered list start numbers must be nine digits or less: ```````````````````````````````` example @@ -4254,6 +4209,20 @@ A list may start or end with an empty list item: </ul> ```````````````````````````````` +However, an empty list item cannot interrupt a paragraph: + +```````````````````````````````` example +foo +* + +foo +1. +. +<p>foo +*</p> +<p>foo +1.</p> +```````````````````````````````` 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item @@ -4836,28 +4805,20 @@ Foo </ul> ```````````````````````````````` - `Markdown.pl` does not allow this, through fear of triggering a list via a numeral in a hard-wrapped line: -```````````````````````````````` example +```````````````````````````````` markdown The number of windows in my house is 14. The number of doors is 6. -. -<p>The number of windows in my house is</p> -<ol start="14"> -<li>The number of doors is 6.</li> -</ol> ```````````````````````````````` +Oddly, though, `Markdown.pl` *does* allow a blockquote to +interrupt a paragraph, even though the same considerations might +apply. - -Oddly, `Markdown.pl` *does* allow a blockquote to interrupt a paragraph, -even though the same considerations might apply. We think that the two -cases should be treated the same. Here are two reasons for allowing -lists to interrupt paragraphs: - -First, it is natural and not uncommon for people to start lists without -blank lines: +In CommonMark, we do allow lists to interrupt paragraphs, for +two reasons. First, it is natural and not uncommon for people +to start lists without blank lines: I need to buy - new shoes @@ -4891,20 +4852,40 @@ then by itself should be a paragraph followed by a nested sublist. -Our adherence to the [principle of uniformity] -thus inclines us to think that there are two coherent packages: +Since it is well established Markdown practice to allow lists to +interrupt paragraphs inside list items, the [principle of +uniformity] requires us to allow this outside list items as +well. ([reStructuredText](http://docutils.sourceforge.net/rst.html) +takes a different approach, requiring blank lines before lists +even inside other list items.) -1. Require blank lines before *all* lists and blockquotes, - including lists that occur as sublists inside other list items. +In order to solve of unwanted lists in paragraphs with +hard-wrapped numerals, we allow only lists starting with `1` to +interrupt paragraphs. Thus, -2. Require blank lines in none of these places. +```````````````````````````````` example +The number of windows in my house is +14. The number of doors is 6. +. +<p>The number of windows in my house is +14. The number of doors is 6.</p> +```````````````````````````````` -[reStructuredText](http://docutils.sourceforge.net/rst.html) takes -the first approach, for which there is much to be said. But the second -seems more consistent with established practice with Markdown. +We may still get an unintended result in cases like -There can be blank lines between items, but two blank lines end -a list: +```````````````````````````````` example +The number of windows in my house is +1. The number of doors is 6. +. +<p>The number of windows in my house is</p> +<ol> +<li>The number of doors is 6.</li> +</ol> +```````````````````````````````` + +but this rule should prevent most spurious list captures. + +There can be any number of blank lines between items: ```````````````````````````````` example - foo @@ -4921,36 +4902,12 @@ a list: <li> <p>bar</p> </li> -</ul> -<ul> -<li>baz</li> -</ul> -```````````````````````````````` - - -As illustrated above in the section on [list items], -two blank lines between blocks *within* a list item will also end a -list: - -```````````````````````````````` example -- foo - - - bar -- baz -. -<ul> -<li>foo</li> -</ul> -<p>bar</p> -<ul> -<li>baz</li> +<li> +<p>baz</p> +</li> </ul> ```````````````````````````````` - -Indeed, two blank lines will end *all* containing lists: - ```````````````````````````````` example - foo - bar @@ -4964,26 +4921,28 @@ Indeed, two blank lines will end *all* containing lists: <ul> <li>bar <ul> -<li>baz</li> +<li> +<p>baz</p> +<p>bim</p> +</li> </ul> </li> </ul> </li> </ul> -<pre><code> bim -</code></pre> ```````````````````````````````` -Thus, two blank lines can be used to separate consecutive lists of -the same type, or to separate a list from an indented code block -that would otherwise be parsed as a subparagraph of the final list -item: +To separate consecutive lists of the same type, or to separate a +list from an indented code block that would otherwise be parsed +as a subparagraph of the final list item, you can insert a blank HTML +comment: ```````````````````````````````` example - foo - bar +<!-- --> - baz - bim @@ -4992,6 +4951,7 @@ item: <li>foo</li> <li>bar</li> </ul> +<!-- --> <ul> <li>baz</li> <li>bim</li> @@ -5006,6 +4966,7 @@ item: - foo +<!-- --> code . @@ -5018,6 +4979,7 @@ item: <p>foo</p> </li> </ul> +<!-- --> <pre><code>code </code></pre> ```````````````````````````````` @@ -6176,10 +6138,8 @@ A newline also counts as whitespace: *foo bar * . -<p>*foo bar</p> -<ul> -<li></li> -</ul> +<p>*foo bar +*</p> ```````````````````````````````` @@ -8953,7 +8913,7 @@ foo A regular line break (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 softbreak 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.) |