好男人天堂网,久久精品国产这里是免费,国产精品成人一区二区,男人天堂网2021,男人的天堂在线观看,丁香六月综合激情

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > JFace Text Editor完全掌握之終極指南(2)

JFace Text Editor完全掌握之終極指南(2)
2010-01-14 23:08:05  作者:  來源:

最后一步就是實現各種功能

語法高亮

首先我們要實現的是語法高亮.如下圖所示:

The enhanced XML editor in action 

從本質上來說,語法高亮就是給分割后的Token指定相應的顯示屬性,在語法高亮的處理機制里面也需要用到Token, Scanner和Rule這些東西.通過復寫SourceViewerConfiguration的getPresentationReconciler()方法來給指定的內容類型添加語法高亮的特性:

 

 

java 代碼
 
  1. public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer)   
  2. {   
  3.     PresentationReconciler reconciler = new PresentationReconciler();   
  4.   
  5.     DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getXMLTagScanner());   
  6.     reconciler.setDamager(dr, XMLPartitionScanner.XML_TAG);   
  7.     reconciler.setRepairer(dr, XMLPartitionScanner.XML_TAG);   
  8.   
  9.     dr = new DefaultDamagerRepairer(getXMLScanner());   
  10.     reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);   
  11.     reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);   
  12.        
  13.     ...   
  14.   
  15.     return reconciler;   
  16. }   
  17.   

在上面的代碼中有一個IPresentationReconciler實例,他是用來監聽底層的IDocument實例的變動,一個內容類型會跟一個IPresentationDamager和IPresentationRepairer實例相關聯,當編輯文檔時,將會給受影響的文檔區域對應內容類型的IPresentationDamager實例發送消息,接著IPresentationDamager會返回一個IRegion實例,并將這些信息傳遞給IPresentationRepairer實例,該實例會對發生改變的區域重新設置顯示屬性.

上述過程聽起來可能比較復雜,不過萬幸的是我們并不需要自己去實現這些東西, JFace提供了一個DefaultDamagerRepairer來處理IPresentationDamager和IPresentationRepairer要做的事情,同時還提供了一個PresentationReconciler類用來將二者關聯起來,而我們要做的就是告訴編輯器在使用給定的內容類型對文檔進行分割之后的結構是怎樣的,以及每一種文檔類型的顯示屬性

DefaultDamagerRepairer的構造器需要一個ITokenScanner 參數,該接口跟分割Token Scanner非常類似,兩種Scanner得到的Token都是IToken的一種實現,不同之處在于Token粒度不同,分割Token Scanner得到的Token是一個具有某種內容類型的文檔區域,而使用語法高亮Scanner得到的Token是一段具有相同文本格式的字符串序列,顯然后者的粒度更細

這里我們拿XMLTagScanner來說,該Scanner主要針對XML_TAG內容類型, 因此它得到的Token表示的是位于XML標識符之間的文本內容

 
  1. public class XMLTagScanner extends RuleBasedScanner   
  2. {   
  3.     public XMLTagScanner(ColorManager manager)   
  4.     {   
  5.         Color color = manager.getColor(IXMLColorConstants.STRING);   
  6.         TextAttribute textAttribute = new TextAttribute(color);   
  7.         IToken string = new Token(textAttribute);   
  8.        
  9.         IRule[] rules = new IRule[3];   
  10.        
  11.         // Add rule for double quotes   
  12.         rules[0] = new SingleLineRule("\"""\"", string, '\\');   
  13.         // Add a rule for single quotes   
  14.         rules[1] = new SingleLineRule("'""'", string, '\\');   
  15.         // Add generic whitespace rule.   
  16.         rules[2] = new WhitespaceRule(new XMLWhitespaceDetector());   
  17.        
  18.         setRules(rules);   
  19.     }   
  20. }  

XMLTagScanner繼承了RuleBasedScanner,因此和我們在RuleBasedPartitionScanner中看到的一樣,它也是使用某種規則處理機制來識別Token的

這里我們定義了三個規則:一個用于匹配雙引號中的字符,一個用于匹配單引號中的字符,還有一個則用來匹配空格

為了給XML的標簽名顯示為藍色,我們使用以下的代碼,即給Token設置一個默認的顏色值:

java 代碼
 
  1. protected XMLTagScanner getXMLTagScanner()   
  2. {   
  3.     if (tagScanner == null)   
  4.     {   
  5.         tagScanner = new XMLTagScanner(colorManager);   
  6.         Color color = colorManager.getColor(IXMLColorConstants.TAG);   
  7.         TextAttribute textAttribute = new TextAttribute(color);   
  8.         Token token = new Token(textAttribute);   
  9.         tagScanner.setDefaultReturnToken(token);   
  10.     }   
  11.     return tagScanner;   
  12. }   

