嵌入式多媒体文本的html,嵌入式浏览器开发

《嵌入式浏览器开发.doc》由会员分享,可免费在线阅读全文,更多与《嵌入式浏览器开发》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

1、,判断请求的文件数据是否已经存在;如果存在,调用Cache_rocess_queue()处理Cache中的数据;否则,调用a_Url_oen()从网上取文件。函数a_Url_oen()的主要功能是调用合适的oener,该函数一般调用Url_oen()。Url_oen()将调用合适的method:a_File_get()或者a_Htt_get()。这里只讨论a_Htt_get()。函数a_Htt_get()主要是创建一个htt连接,发出DNS请求。它首先根据全局变量HTTP_Proxy和No_Proxy,修改用户Url;然后创建非阻塞socket;最后通过调用a_DNS_looku()发出DNS请求。Dillo中的DNS请求将由多个线程完成。域名解析完成后,回调函数Htt_dns_callback()将被调用。它首先发送Htt请求(sendquery);然后接收回答(receiveanswer)。发送、接收操作都是通过调用a_IO_submit()实现的。函数a_IO_submit()通过gtk的支持,实现了阻塞IO操作。当数据被接收到,回调函数a_Cache_callback()将被调用。函数a_Cache_callback()主要功能是处理接收到的数据,判断文件是否下载完毕。接收到的数据将由函数Cache_rocess_queue()处理。选择合适的解释器函数Cache_rocess_queue()的主要功能是为下载的文件选择一个合适的解释器。()该函数首先判断协议头(header)(根据Htt协议,body前为header)是否下载完毕,如果没有下载完,直接返回。()随后,调用函数a_Web_disatch_by_tye()选择解释器。()调用此解释器。()如果文件下载完毕,通知解释器,并处理相应的Cache队列。函数a_Web_disatch_by_tye()首先调用a_Mime。

2、、还没有处理的一段数据的处理。widgetwordwordwordLineLineLinePageHtml_write()的主要过程是()调用a_Dw_age_udate_begin()。()处理缓冲区中的数据当前字符是空格,而且不在Tag“re”中处理空格当前字符是“lt”,如果是注释,则跳过注释如果是一个Tag,则处理此Tag(Html_rocess_tag())如果是word则处理此word(Html_rocess_word())()将当前字符的位置,记录到对应DilloHtml结构中Start_Ofs(相对于整个文件头,未处理数据的起始地址,下一次调用此函数时使用)。()处理状态条,显示浏览器当前的工作状态。()a_Dw_age_udate_end()。对DwPage结构(页结构)中,word、line、widget等的改变,都应该放在这两个函数:a_Dw_age_udate_begin()和a_Dw_age_udate_end()之间。在第二个函数调用之后,画面将会更新。Tag处理一例:Html_tag_oen_a()此函数用于处理Tag(anchor)的开始标签。()将此tag压入对应DilloHtml中的堆栈,()取得属性”href”,创建一个attr,调用函数a_Dw_age_add_attr(age,amattr),将其加入相应的age()取得属性”name”,调用函数a_Dw_age_add_anchor()。此函数的主要功能:创建一个word,记录word的属性是anchor,以name为索引将此anchor插入当前age的anchorHash表。设置它在页面中的位置。结尾标签由函数Html_tag_close_default()处理。它的主要功能是将此标签从DilloHtml栈中弹出。Html_rocess_word()此函数处理网页中,所要显示的文本。此函数首。

3、与控件相关的操作大部分由JavaScrit实现。DOM和RDF是Mozilla软件包中比较大的核心模块,同时两者也是XML的一部分。DOM是程序访问和维护HTML和XML文档的API;RDF(ResourceDescritionFramework)提供了对整个资源(包括本地资源)的描述体系;在Mozilla中,JavaScrit与C++代码的互操作,也需要这两个模块的支持。可以说,XML在整个软件包中起到了纲举目张的作用。对XML的支持增强了系统的功能,但是客观上也增加了系统的复杂性,增大了系统规模,为裁减造成了困难(最早曾尝试裁减Mozilla)。Layout在对HTML脚本语法分析结束后,要对页面进行布局。在整个浏览器中,Layout属于关键技术之一。Mozilla提供了强大的布局功能,在系统自带的测试用例中,有非常复杂的页面(如:CSSstyles,DeelyNestedTables,Frames,DHTML等),MozillaV可以对这些页面进行出色的布局;而RedHatLinux自带的Netscaex在显示这些页面时,错误比较多,甚至不能显示。强大的功能是以规模巨大的代码量为代价的,MozillaV中layout模块达到了M,这是整个裁减过程中最难处理的模块之一。ZEN浏览器分析正如第一章简介中指出的,ZEN是一个不知名的优秀开放源码浏览器,拥有可换界面的优异特性,用户可改换GUI平台,设定自己的界面风格,极符合嵌入式的要求。主要模块说明:arser:词法语法分析。layouter:布局。ui:不同的GUI界面和控件库,包括GTK、SVGA、字符模式,也可自定义。image:图像处理。rotocol:协议,包括file和htt。下面给出其语法分析的数据结构示意:age|XtextlinktexttableX||textXtable_rowX|table_celltable_c。

