Skip to content

Commit

Permalink
add walkTokens option
Browse files Browse the repository at this point in the history
  • Loading branch information
UziTech committed May 13, 2020
1 parent db3b61b commit a337c76
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ function getDefaults() {
smartLists: false,
smartypants: false,
tokenizer: null,
walkTokens: null,
xhtml: false
};
}
Expand Down
27 changes: 20 additions & 7 deletions src/marked.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ function marked(src, opt, callback) {
if (!tokens.length) return done();

let pending = 0;
marked.iterateTokens(tokens, function(token) {
marked.walkTokens(tokens, function(token) {
if (token.type === 'code') {
pending++;
highlight(token.text, token.lang, function(err, code) {
Expand Down Expand Up @@ -101,7 +101,11 @@ function marked(src, opt, callback) {
}

try {
return Parser.parse(Lexer.lex(src, opt), opt);
const tokens = Lexer.lex(src, opt);
if (opt.walkTokens) {
marked.walkTokens(tokens, opt.walkTokens);
}
return Parser.parse(tokens, opt);
} catch (e) {
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
if (opt.silent) {
Expand Down Expand Up @@ -162,14 +166,23 @@ marked.use = function(extension) {
}
opts.tokenizer = tokenizer;
}
if (extension.walkTokens) {
const walkTokens = marked.defaults.walkTokens;
opts.walkTokens = (token) => {
extension.walkTokens(token);
if (walkTokens) {
walkTokens(token);
}
};
}
marked.setOptions(opts);
};

/**
* Iterate over every token
*/

marked.iterateTokens = function(tokens, callback) {
marked.walkTokens = function(tokens, callback) {
let ret;
for (const token of tokens) {
ret = callback(token);
Expand All @@ -179,14 +192,14 @@ marked.iterateTokens = function(tokens, callback) {
switch (token.type) {
case 'table': {
for (const cell of token.tokens.header) {
ret = marked.iterateTokens(cell, callback);
ret = marked.walkTokens(cell, callback);
if (ret === false) {
return false;
}
}
for (const row of token.tokens.cells) {
for (const cell of row) {
ret = marked.iterateTokens(cell, callback);
ret = marked.walkTokens(cell, callback);
if (ret === false) {
return false;
}
Expand All @@ -195,15 +208,15 @@ marked.iterateTokens = function(tokens, callback) {
break;
}
case 'list': {
ret = marked.iterateTokens(token.items, callback);
ret = marked.walkTokens(token.items, callback);
if (ret === false) {
return false;
}
break;
}
default: {
if (token.tokens) {
ret = marked.iterateTokens(token.tokens, callback);
ret = marked.walkTokens(token.tokens, callback);
if (ret === false) {
return false;
}
Expand Down
6 changes: 3 additions & 3 deletions test/unit/marked-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,8 @@ text 1
});
});

describe('iterateTokens', () => {
it('should iterate over every token', () => {
describe('walkTokens', () => {
it('should walk over every token', () => {
const markdown = `
paragraph
Expand Down Expand Up @@ -336,7 +336,7 @@ br
`;
const tokens = marked.lexer(markdown, { ...marked.getDefaults(), breaks: true });
const tokensSeen = [];
marked.iterateTokens(tokens, (token) => {
marked.walkTokens(tokens, (token) => {
tokensSeen.push([token.type, (token.raw || '').replace(/\n/g, '')]);
});

Expand Down

0 comments on commit a337c76

Please sign in to comment.