package tk.eclipse.plugin.jseditor.editors; import org.eclipse.jface.text.IAutoEditStrategy; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistant; import org.eclipse.jface.text.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import tk.eclipse.plugin.htmleditor.ColorProvider; import tk.eclipse.plugin.htmleditor.HTMLPlugin; /** * SourceViewerConfiguration implementation for JavaScriptEditor. * * @see tk.eclipse.plugin.jseditor.editors.JavaScriptEditor * @author Naoki Takezoe */ public class JavaScriptConfiguration extends SourceViewerConfiguration { private ColorProvider colorProvider; private RuleBasedScanner commentScanner; private RuleBasedScanner defaultScanner; private JavaScriptAssistProcessor assistProcessor; public JavaScriptConfiguration(ColorProvider colorProvider){ this.colorProvider = colorProvider; } private RuleBasedScanner getCommentScanner(){ if (commentScanner == null) { commentScanner = new RuleBasedScanner(); commentScanner.setDefaultReturnToken( colorProvider.getToken(HTMLPlugin.PREF_COLOR_JSCOMMENT)); } return commentScanner; } private RuleBasedScanner getDefaultScanner(){ if (defaultScanner == null) { defaultScanner = new JavaScriptScanner(colorProvider); defaultScanner.setDefaultReturnToken( colorProvider.getToken(HTMLPlugin.PREF_COLOR_FG)); } return defaultScanner; } @Override public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return new String[] { IDocument.DEFAULT_CONTENT_TYPE, JavaScriptPartitionScanner.JS_COMMENT}; } public JavaScriptAssistProcessor getAssistProcessor(){ if(assistProcessor==null){ assistProcessor = new JavaScriptAssistProcessor(); } return assistProcessor; } @Override public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { ContentAssistant assistant = new ContentAssistant(); assistant.enableAutoInsert(true); assistant.setContentAssistProcessor(getAssistProcessor(),IDocument.DEFAULT_CONTENT_TYPE); assistant.install(sourceViewer); return assistant; } @Override public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); DefaultDamagerRepairer dr = null; dr = new DefaultDamagerRepairer(getDefaultScanner()); reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); dr = new DefaultDamagerRepairer(getCommentScanner()); reconciler.setDamager(dr, JavaScriptPartitionScanner.JS_COMMENT); reconciler.setRepairer(dr, JavaScriptPartitionScanner.JS_COMMENT); return reconciler; } /** * @since 2.0.3 */ @Override public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) { return new IAutoEditStrategy[]{ new JavaScriptAutoEditStrategy() }; } }