freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于linux嵌入式瀏覽器設(shè)計(jì)與實(shí)現(xiàn)-資料下載頁(yè)

2024-11-17 21:52本頁(yè)面

【導(dǎo)讀】的一些研究、實(shí)踐工作。其中重點(diǎn)介紹了HTML解析部分的原理和實(shí)現(xiàn)過(guò)程,和瀏覽器對(duì)。用資源少,高性能,高可靠性,易移植,可定制等特點(diǎn)。并引出了課題的選取和其主。第二章先從總體上介紹了作者在本課題設(shè)計(jì)前期所作的工作,包括資料。章簡(jiǎn)要介紹了嵌入式瀏覽器的設(shè)計(jì)要素,包括瀏覽器的相關(guān)技術(shù)和標(biāo)準(zhǔn),CSS,JavaScript,Linux下的程序開發(fā)環(huán)境與編譯器、調(diào)試器,GNUmake和makefile,中的重要部分,解析效果的好壞將直接影響到網(wǎng)頁(yè)的顯示。包括EasyToken的組成及其功能、數(shù)據(jù)結(jié)構(gòu)、算法、控制標(biāo)記的處。理和工作流程等。EasyToken是用標(biāo)準(zhǔn)C實(shí)現(xiàn)的。支持的實(shí)現(xiàn),包括基本的JavaScript開發(fā)環(huán)境、JavaScriptEngine、JavaScript. 與瀏覽器的結(jié)合和瀏覽器消息響應(yīng),給出了其中涉及到的問(wèn)題及其解決方案。最后,進(jìn)行了課題小結(jié),并簡(jiǎn)述了課題。的發(fā)展前景和未來(lái)的研究方向。

  

