typecho修改markdwon经验总结(二)
摘要:对于2020/10/25第二次修改typecho的markdwon语法进行总结与记录。参考第一次修改时的记录typecho修改markdwon经验总结
代码图以及效果图:
调用堆栈图:
- 解析markdown时先调用makeHtml然后调用parse函数。
通过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)
- 通过for循环先取出m元素的第0个元素,然后放入变量o中。v=o[0]即"list",然后通过l="parse"+f(v)等于parselist得出当前要处理的块需要调用parselist函数。
- 进入parselist函数,然后在末尾调用parse函数,对list块的内容进行具体的分割
- 开始解析list块的内容
可以看到这个时候z变量已经变成了list块的内容。同时m变量变成了对list块内容的解析。然后通过l="parse"+f(v)等于parseNormal得出当前要处理的块需要调用parseNormal函数。
- 循环上面的操作markdown解析就完成了。
一些断点以及调式时候的记录
//开始一个代码段,K表示当前行数 this.startBlock("code", K, [o[1], o[3], D]) //开始一个normal段 this.startBlock("normal", K) //获得当前段的属性 this.getBlock()
调试二段代码段中间文字消失时的堆栈图,红线为设置代码段的代码:
异常代码位置:
parseBlock函数的作用:
关键断点:
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。