1 /* 2 * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* 27 ******************************************************************************* 28 * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * 29 * * 30 * The original version of this source code and documentation is copyrighted * 31 * and owned by IBM, These materials are provided under terms of a License * 32 * Agreement between IBM and Sun. This technology is protected by multiple * 33 * US and International patents. This notice and attribution to IBM may not * 34 * to removed. * 35 ******************************************************************************* 36 */ 37 38 package sun.text.normalizer; 39 40 import java.text.CharacterIterator; 41 42 /** 43 * This class is a wrapper around CharacterIterator and implements the 44 * UCharacterIterator protocol 45 * @author ram 46 */ 47 48 public class CharacterIteratorWrapper extends UCharacterIterator { 49 50 private CharacterIterator iterator; 51 52 public CharacterIteratorWrapper(CharacterIterator iter){ 53 if(iter==null){ 54 throw new IllegalArgumentException(); 55 } 56 iterator = iter; 57 } 58 59 /** 60 * @see UCharacterIterator#current() 61 */ 62 public int current() { 63 int c = iterator.current(); 64 if(c==CharacterIterator.DONE){ 65 return DONE; 66 } 67 return c; 68 } 69 70 /** 71 * @see UCharacterIterator#getLength() 72 */ 73 public int getLength() { 74 return (iterator.getEndIndex() - iterator.getBeginIndex()); 75 } 76 77 /** 78 * @see UCharacterIterator#getIndex() 79 */ 80 public int getIndex() { 81 return iterator.getIndex(); 82 } 83 84 /** 85 * @see UCharacterIterator#next() 86 */ 87 public int next() { 88 int i = iterator.current(); 89 iterator.next(); 90 if(i==CharacterIterator.DONE){ 91 return DONE; 92 } 93 return i; 94 } 95 96 /** 97 * @see UCharacterIterator#previous() 98 */ 99 public int previous() { 100 int i = iterator.previous(); 101 if(i==CharacterIterator.DONE){ 102 return DONE; 103 } 104 return i; 105 } 106 107 /** 108 * @see UCharacterIterator#setIndex(int) 109 */ 110 public void setIndex(int index) { 111 iterator.setIndex(index); 112 } 113 114 //// for StringPrep 115 /** 116 * @see UCharacterIterator#getText(char[]) 117 */ 118 public int getText(char[] fillIn, int offset){ 119 int length =iterator.getEndIndex() - iterator.getBeginIndex(); 120 int currentIndex = iterator.getIndex(); 121 if(offset < 0 || offset + length > fillIn.length){ 122 throw new IndexOutOfBoundsException(Integer.toString(length)); 123 } 124 125 for (char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) { 126 fillIn[offset++] = ch; 127 } 128 iterator.setIndex(currentIndex); 129 130 return length; 131 } 132 133 /** 134 * Creates a clone of this iterator. Clones the underlying character iterator. 135 * @see UCharacterIterator#clone() 136 */ 137 public Object clone(){ 138 try { 139 CharacterIteratorWrapper result = (CharacterIteratorWrapper) super.clone(); 140 result.iterator = (CharacterIterator)this.iterator.clone(); 141 return result; 142 } catch (CloneNotSupportedException e) { 143 return null; // only invoked if bad underlying character iterator 144 } 145 } 146 }