Skip to content

Commit

Permalink
Fix incorrect level recalculation in text_collapse
Browse files Browse the repository at this point in the history
close #466
  • Loading branch information
rlidwka committed Jul 12, 2019
1 parent d08c7c3 commit a1c9381
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
4 changes: 2 additions & 2 deletions lib/rules_block/state_block.js
Expand Up @@ -111,9 +111,9 @@ StateBlock.prototype.push = function (type, tag, nesting) {
var token = new Token(type, tag, nesting);
token.block = true;

if (nesting < 0) { this.level--; }
if (nesting < 0) this.level--; // closing tag
token.level = this.level;
if (nesting > 0) { this.level++; }
if (nesting > 0) this.level++; // opening tag

this.tokens.push(token);
return token;
Expand Down
4 changes: 2 additions & 2 deletions lib/rules_inline/state_inline.js
Expand Up @@ -50,9 +50,9 @@ StateInline.prototype.push = function (type, tag, nesting) {

var token = new Token(type, tag, nesting);

if (nesting < 0) { this.level--; }
if (nesting < 0) this.level--; // closing tag
token.level = this.level;
if (nesting > 0) { this.level++; }
if (nesting > 0) this.level++; // opening tag

this.pendingLevel = this.level;
this.tokens.push(token);
Expand Down
14 changes: 11 additions & 3 deletions lib/rules_inline/text_collapse.js
@@ -1,4 +1,10 @@
// Merge adjacent text nodes into one, and re-calculate all token levels
// Clean up tokens after emphasis and strikethrough postprocessing:
// merge adjacent text nodes into one and re-calculate all token levels
//
// This is necessary because initially emphasis delimiter markers (*, _, ~)
// are treated as their own separate text tokens. Then emphasis rule either
// leaves them as text (needed to merge with adjacent text) or turns them
// into opening/closing tags (which messes up levels inside).
//
'use strict';

Expand All @@ -10,9 +16,11 @@ module.exports = function text_collapse(state) {
max = state.tokens.length;

for (curr = last = 0; curr < max; curr++) {
// re-calculate levels
level += tokens[curr].nesting;
// re-calculate levels after emphasis/strikethrough turns some text nodes
// into opening/closing tags
if (tokens[curr].nesting < 0) level--; // closing tag
tokens[curr].level = level;
if (tokens[curr].nesting > 0) level++; // opening tag

if (tokens[curr].type === 'text' &&
curr + 1 < max &&
Expand Down

0 comments on commit a1c9381

Please sign in to comment.