摘要:对于2020/10/25第二次修改typecho的markdwon语法进行总结与记录。参考第一次修改时的记录typecho修改markdwon经验总结

代码图以及效果图:
typecho修改markdwon经验总结(二)1.png

调用堆栈图:

typecho修改markdwon经验总结(二)2.png

  1. 解析markdown时先调用makeHtml然后调用parse函数。
  2. 通过parseBlock函数先解析出块的类型以及块的开始位置和结束位置,例如图中的控制台输出的m变量,结合上面的代码图可以得出以下信息:

    z 变量的值等于把上面的代码按行分割。
    
    m[0]=["list",0,1,0] 是一个列表(list),列表的内容从z的第0个元素开始包括第0个元素,到z的第1个元素结束包括第一个元素,所以下面slice时候会加1,第三个元素我也不知道什么意思。
    m第0个元素代表z.slice(0,2),因为slice截取不包括末尾,所以要加1
    
    m[1]=["normal", 2, 2, null] 是一个正常的块(normal)?,块的内容是z的第2个元素开始包括第2个元素,到z的第2个元素结束包括第2个元素,null我也不知道啥意思
    
    m[2]=["definition", 3, 3, null] 是一个预定义的块(definition)
    m第二个元素代表z.slice(3,4)
    
  3. 通过for循环先取出m元素的第0个元素,然后放入变量o中。v=o[0]即"list",然后通过l="parse"+f(v)等于parselist得出当前要处理的块需要调用parselist函数。
  4. 进入parselist函数,然后在末尾调用parse函数,对list块的内容进行具体的分割

    typecho修改markdwon经验总结(二)3.png

  5. 开始解析list块的内容

    typecho修改markdwon经验总结(二)4.png

    可以看到这个时候z变量已经变成了list块的内容。同时m变量变成了对list块内容的解析。然后通过l="parse"+f(v)等于parseNormal得出当前要处理的块需要调用parseNormal函数。

  6. 循环上面的操作markdown解析就完成了。
  7. 一些断点以及调式时候的记录

    //开始一个代码段,K表示当前行数
    this.startBlock("code", K, [o[1], o[3], D])
    //开始一个normal段
    this.startBlock("normal", K)
    //获得当前段的属性
    this.getBlock()

    调试二段代码段中间文字消失时的堆栈图,红线为设置代码段的代码:

    typecho修改markdwon经验总结(二)5.png

    异常代码位置:

    typecho修改markdwon经验总结(二)6.png

    parseBlock函数的作用:

    typecho修改markdwon经验总结(二)7.png

    关键断点:

    typecho修改markdwon经验总结(二)8.png