內容格式化

格式化就是通過使用縮進和空格使文檔結構化,從而更具有可讀性, 格式化處理包括兩個步驟:
第一步,為即將格式化的內容定義格式化策略,這些策略可以是全局性的,也可以是針對某個分割區域的.通過IFormattingStrategy接口來實現.
第二步,通過SourceViewerConfiguration實現類給ISourceViewer添加這些策略

格式化也會使用到分割處理,這讓我們再一次體會到了掌握以及正確使用文檔分割的重要性.下面我們就以最簡單的TextFormattingStrategy來進行說明,該格式化策略用于處理嵌套在XML元素中的文本內容

java 代碼
 
  1. public class TextFormattingStrategy extends DefaultFormattingStrategy   
  2. {   
  3.     private static final String lineSeparator = System.getProperty("line.separator");   
  4.   
  5.     public String format(String content,    
  6.         boolean isLineStart,    
  7.         String indentation,    
  8.         int[] positions)   
  9.     {   
  10.         if (indentation.length() == 0)   
  11.             return content;   
  12.         return lineSeparator + content.trim() + lineSeparator + indentation;   
  13.     }   
  14. }   
  15.   

這里我們通過繼承DefaultFormattingStrategy并復寫format方法來實現, 其具體做法是對文本內容進行trim處理,然后在文本前后加上換行符

上面的介紹可能太簡單,在我們的實現類XMLFormattingStrategy中包含了更復雜的格式化處理代碼,這里我們對其細節不再一一展開,有興趣的讀者可以自己去加以體會,可以說格式化處理是一項非常有挑戰性的活兒,因為它還涉及到對選擇的文本進行智能識別的處理,這個需要反復的實驗才能得到理想的結果

通過重載SourceViewerConfiguration.getContentFormatter()方法可以非常容易的將格式化操作添加到編輯器中

java 代碼
 
  1. public IContentFormatter getContentFormatter(ISourceViewer sourceViewer)   
  2. {   
  3.     ContentFormatter formatter = new ContentFormatter();   
  4.     XMLFormattingStrategy formattingStrategy = new XMLFormattingStrategy();   
  5.     DefaultFormattingStrategy defaultStrategy = new DefaultFormattingStrategy();   
  6.     TextFormattingStrategy textStrategy = new TextFormattingStrategy();   
  7.     DocTypeFormattingStrategy doctypeStrategy = new DocTypeFormattingStrategy();   
  8.     PIFormattingStrategy piStrategy = new PIFormattingStrategy();   
  9.     formatter.setFormattingStrategy(defaultStrategy, IDocument.DEFAULT_CONTENT_TYPE);   
  10.     formatter.setFormattingStrategy(textStrategy, XMLPartitionScanner.XML_TEXT);   
  11.     formatter.setFormattingStrategy(doctypeStrategy, XMLPartitionScanner.XML_DOCTYPE);   
  12.     formatter.setFormattingStrategy(piStrategy, XMLPartitionScanner.XML_PI);   
  13.     formatter.setFormattingStrategy(textStrategy, XMLPartitionScanner.XML_CDATA);   
  14.     formatter.setFormattingStrategy(formattingStrategy, XMLPartitionScanner.XML_START_TAG);   
  15.     formatter.setFormattingStrategy(formattingStrategy, XMLPartitionScanner.XML_END_TAG);   
  16.   
  17.     return formatter;   
  18. }   
  19.   

