子非魚

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            21 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          參考:http://dev.eclipse.org/newslists/news.eclipse.platform.rcp/msg01745.html
          在非Editor中實(shí)現(xiàn)syntax coloring


          Rainer wrote:
          I hope this is the right place to ask this question:

          It's fine; eclipse.platform would have been right as well.

          I am working on a simple XML editing rich client. One of the main components is a JFace TextViewer, embedded in an Eclipse view (I can't use an Eclipse editor in my special case, unfortunately). I want to add syntax coloring, but can't seem to get the presentation reconciler to work.

          Here's the sample code:

          [...]

          reconciler= new PresentationReconciler();
          DefaultDamagerRepairer dr = new DefaultDamagerRepairer(new CodeRuleScanner());
          dr.setDocument(viewer.getDocument());
          reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
          reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
          reconciler.install(viewer);


          [..]

          The CodeRuleScanner (extends RuleBasedScanner) is configured with a set of rules and a default token. However, the PresentationReconciler seems to be totally inactive. Is there any further configuration necessary?

          No. If you look at the implementation of PresentationReconciler.install, you will see that it waits until the viewer's document is set (via an ITextInputListener). So, in order for the above to work, you have to set the document *after* installing the reconciler.


          You should also look at SourceViewer that adds more features and configures itself in the right order using a SourceViewerConfiguration.

          HTH, tom
           
          正確的做法:
           
          PresentationReconciler reconciler= new PresentationReconciler();
                  DefaultDamagerRepairer dr 
          = new DefaultDamagerRepairer(new PolicyCodeScanner(new ColorProvider()));
                  
                  reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
                  reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
                  reconciler.install(sourceViewer);
          //PresentationReconciler.install必須在setDoucument之前,切記
                  
                  
          //設(shè)置字體
                  sourceViewer.getTextWidget().setFont(new Font(sourceViewer.getControl().getDisplay(), 
                          
          new FontData("Courier"10, SWT.NORMAL)));
                  
          //設(shè)置當(dāng)前編輯行的背景色
                  CursorLinePainter painter= new CursorLinePainter(sourceViewer);
                  painter.setHighlightColor(yellow);
                  sourceViewer.addPainter(painter);
                  
                  
          //設(shè)置文檔幫助
                  final ContentAssistant assistant = new ContentAssistant();
                  assistant.setContentAssistProcessor(
          new PolicyContentAssistProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
                  assistant.install(sourceViewer);
                  
                  
          //設(shè)置文本內(nèi)容
                  sourceViewer.setDocument(new Document(this.content));
                  
                  dr.setDocument(sourceViewer.getDocument());
                  
           
            
          另外:
          注入config:

          sourceViewer.configure(SourceViewerConfiguration configuration)


           

          posted on 2007-07-24 16:34 子非魚 閱讀(414) 評(píng)論(0)  編輯  收藏 所屬分類: eclipse
          主站蜘蛛池模板: 苗栗市| 临猗县| 金寨县| 屯昌县| 武冈市| 辽宁省| 岳阳市| 兴文县| 青海省| 呼玛县| 来凤县| 正安县| 湟中县| 察哈| 天镇县| 汪清县| 安图县| 锡林浩特市| 霸州市| 伊金霍洛旗| 扎赉特旗| 嵊泗县| 都兰县| 汨罗市| 奈曼旗| 华阴市| 宜宾县| 鹤岗市| 鄯善县| 嘉善县| 秦安县| 永定县| 镇巴县| 遂昌县| 增城市| 沾益县| 金平| 佳木斯市| 黄石市| 会东县| 昌都县|