From: Hannu Niemistö Date: Wed, 25 Oct 2017 11:12:15 +0000 (+0300) Subject: Merge "Add character highlighting to SCL module editor" X-Git-Tag: v1.31.0~97 X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=1ad27f09190e07bb97da55f146330c8be0d86e78;hp=a7f7fb0c37e4377124ddc3860d8c8d3e39dcd2de;p=simantics%2Fplatform.git Merge "Add character highlighting to SCL module editor" --- 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() {