上述代碼首選創建了一個formatter,然后通過formatter的setFormattingStrategy()方法給我們的每一個內容類型指定一個個格式化策略即可.


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
日本在线不卡视频| 久久精品大片| 国产成人精品综合久久久| 高清一级片| 欧美电影免费看大全| 四虎影视精品永久免费网站 | 天天做日日爱| 国产成人啪精品| 国产不卡高清在线观看视频| 99热精品一区| 亚洲 国产精品 日韩| 成人免费一级纶理片| 日韩在线观看视频网站| 国产麻豆精品免费密入口| 免费毛片播放| 毛片高清| 欧美爱色| 国产不卡在线观看视频| 国产91丝袜在线播放0| 精品在线观看一区| 日韩中文字幕一区二区不卡| 韩国三级香港三级日本三级| 国产不卡在线观看视频| 天天色色色| 亚欧成人乱码一区二区| 欧美大片毛片aaa免费看| 日本免费看视频| 欧美一级视频高清片| 青青青草视频在线观看| 黄色免费三级| 国产亚洲男人的天堂在线观看| 国产国语在线播放视频| 91麻豆精品国产自产在线| 二级特黄绝大片免费视频大片| 成人在免费观看视频国产| 99久久精品国产国产毛片| 成人影视在线播放| 欧美激情伊人| 精品视频免费在线| 香蕉视频久久| 国产精品123| 国产91精品一区二区| 久久99中文字幕久久| 国产伦久视频免费观看视频| 国产成人精品综合| 欧美一区二区三区在线观看| 日韩专区一区| 国产精品免费久久| 国产视频一区二区在线播放| 国产不卡高清| 久久国产精品自线拍免费| 91麻豆精品国产自产在线观看一区| 四虎影视精品永久免费网站 | 中文字幕一区二区三区 精品| 国产精品免费精品自在线观看| 日韩免费在线视频| 久久精品欧美一区二区| 国产91精品露脸国语对白| 91麻豆国产| 国产美女在线观看| 免费的黄视频| 免费毛片播放| 亚洲天堂免费| 亚洲精品永久一区| 天天色成人| 成人影院一区二区三区| 精品视频在线看| 日韩欧美一二三区| 99久久网站| 国产精品免费久久| 国产精品自拍在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品国产一区二区三区久| 99色播| 日韩免费在线视频| 亚洲天堂免费| 色综合久久久久综合体桃花网| 欧美电影免费看大全| 青青久久网| 亚飞与亚基在线观看| 九九久久99综合一区二区| 亚洲 男人 天堂| 香蕉视频三级| 欧美日本二区| 国产麻豆精品免费视频| 久久国产精品自线拍免费| 精品国产香蕉伊思人在线又爽又黄| 午夜激情视频在线观看 | 999精品视频在线| 国产网站免费| 韩国三级香港三级日本三级la| 久久久久久久网| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲第一色在线| 麻豆系列 在线视频| 国产亚洲精品aaa大片| 精品视频在线观看一区二区三区| 久草免费在线视频| 国产一区国产二区国产三区| 91麻豆精品国产片在线观看| 国产精品自拍亚洲| 日本伦理片网站| 免费一级片在线观看| 久久久久久久免费视频| 国产高清在线精品一区a| 国产精品免费精品自在线观看| 深夜做爰性大片中文| 国产精品免费久久| 国产一区二区高清视频| 美女免费毛片| 亚洲爆爽| 国产美女在线观看| a级毛片免费全部播放| 日韩中文字幕在线观看视频| 国产国语在线播放视频| 欧美大片毛片aaa免费看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产网站免费| 成人免费观看男女羞羞视频| 日韩在线观看视频免费| 欧美激情一区二区三区视频| 精品久久久久久综合网| 精品视频免费在线| 亚欧成人毛片一区二区三区四区 | 精品视频免费在线| 一级女性大黄生活片免费| 青草国产在线| 国产精品免费久久| 亚洲第一页乱| a级毛片免费观看网站| 欧美激情一区二区三区在线| 高清一级片| 成人免费网站视频ww| 成人免费观看男女羞羞视频| 久久久成人影院| 亚洲爆爽| 可以免费看污视频的网站| 天天做日日爱夜夜爽| 天天做日日爱夜夜爽| 午夜激情视频在线播放| 欧美另类videosbestsex久久| 成人免费观看男女羞羞视频| 青青久久国产成人免费网站| 天天做日日爱夜夜爽| 欧美电影免费看大全| 韩国妈妈的朋友在线播放| 亚洲爆爽| 欧美一级视频高清片| 精品国产一区二区三区久| 国产国语对白一级毛片| 91麻豆精品国产自产在线观看一区| 国产伦精品一区二区三区在线观看| 色综合久久天天综合绕观看| 韩国毛片| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产综合成人观看在线| 免费的黄视频| 国产麻豆精品| 国产麻豆精品| 一 级 黄 中国色 片| 久久久久久久免费视频| 亚洲 激情| 日韩中文字幕一区| 日韩一级黄色片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 黄视频网站免费观看| 美女被草网站| 欧美一级视频免费| 日本伦理片网站| 中文字幕Aⅴ资源网| 精品在线视频播放| 欧美日本韩国| 韩国三级香港三级日本三级la| 日韩免费在线视频| 精品在线观看一区| 国产高清视频免费| 日韩中文字幕在线播放| 欧美另类videosbestsex视频| 欧美一级视频高清片| 国产精品1024永久免费视频| 日本伦理黄色大片在线观看网站| 精品国产一级毛片| 欧美激情一区二区三区视频高清| 亚洲精品中文一区不卡| 国产麻豆精品免费视频| 亚欧视频在线| 日韩av东京社区男人的天堂| 国产一区二区精品久久91| 国产不卡在线播放| 成人a大片在线观看| 亚洲 激情| 国产成人女人在线视频观看 | 日本特黄特色aaa大片免费| 韩国妈妈的朋友在线播放| 免费一级生活片| 国产91精品一区| 午夜欧美成人久久久久久| 天堂网中文字幕| 999久久狠狠免费精品| 美女免费精品高清毛片在线视 |