diff options
author | Lucas Bullen | 2017-09-01 17:27:17 +0000 |
---|---|---|
committer | Lucas Bullen | 2017-10-17 13:36:03 +0000 |
commit | 3c1fd5a3277074256b6d3f1bf2aa9a6b41f8b094 (patch) | |
tree | 4cf5bd5431edb8d814ec6bdc5c9f39980b1f7667 /org.eclipse.ui.genericeditor.examples | |
parent | 43cdbb7d723b29c84d152bdb5d2d350d5fe39e40 (diff) | |
download | eclipse.platform.text-3c1fd5a3277074256b6d3f1bf2aa9a6b41f8b094.tar.gz eclipse.platform.text-3c1fd5a3277074256b6d3f1bf2aa9a6b41f8b094.tar.xz eclipse.platform.text-3c1fd5a3277074256b6d3f1bf2aa9a6b41f8b094.zip |
Bug 521031 - [generic editor] How to implement Matching bracketI20171019-2000I20171018-2000I20171017-2000
Example added to .project editor
Fix added to CompositeReconciler for dealing with strategy-less
reconcilers
Change-Id: I0b9597e5b25b4001c8e587b3dcdecb1aa3897cfd
Signed-off-by: Lucas Bullen <lbullen@redhat.com>
Diffstat (limited to 'org.eclipse.ui.genericeditor.examples')
-rw-r--r-- | org.eclipse.ui.genericeditor.examples/plugin.xml | 4 | ||||
-rw-r--r-- | org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/BracketMatchingReconciler.java | 91 |
2 files changed, 95 insertions, 0 deletions
diff --git a/org.eclipse.ui.genericeditor.examples/plugin.xml b/org.eclipse.ui.genericeditor.examples/plugin.xml index 2ce9bebe1ef..a4fd6f752d5 100644 --- a/org.eclipse.ui.genericeditor.examples/plugin.xml +++ b/org.eclipse.ui.genericeditor.examples/plugin.xml @@ -50,6 +50,10 @@ class="org.eclipse.ui.genericeditor.examples.dotproject.FoldingReconciler" contentType="org.eclipse.ui.genericeditor.examples.dotproject"> </reconciler> + <reconciler + class="org.eclipse.ui.genericeditor.examples.dotproject.BracketMatchingReconciler" + contentType="org.eclipse.ui.genericeditor.examples.dotproject"> + </reconciler> </extension> <extension point="org.eclipse.ui.editors"> diff --git a/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/BracketMatchingReconciler.java b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/BracketMatchingReconciler.java new file mode 100644 index 00000000000..4ad7ba4058f --- /dev/null +++ b/org.eclipse.ui.genericeditor.examples/src/org/eclipse/ui/genericeditor/examples/dotproject/BracketMatchingReconciler.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2017 Red Hat Inc. and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Lucas Bullen (Red Hat Inc.) - initial implementation + *******************************************************************************/ +package org.eclipse.ui.genericeditor.examples.dotproject; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.ITextViewerExtension2; +import org.eclipse.jface.text.Region; +import org.eclipse.jface.text.reconciler.IReconciler; +import org.eclipse.jface.text.reconciler.IReconcilingStrategy; +import org.eclipse.jface.text.source.ICharacterPairMatcher; +import org.eclipse.jface.text.source.MatchingCharacterPainter; +import org.eclipse.jface.text.source.SourceViewer; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGBA; +import org.eclipse.swt.widgets.Display; + +public class BracketMatchingReconciler implements IReconciler{ + private RGBA fBoxingRGB = new RGBA(155, 155, 155, 50); + private MatchingCharacterPainter fMatchingCharacterPainter; + private SourceViewer fSourceViewer; + private ICharacterPairMatcher fCharacterPairMatcher = new ICharacterPairMatcher() { + @Override + public IRegion match(IDocument document, int offset){ + try { + String before = document.get(0, offset); + String after = document.get(offset, document.getLength() - offset); + int closingIndex = after.indexOf('>'); + int openingIndex = before.lastIndexOf('<'); + int previousClosingIndex = after.indexOf('<'); + int previousOpeningIndex = before.lastIndexOf('>'); + if((previousClosingIndex != -1 && closingIndex > previousClosingIndex) + || (previousOpeningIndex != -1 && openingIndex < previousOpeningIndex)) { + return null; + } + return new Region(openingIndex, offset - openingIndex + closingIndex + 1); + } catch (BadLocationException e) { + return null; + } + } + + @Override + public int getAnchor() { + return ICharacterPairMatcher.RIGHT; + } + + @Override + public void dispose() { + if(fMatchingCharacterPainter != null) { + fMatchingCharacterPainter.dispose(); + } + } + + @Override + public void clear() { + // No memory implemented + } + }; + + @Override + public void install(ITextViewer textViewer) { + if (textViewer instanceof ITextViewerExtension2 && textViewer instanceof SourceViewer) { + fSourceViewer = (SourceViewer)textViewer; + fMatchingCharacterPainter = new MatchingCharacterPainter(fSourceViewer, fCharacterPairMatcher); + fMatchingCharacterPainter.setColor(new Color (Display.getCurrent(), fBoxingRGB)); + fMatchingCharacterPainter.setHighlightCharacterAtCaretLocation(true); + fMatchingCharacterPainter.setHighlightEnclosingPeerCharacters(true); + fSourceViewer.addPainter(fMatchingCharacterPainter); + } + } + + @Override + public void uninstall() { + fSourceViewer.removePainter(fMatchingCharacterPainter); + } + + @Override + public IReconcilingStrategy getReconcilingStrategy(String contentType) { + return null; + } +} |