content: package com.amzi.prolog.ui.editor;
  
  import org.eclipse.jface.text.*;
  
  public class PrologDoubleClickStrategy 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);
  	}
  }