Skip to content

Commit

Permalink
return false to use last renderer/tokenizer
Browse files Browse the repository at this point in the history
  • Loading branch information
UziTech committed Apr 19, 2020
1 parent 07510c9 commit 07f2b33
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 4 deletions.
5 changes: 3 additions & 2 deletions docs/USING_PRO.md
Expand Up @@ -111,8 +111,9 @@ const tokenizer = {
text: match[1].trim()
};
}
const originalTokenizer = new marked.Tokenizer(this.options);
return originalTokenizer.codespan.apply(this, arguments);

// return false to use original codespan renderer
return false;
}
};

Expand Down
18 changes: 16 additions & 2 deletions src/marked.js
Expand Up @@ -136,14 +136,28 @@ marked.use = function(extension) {
if (extension.renderer) {
const renderer = marked.defaults.renderer || new Renderer();
for (const prop in extension.renderer) {
renderer[prop] = extension.renderer[prop];
const prevRenderer = renderer[prop];
renderer[prop] = (...args) => {
let ret = extension.renderer[prop].apply(renderer, args);
if (ret === false) {
ret = prevRenderer.apply(renderer, args);
}
return ret;
};
}
opts.renderer = renderer;
}
if (extension.tokenizer) {
const tokenizer = marked.defaults.tokenizer || new Tokenizer();
for (const prop in extension.tokenizer) {
tokenizer[prop] = extension.tokenizer[prop];
const prevTokenizer = tokenizer[prop];
tokenizer[prop] = (...args) => {
let ret = extension.tokenizer[prop].apply(tokenizer, args);
if (ret === false) {
ret = prevTokenizer.apply(tokenizer, args);
}
return ret;
};
}
opts.tokenizer = tokenizer;
}
Expand Down
33 changes: 33 additions & 0 deletions test/unit/marked-spec.js
Expand Up @@ -171,6 +171,39 @@ paragraph
expect(html).toBe('extension2 paragraph\nextension1 html\n<h1 id="heading">heading</h1>\n');
});

it('should use previous extension when returning false', () => {
const extension1 = {
renderer: {
paragraph(text) {
if (text !== 'original') {
return 'extension1 paragraph\n';
}
return false;
}
}
};
const extension2 = {
renderer: {
paragraph(text) {
if (text !== 'extension1' && text !== 'original') {
return 'extension2 paragraph\n';
}
return false;
}
}
};
marked.use(extension1);
marked.use(extension2);
const html = marked(`
paragraph
extension1
original
`);
expect(html).toBe('extension2 paragraph\nextension1 paragraph\n<p>original</p>\n');
});

it('should get options with this.options', () => {
const extension = {
renderer: {
Expand Down

0 comments on commit 07f2b33

Please sign in to comment.