-package org.simantics.scl.ui.editor.completion;\r
-\r
-import org.eclipse.jface.text.AbstractReusableInformationControlCreator;\r
-import org.eclipse.jface.text.BadLocationException;\r
-import org.eclipse.jface.text.DefaultInformationControl;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.IInformationControl;\r
-import org.eclipse.jface.text.IInformationControlCreator;\r
-import org.eclipse.jface.text.IRegion;\r
-import org.eclipse.jface.text.ITextHover;\r
-import org.eclipse.jface.text.ITextHoverExtension;\r
-import org.eclipse.jface.text.ITextHoverExtension2;\r
-import org.eclipse.jface.text.ITextViewer;\r
-import org.eclipse.jface.text.Region;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-import org.eclipse.swt.widgets.Shell;\r
-\r
-public class SCLEditorTextHover implements ITextHover, ITextHoverExtension, ITextHoverExtension2 {\r
-\r
- private SCLTextEditorEnvironment sclTextEditorEnvironment;\r
- \r
- public SCLEditorTextHover(ISourceViewer sourceViewer, SCLTextEditorEnvironment sclTextEditorEnvironment) {\r
- this.sclTextEditorEnvironment = sclTextEditorEnvironment;\r
- }\r
-\r
- @Override\r
- public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {\r
- return null;\r
- }\r
-\r
- @Override\r
- public IRegion getHoverRegion(ITextViewer textViewer, int offset) {\r
- return findWord(textViewer.getDocument(), offset);\r
- }\r
- \r
- private static IRegion findWord(IDocument document, int offset) {\r
- int start= -2;\r
- int end= -1;\r
-\r
- try {\r
-\r
- int pos= offset;\r
- char c;\r
-\r
- while (pos >= 0) {\r
- c= document.getChar(pos);\r
- if (!Character.isUnicodeIdentifierPart(c))\r
- break;\r
- --pos;\r
- }\r
-\r
- start= pos;\r
-\r
- pos= offset;\r
- int length= document.getLength();\r
-\r
- while (pos < length) {\r
- c= document.getChar(pos);\r
- if (!Character.isUnicodeIdentifierPart(c))\r
- break;\r
- ++pos;\r
- }\r
-\r
- end= pos;\r
-\r
- } catch (BadLocationException x) {\r
- }\r
-\r
- if (start >= -1 && end > -1) {\r
- if (start == offset && end == offset)\r
- return new Region(offset, 0);\r
- else if (start == offset)\r
- return new Region(start, end - start);\r
- else\r
- return new Region(start + 1, end - start - 1);\r
- }\r
-\r
- return null;\r
- }\r
-\r
- @Override\r
- public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {\r
- String info = null;\r
- try {\r
- IDocument document = textViewer.getDocument();\r
- String text = document.get(hoverRegion.getOffset(), hoverRegion.getLength());\r
- sclTextEditorEnvironment.updateEnvironment(document);\r
- info = sclTextEditorEnvironment.getHoverInfo(text);\r
- } catch (BadLocationException e) {\r
- \r
- }\r
- return info;\r
- }\r
-\r
- @Override\r
- public IInformationControlCreator getHoverControlCreator() {\r
- AbstractReusableInformationControlCreator creator = new AbstractReusableInformationControlCreator() {\r
- \r
- @Override\r
- protected IInformationControl doCreateInformationControl(Shell parent) {\r
- return new DefaultInformationControl(parent);\r
- }\r
- };\r
- return creator;\r
- }\r
-\r
-}\r
+package org.simantics.scl.ui.editor.completion;
+
+import org.eclipse.jface.text.AbstractReusableInformationControlCreator;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextHoverExtension;
+import org.eclipse.jface.text.ITextHoverExtension2;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.swt.widgets.Shell;
+
+public class SCLEditorTextHover implements ITextHover, ITextHoverExtension, ITextHoverExtension2 {
+
+ private SCLTextEditorEnvironment sclTextEditorEnvironment;
+
+ public SCLEditorTextHover(ISourceViewer sourceViewer, SCLTextEditorEnvironment sclTextEditorEnvironment) {
+ this.sclTextEditorEnvironment = sclTextEditorEnvironment;
+ }
+
+ @Override
+ public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
+ return null;
+ }
+
+ @Override
+ public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
+ return findWord(textViewer.getDocument(), offset);
+ }
+
+ private static IRegion findWord(IDocument document, int offset) {
+ int start= -2;
+ int end= -1;
+
+ try {
+
+ int pos= offset;
+ char c;
+
+ while (pos >= 0) {
+ c= document.getChar(pos);
+ if (!Character.isUnicodeIdentifierPart(c))
+ break;
+ --pos;
+ }
+
+ start= pos;
+
+ pos= offset;
+ int length= document.getLength();
+
+ while (pos < length) {
+ c= document.getChar(pos);
+ if (!Character.isUnicodeIdentifierPart(c))
+ break;
+ ++pos;
+ }
+
+ end= pos;
+
+ } catch (BadLocationException x) {
+ }
+
+ if (start >= -1 && end > -1) {
+ if (start == offset && end == offset)
+ return new Region(offset, 0);
+ else if (start == offset)
+ return new Region(start, end - start);
+ else
+ return new Region(start + 1, end - start - 1);
+ }
+
+ return null;
+ }
+
+ @Override
+ public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
+ String info = null;
+ try {
+ IDocument document = textViewer.getDocument();
+ String text = document.get(hoverRegion.getOffset(), hoverRegion.getLength());
+ sclTextEditorEnvironment.updateEnvironment(document);
+ info = sclTextEditorEnvironment.getHoverInfo(text);
+ } catch (BadLocationException e) {
+
+ }
+ return info;
+ }
+
+ @Override
+ public IInformationControlCreator getHoverControlCreator() {
+ AbstractReusableInformationControlCreator creator = new AbstractReusableInformationControlCreator() {
+
+ @Override
+ protected IInformationControl doCreateInformationControl(Shell parent) {
+ return new DefaultInformationControl(parent);
+ }
+ };
+ return creator;
+ }
+
+}