<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

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

      TextViewer實(shí)現(xiàn)原理簡(jiǎn)單分析
      2010-01-14 22:51:57  作者:  來(lái)源:

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

       

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

       

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

       

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

       

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

       

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

       

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

       

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

       

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

       

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


      安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢(xún)
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        少妇把腿扒开让我添免费视频 | 野外少妇弄到喷 | 日韩高清亚洲日韩精品一区二区 | 亚洲欧美日韩精品永久在线 | 最新理论片在线观看免费 | 亚洲人成网站精品片在线观看 |