2 *******************************************************************************
\r
3 * Copyright (C) 1996-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl;
\r
9 import java.text.CharacterIterator;
\r
11 import com.ibm.icu.text.UCharacterIterator;
\r
14 * This class is a wrapper around CharacterIterator and implements the
\r
15 * UCharacterIterator protocol
\r
19 public class CharacterIteratorWrapper extends UCharacterIterator {
\r
21 private CharacterIterator iterator;
\r
24 public CharacterIteratorWrapper(CharacterIterator iter){
\r
26 throw new IllegalArgumentException();
\r
32 * @see UCharacterIterator#current()
\r
34 public int current() {
\r
35 int c = iterator.current();
\r
36 if(c==CharacterIterator.DONE){
\r
43 * @see UCharacterIterator#getLength()
\r
45 public int getLength() {
\r
46 return (iterator.getEndIndex() - iterator.getBeginIndex());
\r
50 * @see UCharacterIterator#getIndex()
\r
52 public int getIndex() {
\r
53 return iterator.getIndex();
\r
57 * @see UCharacterIterator#next()
\r
60 int i = iterator.current();
\r
62 if(i==CharacterIterator.DONE){
\r
69 * @see UCharacterIterator#previous()
\r
71 public int previous() {
\r
72 int i = iterator.previous();
\r
73 if(i==CharacterIterator.DONE){
\r
80 * @see UCharacterIterator#setIndex(int)
\r
82 public void setIndex(int index) {
\r
84 iterator.setIndex(index);
\r
85 }catch(IllegalArgumentException e){
\r
86 throw new IndexOutOfBoundsException();
\r
91 * @see UCharacterIterator#setToLimit()
\r
93 public void setToLimit() {
\r
94 iterator.setIndex(iterator.getEndIndex());
\r
98 * @see UCharacterIterator#getText(char[])
\r
100 public int getText(char[] fillIn, int offset){
\r
101 int length =iterator.getEndIndex() - iterator.getBeginIndex();
\r
102 int currentIndex = iterator.getIndex();
\r
103 if(offset < 0 || offset + length > fillIn.length){
\r
104 throw new IndexOutOfBoundsException(Integer.toString(length));
\r
107 for (char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) {
\r
108 fillIn[offset++] = ch;
\r
110 iterator.setIndex(currentIndex);
\r
116 * Creates a clone of this iterator. Clones the underlying character iterator.
\r
117 * @see UCharacterIterator#clone()
\r
119 public Object clone(){
\r
121 CharacterIteratorWrapper result = (CharacterIteratorWrapper) super.clone();
\r
122 result.iterator = (CharacterIterator)this.iterator.clone();
\r
124 } catch (CloneNotSupportedException e) {
\r
125 return null; // only invoked if bad underlying character iterator
\r
130 public int moveIndex(int delta){
\r
131 int length = iterator.getEndIndex() - iterator.getBeginIndex();
\r
132 int idx = iterator.getIndex()+delta;
\r
136 } else if(idx > length) {
\r
139 return iterator.setIndex(idx);
\r
143 * @see UCharacterIterator#getCharacterIterator()
\r
145 public CharacterIterator getCharacterIterator(){
\r
146 return (CharacterIterator)iterator.clone();
\r