安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計軟件教程 > TextViewer實現(xiàn)原理簡單分析

TextViewer實現(xiàn)原理簡單分析
2010-01-14 22:51:57  作者:  來源:

以下內(nèi)容都是通過閱讀《The Definitive Guide to SWT and JFace》寫的。只涉及到語法著色部分,還有內(nèi)容自動完成,編輯器的Vertical Ruler等內(nèi)容這里不介紹,Eclipse的插件開發(fā)幫助里面介紹的很詳細(xì)。

 

TextViewer的輸入叫Document, TextViewer在顯示文檔之前,將對其分割(Partition)成各種類型的區(qū)塊(Region),每個區(qū)塊將具有以下屬性:區(qū)塊所使用的字體,字體風(fēng)格(粗體、斜體、帶下劃線等等)、區(qū)塊所在的位置、區(qū)塊的內(nèi)容是數(shù)字還是括號,區(qū)塊上下的空格數(shù)等,不過TextViewer卻無法對不同的區(qū)塊使用不同的字體大。ㄟ@是因為TextViewer的底層是StyleText控件的緣故,一個文檔只能使用一種字體大小)

 

與一般的文字處理器不同,TextViewer沒法直接定義各個區(qū)塊(而文字處理器則可以選中的文字指定為區(qū)塊從而給其指定各種屬性),它是根據(jù)內(nèi)部定義的規(guī)則隱式的將文檔分割成不同的區(qū)塊。比如Java Editor,當(dāng)我們把一段注釋添加到文檔中之后,編輯器就能將其判斷成注釋區(qū)塊,編輯器能做出這種判斷就是基于其內(nèi)部指定的分割規(guī)則。在TextViewer中由IDocumentPartitioner 來負(fù)責(zé)對Document進行解析和分割,一個IDocumentPartitioner 將跟一個Document關(guān)聯(lián)起來,其默認(rèn)實現(xiàn)是DefaultPartitioner,不同類型的文檔需要使用不同的分割規(guī)則,顯然DefaultPartitioner 無法滿足要求,這就需要我們對DefaultPartitioner 的行為進行定制,不過我們一般不這樣做,而是通過使用一種所謂的分割掃描器和分割類型來構(gòu)造DefaultPartitioner 從而達到定制的目的。經(jīng)過分割掃描器分割后得到的僅僅只是一個很原始的區(qū)塊,它將是實現(xiàn)語法高亮這樣的功能的基礎(chǔ)。

 

Token和分割后得到的各種類型的區(qū)塊相關(guān)聯(lián),但是它本身并不包含文本內(nèi)容,也不具有區(qū)塊的位置信息,而對于不同類型區(qū)塊在顯示的時候?qū)⑹褂煤畏N顏色這種信息則由Token來提供,從而在整個文檔中Token能被重用。

 

IPartitionTokenScanner 也是一種分割掃描器,當(dāng)文檔被修改時,DefaultPartitioner 將使用自帶的IPartitionTokenScanner實現(xiàn)去掃描指定的文檔區(qū)域來得到相關(guān)的Token和Partition信息

 

一般我們都通過繼承RuleBasedPartitionScanner 來實現(xiàn)自己的分割掃描器,通過給掃描器添加各種Rule就可以控制掃描器的分割行為,而每一種分割類型都會有對應(yīng)的一個Rule, JFace提供了多種Rule,在創(chuàng)建一個rule實例時,需要指定該rule使用的token,對應(yīng)的字符序列特征,在掃描的時候,當(dāng)rule找到匹配的文檔的時候, 將使用該rule所附帶的token對匹配文字進行標(biāo)識。

 

要對文檔進行分割,需要先創(chuàng)建一個分割掃描器,然后再將分割掃描器作為參數(shù)創(chuàng)建文檔分割器,接著將文檔的分割器設(shè)置為前面創(chuàng)建的文檔分割器(此時將對文檔進行分割操作),最后將分割器與文檔關(guān)聯(lián)。

 

經(jīng)過分割后的文檔將提供豐富的描述信息,不過為了將模型和視圖分離,分割后得到的所有區(qū)塊并不附帶視圖信息,為了告訴TextViewer如何顯示分割后的文檔,必須通過給TextViewer指定SourceViewerConfiguration ,而且必須在給TextViewer指定Document之前做這件事。

 

TextViewer的一個重要功能就是語法著色,要實現(xiàn)這個功能需要三個條件:一個就是表現(xiàn)協(xié)調(diào)器(Reconciler);一個是與需要著色的分割類型關(guān)聯(lián)的破壞器(Damager)和修復(fù)器(Repairer);還有一個就是需要著色的分割類型關(guān)聯(lián)的規(guī)則掃描器(RuleBasedScanner,不是分割掃描器)。破壞器用來響應(yīng)文檔的修改,修復(fù)器則對改動文檔的顯示進行調(diào)整,因此破壞器和修復(fù)器成對出現(xiàn)并與一個表現(xiàn)協(xié)調(diào)器關(guān)聯(lián),而協(xié)調(diào)器可以和多個破壞修復(fù)器關(guān)聯(lián),而每一組破壞修復(fù)器都和一個分割類型相關(guān)聯(lián),破壞修復(fù)器只會在他們配置類型的分割區(qū)發(fā)生變化起作用,破壞修復(fù)器包含一個掃描器,它被用來掃描所有相應(yīng)類型的分區(qū),掃描器中包含的規(guī)則將被修復(fù)器用來對文本進行著色。

 

