From 76478c79d3d13a21871bbed784f75fd5d9e8b1c2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Aug 2018 16:08:05 -0700 Subject: Update spec.txt. --- test/spec.txt | 125 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 45 deletions(-) (limited to 'test') diff --git a/test/spec.txt b/test/spec.txt index dc2f5d5..baddf2f 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -514,8 +514,8 @@ one block element does not affect the inline parsing of any other. ## Container blocks and leaf blocks We can divide blocks into two types: -[container block](@)s, -which can contain other blocks, and [leaf block](@)s, +[container blocks](@), +which can contain other blocks, and [leaf blocks](@), which cannot. # Leaf blocks @@ -1996,9 +1996,10 @@ 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 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. +the document or other [container block](#container-blocks)), 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 @@ -2043,10 +2044,11 @@ 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]. -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. +[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 `` will not affect
 the parser state; as the HTML block was started in by start condition 6, it
@@ -3208,7 +3210,7 @@ aaa
 
 # Container blocks
 
-A [container block] is a block that has other
+A [container block](#container-blocks) is a block that has other
 blocks as its contents.  There are two basic kinds of container blocks:
 [block quotes] and [list items].
 [Lists] are meta-containers for [list items].
@@ -5714,9 +5716,16 @@ preceded nor followed by a backtick.
 
 A [code span](@) begins with a backtick string and ends with
 a backtick string of equal length.  The contents of the code span are
-the characters between the two backtick strings, with leading and
-trailing spaces and [line endings] removed, and
-[whitespace] collapsed to single spaces.
+the characters between the two backtick strings, normalized in the
+following ways:
+
+- First, [line endings] are converted to [spaces], unless they are
+  adjacent to [spaces], in which case they are ignored.
+- If the string both begins *and* ends with a [space] character,
+  a single [space] character is removed from the front and back.
+  This allows you to include code that begins or ends with backtick
+  characters, which must be separated by whitespace from the opening
+  or closing backtick strings.
 
 This is a simple code span:
 
@@ -5728,10 +5737,11 @@ This is a simple code span:
 
 
 Here two backticks are used, because the code contains a backtick.
-This example also illustrates stripping of leading and trailing spaces:
+This example also illustrates stripping of a single leading and
+trailing space:
 
 ```````````````````````````````` example
-`` foo ` bar  ``
+`` foo ` bar ``
 .
 

foo ` bar

```````````````````````````````` @@ -5746,58 +5756,70 @@ spaces:

``

```````````````````````````````` - -[Line endings] are treated like spaces: +Note that only *one* space is stripped: ```````````````````````````````` example -`` -foo -`` +` `` ` . -

foo

+

``

```````````````````````````````` +The stripping only happens if the space is on both +sides of the string: + +```````````````````````````````` example +` a` +. +

a

+```````````````````````````````` -Interior spaces and [line endings] are collapsed into -single spaces, just as they would be by a browser: +Only [spaces], and not [unicode whitespace] in general, are +stripped in this way: ```````````````````````````````` example -`foo bar - baz` +` b ` . -

foo bar baz

+

 b 

```````````````````````````````` -Not all [Unicode whitespace] (for instance, non-breaking space) is -collapsed, however: +[Line endings] are treated like spaces, unless they +come after spaces, in which case they are ignored. ```````````````````````````````` example -`a  b` +`` +foo +bar +baz +`` . -

a  b

+

foo bar baz

```````````````````````````````` +```````````````````````````````` example +`` +foo +`` +. +

foo

+```````````````````````````````` -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 -shouldn't rely on HTML-specific rendering assumptions. -(Existing implementations differ in their treatment of internal -spaces and [line endings]. Some, including `Markdown.pl` and -`showdown`, convert an internal [line ending] into a -`
` tag. But this makes things difficult for those who like to -hard-wrap their paragraphs, since a line break in the midst of a code -span will cause an unintended line break in the output. Others just -leave internal spaces as they are, which is fine if only HTML is being -targeted.) +Interior spaces are not collapsed: ```````````````````````````````` example -`foo `` bar` +`foo bar +baz` . -

foo `` bar

+

foo bar baz

```````````````````````````````` +Note that browsers will typically collapse consecutive spaces +when rendering `` elements, so it is recommended that +the following CSS be used: + + code{white-space: pre-wrap;} + Note that backslash escapes do not work in code spans. All backslashes are treated literally: @@ -5813,6 +5835,19 @@ Backslash escapes are never needed, because one can always choose a string of *n* backtick characters as delimiters, where the code does not contain any strings of exactly *n* backtick characters. +```````````````````````````````` example +``foo`bar`` +. +

foo`bar

+```````````````````````````````` + +```````````````````````````````` example +` foo `` bar ` +. +

foo `` bar

+```````````````````````````````` + + Code span backticks have higher precedence than any other inline constructs except HTML tags and autolinks. Thus, for example, this is not parsed as emphasized text, since the second `*` is part of a code @@ -9006,7 +9041,7 @@ Line breaks do not occur inside code spans `code span` . -

code span

+

code span

```````````````````````````````` -- cgit v1.2.3