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

正文內(nèi)容

嵌入式瀏覽器開(kāi)發(fā)—免費(fèi)-在線瀏覽

2025-02-09 09:18本頁(yè)面
  

【正文】 為系統(tǒng)的瓶頸,如果 GUI 提供的支持有限,即使有再好的布局算法,也是紙上談兵,無(wú)用武之地。所有這些,是需要有專 業(yè)的 GUI庫(kù)開(kāi)發(fā)經(jīng)驗(yàn)的專職人員來(lái)完成。第二在于主瀏覽窗體中的圖形元素的輸出(通常以自畫(huà)控件的方式)。 JavaScript 支持 實(shí)際上 JavaScript 的編譯器是開(kāi)放源碼的,而且全世界通用,包括 IE、Mozilla、 Netscape 等瀏覽器都使用相同的 JavaScript 的編譯器,但為何其對(duì)JavaScript 的支持不盡相同呢,這是因?yàn)?JavaScript 在瀏覽器里主要是用于操縱界面元素和與瀏覽器內(nèi)部命令進(jìn)行結(jié)合。這其中的機(jī)制將在后面專門(mén)介紹。 以上主要按工作的性質(zhì)進(jìn)行分類,介紹了瀏覽器設(shè)計(jì)的主要幾個(gè)部份,但與實(shí)際開(kāi)發(fā)工作的人員劃分不同,實(shí)際工作要考慮人員的實(shí)際能力和經(jīng)驗(yàn),結(jié)合要實(shí)現(xiàn)的目標(biāo),對(duì)各部份的投入也有輕重緩急之分,比如,如果沒(méi)有詞法分析 的先行實(shí)現(xiàn),語(yǔ)法分析與布局都是紙上談兵。 我們也可以看到,要設(shè)計(jì)效果較好的瀏覽器產(chǎn)品,決不是三五個(gè)人、兩三條槍就能辦到的,參與工作的人員不僅需要有相關(guān)經(jīng)驗(yàn),還需要有一定的投入,一方面對(duì)程序員艱苦的工作給予鼓勵(lì),另一方面也可能需要購(gòu)買(mǎi)一些成熟的開(kāi)發(fā)包,在基礎(chǔ)的開(kāi)發(fā)平臺(tái)、測(cè)試平臺(tái)上也要有一定的投資,總的來(lái)說(shuō),開(kāi)發(fā)自主技術(shù)的瀏覽器產(chǎn)品是有一定的風(fēng)險(xiǎn)的,這也是國(guó)內(nèi)目前相關(guān)產(chǎn)品為數(shù)不多的原因。因而買(mǎi)斷技術(shù),加以改進(jìn)也可以成為快速成長(zhǎng)的一條道路。是瀏覽器開(kāi)發(fā)前期準(zhǔn)備工作所解決的問(wèn)題。 GUI 的選取 GUI 的選取是頗費(fèi)腦筋的問(wèn)題,一方面要考慮嵌入式系統(tǒng)是否有對(duì)應(yīng)的版本,一方面要考慮該 GUI 的功能是否足夠?qū)嵱谩?紤]到 GUI 是可以成為獨(dú)立模塊的,如瀏覽器 ZEN 的設(shè)計(jì),我們決定使用 GTK,待時(shí)機(jī)成熟可換用其它平臺(tái),也并非難事。建立 GUI 中間層在理論上是可行的,這樣,在必要時(shí)可以釜底抽薪,替換掉基礎(chǔ)的 GUI 平臺(tái),應(yīng)用軟件完全不需修改,但中間 層與基礎(chǔ)層的接口要重寫(xiě),其工作量也很大,未必是核算的買(mǎi)賣(mài)。 需要實(shí)現(xiàn)的包括: (1) 界面:包括窗口,菜單,輸入框,工具條,滾動(dòng)條等的支持。 (3) 實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁(yè)的布局:實(shí)現(xiàn)對(duì)簡(jiǎn)單網(wǎng)頁(yè)的查看。 需要考慮的功能: (1) JavaScript 支持 (2) 漢字支持 (3) 圖片格式支持 (4) 表單支持 (5) 頁(yè)面元素的消息響應(yīng) 人員分工 由于情況的變動(dòng),造成了人員比較緊張,在前期準(zhǔn)備工作中,人力充沛,使得收集的資料比較完備,打下了較好的基礎(chǔ)??紤]到網(wǎng)絡(luò)是比較獨(dú)立的部份,把它分出去由專人負(fù)責(zé)。 下面將介紹一個(gè) HTML 詞法分析器 —— Bit Token 的設(shè)計(jì)思路。 主要由以下幾個(gè)部分組成: 初始化:完成對(duì)數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變量賦初值。 元素的分析:提取元素的名稱、屬性和值域。 數(shù)據(jù)結(jié)構(gòu) typedef struct BitTokenContext {char * strBuffer。 int curPosition。 //全局 HTML代碼 int global_bufferLength。 BitTokenList *tokenList。 BitPTagList pTagList。 BitTokenContext 是用于存儲(chǔ)當(dāng)前待分析網(wǎng)頁(yè)全局屬性的數(shù)據(jù)結(jié)構(gòu),其中TokenList 是核心的元素節(jié)點(diǎn)鏈表。下面給出該鏈表的數(shù)據(jù)結(jié)構(gòu),是很簡(jiǎn)單的雙向鏈表。 //元素節(jié)點(diǎn) struct TokenList *priou。 }BitTokenList,*BitPTokenList。 //節(jié)點(diǎn)類型,如定義的 HTML_BODY, HTML_TXT等。 //如果是 HTML_TXT型元素,則為其內(nèi)容,否則為空 BOOL end。 //元素屬性鏈表,因?yàn)榭赡苡卸鄠€(gè)屬性,所以使用鏈表存儲(chǔ) BitTokenAttrList *attrList_tail。 請(qǐng)注意,以上出現(xiàn) tail 標(biāo)記的指針變量,如 BitTokenList * tokenList_tail等,其作用是用于保存鏈表結(jié)尾節(jié)點(diǎn)指針,便于在釋放內(nèi)存時(shí),直接找到鏈尾,提高了算法的效率。 (3) 如果遇到回車(chē)、空格,則跳過(guò)。 (5) 如果非以上情況,則認(rèn)為遇到文字,處理這段文字,使用函數(shù)Token_Consum_PlainText()。 (6) 循環(huán)以上操作,直到該網(wǎng)頁(yè)分析完畢。 算 法效率與改進(jìn): 采用以上的基本算法,是可用的,但當(dāng)網(wǎng)頁(yè)比較大的時(shí)候,比如 600K,該算法的效率成倍下降,這主要是由于要處理的字符串太大,在內(nèi)存中完成查找、替換、復(fù)制、移動(dòng)等操作,響應(yīng)時(shí)間明顯下降。 分段進(jìn)行詞法分析的算法復(fù)雜度明顯增加,比如,當(dāng)每段定為 1024 字節(jié),在第 1024 字節(jié)處,可能正好將一個(gè)完整元素截?cái)?,按常?guī)分析方法會(huì)造成錯(cuò)誤。 具體做法是:判斷 1024 字節(jié)處是否為元素結(jié)束字符 ‘ ’,如果不是,則判斷前一個(gè)字節(jié),直到找到元素結(jié)束字符為止,這樣可保證至少包含一個(gè)元素。 下面是一段很簡(jiǎn)單的 HTML 代碼。 詞法分析將網(wǎng)頁(yè)的文本數(shù)據(jù)流以清晰的結(jié)構(gòu)表現(xiàn)出來(lái),這樣,在后面的應(yīng)用中就可以很容易的遍歷各節(jié)點(diǎn),并輕松地獲得各元素節(jié)點(diǎn)的屬性。 具有以下主要功能: 智能提取網(wǎng)頁(yè)中的文字信息,智能排版,并可在進(jìn)行編輯后保存。 根據(jù)用戶設(shè)置的版式,將分析和編輯的結(jié)果,自動(dòng)生成新的網(wǎng)頁(yè)。 其主要設(shè)計(jì)思路是,在 Bit Token 詞法分析器的基礎(chǔ)上,結(jié)合瀏覽器布局的基本算法,對(duì)影響到 TXT 版面效果的元素進(jìn)行處理。而在 HTML 中,在無(wú) PRE這種特殊情況時(shí),回車(chē)都是忽略不記的。使用常規(guī)的簡(jiǎn)單算法進(jìn)行 HTML 到TXT 的轉(zhuǎn)換無(wú)法解決這些問(wèn)題。而“ HTML 智能分析”卻能很好的解決。并可以對(duì)網(wǎng)頁(yè)中的元素進(jìn)行統(tǒng)計(jì)和語(yǔ)法校驗(yàn)。 //取 首節(jié)點(diǎn) while(pTtokenList!=NULL) //循環(huán)直至處理完所有節(jié)點(diǎn) { switch(pTtokenListtokentype) {//根據(jù)節(jié)點(diǎn)類型,做不同的處理 case HTML_TITLE: ?? case HTML_TEXT: ?? default: ?? } //switch pTtokenList=pTtokenListnext。 Bit Token 在應(yīng)用中存在的問(wèn)題及修改意見(jiàn) 由于 HTML 的標(biāo)記多是成對(duì)出現(xiàn)的,并且存在 SCRIPT這樣的特殊元素,其內(nèi)容為 Javascript 程序,函數(shù)的字符串參數(shù)等可能包含其它的元素標(biāo)記。 因此,在詞法分析時(shí)要對(duì) SCRIPT標(biāo)記進(jìn)行特殊處理,遇到 SCRIPT就應(yīng)逐字符讀入后面的內(nèi)容,直到遇到下一個(gè) /SCRIPT標(biāo)記。盡管如此,對(duì) SCRIPT的特殊處理還是有待完善,盡管這同時(shí)也會(huì)帶來(lái)一些問(wèn)題,需要進(jìn)行大量的測(cè)試,來(lái)保證新加入代碼的穩(wěn)定性。 第三章 瀏覽器 JavaScript支持的實(shí)現(xiàn) 本部份主要針對(duì) Mozilla和 Netscape 瀏覽器源代碼的 JavaScript 部份進(jìn)行了分析,闡述了瀏覽器 Javascript 實(shí)現(xiàn)的機(jī)制。而且被廣泛使用,實(shí)際已成為了進(jìn)行 JavaScript 應(yīng)用開(kāi)發(fā)的標(biāo)準(zhǔn)平臺(tái)。既可以編譯成小的 shell 程序(像早期的 BASIC),又連接 Library后生成交互式的 JavaScript解釋器,也可以用來(lái)解釋 .js 文件。 生成的 shell 程序,對(duì)比瀏覽器對(duì) JavaScript 的 支持,相同之處是使用相同的包含 JavaScript runtime 的 Library 或 DLL,我們把這部份相同的Library 或 DLL 稱為 JavaScript API, 我們實(shí)際開(kāi)發(fā) JavaScript 應(yīng)用,也是在JavaScript API 基礎(chǔ)上工作,而不用過(guò)多考慮其內(nèi)部的實(shí)現(xiàn)。 JavaScript API 實(shí)際就是 Javscript 解釋器的對(duì)外接口函數(shù)庫(kù)。瀏覽器主體程序的設(shè)計(jì)者可以通過(guò) JavaScript Engine,方便的實(shí)現(xiàn)各種應(yīng)用,畢竟 JavaScript API 太基礎(chǔ)了,直接使用不太方便。這也包含了利用JavaScript API 進(jìn)行應(yīng)用的基本思路。 初始化 cx: cx = JS_NewContext(rt, STACK_CHUNK_SIZE)。globalClass, 0, 0)。 定義系統(tǒng)函數(shù): JS_DefineFunctions(cx, globalObj, g_functions)。 注冊(cè)其它類: RegisterClassPoint (cx,globalObj)。 RegisterClassRect (cx,globalObj)。 RegisterClassColorKey (cx,globalObj)。 初始化定時(shí)器: TDTimerListInit()。} /script /head a onmouseover=ChangeImage(0)。眼睛 /abr img id=image0 src=/img /html 當(dāng)鼠標(biāo)移到文字上時(shí),觸發(fā)事件 mouseover,調(diào)用 ChangeImage()函數(shù),使得圖像源 (SRC)發(fā)生變化,重新調(diào)入新圖片。 2. javascript 如何改變 HTML 元素的屬性,并操作 WIDGET 重畫(huà) 。 注冊(cè)過(guò)程在 BuildModel 中進(jìn)行。 其次就是要將某些 結(jié)點(diǎn)注冊(cè)為 JavaScript 對(duì)象。 初始化該對(duì)象 : TD_JSXMLElementClassInit(JS_GetGlobalContext(), (void **)amp。aName)) { parent = js_GetGlobalObject()。ElementClass,proto,JSPROP_ENUMERATE)。 *aReturn = JS_NewObject(JS_GetGlobalContext(), amp。 } 將對(duì)象加入 : JS_SetPrivate(JS_GetGlobalContext(), (JSObject *)*aReturn, aElement)。 問(wèn)題 2 解決:利用注冊(cè)給對(duì)象的函數(shù)實(shí)現(xiàn)操作符的功能化 。 問(wèn)題 3:如何建立 Javascript 對(duì)象與結(jié)點(diǎn)樹(shù)上結(jié)點(diǎn)的對(duì)應(yīng)? 解決 : Javascript 對(duì)象與結(jié)點(diǎn)樹(shù)是同時(shí)生成的,它們的共同性質(zhì)是結(jié)點(diǎn)具有相同屬性, Javascript 對(duì)象根據(jù) ID 屬性查找樹(shù),找到要操作的對(duì)應(yīng)結(jié)點(diǎn)。 首先:取得當(dāng)前焦點(diǎn)所在的 widget pWidget=TDWidgetGetAtPoint(pThis,pt,amp。 處理該 widget 對(duì)該消息的響應(yīng)。 TDVOID TDWidgetDoAction(TDPWidgetAction pAnchor) { jsval jval。jval)。 第四章 Linux程序開(kāi)發(fā)技術(shù)及 GTK圖形程序開(kāi)發(fā) Linux 下的程序開(kāi)發(fā)環(huán)境 基本知識(shí) (1) 標(biāo)準(zhǔn) (ANSI C, POSIX, SVID, XPG, ...) ANSI C:這一標(biāo)準(zhǔn)是 ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)局)于 1989 年制定的 C 語(yǔ)言標(biāo)準(zhǔn)。 POSIX:該標(biāo)準(zhǔn)最初由 IEEE 開(kāi)發(fā)的標(biāo)準(zhǔn)族,部分已經(jīng)被 ISO 接受為國(guó)際標(biāo)準(zhǔn)。 System V 接口描述( SVID)是描述 ATamp。 XPG: X/Open 可移植性指南。 (2) 函數(shù)庫(kù)和系統(tǒng)調(diào)用 glibc:眾所周知, C 語(yǔ)言并沒(méi)有為常見(jiàn)的操作,例如輸入 /輸出、內(nèi)存管理,字符串操作等提供內(nèi)置的支持。GNU 的 C 函數(shù)庫(kù),即 glibc,是 Linux 上最重要的函數(shù)庫(kù),它定義了 ISO C 標(biāo)準(zhǔn)指定的所有的庫(kù)函數(shù),以及由 POSIX 或其他 UNIX 操作系統(tǒng)變種指定的附加特色,還包括有與 GNU 系統(tǒng)相關(guān)的擴(kuò)展。 glibc 基于如下標(biāo)準(zhǔn): ISO C: C 編程語(yǔ)言的國(guó)際標(biāo)準(zhǔn),即 ANSI C, POSIX, Berkeley Unix, SVID, XPG。圖形文件操作函數(shù)庫(kù)包括: libungif、 libtiff、 libpng、 Imlib, libjpeg 等,可分別用來(lái)操作 GIF、 TIFF、 PNG、 JPEG 以及其他一些格式圖形 文件。在 C 語(yǔ)言中,操作系統(tǒng)的系統(tǒng)調(diào)用通常通過(guò)函數(shù)調(diào)用的形式完成,在 Linux 系統(tǒng)中,系統(tǒng)調(diào)用函數(shù)定義在 glibc 中。 errno 中包含有錯(cuò)誤代碼。 (4) C 語(yǔ)言編程風(fēng)格 良好的編程風(fēng)格可以在許多方面幫助開(kāi)發(fā)人員,可以增加代碼的可讀性,并幫助你理清頭緒。 在 Linux 中,我們經(jīng)??吹降氖嵌x非常簡(jiǎn)單的函數(shù)接口和變量名稱。在利用 C 語(yǔ)言編寫(xiě)程序時(shí),應(yīng)當(dāng)符合其簡(jiǎn)潔的設(shè)計(jì)原則,而不應(yīng)當(dāng)使用非常復(fù)雜的變量命名方法。如果程序的縮進(jìn)超過(guò) 3 級(jí),則應(yīng)考慮重新設(shè)計(jì)程序。除函數(shù)的定義體外,應(yīng)當(dāng)將左大括號(hào)放在行尾,而 將右大括號(hào)放在行首。如下所示: int function(in
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1