Skip to content

Commit

Permalink
Code spans: don't collapse interior space.
Browse files Browse the repository at this point in the history
Closes #532.
  • Loading branch information
jgm committed Aug 25, 2018
1 parent d472c6d commit e121b4e
Showing 1 changed file with 67 additions and 34 deletions.
101 changes: 67 additions & 34 deletions spec.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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 ``
.
<p><code>foo ` bar</code></p>
````````````````````````````````
Expand All @@ -5748,58 +5756,70 @@ spaces:
<p><code>``</code></p>
````````````````````````````````


[Line endings] are treated like spaces:
Note that only *one* space is stripped:

```````````````````````````````` example
``
foo
``
` `` `
.
<p><code>foo</code></p>
<p><code> `` </code></p>
````````````````````````````````

The stripping only happens if the space is on both
sides of the string:

```````````````````````````````` example
` a`
.
<p><code> a</code></p>
````````````````````````````````

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 `
.
<p><code>foo bar baz</code></p>
<p><code> b </code></p>
````````````````````````````````


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
``
.
<p><code>a  b</code></p>
<p><code>foo bar baz</code></p>
````````````````````````````````

```````````````````````````````` example
``
foo
``
.
<p><code>foo </code></p>
````````````````````````````````

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
`<br />` 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`
.
<p><code>foo `` bar</code></p>
<p><code>foo bar baz</code></p>
````````````````````````````````

Note that browsers will typically collapse consecutive spaces
when rendering `<code>` 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:
Expand All @@ -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``
.
<p><code>foo`bar</code></p>
````````````````````````````````

```````````````````````````````` example
` foo `` bar `
.
<p><code>foo `` bar</code></p>
````````````````````````````````


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
Expand Down Expand Up @@ -9008,7 +9041,7 @@ Line breaks do not occur inside code spans
`code
span`
.
<p><code>code span</code></p>
<p><code>code span</code></p>
````````````````````````````````


Expand Down

0 comments on commit e121b4e

Please sign in to comment.