package org.nodeclipse.ui.editors; import org.eclipse.jface.text.DefaultInformationControl; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControlCreator; 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.ITokenScanner; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.swt.widgets.Shell; import org.nodeclipse.ui.contentassist.NodeContentAssistant; import org.nodeclipse.ui.highlight.MultilineCommentScanner; import org.nodeclipse.ui.highlight.NodeCodeScanner; import org.nodeclipse.ui.highlight.NodePartitionScanner; public class NodeSourceViewerConfiguration extends SourceViewerConfiguration { @Override public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler pr = new PresentationReconciler(); pr.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); NodeCodeScanner scanner = new NodeCodeScanner(); setDamagerRepairer(pr, scanner, IDocument.DEFAULT_CONTENT_TYPE); setDamagerRepairer(pr, new MultilineCommentScanner(scanner.getCommentAttribute()), NodePartitionScanner.MULTILINE_COMMENT); setDamagerRepairer(pr, new MultilineCommentScanner(scanner.getDocAttribute()), NodePartitionScanner.NODEDOC); return pr; } private void setDamagerRepairer(PresentationReconciler pr, ITokenScanner scanner, String tokenType) { DefaultDamagerRepairer damagerRepairer = new DefaultDamagerRepairer(scanner); pr.setDamager(damagerRepairer, tokenType); pr.setRepairer(damagerRepairer, tokenType); } @Override public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return NodePartitionScanner.CONTENT_TYPES; } @Override public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { // TODO Preferences ContentAssistant contentAssistant = new ContentAssistant(); contentAssistant.setInformationControlCreator(new IInformationControlCreator() { public IInformationControl createInformationControl(Shell parent) { DefaultInformationControl control = new DefaultInformationControl(parent, true); return control; } }); contentAssistant.setContentAssistProcessor(new NodeContentAssistant(), IDocument.DEFAULT_CONTENT_TYPE); contentAssistant.enableAutoActivation(true); contentAssistant.setAutoActivationDelay(500); return contentAssistant; } }