Browse Source

Update CommonMark spec to 0.27

pull/306/head
Alex Kocharin 8 years ago
parent
commit
787fe39e8f
  1. 20
      test/fixtures/commonmark/bad.txt
  2. 1072
      test/fixtures/commonmark/good.txt
  3. 107
      test/fixtures/commonmark/spec.txt

20
test/fixtures/commonmark/bad.txt

@ -1,20 +0,0 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src line: 410
.
> foo
.
<blockquote>
<pre><code> foo
</code></pre>
</blockquote>
.
error:
<blockquote>
<pre><code> foo
</code></pre>
</blockquote>

1072
test/fixtures/commonmark/good.txt

File diff suppressed because it is too large

107
test/fixtures/commonmark/spec.txt

@ -1,8 +1,8 @@
--- ---
title: CommonMark Spec title: CommonMark Spec
author: John MacFarlane author: John MacFarlane
version: 0.26 version: 0.27
date: '2016-07-15' date: '2016-11-18'
license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)' license: '[CC-BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)'
... ...
@ -1985,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 meets a [start condition](@) (after up to three spaces
optional indentation). It ends with the first subsequent line that optional indentation). It ends with the first subsequent line that
meets a matching [end condition](@), or the last line of meets a matching [end condition](@), or the last line of
the document or other [container block](@), 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] [end condition]. If the first line meets both the [start condition]
and the [end condition], the block will contain just that line. and the [end condition], the block will contain just that line.
@ -2015,7 +2015,8 @@ followed by one of the strings (case-insensitive) `address`,
`article`, `aside`, `base`, `basefont`, `blockquote`, `body`, `article`, `aside`, `base`, `basefont`, `blockquote`, `body`,
`caption`, `center`, `col`, `colgroup`, `dd`, `details`, `dialog`, `caption`, `center`, `col`, `colgroup`, `dd`, `details`, `dialog`,
`dir`, `div`, `dl`, `dt`, `fieldset`, `figcaption`, `figure`, `dir`, `div`, `dl`, `dt`, `fieldset`, `figcaption`, `figure`,
`footer`, `form`, `frame`, `frameset`, `h1`, `head`, `header`, `hr`, `footer`, `form`, `frame`, `frameset`,
`h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `head`, `header`, `hr`,
`html`, `iframe`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`, `html`, `iframe`, `legend`, `li`, `link`, `main`, `menu`, `menuitem`,
`meta`, `nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`, `meta`, `nav`, `noframes`, `ol`, `optgroup`, `option`, `p`, `param`,
`section`, `source`, `summary`, `table`, `tbody`, `td`, `section`, `source`, `summary`, `table`, `tbody`, `td`,
@ -3636,11 +3637,11 @@ The following rules define [list items]:
If the list item is ordered, then it is also assigned a start If the list item is ordered, then it is also assigned a start
number, based on the ordered list marker. number, based on the ordered list marker.
Exceptions: When the list item interrupts a paragraph---that Exceptions: When the first list item in a [list] interrupts
is, when it starts on a line that would otherwise count as a paragraph---that is, when it starts on a line that would
[paragraph continuation text]---then (a) the lines *Ls* must otherwise count as [paragraph continuation text]---then (a)
not begin with a blank line, and (b) if the list item is the lines *Ls* must not begin with a blank line, and (b) if
ordered, the start number must be 1. the list item is ordered, the start number must be 1.
For example, let *Ls* be the lines For example, let *Ls* be the lines
@ -4730,8 +4731,7 @@ takes four spaces (a common case), but diverge in other cases.
A [list](@) is a sequence of one or more A [list](@) is a sequence of one or more
list items [of the same type]. The list items list items [of the same type]. The list items
may be separated by single [blank lines], but two may be separated by any number of blank lines.
blank lines end all containing lists.
Two list items are [of the same type](@) Two list items are [of the same type](@)
if they begin with a [list marker] of the same type. if they begin with a [list marker] of the same type.
@ -4809,10 +4809,11 @@ Foo
`Markdown.pl` does not allow this, through fear of triggering a list `Markdown.pl` does not allow this, through fear of triggering a list
via a numeral in a hard-wrapped line: via a numeral in a hard-wrapped line:
```````````````````````````````` markdown ``` markdown
The number of windows in my house is The number of windows in my house is
14. The number of doors is 6. 14. The number of doors is 6.
```````````````````````````````` ```
Oddly, though, `Markdown.pl` *does* allow a blockquote to Oddly, though, `Markdown.pl` *does* allow a blockquote to
interrupt a paragraph, even though the same considerations might interrupt a paragraph, even though the same considerations might
apply. apply.
@ -4821,10 +4822,12 @@ In CommonMark, we do allow lists to interrupt paragraphs, for
two reasons. First, it is natural and not uncommon for people two reasons. First, it is natural and not uncommon for people
to start lists without blank lines: to start lists without blank lines:
I need to buy ``` markdown
- new shoes I need to buy
- a coat - new shoes
- a plane ticket - a coat
- a plane ticket
```
Second, we are attracted to a Second, we are attracted to a
@ -4836,20 +4839,24 @@ Second, we are attracted to a
(Indeed, the spec for [list items] and [block quotes] presupposes (Indeed, the spec for [list items] and [block quotes] presupposes
this principle.) This principle implies that if this principle.) This principle implies that if
``` markdown
* I need to buy * I need to buy
- new shoes - new shoes
- a coat - a coat
- a plane ticket - a plane ticket
```
is a list item containing a paragraph followed by a nested sublist, is a list item containing a paragraph followed by a nested sublist,
as all Markdown implementations agree it is (though the paragraph as all Markdown implementations agree it is (though the paragraph
may be rendered without `<p>` tags, since the list is "tight"), may be rendered without `<p>` tags, since the list is "tight"),
then then
I need to buy ``` markdown
- new shoes I need to buy
- a coat - new shoes
- a plane ticket - a coat
- a plane ticket
```
by itself should be a paragraph followed by a nested sublist. by itself should be a paragraph followed by a nested sublist.
@ -5671,6 +5678,16 @@ single spaces, just as they would be by a browser:
```````````````````````````````` ````````````````````````````````
Not all [Unicode whitespace] (for instance, non-breaking space) is
collapsed, however:
```````````````````````````````` example
`a  b`
.
<p><code>a  b</code></p>
````````````````````````````````
Q: Why not just leave the spaces, since browsers will collapse them Q: Why not just leave the spaces, since browsers will collapse them
anyway? A: Because we might be targeting a non-HTML format, and we anyway? A: Because we might be targeting a non-HTML format, and we
shouldn't rely on HTML-specific rendering assumptions. shouldn't rely on HTML-specific rendering assumptions.
@ -6558,7 +6575,7 @@ Note that in the preceding case, the interpretation
is precluded by the condition that a delimiter that is precluded by the condition that a delimiter that
can both open and close (like the `*` after `foo` can both open and close (like the `*` after `foo`)
cannot form emphasis if the sum of the lengths of cannot form emphasis if the sum of the lengths of
the delimiter runs containing the opening and the delimiter runs containing the opening and
closing delimiters is a multiple of 3. closing delimiters is a multiple of 3.
@ -6590,12 +6607,6 @@ omitted:
```````````````````````````````` ````````````````````````````````
```````````````````````````````` example
*foo**bar***
.
<p><em>foo<strong>bar</strong></em></p>
````````````````````````````````
Indefinite levels of nesting are possible: Indefinite levels of nesting are possible:
```````````````````````````````` example ```````````````````````````````` example
@ -7361,6 +7372,16 @@ may be used in titles:
```````````````````````````````` ````````````````````````````````
Titles must be separated from the link using a [whitespace].
Other [Unicode whitespace] like non-breaking space doesn't work.
```````````````````````````````` example
[link](/url "title")
.
<p><a href="/url%C2%A0%22title%22">link</a></p>
````````````````````````````````
Nested balanced quotes are not allowed without escaping: Nested balanced quotes are not allowed without escaping:
```````````````````````````````` example ```````````````````````````````` example
@ -8025,7 +8046,8 @@ following closing bracket:
```````````````````````````````` ````````````````````````````````
Full references take precedence over shortcut references: Full and compact references take precedence over shortcut
references:
```````````````````````````````` example ```````````````````````````````` example
[foo][bar] [foo][bar]
@ -8036,6 +8058,31 @@ Full references take precedence over shortcut references:
<p><a href="/url2">foo</a></p> <p><a href="/url2">foo</a></p>
```````````````````````````````` ````````````````````````````````
```````````````````````````````` example
[foo][]
[foo]: /url1
.
<p><a href="/url1">foo</a></p>
````````````````````````````````
Inline links also take precedence:
```````````````````````````````` example
[foo]()
[foo]: /url1
.
<p><a href="">foo</a></p>
````````````````````````````````
```````````````````````````````` example
[foo](not a link)
[foo]: /url1
.
<p><a href="/url1">foo</a>(not a link)</p>
````````````````````````````````
In the following case `[bar][baz]` is parsed as a reference, In the following case `[bar][baz]` is parsed as a reference,
`[foo]` as normal text: `[foo]` as normal text:
@ -9045,7 +9092,7 @@ blocks. But we cannot close unmatched blocks yet, because we may have a
[lazy continuation line]. [lazy continuation line].
2. Next, after consuming the continuation markers for existing 2. Next, after consuming the continuation markers for existing
blocks, we look for new block starts (e.g. `>` for a block quote. blocks, we look for new block starts (e.g. `>` for a block quote).
If we encounter a new block start, we close any blocks unmatched If we encounter a new block start, we close any blocks unmatched
in step 1 before creating the new block as a child of the last in step 1 before creating the new block as a child of the last
matched block. matched block.

Loading…
Cancel
Save