initial import
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / editors / PHPDoubleClickStrategy.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/editors/PHPDoubleClickStrategy.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/editors/PHPDoubleClickStrategy.java
new file mode 100644 (file)
index 0000000..5f74b2d
--- /dev/null
@@ -0,0 +1,115 @@
+package net.sourceforge.phpeclipse.editors;
+
+import org.eclipse.jface.text.*;
+
+public class PHPDoubleClickStrategy implements ITextDoubleClickStrategy {
+       protected ITextViewer fText;
+
+       public PHPDoubleClickStrategy() {
+               super();
+       }
+       public void doubleClicked(ITextViewer part) {
+               int pos = part.getSelectedRange().x;
+
+               if (pos < 0)
+                       return;
+
+               fText = part;
+
+               if (!selectComment(pos)) {
+                       selectWord(pos);
+               }
+       }
+       protected boolean selectComment(int caretPos) {
+               IDocument doc = fText.getDocument();
+               int startPos, endPos;
+
+               try {
+                       int pos = caretPos;
+                       char c = ' ';
+
+                       while (pos >= 0) {
+                               c = doc.getChar(pos);
+                               if (c == '\\') {
+                                       pos -= 2;
+                                       continue;
+                               }
+                               if (c == Character.LINE_SEPARATOR || c == '\"')
+                                       break;
+                               --pos;
+                       }
+
+                       if (c != '\"')
+                               return false;
+
+                       startPos = pos;
+
+                       pos = caretPos;
+                       int length = doc.getLength();
+                       c = ' ';
+
+                       while (pos < length) {
+                               c = doc.getChar(pos);
+                               if (c == Character.LINE_SEPARATOR || c == '\"')
+                                       break;
+                               ++pos;
+                       }
+                       if (c != '\"')
+                               return false;
+
+                       endPos = pos;
+
+                       int offset = startPos + 1;
+                       int len = endPos - offset;
+                       fText.setSelectedRange(offset, len);
+                       return true;
+               } catch (BadLocationException x) {
+               }
+
+               return false;
+       }
+       protected boolean selectWord(int caretPos) {
+
+               IDocument doc = fText.getDocument();
+               int startPos, endPos;
+
+               try {
+
+                       int pos = caretPos;
+                       char c;
+
+                       while (pos >= 0) {
+                               c = doc.getChar(pos);
+                               if (!Character.isJavaIdentifierPart(c))
+                                       break;
+                               --pos;
+                       }
+
+                       startPos = pos;
+
+                       pos = caretPos;
+                       int length = doc.getLength();
+
+                       while (pos < length) {
+                               c = doc.getChar(pos);
+                               if (!Character.isJavaIdentifierPart(c))
+                                       break;
+                               ++pos;
+                       }
+
+                       endPos = pos;
+                       selectRange(startPos, endPos);
+                       return true;
+
+               } catch (BadLocationException x) {
+               }
+
+               return false;
+       }
+
+       private void selectRange(int startPos, int stopPos) {
+               int offset = startPos + 1;
+               int length = stopPos - offset;
+               fText.setSelectedRange(offset, length);
+       }
+}
\ No newline at end of file