4、aScrit支持的效果良好,通过JavaScrit来达到对图片的操作,实现了较好的动态效果。是学习JavaScrit支持的良好范例。另外,Thunder浏览器的词法分析也比较完善,NeibitBrowser的设计也参考了Thunder的设计,并借鉴了部份字符串处理函数。Thunder浏览器的布局算法十分简单,因为其支持的XML是自己定义的,在图片等元素的属性里不仅定义了其应该出现的绝对位置,还定义了图片的长度,宽度,使得布局工作易如反掌,没有算法可借鉴。Mozilla浏览器分析COMCOM是由Microsoft提出的组件标准,它不仅定义了程序之间进行交互的标准,并且也提供了组件程序运行所需的环境。COM所定义的模块之间的接口标准是二进制可执行代码级标准,因此模块之间独立性更强,具有语言无关性。在Mozilla中,COM机制利用C++语言实现,几乎所有的对象都是COM对象,若干COM对象又组合成COM模块。COM对象在初始化时,都要注册到COM运行环境(COM库)中;当其它模块需要调用该对象的方法时,先要通过COM运行环境,以该COM对象的全球唯一ID为参数,创建该COM对象,取得对象接口指针;最后通过该对象接口指针调用方法。COM机制使各个模块之间独立性非常高,为裁减提供了便利;但是,为了实现这套机制,Mozilla(Linux环境下)必须要实现相应的运行环境(COM库),所有的COM对象都要继承实现一些COM标准接口,这些都增加了代码量,使得单一模块(对象)代码规模增大。XMLMozilla对于XML提供了强大的支持,甚至可以说整个软件包是对XML理论的一种实现。Mozilla的用户界面主要是由XML文本描述(在Mozilla中称为XUL:XMLbaseUserInterfaceLanguage);所描述界面中的控件,被解释转换成DOM(DocumentObjectModel)对象;。

5、_set_viewer(),该函数根据文件类型选择相应的viewer(即:主函数中a_Mime_init()初始化的几种打开方式:a_Gif_image()a_Jeg_image()和a_Html_text())。对于Html文件,a_Html_text()将会被调用。a_Html_text()主要生成一个DilloHtml结构和一个DwPage结构。DilloHtml中有几个比较重要的结构:Dw指向DwPage结构,DwPage是Dillo自定义的文档视图。堆栈维护一个堆栈,记录当前正在处理的tag,用于语法分析。Bw记录当前的窗口。然后,函数a_Web_disatch_by_tye()调用a_Dw_gtk_scroller_set_dw(),为DwPage(dw)设置边界,为相应的窗口(bw)设置滚动条,并将页面(dw)嵌入到窗口中(bw)。此函数里的操作是基于gtk的。函数a_Html_text()将会指定Html文件的解释器为Html_Callback()Html文件的显示一般Html文件的显示需要经过词法分析、语法分析和布局(layout),显示等几步。在Html显示方面,Dillo处理的比较简单。它在语法分析的同时,进行布局。这里有两个概念:word和line。一个word相当于一个Html文件中的一个tag,若干个word形成一个line,而若干line形成一个age。在语法分析的过程中,发现一个tag,则生成一个word(可能还会生成一个widget,如img),同时进行布局。当一行布满时,一个新的line将会生成。这种处理方式简单,但是具有较大的局限性。Dillo中不支持Table标记就是这种局限性的一种体现。Html_write()函数Html_callback()通过调用Html_write()实现Html文件的分析、布局。Html_write()是对已经下载完毕。

6、根据当前DilloHtml堆栈中的ParseMode对文本进行处理。ParseMode有如下几种:STASH、VERBATIM、PRE。处理完后,调用函数a_Dw_age_add_text(),将这些文本插入页中。此函数的主要流程为:()设置字体()计算文本宽度()调用Dw_age_new_word(),在此页中创建一个新的word,记录此word的属性为TextDillo分析总结Dillo是运行在Linux平台上基于gtk的图形网络浏览器。具有规模小的优点。但是Html页面的显示质量较差,不支持JavaScrit、Java。基于Dillo的嵌入式浏览器改造需要考虑如下几个方面:()从整体结构来看,从取得文件到文件处理,大量使用回调函数,代码的可读性差,结构不清晰。建议改成消息机制,这样既增强了各模块的独立性,同时提高了并发性。()Html文件的显示模块需要改写。Dillo不能支持比较常用的标签Table,而这种缺陷又是因为设计结构本身的缺陷,所以该模块需要做较大的改写。()Dillo对于gtk的依赖较强,由于gtk不适合于嵌入式系统,需要改成基于fltk或embeddedQT等嵌入式ToolKits,因此改造的工作量较大。Thunder浏览器分析Thunder浏览器是一个XML浏览器,用于制作多媒体演示软件,支持多媒体格式包括文字、图像、音频、视频。采用标准C编程,在WINDOWS下使用VC编译,软件规模较大,源程序达到M。主要模块功能介绍:JavaScrit:JavaScritAPI函数库JsEngine:浏览器JavaScrit支持引擎TStream:流式文件处理TXml:XML的词法语法分析与布局Widget:widget控件库TDevice:图形、声音等的驱动函数库TKernel:核心系统函数,包括内存分配、消息解析宏以及接口类型定义等Thunder浏览器值得称道的是对Jav。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值