diff options
author | John MacFarlane <jgm@berkeley.edu> | 2018-08-25 15:06:36 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2018-08-25 16:07:50 -0700 |
commit | e121b4e30185ca0513052cc4d08470ee75f9646b (patch) | |
tree | 49279e1d2f66f19b7c0080f5f4eb7492a78867c4 | |
parent | d472c6d8fa9d43838b126397fa8b3ab5219bcf24 (diff) |
Code spans: don't collapse interior space.
Closes #532.
-rw-r--r-- | spec.txt | 101 |
1 files changed, 67 insertions, 34 deletions
@@ -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> ```````````````````````````````` |