Skip to content

Commit 53c79ee

Browse files
authoredJan 26, 2021
fix: leave whitespace only lines alone (#1889)
* fix: leave whitespace only lines alone * test: add whitepace_lines test * fix: render code with trailing new line
1 parent 42a18f1 commit 53c79ee

9 files changed

+57
-14
lines changed
 

‎src/Lexer.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ module.exports = class Lexer {
120120
* Lexing
121121
*/
122122
blockTokens(src, tokens = [], top = true) {
123-
src = src.replace(/^ +$/gm, '');
123+
if (this.options.pedantic) {
124+
src = src.replace(/^ +$/gm, '');
125+
}
124126
let token, i, l, lastToken;
125127

126128
while (src) {

‎src/Renderer.js

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module.exports = class Renderer {
2222
}
2323
}
2424

25+
code = code.replace(/\n$/, '') + '\n';
26+
2527
if (!lang) {
2628
return '<pre><code>'
2729
+ (escaped ? code : escape(code, true))

‎src/Tokenizer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ module.exports = class Tokenizer {
9191
};
9292
}
9393

94-
const text = cap[0].replace(/^ {4}/gm, '');
94+
const text = cap[0].replace(/^ {1,4}/gm, '');
9595
return {
9696
type: 'code',
9797
raw: cap[0],

‎src/rules.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const {
88
* Block-Level Grammar
99
*/
1010
const block = {
11-
newline: /^\n+/,
12-
code: /^( {4}[^\n]+\n*)+/,
11+
newline: /^(?: *(?:\n|$))+/,
12+
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
1313
fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
1414
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
1515
heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
@@ -31,7 +31,7 @@ const block = {
3131
lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
3232
// regex template, placeholders will be replaced according to different paragraph
3333
// interruption rules of commonmark and the original markdown spec:
34-
_paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
34+
_paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,
3535
text: /^[^\n]+/
3636
};
3737

‎test/specs/new/code_compensation_indent.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<ol>
33
<li><p>This is a list element.</p>
44
<pre><code>const x = 5;
5-
const y = x + 5;</code></pre>
5+
const y = x + 5;
6+
</code></pre>
67
</li>
78
</ol>
+4-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
<pre><code class="language-js">const value = 42;</code></pre>
2-
<pre><code>const value = 42;</code></pre>
1+
<pre><code class="language-js">const value = 42;
2+
</code></pre>
3+
<pre><code>const value = 42;
4+
</code></pre>
35
<p>Code blocks contain trailing new line.</p>

‎test/specs/new/whiltespace_lines.html

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<p>paragraph</p>
2+
<p>test</p>
3+
<pre><code>a
4+
5+
b
6+
7+
c
8+
</code></pre>
9+
<pre><code>a
10+
11+
b
12+
</code></pre>

‎test/specs/new/whiltespace_lines.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
renderExact: true
3+
---
4+
paragraph
5+
6+
test
7+
8+
a
9+
10+
b
11+
12+
c
13+
14+
```
15+
a
16+
17+
b
18+
```

‎test/unit/marked-spec.js

+12-6
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,15 @@ text 1
335335
fail(err);
336336
}
337337

338-
expect(html).toBe(`<pre><code class="language-lang1">async text 1</code></pre>
338+
expect(html).toBe(`<pre><code class="language-lang1">async text 1
339+
</code></pre>
339340
<blockquote>
340-
<pre><code class="language-lang2">async text 2</code></pre>
341+
<pre><code class="language-lang2">async text 2
342+
</code></pre>
341343
</blockquote>
342344
<ul>
343-
<li><pre><code class="language-lang3">async text 3</code></pre>
345+
<li><pre><code class="language-lang3">async text 3
346+
</code></pre>
344347
</li>
345348
</ul>
346349
`);
@@ -378,12 +381,15 @@ text 1
378381
fail(err);
379382
}
380383

381-
expect(html).toBe(`<pre><code class="language-lang1">async text 1</code></pre>
384+
expect(html).toBe(`<pre><code class="language-lang1">async text 1
385+
</code></pre>
382386
<blockquote>
383-
<pre><code class="language-lang2">async text 2</code></pre>
387+
<pre><code class="language-lang2">async text 2
388+
</code></pre>
384389
</blockquote>
385390
<ul>
386-
<li><pre><code class="language-lang3">async text 3</code></pre>
391+
<li><pre><code class="language-lang3">async text 3
392+
</code></pre>
387393
</li>
388394
</ul>
389395
`);

1 commit comments

Comments
 (1)
Please sign in to comment.