weixin

dedeTagParse::ParseTemplet方法的解释

日期: September 29, 2021 作者:网站维护

parse是为了提取用某种语法写成的句子的信息。比如下面这个,之前写过一个介绍,但是没描述parse的过程。今天重新看了下。记录一下parse的过程:

{de:car color='red'} hello {/de:car}
{de:car color='blue'/}

这是这种标记语法,有两种情况:一种是带有内部文本的语法,就是上面的第一行,他们叫做快标记。一种是没有内部文本的,也就是自闭合的,就是第二行的。

更简单的一种例子用来解释,比如这种:<a href="baidu.com">主页链接</a>,就是一个块标记,标签名写法更简单。<a>为起始,</a>为闭合标签,可以加上了一个属性href="baidu.com"。而开启和闭合之前,主页链接是内部文本。

这就是一个标记语言。标签名是内容的某种角色,标签属性是描述了标签的属性。

parse的过程

记录一下parseTemplet的parse过程,只需要记录一下大致的过程:

机器来说只是逐个字符看。遍历时我们可以通过记录和调整当前位置也就是for 里面的条件变量,来完成解析。

先去查找{de:的位置,后面就是要发现标签名,一直往后找,碰到空格就完成,就获取car这个字符串,car就是这个标签名。

再去找{/de:car}或者/},之所以这么做,是因为有两种情况,一种自闭合,一种是块。根据两个前后位置,当然可能会有两种,下面就写其中一种情况的。

比如{/dede:car}在前面的情况:就会在截取两者之间的部分color='red'} hello,然后从中提取标签的属性color=red和内部文本hello。parse标签属性的方法可以另外写:这里处理得到color=red,交给写好的另外一个方法处理吧。

每次提取一个标签出来就把标签名,起始位置记录起来,为了方便之后替换成需要的内容。就完成了解析。

后续工作

之后呢,dede需要把标签的内容算出来,比如上面的信息是car标签,color属性是red,内容是hello。再根据这个信息来计算出来结果来。

如果是文章的列表的标签,比如最近五个文章标题:{de:arclist row="5"/},还是用上面的方法提取出信息,再用其中的标签起始的位置替换成最近五个文章标题的内容。

至于这个内容怎么算出来的,下次再看吧。

广告内容为平台自动生成