图2 Konqueror/embedded的层次结构
(1) Kparts及QT构件实现GUI
在KDE中,部件被称为part,这和MS中的OLE组件是一个概念。一个part通常包含三个部分:一个窗口、功能、以及使用该功能的用户接口。应用在浏览器项目中,part 包含了多个窗口(一个页面对应于一个 part,而一个页面有可能包含多个窗口)、part 提供的功能包括:页内、页间的跳转、重定向、窗口的创建和删除、用户的输入处理、剪切、粘贴等,同时为使用这些功能提供了菜单、工具条、状态条等用户接口。其他的应用程序可以使用该 part 把浏览器窗口嵌入自己的应用中。
为了方便地实现将现有应用作为一个控件插入到另外一个应用中去,采用了 part 对象负责管理整个应用和窗口。对于每个窗口又采取了类似 Microsoft MFC 中的 Doc-View 结构。因此在将应用嵌入到另外一个应用中的时候,只需要获得 part 中的接口和数据即可。对窗口的一切操作的响应由被嵌入应用的 part 对象来完成,而类 Doc-View 结构只简单的负责显示和保存显示数据就可以了。
Kpart 定义了一系列简单的类:part、plugin、mainwindow、part manager。其中:
a) Part:是 KDE 中的部件。为了定义一个Part,你需要提供widget,当然还有提供访问Part功能的Actions,还要有一个XML文件来描述在UI中Actions的布局。
b) Plugin:它是一小段功能程序,不通过嵌入一个Widget来实现。但是定义了应用程序用户接口对应的动作。它可以是图形的,比如弹出的对话框、拼写检查等。
c) Mainwindow:它是一个特殊的KTMainWindow,它的具有Action定义的UI是由XML文件来描述的,这样它可以通过弥合XML文件来嵌入Part对象。
d) Part manager:它是一个抽象的类,用来处理激活还是禁止 part。它只有在一个 mainwindow 中包含多个 part 的时候才有用。
由于Konqueror/embedded是基于图形库QT/E,因此也遵循了signal、slot消息机制,Konqueror/embedded作为QT/E的一个标准应用程序进行输入输出及界面消息响应。
(2)执行DOM 模块
DOM 模块对经过解析的标记进行文法检查,并把属性看作节点,按照标记的语义包含关系以及先后顺序组织成DOM树。它给HTML 文档定义了一个与平台无关的程序接口。使用该接口可以控制文档的内容、接口和样式。
在执行DOM模块的过程中,浏览器将所有从语法语义解析模块中获得标记和属性按照一定的层次结构组织成DOM 树。完成构筑DOM 树的功能后,DOM 模块会同时标记和属性以对象的形式传给绑定模块和脚本引擎模块。
(3)执行I/O 模块
浏览器加载有关的I/O文件,对HTTP等协议进行解析。语法语义解析模块的解析功能分为两部分:①对接收到的字节流进行分词,解析为关键字;②调用解析器检验关键字是否合法,若是合法的关键字,则按照规则插入到DOM 树中。
HTML 的标记(tag)和属性(attribute)统称为HTML的关键字。基本上所有HTML 4. 0 规范的标记都在此功能模块中获得支持。从I / O 模块中接收字节流并进行分词,输出标记;再对标记进行判断,如果是HTML 规范中合法的标记,则把标记看作一个节点,并组织成一棵语法树。对属性标记的解析首先在标记处理类中执行,如果解析不成功,则交由基类的属性解析器进行解析。
以上简要介绍了Konqueror/E的几个核心技术,下面结合实际详细介绍Konqueror/E的移植和汉化过程。
3 Konqueror/E的移植
3.1交叉编译工具的安装