aboutsummaryrefslogtreecommitdiff
path: root/spec.txt
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-08-25 15:06:36 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-08-25 16:07:50 -0700
commite121b4e30185ca0513052cc4d08470ee75f9646b (patch)
tree49279e1d2f66f19b7c0080f5f4eb7492a78867c4 /spec.txt
parentd472c6d8fa9d43838b126397fa8b3ab5219bcf24 (diff)
Code spans: don't collapse interior space.
Closes #532.
Diffstat (limited to 'spec.txt')
-rw-r--r--spec.txt101
1 files 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 ``
.
<p><code>foo ` bar</code></p>
````````````````````````````````
@@ -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:
@@ -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
@@ -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>
````````````````````````````````