From e121b4e30185ca0513052cc4d08470ee75f9646b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 25 Aug 2018 15:06:36 -0700 Subject: Code spans: don't collapse interior space. Closes #532. --- spec.txt | 101 ++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 34 deletions(-) diff --git a/spec.txt b/spec.txt index 7977d96..baddf2f 100644 --- a/spec.txt +++ b/spec.txt @@ -5716,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: @@ -5730,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

```````````````````````````````` @@ -5748,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: @@ -5815,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 @@ -9008,7 +9041,7 @@ Line breaks do not occur inside code spans `code span` . -

code span

+

code span

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