Reconciler,Damager/Repairer, RuleBasedScanner三者之間的關(guān)系:給Reconciler設(shè)置Damager和Requirer并指定分割類型,當(dāng)然還要給破壞修復(fù)器設(shè)置Scanner,而Scanner中也包含一些類,分別是TextAttribute(用來設(shè)置著色文本的前景色,背景色以及字體信息),Token(包含一系列TextAttribute),Rule又包含Token和相關(guān)字符序列信息,為了將Reconciler與TextViewer關(guān)聯(lián)起來,必須從TextViewer所配置的SourceViewerConfiguration 中來取得Reconciler.


安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 铁氟龙膜/板/棒-铁氟龙网带/胶带/胶布-[东莞华氟]专注铁氟龙及特氟龙制品生产 | 深圳-广州-惠州-东莞-重型货架-悬臂-轻中型货架-深圳市诺普泰仓储设备有限公司 | 双合金_注塑机_螺杆|炮筒|料管|料筒-广东海驰德塑胶机械有限公司 | 首页-青特集团官方网站 | 中华收藏网-中藏网-藏品拍卖|字画拍卖|艺术品拍卖|古玩城|收藏资讯|古玩交易|书画定制 | 江西省屹诚建筑装饰工程有限公司 | 叶片泵,液压电机,油泵电机,变量叶片泵,油压电机-广东俊泰液压科技有限公司 | 型材散热器,电子散热器,插片散热器-镇江市科创电子散热器有限公司 | 纸带过滤机,磁性分离器,排屑器-烟台通赫机床辅机有限公司 | 中科联航(江苏)-信息化监理|信息化咨询|信息系统项目管理|信息系统工程监理公司 | 生态护坡砖_护坡砖_合肥植草砖-巢湖市华林新型建材有限公司 | 十树品牌策划—品牌战略、品牌策划、品牌定位、品牌设计、包装设计、品牌营销-上海十树品牌管理咨询有限公司官网 | 郑州阳光房|封阳台|钢结构【河南郑州如意阳光房门窗有限公司】 | 山东万通液压股份有限公司-自卸车专用油缸,能源采掘设备油缸,机械装备用油缸,油气弹簧,工程机械油缸,液压元件 | 锌钢护栏,铁艺护栏,围墙护栏,锌钢围墙护栏,铁艺围墙护栏-互润金属丝网厂 | 频闪仪,便携式频闪仪厂家_灯管,频闪仪之父-杭州品拓电子技术有限公司 | 学校洗碗机-郑州洗碗机厂家-商用洗碗机-郑州旭申环保科技有限公司 | 履带吊租赁-履带吊出租-出租履带吊车-出租履带吊-吊车出租-履带吊出租公司 | 嘉兴市南湖斋食品股份有限公司_南湖斋 | 青州市同兴源包装机械有限公司-青州市同兴源包装机械有限公司 | 天津印刷_天津印刷厂_天津印刷公司_天津包装盒厂家_天津包装盒印刷厂_七层共挤膜厂家_彩色印刷_画册印刷_礼品盒定做 _七层共挤膜_食品真空袋-欢迎访问嘉联包装官网! | 全自动视觉点胶机|在线式点胶机|精密点胶阀设备厂家-杭州迈伺特科技有限公司 | 江门摩托车配件|江门电动车配件|江门市盛泰嘉金属塑料制品有限公司 | 食品油炸机_葱酥油炸机_蒜酥油炸机-山东世联机械厂家 | 全棉帆布厂家_加工帆布_涤棉帆布价格_染色帆布定制_广州美丽华皮革帆布-广州美丽华皮革帆布 | 上海三友医疗器械股份有限公司| 首页 - 北京明朝万达科技股份有限公司 | 远东齿轮泵|高粘度齿轮泵|三螺杆油泵|沥青保温泵|高粘度稠油泵-远东泵业官网 | 首页 | 华源医药网 | 酸碱废气中和塔-酸雾废气吸收塔-酸雾废气处理塔|首页-广州市佰镀通风设备有限公司 | 贴膜机厂家|高精度|手机贴膜机|全自动|半自动|无边覆膜机-深圳荷花自动化 | 联系我们果博东方公司福布斯客服电话 | 磨粉机_上海磨粉机_雷蒙磨粉机_超细磨粉机_磨粉机价格-上海山卓重工机械有限公司 | 金属标牌,镍电铸,电铸铭牌,标牌定制-青岛大东电铸标牌制作厂家 | 湖南视频会议设备厂家|长沙视频会议设备安装型号齐全找湖南日恒智能工程有限公司 | 智能门锁管理-公寓管理软件-智能水电表管理系统-深圳安安智能 | 中国江苏国际经济技术合作集团有限公司-致力于做大做强国际工程、国内工程、国际贸易和城镇投资 中国建材信息总网-中国建材行业权威的信息资讯平台 | 湖南长沙手术室、实验室、无尘室、洁净室、无尘车间的净化工程装修公司-福临建设 | 氧化膜测厚仪-瓶壁测厚仪-QNIX菲尼克斯膜厚仪-深圳市时代之峰科技有限公司 | 伸缩接头,限位伸缩接头,传力接头,可拆卸接头,橡胶接头,衬四氟橡胶接头,橡胶软连接,橡胶补偿器,防水套管- 巩义市隆盛管道设备有限公司 | 军用笔记本电脑_三防加固笔记本电脑_平板型全坚固计算机-集海卫通 |