1 /* GENERATED SOURCE. DO NOT MODIFY. */ 2 // © 2016 and later: Unicode, Inc. and others. 3 // License & terms of use: http://www.unicode.org/copyright.html#License 4 /* 5 ******************************************************************************* 6 * Copyright (C) 1996-2014, International Business Machines Corporation and * 7 * others. All Rights Reserved. * 8 ******************************************************************************* 9 */ 10 package android.icu.text; 11 import android.icu.impl.Norm2AllModes; 12 import android.icu.impl.Normalizer2Impl; 13 14 /** 15 * This class has been deprecated since ICU 2.2. 16 * One problem is that this class is not designed to return supplementary characters. 17 * Use the Normalizer2 and UCharacter classes instead. 18 * <p> 19 * <tt>ComposedCharIter</tt> is an iterator class that returns all 20 * of the precomposed characters defined in the Unicode standard, along 21 * with their decomposed forms. This is often useful when building 22 * data tables (<i>e.g.</i> collation tables) which need to treat composed 23 * and decomposed characters equivalently. 24 * <p> 25 * For example, imagine that you have built a collation table with ordering 26 * rules for the {@link Normalizer#DECOMP canonically decomposed} forms of all 27 * characters used in a particular language. When you process input text using 28 * this table, the text must first be decomposed so that it matches the form 29 * used in the table. This can impose a performance penalty that may be 30 * unacceptable in some situations. 31 * <p> 32 * You can avoid this problem by ensuring that the collation table contains 33 * rules for both the decomposed <i>and</i> composed versions of each character. 34 * To do so, use a <tt>ComposedCharIter</tt> to iterate through all of the 35 * composed characters in Unicode. If the decomposition for that character 36 * consists solely of characters that are listed in your ruleset, you can 37 * add a new rule for the composed character that makes it equivalent to 38 * its decomposition sequence. 39 * <p> 40 * Note that <tt>ComposedCharIter</tt> iterates over a <em>static</em> table 41 * of the composed characters in Unicode. If you want to iterate over the 42 * composed characters in a particular string, use {@link Normalizer} instead. 43 * <p> 44 * When constructing a <tt>ComposedCharIter</tt> there is one 45 * optional feature that you can enable or disable: 46 * <ul> 47 * <li>{@link Normalizer#IGNORE_HANGUL} - Do not iterate over the Hangul 48 * characters and their corresponding Jamo decompositions. 49 * This option is off by default (<i>i.e.</i> Hangul processing is enabled) 50 * since the Unicode standard specifies that Hangul to Jamo 51 * is a canonical decomposition. 52 * </ul> 53 * <p> 54 * <tt>ComposedCharIter</tt> is currently based on version 2.1.8 of the 55 * <a href="http://www.unicode.org" target="unicode">Unicode Standard</a>. 56 * It will be updated as later versions of Unicode are released. 57 * @deprecated ICU 2.2 58 * @hide Only a subset of ICU is exposed in Android 59 */ 60 @Deprecated 61 ///CLOVER:OFF 62 public final class ComposedCharIter { 63 /** 64 * Constant that indicates the iteration has completed. 65 * {@link #next} returns this value when there are no more composed characters 66 * over which to iterate. 67 * @deprecated ICU 2.2 68 */ 69 @Deprecated 70 public static final char DONE = (char) Normalizer.DONE; 71 72 /** 73 * Construct a new <tt>ComposedCharIter</tt>. The iterator will return 74 * all Unicode characters with canonical decompositions, including Korean 75 * Hangul characters. 76 * @deprecated ICU 2.2 77 */ 78 @Deprecated ComposedCharIter()79 public ComposedCharIter() { 80 this(false, 0); 81 } 82 83 /** 84 * Constructs a non-default <tt>ComposedCharIter</tt> with optional behavior. 85 * <p> 86 * @param compat <tt>false</tt> for canonical decompositions only; 87 * <tt>true</tt> for both canonical and compatibility 88 * decompositions. 89 * 90 * @param options Optional decomposition features. None are supported, so this is ignored. 91 * @deprecated ICU 2.2 92 */ 93 @Deprecated ComposedCharIter(boolean compat, int options)94 public ComposedCharIter(boolean compat, int options) { 95 if(compat) { 96 n2impl = Norm2AllModes.getNFKCInstance().impl; 97 } else { 98 n2impl = Norm2AllModes.getNFCInstance().impl; 99 } 100 } 101 102 /** 103 * Determines whether there any precomposed Unicode characters not yet returned 104 * by {@link #next}. 105 * @deprecated ICU 2.2 106 */ 107 @Deprecated hasNext()108 public boolean hasNext() { 109 if (nextChar == Normalizer.DONE) { 110 findNextChar(); 111 } 112 return nextChar != Normalizer.DONE; 113 } 114 115 /** 116 * Returns the next precomposed Unicode character. 117 * Repeated calls to <tt>next</tt> return all of the precomposed characters defined 118 * by Unicode, in ascending order. After all precomposed characters have 119 * been returned, {@link #hasNext} will return <tt>false</tt> and further calls 120 * to <tt>next</tt> will return {@link #DONE}. 121 * @deprecated ICU 2.2 122 */ 123 @Deprecated next()124 public char next() { 125 if (nextChar == Normalizer.DONE) { 126 findNextChar(); 127 } 128 curChar = nextChar; 129 nextChar = Normalizer.DONE; 130 return (char) curChar; 131 } 132 133 /** 134 * Returns the Unicode decomposition of the current character. 135 * This method returns the decomposition of the precomposed character most 136 * recently returned by {@link #next}. The resulting decomposition is 137 * affected by the settings of the options passed to the constructor. 138 * @deprecated ICU 2.2 139 */ 140 @Deprecated decomposition()141 public String decomposition() { 142 // the decomposition buffer contains the decomposition of 143 // current char so just return it 144 if(decompBuf != null) { 145 return decompBuf; 146 } else { 147 return ""; 148 } 149 } 150 findNextChar()151 private void findNextChar() { 152 int c=curChar+1; 153 decompBuf = null; 154 for(;;) { 155 if(c < 0xFFFF) { 156 decompBuf = n2impl.getDecomposition(c); 157 if(decompBuf != null) { 158 // the curChar can be decomposed... so it is a composed char 159 // cache the result 160 break; 161 } 162 c++; 163 } else { 164 c=Normalizer.DONE; 165 break; 166 } 167 } 168 nextChar=c; 169 } 170 171 private final Normalizer2Impl n2impl; 172 private String decompBuf; 173 private int curChar = 0; 174 private int nextChar = Normalizer.DONE; 175 } 176