【正文】 中之一就是變量或宏的定義能力。如果你要以 相同的編譯選項(xiàng)同時(shí)編譯十幾個(gè) C 源文件,而為每個(gè)目標(biāo)的編譯指定冗長(zhǎng)的編譯選 項(xiàng)的話,將是非常乏味的。但利用簡(jiǎn)單的變量定義,可避免這種乏味 的工作,例如: CC = gcc CCFLAGS = D_DEBUG g m486 : $(CC) c $(CCFLAGS) 在上面的例子中, CC 和 CCFLAGS 就是 make 的變量。 GNU make 通常稱之 為變量,而其他 UNIX 的 make 工具稱之為宏,實(shí)際是同一個(gè)東西。在 makefile 中 引用變量的值時(shí),只需變量名之前添加 $ 符號(hào)。 19 4)運(yùn)行 make GNU make 命令還 有一些其他選項(xiàng): C DIR f FILE h i I DIR n p s w W FILE 在讀取 makefile 之前改變到指定的目錄 DIR。 以指定的 FILE 文件作為 makefile。 顯示所有的 make 選項(xiàng)。 忽略所有的命令執(zhí)行錯(cuò)誤。 當(dāng)包含其他 makefile 文件時(shí),可利用該 選項(xiàng)指定搜索目錄。 只打印要執(zhí)行的命令,但不執(zhí)行這些命令。 顯示 make 變量數(shù)據(jù)庫(kù)和隱含規(guī)則。 在執(zhí)行命令時(shí)不顯示命令。 在處理 makefile 之前和之后,顯示工作 目錄。 假定文件 FILE 已經(jīng)被修改。 GTK 圖形程序開發(fā) GTK (GIMP Toolkit) 是一套用于創(chuàng)建圖形用戶界面的工具包。 GTK 被稱為 GIMP 工具包是因?yàn)樽畛鯇懰怯脕?lái)開發(fā) GIMP (GNU 圖像處理程序 ) 的,但是它現(xiàn)在已經(jīng) 被用于很多軟件項(xiàng)目了,包括 GNOME (GNU 網(wǎng)絡(luò)對(duì)象模型環(huán)境 )。 GTK 是在 GDK (GIMP Drawing Kit) 和 gdkpixbuf 的基礎(chǔ)上建立起來(lái)的, GDK 基本上是對(duì)訪問(wèn)窗口的底 層函數(shù) (在 X 窗口系統(tǒng)中是 Xlib) 的一層封裝, gdkpixbuf 是一個(gè)用于客戶端圖 像處理的庫(kù)。 GTK 實(shí)質(zhì)上是一個(gè)面向?qū)ο蟮膽?yīng)用程序接口 (API)。盡管完全用 C 寫成的,但 它是基于類和回調(diào)函數(shù) (指向函數(shù)的指針 ) 的思想實(shí)現(xiàn)的 [10]。 下面通過(guò)一個(gè)簡(jiǎn)單的程序來(lái)介紹如何用 GTK 進(jìn)行用戶界面開發(fā)。這個(gè)程序創(chuàng)建 200x200 大小的窗口,如圖 所示,沒(méi)有辦法退出,除非你從 shell 中將它殺掉。 20 include gtk/ 圖 一個(gè)用 GTK 創(chuàng)建的窗口 int main( int argc, char *argv[] ) { GtkWidget *window。 gtk_init (amp。argc, amp。argv)。 window = gtk_window_new (GTK_WINDOW_TOPLEVEL)。 gtk_widget_show (window)。 gtk_main ()。 return 0。 } 你可以用 gcc 編譯上面的程序: gcc o base `pkgconfig cflags libs gtk+` 所有程序應(yīng)該包含 gtk/,其中聲明了變量、函數(shù)以及數(shù)據(jù)結(jié)構(gòu)等,這些東西 會(huì)在你的程序中使用。 下一行: gtk_init (amp。argc, amp。argv)。 這個(gè)函數(shù) gtk_init(gint *argc, gchar ***argv) 會(huì)在每個(gè) GTK 應(yīng)用程序中調(diào)用。該 函數(shù)設(shè)定了默認(rèn)的視頻( visual)和顏色映射模式( color map),接著會(huì)調(diào)用函數(shù) gdk_init(gint *argc, gchar ***argv)。該函數(shù)初始化要使用的庫(kù),設(shè)定默認(rèn)的信號(hào)處理, 并檢查傳遞給你的程序的命令行參數(shù),尋找下列之一: 1) gtkmodule 2) gfatalwarnings 3) gtkdebug 21 4) gtknodebug 5) gdkdebug 6) gdknodebug 7) display 8) sync 9) name 10) class 這些參數(shù)將會(huì)從參數(shù)表中刪除,留下它不能識(shí)別的給你的程序解析或忽略。這就 創(chuàng)建了可以被所有 GTK 程序接受的一組標(biāo)準(zhǔn)參數(shù)。 下面兩行程序會(huì)創(chuàng)建并顯示一個(gè)窗口 window = gtk_window_new (GTK_WINDOW_TOPLEVEL)。 gtk_widget_show (window)。 GTK_WINDOW_TOPLEVEL 參數(shù)指作者要使用窗口管理器來(lái)修飾和放置窗口。這里不會(huì) 創(chuàng)建一個(gè) 0x0 大小 的窗口,一個(gè)沒(méi)有子構(gòu)件的窗口默認(rèn)大小設(shè)置為 200x200,這樣 你仍然能操作它。 gtk_widget_show() 函數(shù)讓 GTK 知道,作者已經(jīng)設(shè)置完構(gòu)件的屬性,可以顯示 它了。 最后一行進(jìn)入 GTK 主處理循環(huán)。 gtk_main ()。 gtk_main() 是另一個(gè)可以在每個(gè) GTK 程序中見(jiàn)到的函數(shù)調(diào)用。當(dāng)程序運(yùn)行到這 里, GTK 會(huì) “睡著 ”等待 X 事件 (如按鈕或鍵盤按下 )、超時(shí) (timeouts)或文件 IO 通知發(fā)生。 本章小結(jié) 本章簡(jiǎn)要介紹了嵌入式瀏覽器的設(shè)計(jì)要素,包括瀏覽 器的相關(guān)技術(shù)和標(biāo)準(zhǔn), CSS , JavaScript, Linux 下的程序開發(fā)環(huán)境與編譯器、調(diào)試器, GNU make 和 Makefile, 以及 GTK 圖形程序開發(fā)。 22 4 HTML 解析 HTML的細(xì)節(jié)在 RFC和 W3C組織的相關(guān)文檔中有詳細(xì)規(guī)定 [21],但實(shí)現(xiàn)的方法差別 就非常大了。對(duì)于瀏覽器來(lái)說(shuō), HTML文檔只是一個(gè)數(shù)據(jù)流,瀏覽器不可能自動(dòng)的識(shí) 別出一個(gè)個(gè)的標(biāo)記,并進(jìn)行相應(yīng)的工作。 HTML解析是瀏覽器程 序中重要的一部分。 通常對(duì) HTML語(yǔ)言解析有兩種方式,第一種方式是把詞法分析和語(yǔ)法分析分離 開,即完成詞法分析后再進(jìn)行語(yǔ)法分析。這種方法處理起來(lái)很簡(jiǎn)單,但它的缺點(diǎn)是必 須對(duì)超文本掃描兩次,這將大大影響整個(gè)瀏覽器系統(tǒng)的效率 [14]。作者采用的是第二種 解析方法,它的特點(diǎn)是語(yǔ)法分析和詞法分析緊密的結(jié)合在一起工作,只需對(duì)超文本掃 描一次。 HTML 解析的過(guò)程主要有兩部分:分詞過(guò)程和分析、處理過(guò)程。分詞過(guò)程:將網(wǎng) 絡(luò)部分收到的待處理的數(shù)據(jù)流分解成獨(dú)立的、單個(gè)的可處理的單元,稱之為 Token。 把 HTML 文本 看做字符流,對(duì)它進(jìn)行掃描,分出一個(gè)個(gè)的 token。 Token 是程序中的 基本處理單元,如:標(biāo)記( tag)。分析、處理過(guò)程:針對(duì)分出的 token,根據(jù)它的屬 性等信息,調(diào)用不同的分析程序( parser)進(jìn)行相應(yīng)處理,并根據(jù)它們之間的層次關(guān) 系,加入到語(yǔ)法樹和 render 樹中。處理完后的 HTML 文檔產(chǎn)生一個(gè)樹型的數(shù)據(jù)結(jié)構(gòu), 經(jīng)過(guò)排版處理后,就可以由顯示模塊顯示出來(lái)了。語(yǔ)法樹和 render 樹是這一部分得處 理結(jié)果,也是后面處理模塊的基礎(chǔ)。 HTML 解析過(guò)程可以用如下得示意圖來(lái)表示: String 預(yù)處理 根據(jù)標(biāo)志,選擇相應(yīng) 的分詞模塊 Text Tag Pasertext 圖 …… Token 分析、處理 Token 生成語(yǔ)法樹、 render 樹 HTML 解析原理圖 23 Pasertag Easy Token 的組成及其功能 Easy Token 是 Easy Embedded Browser 的 HTML 解析器,使用標(biāo)準(zhǔn) C 編程。 Easy Token 可以正確解析 的全部元素,該解析器實(shí)際是通用的,還可用于 XML、 WML 的詞法分析,只需替換元素名稱即可。 作為 Easy Embedded Browser 的 HTML 解析部分, Easy Token 負(fù)責(zé)對(duì)接收到的 HTML 代碼進(jìn)行分析,其主要目的是提取網(wǎng)頁(yè)中元素的名稱及其屬性,并以恰當(dāng)?shù)男? 式(即按一定的數(shù)據(jù)結(jié)構(gòu))加以保存,也就是完成了將數(shù)據(jù)流離散化、結(jié)構(gòu)化的過(guò)程。 主要由以下幾個(gè)部分組成: 1)初始化:完成對(duì)數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變 量賦初值。 2)主體數(shù)據(jù)流分析:逐字符的進(jìn)行判斷,確定數(shù)據(jù)的歸屬類型。 3)元素分析:提取元素的名稱、屬性和值域。 4)釋放:主要是對(duì)內(nèi)存的釋放。 數(shù)據(jù)結(jié)構(gòu) typedef struct EasyTokenContext {char * strBuffer。 //當(dāng)前正在處理的 HTML 代碼 int int bufferLength。 curPosition。 char * global_strBuffer。 //全局 HTML 代碼 int int global_bufferLength。 global_curPosition。 EasyTokenList *tokenList。 EasyTokenList *tokenList_tail。 //元素節(jié)點(diǎn)鏈表 EasyPTagList pTagList。 //元素名稱表,指向靜態(tài)數(shù)據(jù) }EasyTokenContext,*EasyPTokenContext。 EasyTokenContext 是用于存儲(chǔ)當(dāng)前待分析網(wǎng)頁(yè)全局屬性的數(shù)據(jù)結(jié)構(gòu),其中 TokenList 是核心的元素節(jié)點(diǎn)鏈表。語(yǔ)法分析的目的就是生成這樣一個(gè)鏈表。下 面給 出該鏈表的數(shù)據(jù)結(jié)構(gòu),是很簡(jiǎn)單的雙向鏈表。 typedef struct TokenList { EasyToken *token。 //元素節(jié)點(diǎn) struct TokenList *priou。 struct TokenList *next。 }EasyTokenList,*EasyPTokenList。 24 以下是元素節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu): typedef struct EasyToken { int type。 //節(jié)點(diǎn)類型,如定義的 HTML_BODY, HTML_TXT 等。 //如果是 HTML_TXT 型元素,則為其內(nèi)容,否則為空 char *pData。 BOOL end。 //是否是結(jié)束元素,如 /body //元素屬性鏈表,因?yàn)榭赡苡卸鄠€(gè)屬性,所以使用鏈表存儲(chǔ) EasyTokenAttrList *attrList。 EasyTokenAttrList *attrList_tail。 }EasyToken,*EasyPToken。 請(qǐng)注意,以上出現(xiàn) tail 標(biāo)記的指針變量,如 EasyTokenList * tokenList_tail 等,其 作用是用于保存鏈表結(jié)尾節(jié)點(diǎn)指針,便于在釋放內(nèi)存時(shí),直接找到鏈尾,提高了算法 的效率。 算法 基本算法: 首先介紹基本的算法: 1)從存儲(chǔ)網(wǎng)頁(yè)的字符串中,順序讀入一個(gè)字符 2)如果遇到 ,認(rèn)為遇到 TAG(元素),處理該元素,使用函數(shù) Token_ConsumTag(),處理完畢后,指針移到該元素尾。 3)如果遇到回車、空格,則跳過(guò)。 4)如果遇到 ,則跳過(guò) (不應(yīng)該出現(xiàn)此情況,為了容錯(cuò) )。 5)如果非以上情況,則認(rèn)為遇到文字,處理這段文字,使用函數(shù) Token_Consum_PlainText()。處理完畢,指針指向下一個(gè)元素首。 6)循環(huán)以上操作,直到該網(wǎng)頁(yè)分析完畢。 由 此 看 來(lái) , 主 算 法 十 分 簡(jiǎn) 單 而 清 晰 , 主 要 是 Token_ConsumTag() 和 Token_Consum_PlainText()這兩個(gè)函數(shù)起關(guān)鍵作用,由于其中涉及到許多細(xì)節(jié)問(wèn)題, 此處不予詳述。 算法效率與改進(jìn): 采用以上的基本算法是可行的。但當(dāng)網(wǎng)頁(yè)比較大的時(shí)候,比如 600K,該算法的 效率成倍下降,這主要是由于要處理的字符串太大,在內(nèi)存中完成查找、替換、復(fù)制 、 移動(dòng)等操作,響應(yīng)時(shí)間明顯下降。對(duì)此
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1