Dillo 2.0 学习笔记三

本文探讨了Dillo浏览器中的HTML解析过程,包括词法分析的三个主要类别:SPACE、TAG和WORD。详细介绍了TAG的处理流程,以及如何通过解析TAG来修改样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是如何被渲染的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值