diff options
author | John MacFarlane <jgm@berkeley.edu> | 2014-10-26 12:37:59 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2014-10-26 12:37:59 -0700 |
commit | e618715636a3bd60930bea34d214b3aaf8e9e766 (patch) | |
tree | ea550ce33d20532de1d240c083f997805aeb54d6 | |
parent | 9918827edd3dd6630f7417f1efca673bae55e6dd (diff) |
Require space before closing # sequence in ATX header.
Closes #169.
-rw-r--r-- | js/lib/blocks.js | 2 | ||||
-rw-r--r-- | spec.txt | 24 | ||||
-rw-r--r-- | src/blocks.c | 12 |
3 files changed, 23 insertions, 15 deletions
diff --git a/js/lib/blocks.js b/js/lib/blocks.js index 109661f..175cc2a 100644 --- a/js/lib/blocks.js +++ b/js/lib/blocks.js @@ -366,7 +366,7 @@ var incorporateLine = function(ln, line_number) { container.level = match[0].trim().length; // number of #s // remove trailing ###s: container.strings = - [ln.slice(offset).replace(/(?:(\\#) *#*| *#+) *$/,'$1')]; + [ln.slice(offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/,'')]; break; } else if ((match = ln.slice(first_nonspace).match(/^`{3,}(?!.*`)|^~{3,}(?!.*~)/))) { @@ -479,11 +479,11 @@ consists of a string of characters, parsed as inline content, between an opening sequence of 1--6 unescaped `#` characters and an optional closing sequence of any number of `#` characters. The opening sequence of `#` characters cannot be followed directly by a nonspace character. -The closing `#` characters may be followed by spaces only. The opening -`#` character may be indented 0-3 spaces. The raw contents of the -header are stripped of leading and trailing spaces before being parsed -as inline content. The header level is equal to the number of `#` -characters in the opening sequence. +The optional closing sequence of `#`s must be preceded by a space and may be +followed by spaces only. The opening `#` character may be indented 0-3 +spaces. The raw contents of the header are stripped of leading and +trailing spaces before being parsed as inline content. The header level +is equal to the number of `#` characters in the opening sequence. Simple headers: @@ -614,16 +614,24 @@ header: <h3>foo ### b</h3> . +The closing sequence must be preceded by a space: + +. +# foo# +. +<h1>foo#</h1> +. + Backslash-escaped `#` characters do not count as part of the closing sequence: . ### foo \### -## foo \#\## +## foo #\## # foo \# . -<h3>foo #</h3> -<h2>foo ##</h2> +<h3>foo ###</h3> +<h2>foo ###</h2> <h1>foo #</h1> . diff --git a/src/blocks.c b/src/blocks.c index ae106d2..7613c82 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -432,15 +432,15 @@ static void chop_trailing_hashtags(chunk *ch) chunk_rtrim(ch); orig_n = n = ch->len - 1; - // if string ends in #s, remove these: + // if string ends in space followed by #s, remove these: while (n >= 0 && peek_at(ch, n) == '#') n--; - // the last # was escaped, so we include it. - if (n != orig_n && n >= 0 && peek_at(ch, n) == '\\') - n++; - - ch->len = n + 1; + // Check for a be a space before the final #s: + if (n != orig_n && n >= 0 && peek_at(ch, n) == ' ') { + ch->len = n; + chunk_rtrim(ch); + } } // Process one line at a time, modifying a node_block. |