-package jp.sourceforge.moreemacs.utils;\r
-\r
-import java.util.Iterator;\r
-\r
-public final class CodePointIterator implements Iterator<Integer> {\r
- private final CharSequence seq;\r
- private int index;\r
-\r
- public CodePointIterator(CharSequence seq) {\r
- this(seq, 0);\r
- }\r
- \r
- public CodePointIterator(CharSequence seq, int index) {\r
- if(seq == null) {\r
- throw new NullPointerException("seq is null");\r
- }\r
-\r
- this.seq = seq;\r
- setIndex(index);\r
- }\r
- \r
- public void setIndex(int index) {\r
- if(index < 0 || index > seq.length()) {\r
- throw new IndexOutOfBoundsException();\r
- }\r
- this.index = index;\r
- }\r
- \r
- @Override\r
- public boolean hasNext() { \r
- return index < seq.length(); \r
- }\r
- \r
- public boolean hasPrevious() { \r
- return index > 0;\r
- }\r
- \r
- public int index() {\r
- return index;\r
- }\r
- \r
- @Override\r
- public Integer next() { \r
- int codePoint = Character.codePointAt(seq, index); \r
- index += Character.charCount(codePoint); \r
- return codePoint; \r
- }\r
-\r
- public Integer previous() { \r
- int codePoint = Character.codePointBefore(seq, index); \r
- index -= Character.charCount(codePoint); \r
- return codePoint; \r
- }\r
- \r
- @Override\r
- public void remove() {\r
- throw new UnsupportedOperationException("unsupported");\r
- }\r
-\r
- public static Iterable<Integer> each(final CharSequence seq) {\r
- return new Iterable<Integer>() {\r
- @Override\r
- public Iterator<Integer> iterator() {\r
- return new CodePointIterator(seq);\r
- }\r
- \r
- };\r
- }\r
-}\r
+package jp.sourceforge.moreemacs.utils;
+
+import java.util.Iterator;
+
+public final class CodePointIterator implements Iterator<Integer> {
+ private final CharSequence seq;
+ private int index;
+
+ public CodePointIterator(CharSequence seq) {
+ this(seq, 0);
+ }
+
+ public CodePointIterator(CharSequence seq, int index) {
+ if(seq == null) {
+ throw new NullPointerException("seq is null");
+ }
+
+ this.seq = seq;
+ setIndex(index);
+ }
+
+ public void setIndex(int index) {
+ if(index < 0 || index > seq.length()) {
+ throw new IndexOutOfBoundsException();
+ }
+ this.index = index;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return index < seq.length();
+ }
+
+ public boolean hasPrevious() {
+ return index > 0;
+ }
+
+ public int index() {
+ return index;
+ }
+
+ @Override
+ public Integer next() {
+ int codePoint = Character.codePointAt(seq, index);
+ index += Character.charCount(codePoint);
+ return codePoint;
+ }
+
+ public Integer previous() {
+ int codePoint = Character.codePointBefore(seq, index);
+ index -= Character.charCount(codePoint);
+ return codePoint;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("unsupported");
+ }
+
+ public static Iterable<Integer> each(final CharSequence seq) {
+ return new Iterable<Integer>() {
+ @Override
+ public Iterator<Integer> iterator() {
+ return new CodePointIterator(seq);
+ }
+
+ };
+ }
+}