const { Marked } = require("marked");
const marked = new Marked();
const source = `
**@bobby**
i am testing @john-doe other text.
`;
const tagtext = {
name: 'tagtext',
level: 'inline', // Is this a block-level or inline-level tokenizer?
// start(src: string) {
// //| string[]
// console.log('::start tagetext', src, `an @example 123`.match(/([@#][\w_-]+)/g));
// return src.match(/([@#][\w_-]+)/g);
// // return src.match(/([@#][\w_-]+)/g)?.index;
// // return src.indexOf('@');
// }, // Hint to Marked.js to stop and check for a match
start(src) {
return src.indexOf('@');
},
tokenizer(src, tokens) {
// const match = src.match(/([@#][\w_-]+)/g);
const rule = /^@\w+/;
const match = rule.exec(src);
if (match) {
// console.log('::tagtext', match);
return {
type: 'tagtext', // Should match "name" above
raw: match[0] // Text to consume from the source
};
}
return false;
},
renderer(token) {
// console.log('::tagtext renderer', token); //marked.parseInline(token)
return `<span class="tag-item">${token.raw}</span>`; // Return the final HTML for this token
}
};
marked.use(
{ extensions: [tagtext] },
{
// async: true,
pedantic: false,
gfm: true
}
);
console.log(marked.parse(source));