From 40a091212c4702e861d504e8a1d8e9c2550dfaf6 Mon Sep 17 00:00:00 2001 From: jsimomaa Date: Mon, 23 Oct 2017 09:45:00 +0300 Subject: [PATCH] Add character highlighting to SCL module editor refs #7569 Change-Id: Ic97b0fc3a1c262cfe1a46a13a7ffc6462950a314 --- .../scl/ui/editor2/SCLModuleEditor2.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2.java index 05015bb0b..0e068d69b 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2.java @@ -10,6 +10,7 @@ import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.link.LinkedModeModel; import org.eclipse.jface.text.link.LinkedPosition; +import org.eclipse.jface.text.source.DefaultCharacterPairMatcher; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ST; @@ -23,6 +24,7 @@ import org.eclipse.ui.contexts.IContextService; import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; import org.eclipse.ui.texteditor.IUpdate; +import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; import org.eclipse.ui.texteditor.TextNavigationAction; import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew; import org.simantics.scl.ui.editor.completion.SCLTextEditorEnvironment; @@ -32,8 +34,17 @@ import org.simantics.scl.ui.editor2.iterator.JavaWordIterator; import com.ibm.icu.text.BreakIterator; public class SCLModuleEditor2 extends TextEditor { + + private static final char[] CHARS = new char[] { '(', ')', '{', '}', '[', ']', '<', '>' }; + + private static final String MATCHING_BRACKETS = "matchingBrackets"; + private static final String MATCHING_BRACKETS_COLOR = "matchingBracketsColor"; + private static final String HIGHLIGHT_BRACKET_AT_CARET_LOCATION = "highlightBracketAtCaretLocation"; + private static final String ENCLOSING_BRACKETS = "enclosingBrackets"; + private boolean disposed = false; protected ResourceManager resourceManager; + private DefaultCharacterPairMatcher matcher; public SCLModuleEditor2() { super(); @@ -52,6 +63,10 @@ public class SCLModuleEditor2 extends TextEditor { public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); + getPreferenceStore().setValue(MATCHING_BRACKETS, true); + getPreferenceStore().setValue(MATCHING_BRACKETS_COLOR, "192,192,192"); + getPreferenceStore().setValue(HIGHLIGHT_BRACKET_AT_CARET_LOCATION, true); + getPreferenceStore().setValue(ENCLOSING_BRACKETS, true); } @Override @@ -92,12 +107,21 @@ public class SCLModuleEditor2 extends TextEditor { protected void updatePartName() { setPartName(getEditorInput().getName()); } + + @Override + protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) { + matcher = new DefaultCharacterPairMatcher(CHARS); + support.setCharacterPairMatcher(matcher); + support.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR, HIGHLIGHT_BRACKET_AT_CARET_LOCATION, ENCLOSING_BRACKETS); + super.configureSourceViewerDecorationSupport(support); + } @Override public void dispose() { disposed = true; super.dispose(); resourceManager.dispose(); + matcher.dispose(); } public boolean isDisposed() { -- 2.43.2