001: /*
002: *******************************************************************************
003: * Copyright (C) 1996-2004, International Business Machines Corporation and *
004: * others. All Rights Reserved. *
005: *******************************************************************************
006: */
007:
008: package com.ibm.icu.impl;
009:
010: import java.text.CharacterIterator;
011:
012: import com.ibm.icu.text.*;
013:
014: /**
015: * This class is a wrapper around UCharacterIterator and implements the
016: * CharacterIterator protocol
017: * @author ram
018: */
019: public class UCharacterIteratorWrapper implements CharacterIterator {
020:
021: public UCharacterIteratorWrapper(UCharacterIterator iter) {
022: this .iterator = iter;
023: }
024:
025: private UCharacterIterator iterator;
026:
027: /**
028: * Sets the position to getBeginIndex() and returns the character at that
029: * position.
030: * @return the first character in the text, or DONE if the text is empty
031: * @see #getBeginIndex()
032: */
033: public char first() {
034: //UCharacterIterator always iterates from 0 to length
035: iterator.setToStart();
036: return (char) iterator.current();
037: }
038:
039: /**
040: * Sets the position to getEndIndex()-1 (getEndIndex() if the text is empty)
041: * and returns the character at that position.
042: * @return the last character in the text, or DONE if the text is empty
043: * @see #getEndIndex()
044: */
045: public char last() {
046: iterator.setToLimit();
047: return (char) iterator.previous();
048: }
049:
050: /**
051: * Gets the character at the current position (as returned by getIndex()).
052: * @return the character at the current position or DONE if the current
053: * position is off the end of the text.
054: * @see #getIndex()
055: */
056: public char current() {
057: return (char) iterator.current();
058: }
059:
060: /**
061: * Increments the iterator's index by one and returns the character
062: * at the new index. If the resulting index is greater or equal
063: * to getEndIndex(), the current index is reset to getEndIndex() and
064: * a value of DONE is returned.
065: * @return the character at the new position or DONE if the new
066: * position is off the end of the text range.
067: */
068: public char next() {
069: //pre-increment
070: iterator.next();
071: return (char) iterator.current();
072: }
073:
074: /**
075: * Decrements the iterator's index by one and returns the character
076: * at the new index. If the current index is getBeginIndex(), the index
077: * remains at getBeginIndex() and a value of DONE is returned.
078: * @return the character at the new position or DONE if the current
079: * position is equal to getBeginIndex().
080: */
081: public char previous() {
082: //pre-decrement
083: return (char) iterator.previous();
084: }
085:
086: /**
087: * Sets the position to the specified position in the text and returns that
088: * character.
089: * @param position the position within the text. Valid values range from
090: * getBeginIndex() to getEndIndex(). An IllegalArgumentException is thrown
091: * if an invalid value is supplied.
092: * @return the character at the specified position or DONE if the specified position is equal to getEndIndex()
093: */
094: public char setIndex(int position) {
095: iterator.setIndex(position);
096: return (char) iterator.current();
097: }
098:
099: /**
100: * Returns the start index of the text.
101: * @return the index at which the text begins.
102: */
103: public int getBeginIndex() {
104: //UCharacterIterator always starts from 0
105: return 0;
106: }
107:
108: /**
109: * Returns the end index of the text. This index is the index of the first
110: * character following the end of the text.
111: * @return the index after the last character in the text
112: */
113: public int getEndIndex() {
114: return iterator.getLength();
115: }
116:
117: /**
118: * Returns the current index.
119: * @return the current index.
120: */
121: public int getIndex() {
122: return iterator.getIndex();
123: }
124:
125: /**
126: * Create a copy of this iterator
127: * @return A copy of this
128: */
129: public Object clone() {
130: try {
131: UCharacterIteratorWrapper result = (UCharacterIteratorWrapper) super
132: .clone();
133: result.iterator = (UCharacterIterator) this .iterator
134: .clone();
135: return result;
136: } catch (CloneNotSupportedException e) {
137: return null; // only invoked if bad underlying character iterator
138: }
139: }
140:
141: }
|