在非Editor中实现syntax coloring

在非Editor中实现syntax coloring
参考: http://dev.eclipse.org/newslists/news.eclipse.platform.rcp/msg01745.html
在非Editor中实现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之前,切记
        
        
// 设置字体
        sourceViewer.getTextWidget().setFont( new  Font(sourceViewer.getControl().getDisplay(), 
                
new  FontData( " Courier " 10 , SWT.NORMAL)));
        
// 设置当前编辑行的背景色
        CursorLinePainter painter =   new  CursorLinePainter(sourceViewer);
        painter.setHighlightColor(yellow);
        sourceViewer.addPainter(painter);
        
        
// 设置文档帮助
         final  ContentAssistant assistant  =   new  ContentAssistant();
        assistant.setContentAssistProcessor(
new  PolicyContentAssistProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
        assistant.install(sourceViewer);
        
        
// 设置文本内容
        sourceViewer.setDocument( new  Document( this .content));
        
        dr.setDocument(sourceViewer.getDocument());
        
 
  
另外:
注入config:

sourceViewer.configure(SourceViewerConfiguration configuration)

 

你可能感兴趣的:(在非Editor中实现syntax coloring)