OSDN Git Service

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