/******************************************************************************* | |
* Copyright (c) 2005, 2007 ILOG 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: | |
* Joel Cheuoua - Initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.jet.internal.editor.configuration; | |
import org.eclipse.jface.text.*; | |
public class DoubleClickStrategy implements ITextDoubleClickStrategy { | |
protected ITextViewer fText; | |
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); | |
} | |
} |