OSDN Git Service

change whitespace chars
[moreemacs/moreemacs.git] / jp.sourceforge.moreemacs / src / jp / sourceforge / moreemacs / handlers / BackwardWordExecution.java
1 package jp.sourceforge.moreemacs.handlers;
2
3 import jp.sourceforge.moreemacs.utils.CodePointIterator;
4 import jp.sourceforge.moreemacs.utils.DocumentCharSequence;
5
6 import org.eclipse.jface.text.BadLocationException;
7 import org.eclipse.jface.text.IDocument;
8
9 public final class BackwardWordExecution extends TextEditorExecution {
10     @Override
11     public void execute() throws BadLocationException {
12         int current = cursor.offset();
13         cursor.move(getPreviousWordPosition(doc, current));
14     }
15     
16     public static int getPreviousWordPosition(IDocument doc, int offset) throws BadLocationException {
17         CharSequence seq = new DocumentCharSequence(doc, 0, offset);
18         CodePointIterator itr = new CodePointIterator(seq, seq.length());
19         
20         for(; itr.hasPrevious(); ) {
21             if (Character.isLetterOrDigit(itr.previous())) {
22                 itr.next();
23                 break;
24             }
25         }
26         for(; itr.hasPrevious(); ) {
27             if (!Character.isLetterOrDigit(itr.previous())) {
28                 itr.next();
29                 break;
30             }
31         }
32         return itr.index();
33     }
34 }