Dillo 2.0 学习笔记三

来源:互联网 发布:c语言怎么学 编辑:程序博客网 时间:2024/06/05 00:37

2. Html部分的词法解析

今天关注Html的词法解析部分,比我想象的要简单一些:-)

昨天看出,Dillo通过Html_callback来处理Html信息,具体的,是通过调用Html::write来进行的。

Dillo将Html分为3类:SPACE,TAG和WORD。

SPACE = ' ' | /n | /r | /t | /f | /v,由Html_process_space处理,主要用于判断换行操作。操作方法是直接将其输出给TextBlock控件,需要参考当前的Style。

WORD 就是普通文字,由Html_process_word处理,操作方法也是输出给TextBlock。特殊处理是需要对字符进行转码,如果本身不是UTF8的话。

TAG是重点了,包括HTML中的各种命令,由Html_process_tag处理。过程如下:

a) a_Html_tag_index:根据’<’后第一个word的值,从tag列表中折半查找处理函数索引。

b) Html_test_section:如果此TAG需要在中声明,但没有发现等tag,将它们补齐。

c) 如果是起始标识:

1. 将TAG压栈-Html_push_tag

2. 设置通用属性-Html_parse_common_attrs

3. 执行该TAG对应的open函数(根据索引从TAG表中取出)

d) 如果是结束标志:

1. 清理现场

2. 出栈

这样,最复杂的部分分散到了TAG表的各个命令中。大部分命令是针对Style做修改的,因此在StyleEngine类中定义了一个栈,专门用于保存每次Style发生的变化。需要输出文字时,从Style栈顶取出对应的style即可。

具体的各个HTML命令就不仔细看了,明天重点照顾HTML是如何被渲染的。