markdown2html 转化流程

  1. 定义一个extensions
function markedMention() {
    return {
        extensions: [{
            name: 'mention',
            level: 'inline',
            start(src) {
                // console.log("markedMention start....", src);
                return src.indexOf('#')
            },
            tokenizer(src, tokens) {
                const rule = /^(#[a-zA-Z0-9]+)\s?/
                const match = rule.exec(src)

                // console.log("mention...", match)
                if (match) {
                    const token = {
                        type: 'mention',
                        raw: match[0],
                        text: match[1],
                        tokens: [],
                    }
                    return token
                }
            },
            renderer(token) {
                // console.log("men....", token);
                return `<span class="mention" data-mention="${token.text}">${token.text}</span>`;
            },
        }]
    }
}
  1. 使用marked.use(markedMention)
    1. 此时会以name作为唯一标识
    2. 将tokenizer放入level对应的数组中,level可以是inline 或 block
    3. start放入level对应的start[Level](startInline)中
    4. renderers根据name设置在extensions.renderers中
  2. 此处解析level为inline的情况
  3. 应用时,我们需要使用marked.parse(markdown文案, { gfm: true, …各种配置 })
  4. 在使用marked.parse之前,如果需要额外的扩展,需要在此之前使用.use()方法进行扩展,扩展时相当于给默认值(defaults)增加内容
// 使用marked.parse,就是在根据defaults来构建一个新的对象。
function marked(src, opt, callback) {
  return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);
}

// Lexer.lex
lex(src) {
    src = src.replace(/\r\n|\r/g, '\n');
    let next;
    while (next = this.inlineQueue.shift()) {
      this.inlineTokens(next.src, next.tokens);
    }

    return this.tokens;
}

// Parser.parse

在这里插入图片描述
这是我整理的流程图,包含了markdown2html库的转换过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值