History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/text/normalizer/ReplaceableUCharacterIterator.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/text/normalizer/ReplaceableUCharacterIterator.java+190−0
@@ -0,0 +1,190 @@
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
38package sun.text.normalizer;
39
40/**
41 * DLF docs must define behavior when Replaceable is mutated underneath
42 * the iterator.
43 *
44 * This and ICUCharacterIterator share some code, maybe they should share
45 * an implementation, or the common state and implementation should be
46 * moved up into UCharacterIterator.
47 *
48 * What are first, last, and getBeginIndex doing here?!?!?!
49 */
50public class ReplaceableUCharacterIterator extends UCharacterIterator {
51
52 // public constructor ------------------------------------------------------
53
54 /**
55 * Public constructor
56 * @param str text which the iterator will be based on
57 */
58 public ReplaceableUCharacterIterator(String str){
59 if(str==null){
60 throw new IllegalArgumentException();
61 }
62 this.replaceable = new ReplaceableString(str);
63 this.currentIndex = 0;
64 }
65
66 //// for StringPrep
67 /**
68 * Public constructor
69 * @param buf buffer of text on which the iterator will be based
70 */
71 public ReplaceableUCharacterIterator(StringBuffer buf){
72 if(buf==null){
73 throw new IllegalArgumentException();
74 }
75 this.replaceable = new ReplaceableString(buf);
76 this.currentIndex = 0;
77 }
78
79 // public methods ----------------------------------------------------------
80
81 /**
82 * Creates a copy of this iterator, does not clone the underlying
83 * <code>Replaceable</code>object
84 * @return copy of this iterator
85 */
86 public Object clone(){
87 try {
88 return super.clone();
89 } catch (CloneNotSupportedException e) {
90 return null; // never invoked
91 }
92 }
93
94 /**
95 * Returns the current UTF16 character.
96 * @return current UTF16 character
97 */
98 public int current(){
99 if (currentIndex < replaceable.length()) {
100 return replaceable.charAt(currentIndex);
101 }
102 return DONE;
103 }
104
105 /**
106 * Returns the length of the text
107 * @return length of the text
108 */
109 public int getLength(){
110 return replaceable.length();
111 }
112
113 /**
114 * Gets the current currentIndex in text.
115 * @return current currentIndex in text.
116 */
117 public int getIndex(){
118 return currentIndex;
119 }
120
121 /**
122 * Returns next UTF16 character and increments the iterator's currentIndex by 1.
123 * If the resulting currentIndex is greater or equal to the text length, the
124 * currentIndex is reset to the text length and a value of DONECODEPOINT is
125 * returned.
126 * @return next UTF16 character in text or DONE if the new currentIndex is off the
127 * end of the text range.
128 */
129 public int next(){
130 if (currentIndex < replaceable.length()) {
131 return replaceable.charAt(currentIndex++);
132 }
133 return DONE;
134 }
135
136
137 /**
138 * Returns previous UTF16 character and decrements the iterator's currentIndex by
139 * 1.
140 * If the resulting currentIndex is less than 0, the currentIndex is reset to 0 and a
141 * value of DONECODEPOINT is returned.
142 * @return next UTF16 character in text or DONE if the new currentIndex is off the
143 * start of the text range.
144 */
145 public int previous(){
146 if (currentIndex > 0) {
147 return replaceable.charAt(--currentIndex);
148 }
149 return DONE;
150 }
151
152 /**
153 * <p>Sets the currentIndex to the specified currentIndex in the text and returns that
154 * single UTF16 character at currentIndex.
155 * This assumes the text is stored as 16-bit code units.</p>
156 * @param currentIndex the currentIndex within the text.
157 * @exception IllegalArgumentException is thrown if an invalid currentIndex is
158 * supplied. i.e. currentIndex is out of bounds.
159 * @return the character at the specified currentIndex or DONE if the specified
160 * currentIndex is equal to the end of the text.
161 */
162 public void setIndex(int currentIndex) {
163 if (currentIndex < 0 || currentIndex > replaceable.length()) {
164 throw new IllegalArgumentException();
165 }
166 this.currentIndex = currentIndex;
167 }
168
169 //// for StringPrep
170 public int getText(char[] fillIn, int offset){
171 int length = replaceable.length();
172 if(offset < 0 || offset + length > fillIn.length){
173 throw new IndexOutOfBoundsException(Integer.toString(length));
174 }
175 replaceable.getChars(0,length,fillIn,offset);
176 return length;
177 }
178
179 // private data members ----------------------------------------------------
180
181 /**
182 * Replacable object
183 */
184 private Replaceable replaceable;
185 /**
186 * Current currentIndex
187 */
188 private int currentIndex;
189
190}