| spec.txt | spec.txt | |||
|---|---|---|---|---|
| --- | --- | |||
| title: CommonMark Spec | title: CommonMark Spec | |||
| author: | author: | |||
| - John MacFarlane | - John MacFarlane | |||
| version: 0.14 | version: 0.15 | |||
| date: 2014-12-10 | date: 2014-12-31 | |||
| 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/)' | |||
| ... | ... | |||
| # Introduction | # Introduction | |||
| ## What is Markdown? | ## What is Markdown? | |||
| Markdown is a plain text format for writing structured documents, | Markdown is a plain text format for writing structured documents, | |||
| based on conventions used for indicating formatting in email and | based on conventions used for indicating formatting in email and | |||
| usenet posts. It was developed in 2004 by John Gruber, who wrote | usenet posts. It was developed in 2004 by John Gruber, who wrote | |||
| skipping to change at line 4440 | skipping to change at line 4440 | |||
| ``` | ``` | |||
| The rules given below capture all of these patterns, while allowing | The rules given below capture all of these patterns, while allowing | |||
| for efficient parsing strategies that do not backtrack. | for efficient parsing strategies that do not backtrack. | |||
| First, some definitions. A [delimiter run](@delimiter-run) is either | First, some definitions. A [delimiter run](@delimiter-run) is either | |||
| a sequence of one or more `*` characters that is not preceded or | a sequence of one or more `*` characters that is not preceded or | |||
| followed by a `*` character, or a sequence of one or more `_` | followed by a `*` character, or a sequence of one or more `_` | |||
| characters that is not preceded or followed by a `_` character. | characters that is not preceded or followed by a `_` character. | |||
| A [left-flanking delimiter run](@right-facing-delimiter-run) is | A [left-flanking delimiter run](@left-flanking-delimiter-run) is | |||
| a [delimiter run](#delimiter-run) that is (a) not followed by [unicode | a [delimiter run](#delimiter-run) that is (a) not followed by [unicode | |||
| whitespace](#unicode-whitespace), and (b) either not followed by a | whitespace](#unicode-whitespace), and (b) either not followed by a | |||
| [punctuation character](#punctuation-character), or | [punctuation character](#punctuation-character), or | |||
| preceded by [unicode whitespace](#unicode-whitespace) or | preceded by [unicode whitespace](#unicode-whitespace) or | |||
| a [punctuation character](#punctuation-character). | a [punctuation character](#punctuation-character). | |||
| A [right-flanking delimiter run](@left-facing-delimiter-run) is | A [right-flanking delimiter run](@right-flanking-delimiter-run) is | |||
| a [delimiter run](#delimiter-run) that is (a) not preceded by [unicode | a [delimiter run](#delimiter-run) that is (a) not preceded by [unicode | |||
| whitespace](#unicode-whitespace), and (b) either not preceded by a | whitespace](#unicode-whitespace), and (b) either not preceded by a | |||
| [punctuation character](#punctuation-character), or | [punctuation character](#punctuation-character), or | |||
| followed by [unicode whitespace](#unicode-whitespace) or | followed by [unicode whitespace](#unicode-whitespace) or | |||
| a [punctuation character](#punctuation-character). | a [punctuation character](#punctuation-character). | |||
| Here are some examples of delimiter runs. | Here are some examples of delimiter runs. | |||
| - left-flanking but not right-flanking: | - left-flanking but not right-flanking: | |||
| skipping to change at line 4500 | skipping to change at line 4500 | |||
| after comes from Roopesh Chander's | after comes from Roopesh Chander's | |||
| [vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-em phasis-tags). | [vfmd](http://www.vfmd.org/vfmd-spec/specification/#procedure-for-identifying-em phasis-tags). | |||
| vfmd uses the terminology "emphasis indicator string" instead of "delimiter | vfmd uses the terminology "emphasis indicator string" instead of "delimiter | |||
| run," and its rules for distinguishing left- and right-flanking runs | run," and its rules for distinguishing left- and right-flanking runs | |||
| are a bit more complex than the ones given here.) | are a bit more complex than the ones given here.) | |||
| The following rules define emphasis and strong emphasis: | The following rules define emphasis and strong emphasis: | |||
| 1. A single `*` character [can open emphasis](@can-open-emphasis) | 1. A single `*` character [can open emphasis](@can-open-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run). | [left-flanking delimiter run](#left-flanking-delimiter-run). | |||
| 2. A single `_` character [can open emphasis](#can-open-emphasis) iff | 2. A single `_` character [can open emphasis](#can-open-emphasis) iff | |||
| it is part of a | it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run) | [left-flanking delimiter run](#left-flanking-delimiter-run) | |||
| and is not preceded by an ASCII alphanumeric character. | and is not preceded by an ASCII alphanumeric character. | |||
| 3. A single `*` character [can close emphasis](@can-close-emphasis) | 3. A single `*` character [can close emphasis](@can-close-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run). | [right-flanking delimiter run](#right-flanking-delimiter-run). | |||
| 4. A single `_` character [can close emphasis](#can-close-emphasis) | 4. A single `_` character [can close emphasis](#can-close-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run). | [right-flanking delimiter run](#right-flanking-delimiter-run). | |||
| and it is not followed by an ASCII alphanumeric character. | and it is not followed by an ASCII alphanumeric character. | |||
| 5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) | 5. A double `**` [can open strong emphasis](@can-open-strong-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run). | [left-flanking delimiter run](#left-flanking-delimiter-run). | |||
| 6. A double `__` [can open strong emphasis](#can-open-strong-emphasis) | 6. A double `__` [can open strong emphasis](#can-open-strong-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [left-flanking delimiter run](#right-facing-delimiter-run) | [left-flanking delimiter run](#left-flanking-delimiter-run) | |||
| and is not preceded by an ASCII alphanumeric character. | and is not preceded by an ASCII alphanumeric character. | |||
| 7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) | 7. A double `**` [can close strong emphasis](@can-close-strong-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [right-flanking delimiter run](#right-facing-delimiter-run). | [right-flanking delimiter run](#right-flanking-delimiter-run). | |||
| 8. A double `__` [can close strong emphasis](#can-close-strong-emphasis) | 8. A double `__` [can close strong emphasis](#can-close-strong-emphasis) | |||
| iff it is part of a | iff it is part of a | |||
| [right-flanking delimiter run](#right-facing-delimiter-run). | [right-flanking delimiter run](#right-flanking-delimiter-run). | |||
| and is not followed by an ASCII alphanumeric character. | and is not followed by an ASCII alphanumeric character. | |||
| 9. Emphasis begins with a delimiter that [can open | 9. Emphasis begins with a delimiter that [can open | |||
| emphasis](#can-open-emphasis) and ends with a delimiter that [can close | emphasis](#can-open-emphasis) and ends with a delimiter that [can close | |||
| emphasis](#can-close-emphasis), and that uses the same | emphasis](#can-close-emphasis), and that uses the same | |||
| character (`_` or `*`) as the opening delimiter. There must | character (`_` or `*`) as the opening delimiter. There must | |||
| be a nonempty sequence of inlines between the open delimiter | be a nonempty sequence of inlines between the open delimiter | |||
| and the closing delimiter; these form the contents of the emphasis | and the closing delimiter; these form the contents of the emphasis | |||
| inline. | inline. | |||
| skipping to change at line 4601 | skipping to change at line 4601 | |||
| Rule 1: | Rule 1: | |||
| . | . | |||
| *foo bar* | *foo bar* | |||
| . | . | |||
| <p><em>foo bar</em></p> | <p><em>foo bar</em></p> | |||
| . | . | |||
| This is not emphasis, because the opening `*` is followed by | This is not emphasis, because the opening `*` is followed by | |||
| whitespace, and hence not part of a [left-flanking delimiter | whitespace, and hence not part of a [left-flanking delimiter | |||
| run](#right-facing-delimiter-run): | run](#left-flanking-delimiter-run): | |||
| . | . | |||
| a * foo bar* | a * foo bar* | |||
| . | . | |||
| <p>a * foo bar*</p> | <p>a * foo bar*</p> | |||
| . | . | |||
| This is not emphasis, because the opening `*` is preceded | This is not emphasis, because the opening `*` is preceded | |||
| by an alphanumeric and followed by punctuation, and hence | by an alphanumeric and followed by punctuation, and hence | |||
| not part of a [left-flanking delimiter run](#right-facing-delimiter-run): | not part of a [left-flanking delimiter run](#left-flanking-delimiter-run): | |||
| . | . | |||
| a*"foo"* | a*"foo"* | |||
| . | . | |||
| <p>a*"foo"*</p> | <p>a*"foo"*</p> | |||
| . | . | |||
| Unicode nonbreaking spaces count as whitespace, too: | Unicode nonbreaking spaces count as whitespace, too: | |||
| . | . | |||
| skipping to change at line 4712 | skipping to change at line 4712 | |||
| . | . | |||
| *foo bar * | *foo bar * | |||
| . | . | |||
| <p>*foo bar *</p> | <p>*foo bar *</p> | |||
| . | . | |||
| This is not emphasis, because the second `*` is | This is not emphasis, because the second `*` is | |||
| preceded by punctuation and followed by an alphanumeric | preceded by punctuation and followed by an alphanumeric | |||
| (hence it is not part of a [right-flanking delimiter | (hence it is not part of a [right-flanking delimiter | |||
| run](#left-facing-delimiter-run): | run](#right-flanking-delimiter-run): | |||
| . | . | |||
| *(*foo) | *(*foo) | |||
| . | . | |||
| <p>*(*foo)</p> | <p>*(*foo)</p> | |||
| . | . | |||
| The point of this restriction is more easily appreciated | The point of this restriction is more easily appreciated | |||
| with this example: | with this example: | |||
| skipping to change at line 4804 | skipping to change at line 4804 | |||
| followed by whitespace: | followed by whitespace: | |||
| . | . | |||
| ** foo bar** | ** foo bar** | |||
| . | . | |||
| <p>** foo bar**</p> | <p>** foo bar**</p> | |||
| . | . | |||
| This is not strong emphasis, because the opening `**` is preceded | This is not strong emphasis, because the opening `**` is preceded | |||
| by an alphanumeric and followed by punctuation, and hence | by an alphanumeric and followed by punctuation, and hence | |||
| not part of a [left-flanking delimiter run](#right-facing-delimiter-run): | not part of a [left-flanking delimiter run](#left-flanking-delimiter-run): | |||
| . | . | |||
| a**"foo"** | a**"foo"** | |||
| . | . | |||
| <p>a**"foo"**</p> | <p>a**"foo"**</p> | |||
| . | . | |||
| Intraword strong emphasis with `**` is permitted: | Intraword strong emphasis with `**` is permitted: | |||
| . | . | |||
| End of changes. 15 change blocks. | ||||
| 16 lines changed or deleted | 16 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||