package bndtools.editor.completion; import java.util.*; import org.bndtools.core.editors.BndMarkerAnnotationHover; import org.bndtools.core.editors.BndMarkerQuickAssistProcessor; import org.eclipse.jdt.ui.text.IColorManager; import org.eclipse.jdt.ui.text.IJavaColorConstants; import org.eclipse.jface.text.*; import org.eclipse.jface.text.contentassist.*; import org.eclipse.jface.text.presentation.*; import org.eclipse.jface.text.quickassist.IQuickAssistAssistant; import org.eclipse.jface.text.quickassist.QuickAssistAssistant; import org.eclipse.jface.text.rules.*; import org.eclipse.jface.text.source.*; import org.eclipse.swt.*; public class BndSourceViewerConfiguration extends SourceViewerConfiguration { Token T_DEFAULT; Token T_MACRO; Token T_ERROR; Token T_COMMENT; Token T_INSTRUCTION; Token T_OPTION; Token T_DIRECTIVE; static final String SINGLELINE_COMMENT_TYPE = "___slc"; static Properties syntax = null; BndScanner scanner; MultiLineCommentScanner multiLineCommentScanner; public BndSourceViewerConfiguration(IColorManager colorManager) { T_DEFAULT = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVA_DEFAULT))); T_MACRO = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.TASK_TAG), null, SWT.BOLD)); T_ERROR = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVA_KEYWORD), null, SWT.BOLD)); T_COMMENT = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVA_SINGLE_LINE_COMMENT))); T_INSTRUCTION = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVADOC_KEYWORD), null, SWT.BOLD)); T_OPTION = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVADOC_LINK), null, SWT.BOLD)); T_DIRECTIVE = new Token(new TextAttribute(colorManager.getColor(IJavaColorConstants.JAVADOC_KEYWORD), null, SWT.BOLD)); } @Override public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); configureReconciler(reconciler, IDocument.DEFAULT_CONTENT_TYPE, getBndScanner()); configureReconciler(reconciler, SINGLELINE_COMMENT_TYPE, getMultiLineCommentScanner()); return reconciler; } private static void configureReconciler(PresentationReconciler reconciler, String partitionType, ITokenScanner scanner) { DefaultDamagerRepairer dr; dr = new DefaultDamagerRepairer(scanner); reconciler.setDamager(dr, partitionType); reconciler.setRepairer(dr, partitionType); } protected BndScanner getBndScanner() { if (scanner == null) { scanner = new BndScanner(this); } return scanner; } class MultiLineCommentScanner extends RuleBasedScanner { public MultiLineCommentScanner() { setDefaultReturnToken(T_COMMENT); } } protected MultiLineCommentScanner getMultiLineCommentScanner() { if (multiLineCommentScanner == null) { multiLineCommentScanner = new MultiLineCommentScanner(); } return multiLineCommentScanner; } @Override public String[] getDefaultPrefixes(ISourceViewer sourceViewer, String contentType) { if (IDocument.DEFAULT_CONTENT_TYPE.equals(contentType) || SINGLELINE_COMMENT_TYPE.equals(contentType)) { return new String[] { "#", "//" }; } return null; } @Override public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new BndHover(sourceViewer); } @Override public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new BndMarkerAnnotationHover(); } @Override public IContentAssistant getContentAssistant(ISourceViewer viewer) { ContentAssistant assistant = new ContentAssistant(); assistant.setContentAssistProcessor(new BndCompletionProcessor(), IDocument.DEFAULT_CONTENT_TYPE); assistant.setContentAssistProcessor(new BndCompletionProcessor(), SINGLELINE_COMMENT_TYPE); assistant.enableAutoActivation(true); return assistant; } @Override public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) { QuickAssistAssistant assistant = new QuickAssistAssistant(); assistant.setQuickAssistProcessor(new BndMarkerQuickAssistProcessor()); return assistant; } }