Lines 12-19
Link Here
|
12 |
package org.eclipse.koneki.ldt.ui.internal.editor; |
12 |
package org.eclipse.koneki.ldt.ui.internal.editor; |
13 |
|
13 |
|
14 |
import org.eclipse.dltk.core.IDLTKLanguageToolkit; |
14 |
import org.eclipse.dltk.core.IDLTKLanguageToolkit; |
|
|
15 |
import org.eclipse.dltk.core.IImportDeclaration; |
16 |
import org.eclipse.dltk.core.ILocalVariable; |
17 |
import org.eclipse.dltk.core.IMember; |
15 |
import org.eclipse.dltk.core.IModelElement; |
18 |
import org.eclipse.dltk.core.IModelElement; |
|
|
19 |
import org.eclipse.dltk.core.IPackageDeclaration; |
16 |
import org.eclipse.dltk.core.ISourceModule; |
20 |
import org.eclipse.dltk.core.ISourceModule; |
|
|
21 |
import org.eclipse.dltk.core.ISourceRange; |
22 |
import org.eclipse.dltk.core.ISourceReference; |
23 |
import org.eclipse.dltk.core.ModelException; |
17 |
import org.eclipse.dltk.internal.ui.editor.BracketInserter; |
24 |
import org.eclipse.dltk.internal.ui.editor.BracketInserter; |
18 |
import org.eclipse.dltk.internal.ui.editor.ScriptEditor; |
25 |
import org.eclipse.dltk.internal.ui.editor.ScriptEditor; |
19 |
import org.eclipse.dltk.internal.ui.editor.ScriptOutlinePage; |
26 |
import org.eclipse.dltk.internal.ui.editor.ScriptOutlinePage; |
Lines 24-32
import org.eclipse.jface.preference.IPreferenceStore;
Link Here
|
24 |
import org.eclipse.jface.text.IDocument; |
31 |
import org.eclipse.jface.text.IDocument; |
25 |
import org.eclipse.jface.text.IDocumentExtension3; |
32 |
import org.eclipse.jface.text.IDocumentExtension3; |
26 |
import org.eclipse.jface.text.ITextViewerExtension; |
33 |
import org.eclipse.jface.text.ITextViewerExtension; |
|
|
34 |
import org.eclipse.jface.text.TextSelection; |
27 |
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher; |
35 |
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher; |
28 |
import org.eclipse.jface.text.source.ICharacterPairMatcher; |
36 |
import org.eclipse.jface.text.source.ICharacterPairMatcher; |
29 |
import org.eclipse.jface.text.source.ISourceViewer; |
37 |
import org.eclipse.jface.text.source.ISourceViewer; |
|
|
38 |
import org.eclipse.jface.viewers.ISelection; |
30 |
import org.eclipse.jface.viewers.SelectionChangedEvent; |
39 |
import org.eclipse.jface.viewers.SelectionChangedEvent; |
31 |
import org.eclipse.koneki.ldt.core.LuaUtils; |
40 |
import org.eclipse.koneki.ldt.core.LuaUtils; |
32 |
import org.eclipse.koneki.ldt.core.internal.LuaLanguageToolkit; |
41 |
import org.eclipse.koneki.ldt.core.internal.LuaLanguageToolkit; |
Lines 35-40
import org.eclipse.koneki.ldt.ui.internal.editor.navigation.LuaOutlinePage;
Link Here
|
35 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.ILuaPartitions; |
44 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.ILuaPartitions; |
36 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaBracketInserter; |
45 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaBracketInserter; |
37 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaTextTools; |
46 |
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaTextTools; |
|
|
47 |
import org.eclipse.swt.custom.StyledText; |
38 |
import org.eclipse.swt.widgets.Composite; |
48 |
import org.eclipse.swt.widgets.Composite; |
39 |
import org.eclipse.ui.IEditorInput; |
49 |
import org.eclipse.ui.IEditorInput; |
40 |
import org.eclipse.ui.texteditor.ChainedPreferenceStore; |
50 |
import org.eclipse.ui.texteditor.ChainedPreferenceStore; |
Lines 163-166
public class LuaEditor extends ScriptEditor {
Link Here
|
163 |
// Pass typed character to auto insert object |
173 |
// Pass typed character to auto insert object |
164 |
((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(bracketInserter); |
174 |
((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(bracketInserter); |
165 |
} |
175 |
} |
|
|
176 |
|
177 |
/** |
178 |
* This a duplicate {@link ScriptEditor#setSelection(IModelElement, boolean)} which uses {@link String#length()}, not suitable for the inclusive |
179 |
* Lua strings our models are made from. |
180 |
* |
181 |
* To adapt it, they are just some "- 1" after some {@link String#length()}. |
182 |
*/ |
183 |
// CHECKSTYLE NLS: OFF |
184 |
@Override |
185 |
protected void setSelection(ISourceReference reference, boolean moveCursor) { |
186 |
if (getSelectionProvider() == null) |
187 |
return; |
188 |
ISelection selection = getSelectionProvider().getSelection(); |
189 |
if (selection instanceof TextSelection) { |
190 |
TextSelection textSelection = (TextSelection) selection; |
191 |
// PR 39995: [navigation] Forward history cleared after going back |
192 |
// in navigation history: |
193 |
// mark only in navigation history if the cursor is being moved |
194 |
// (which it isn't if |
195 |
// this is called from a PostSelectionEvent that should only update |
196 |
// the magnet) |
197 |
if (moveCursor && (textSelection.getOffset() != 0 || textSelection.getLength() != 0)) |
198 |
markInNavigationHistory(); |
199 |
} |
200 |
if (reference != null) { |
201 |
StyledText textWidget = null; |
202 |
ISourceViewer sourceViewer = getSourceViewer(); |
203 |
if (sourceViewer != null) |
204 |
textWidget = sourceViewer.getTextWidget(); |
205 |
if (textWidget == null) |
206 |
return; |
207 |
try { |
208 |
ISourceRange range = null; |
209 |
range = reference.getSourceRange(); |
210 |
if (range == null) |
211 |
return; |
212 |
int offset = range.getOffset(); |
213 |
int length = range.getLength() - 1; |
214 |
if (offset < 0 || length < 0) |
215 |
return; |
216 |
setHighlightRange(offset, length, moveCursor); |
217 |
if (!moveCursor) |
218 |
return; |
219 |
offset = -1; |
220 |
length = -1; |
221 |
if (reference instanceof IMember) { |
222 |
range = ((IMember) reference).getNameRange(); |
223 |
if (range != null) { |
224 |
offset = range.getOffset(); |
225 |
length = range.getLength() - 1; |
226 |
} |
227 |
} else if (reference instanceof ILocalVariable) { |
228 |
range = ((ILocalVariable) reference).getNameRange(); |
229 |
if (range != null) { |
230 |
offset = range.getOffset(); |
231 |
length = range.getLength() - 1; |
232 |
} |
233 |
} else if (reference instanceof IImportDeclaration || reference instanceof IPackageDeclaration) { |
234 |
// range is still getSourceRange() |
235 |
offset = range.getOffset(); |
236 |
length = range.getLength() - 1; |
237 |
} |
238 |
if (offset > -1 && length > 0) { |
239 |
try { |
240 |
textWidget.setRedraw(false); |
241 |
sourceViewer.revealRange(offset, length); |
242 |
sourceViewer.setSelectedRange(offset, length); |
243 |
} finally { |
244 |
textWidget.setRedraw(true); |
245 |
} |
246 |
markInNavigationHistory(); |
247 |
} |
248 |
} catch (ModelException x) { |
249 |
} catch (IllegalArgumentException x) { |
250 |
} |
251 |
} else if (moveCursor) { |
252 |
resetHighlightRange(); |
253 |
markInNavigationHistory(); |
254 |
} |
255 |
} |
256 |
// CHECKSTYLE NLS: ON |
166 |
} |
257 |
} |
167 |
- |
|
|