12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/* 4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Copyright (C) 1996-2012, International Business Machines Corporation and * 6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * others. All Rights Reserved. * 7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.text; 11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.CharacterIterator; 13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.StringCharacterIterator; 14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Locale; 15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.ULocale; 17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/** 19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icuenhanced java.text.BreakIterator}.{@icu _usage_} 20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>A class that locates boundaries in text. This class defines a protocol for 22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * objects that break up a piece of natural-language text according to a set 23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * of criteria. Instances or subclasses of BreakIterator can be provided, for 24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * example, to break a piece of text into words, sentences, or logical characters 25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * according to the conventions of some language or group of languages. 26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * We provide five built-in types of BreakIterator: 28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <ul><li>getTitleInstance() returns a BreakIterator that locates boundaries 29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * between title breaks. 30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>getSentenceInstance() returns a BreakIterator that locates boundaries 31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * between sentences. This is useful for triple-click selection, for example. 32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>getWordInstance() returns a BreakIterator that locates boundaries between 33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * words. This is useful for double-click selection or "find whole words" searches. 34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This type of BreakIterator makes sure there is a boundary position at the 35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * beginning and end of each legal word. (Numbers count as words, too.) Whitespace 36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * and punctuation are kept separate from real words. 37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>getLineInstance() returns a BreakIterator that locates positions where it is 38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * legal for a text editor to wrap lines. This is similar to word breaking, but 39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * not the same: punctuation and whitespace are generally kept with words (you don't 40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * want a line to start with whitespace, for example), and some special characters 41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * can force a position to be considered a line-break position or prevent a position 42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * from being a line-break position. 43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>getCharacterInstance() returns a BreakIterator that locates boundaries between 44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * logical characters. Because of the structure of the Unicode encoding, a logical 45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * character may be stored internally as more than one Unicode code point. (A with an 46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * umlaut may be stored as an a followed by a separate combining umlaut character, 47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * for example, but the user still thinks of it as one character.) This iterator allows 48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * various processes (especially text editors) to treat as characters the units of text 49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * that a user would think of as characters, rather than the units of text that the 50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * computer sees as "characters".</ul> 51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * BreakIterator's interface follows an "iterator" model (hence the name), meaning it 53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * has a concept of a "current position" and methods like first(), last(), next(), 54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * and previous() that update the current position. All BreakIterators uphold the 55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * following invariants: 56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <ul><li>The beginning and end of the text are always treated as boundary positions. 57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>The current position of the iterator is always a boundary position (random- 58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * access methods move the iterator to the nearest boundary position before or 59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * after the specified position, not _to_ the specified position). 60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>DONE is used as a flag to indicate when iteration has stopped. DONE is only 61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * returned when the current position is the end of the text and the user calls next(), 62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * or when the current position is the beginning of the text and the user calls 63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * previous(). 64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>Break positions are numbered by the positions of the characters that follow 65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * them. Thus, under normal circumstances, the position before the first character 66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * is 0, the position after the first character is 1, and the position after the 67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * last character is 1 plus the length of the string. 68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>The client can change the position of an iterator, or the text it analyzes, 69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * at will, but cannot change the behavior. If the user wants different behavior, he 70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * must instantiate a new iterator.</ul> 71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * BreakIterator accesses the text it analyzes through a CharacterIterator, which makes 73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * it possible to use BreakIterator to analyze text in any text-storage vehicle that 74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * provides a CharacterIterator interface. 75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <b>Note:</b> Some types of BreakIterator can take a long time to create, and 77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * instances of BreakIterator are not currently cached by the system. For 78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * optimal performance, keep instances of BreakIterator around as long as makes 79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * sense. For example, when word-wrapping a document, don't create and destroy a 80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * new BreakIterator for each line. Create one break iterator for the whole document 81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (or whatever stretch of text you're wrapping) and use it to do the whole job of 82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * wrapping the text. 83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <P> 85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <strong>Examples</strong>:<P> 86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Creating and using text boundaries 87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void main(String args[]) { 90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * if (args.length == 1) { 91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * String stringToExamine = args[0]; 92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * //print each word in order 93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * BreakIterator boundary = BreakIterator.getWordInstance(); 94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary.setText(stringToExamine); 95bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * printEachForward(boundary, stringToExamine); 96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * //print each sentence in reverse order 97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary = BreakIterator.getSentenceInstance(Locale.US); 98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary.setText(stringToExamine); 99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * printEachBackward(boundary, stringToExamine); 100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * printFirst(boundary, stringToExamine); 101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * printLast(boundary, stringToExamine); 102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print each element in order 108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void printEachForward(BreakIterator boundary, String source) { 111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int start = boundary.first(); 112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * for (int end = boundary.next(); 113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * end != BreakIterator.DONE; 114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * start = end, end = boundary.next()) { 115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * System.out.println(source.substring(start,end)); 116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print each element in reverse order 122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void printEachBackward(BreakIterator boundary, String source) { 125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int end = boundary.last(); 126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * for (int start = boundary.previous(); 127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * start != BreakIterator.DONE; 128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * end = start, start = boundary.previous()) { 129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * System.out.println(source.substring(start,end)); 130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print first element 136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void printFirst(BreakIterator boundary, String source) { 139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int start = boundary.first(); 140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int end = boundary.next(); 141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * System.out.println(source.substring(start,end)); 142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print last element 147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void printLast(BreakIterator boundary, String source) { 150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int end = boundary.last(); 151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int start = boundary.previous(); 152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * System.out.println(source.substring(start,end)); 153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print the element at a specified position 158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static void printAt(BreakIterator boundary, int pos, String source) { 161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int end = boundary.following(pos); 162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int start = boundary.previous(); 163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * System.out.println(source.substring(start,end)); 164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Find the next word 169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote> 170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre> 171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * public static int nextWordStartAfter(int pos, String text) { 172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * BreakIterator wb = BreakIterator.getWordInstance(); 173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * wb.setText(text); 174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int last = wb.following(pos); 175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * int current = wb.next(); 176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * while (current != BreakIterator.DONE) { 177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * for (int p = last; p < current; p++) { 178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * if (Character.isLetter(text.charAt(p))) 179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * return last; 180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * last = current; 182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * current = wb.next(); 183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * return BreakIterator.DONE; 185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * } 186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre> 187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (The iterator returned by BreakIterator.getWordInstance() is unique in that 188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the break positions it returns don't represent both the start and end of the 189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * thing being iterated over. That is, a sentence-break iterator returns breaks 190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * that each represent the end of one sentence and the beginning of the next. 191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * With the word-break iterator, the characters between two boundaries might be a 192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * word, or they might be the punctuation or whitespace between two words. The 193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * above code uses a simple heuristic to determine which boundary is the beginning 194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * of a word: If the characters between this boundary and the next boundary 195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * include at least one letter (this can be an alphabetical letter, a CJK ideograph, 196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * a Hangul syllable, a Kana character, etc.), then the text between this boundary 197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * and the next is a word; otherwise, it's the material between words.) 198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote> 199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see CharacterIterator 201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic abstract class BreakIterator implements Cloneable 206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert{ 207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Default constructor. There is no state that is carried by this abstract 210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * base class. 211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert protected BreakIterator() 214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Clone method. Creates another BreakIterator with the same behavior and 219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * current state as this one. 220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The clone. 221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Object clone() 224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert try { 226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return super.clone(); 227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert catch (CloneNotSupportedException e) { 229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ///CLOVER:OFF 230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert throw new IllegalStateException(); 231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ///CLOVER:ON 232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * DONE is returned by previous() and next() after all valid 237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries have been returned. 238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static final int DONE = -1; 241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return the first boundary position. This is always the beginning 244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * index of the text this iterator iterates over. For example, if 245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the iterator iterates over a whole string, this function will 246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * always return 0. This function also updates the iteration position 247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to point to the beginning of the text. 248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The character offset of the beginning of the stretch of text 249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * being broken. 250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int first(); 253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return the last boundary position. This is always the "past-the-end" 256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * index of the text this iterator iterates over. For example, if the 257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iterator iterates over a whole string (call it "text"), this function 258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * will always return text.length(). This function also updated the 259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position to point to the end of the text. 260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The character offset of the end of the stretch of text 261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * being broken. 262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int last(); 265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Advances the specified number of steps forward in the text (a negative 268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * number, therefore, advances backwards). If this causes the iterator 269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to advance off either end of the text, this function returns DONE; 270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * otherwise, this function returns the position of the appropriate 271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary. Calling this function is equivalent to calling next() or 272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * previous() n times. 273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param n The number of boundaries to advance over (if positive, moves 274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * forward; if negative, moves backwards). 275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The position of the boundary n boundaries from the current 276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position, or DONE if moving n boundaries causes the iterator 277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to advance off either end of the text. 278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int next(int n); 281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Advances the iterator forward one boundary. The current iteration 284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is updated to point to the next boundary position after the 285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * current position, and this is also the value that is returned. If 286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the current position is equal to the value returned by last(), or to 287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * DONE, this function returns DONE and sets the current position to 288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * DONE. 289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The position of the first boundary position following the 290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position. 291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int next(); 294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Advances the iterator backward one boundary. The current iteration 297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is updated to point to the last boundary position before 298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the current position, and this is also the value that is returned. If 299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the current position is equal to the value returned by first(), or to 300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * DONE, this function returns DONE and sets the current position to 301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * DONE. 302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The position of the last boundary position preceding the 303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position. 304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int previous(); 307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the iterator's current iteration position to be the first 310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary position following the specified position. (Whether the 311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * specified position is itself a boundary position or not doesn't 312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * matter-- this function always moves the iteration position to the 313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * first boundary after the specified position.) If the specified 314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is the past-the-end position, returns DONE. 315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param offset The character position to start searching from. 316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The position of the first boundary position following 317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * "offset" (whether or not "offset" itself is a boundary position), 318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * or DONE if "offset" is the past-the-end offset. 319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int following(int offset); 322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the iterator's current iteration position to be the last 325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundary position preceding the specified position. (Whether the 326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * specified position is itself a boundary position or not doesn't 327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * matter-- this function always moves the iteration position to the 328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * last boundary before the specified position.) If the specified 329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is the starting position, returns DONE. 330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param offset The character position to start searching from. 331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The position of the last boundary position preceding 332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * "offset" (whether of not "offset" itself is a boundary position), 333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * or DONE if "offset" is the starting offset of the iterator. 334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int preceding(int offset) { 337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // NOTE: This implementation is here solely because we can't add new 338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // abstract methods to an existing class. There is almost ALWAYS a 339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // better, faster way to do this. 340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int pos = following(offset); 341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert while (pos >= offset && pos != DONE) 342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert pos = previous(); 343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return pos; 344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return true if the specfied position is a boundary position. If the 348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * function returns true, the current iteration position is set to the 349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * specified position; if the function returns false, the current 350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position is set as though following() had been called. 351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param offset the offset to check. 352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return True if "offset" is a boundary position. 353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public boolean isBoundary(int offset) { 356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Again, this is the default implementation, which is provided solely because 357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // we couldn't add a new abstract method to an existing class. The real 358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // implementations will usually need to do a little more work. 359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (offset == 0) { 360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return true; 361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert else 363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return following(offset - 1) == offset; 364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return the iterator's current position. 368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return The iterator's current position. 369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract int current(); 372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a CharacterIterator over the text being analyzed. 375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * For at least some subclasses of BreakIterator, this is a reference 376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to the <b>actual iterator being used</b> by the BreakIterator, 377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * and therefore, this function's return value should be treated as 378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <tt>const</tt>. No guarantees are made about the current position 379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * of this iterator when it is returned. If you need to move that 380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position to examine the text, clone this function's return value first. 381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A CharacterIterator over the text being analyzed. 382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract CharacterIterator getText(); 385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the iterator to analyze a new piece of text. The new 388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * piece of text is passed in as a String, and the current 389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * iteration position is reset to the beginning of the string. 390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (The old text is dropped.) 391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param newText A String containing the text to analyze with 392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * this BreakIterator. 393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void setText(String newText) 396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert setText(new StringCharacterIterator(newText)); 398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the iterator to analyze a new piece of text. The 402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * BreakIterator is passed a CharacterIterator through which 403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * it will access the text itself. The current iteration 404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is reset to the CharacterIterator's start index. 405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (The old iterator is dropped.) 406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param newText A CharacterIterator referring to the text 407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to analyze with this BreakIterator (the iterator's current 408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * position is ignored, but its other state is significant). 409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public abstract void setText(CharacterIterator newText); 412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} 415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.4 416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static final int KIND_CHARACTER = 0; 418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} 420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.4 421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static final int KIND_WORD = 1; 423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} 425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.4 426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static final int KIND_LINE = 2; 428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} 430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.4 431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static final int KIND_SENTENCE = 3; 433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} 435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 2.4 436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static final int KIND_TITLE = 4; 438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates word boundaries. 441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function assumes that the text being analyzed is in the default 442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * locale's language. 443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return An instance of BreakIterator that locates word boundaries. 444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getWordInstance() 447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getWordInstance(Locale.getDefault()); 449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates word boundaries. 453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A locale specifying the language of the text to be 454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * analyzed. 455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return An instance of BreakIterator that locates word boundaries. 456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getWordInstance(Locale where) 459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where, KIND_WORD); 461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} Returns a new instance of BreakIterator that locates word boundaries. 465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A locale specifying the language of the text to be 466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * analyzed. 467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return An instance of BreakIterator that locates word boundaries. 468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.2 469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getWordInstance(ULocale where) 471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where.toLocale(), KIND_WORD); 473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates legal line- 477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * wrapping positions. This function assumes the text being broken 478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * is in the default locale's language. 479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates legal 480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * line-wrapping positions. 481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getLineInstance() 484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getLineInstance(Locale.getDefault()); 486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates legal line- 490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * wrapping positions. 491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being broken. 492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates legal 493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * line-wrapping positions. 494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getLineInstance(Locale where) 497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where, KIND_LINE); 499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} Returns a new instance of BreakIterator that locates legal line- 503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * wrapping positions. 504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being broken. 505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates legal 506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * line-wrapping positions. 507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.2 508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getLineInstance(ULocale where) 510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where.toLocale(), KIND_LINE); 512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates logical-character 516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. This function assumes that the text being analyzed is 517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * in the default locale's language. 518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates logical-character 519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. 520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getCharacterInstance() 523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getCharacterInstance(Locale.getDefault()); 525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates logical-character 529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. 530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being analyzed. 531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates logical-character 532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. 533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getCharacterInstance(Locale where) 536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where, KIND_CHARACTER); 538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} Returns a new instance of BreakIterator that locates logical-character 542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. 543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being analyzed. 544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates logical-character 545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * boundaries. 546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.2 547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getCharacterInstance(ULocale where) 549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where.toLocale(), KIND_CHARACTER); 551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates sentence boundaries. 555bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function assumes the text being analyzed is in the default locale's 556bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * language. 557bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates sentence boundaries. 558bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 559bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 560bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getSentenceInstance() 561bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 562bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getSentenceInstance(Locale.getDefault()); 563bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 564bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 565bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 566bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a new instance of BreakIterator that locates sentence boundaries. 567bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being analyzed. 568bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates sentence boundaries. 569bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0 570bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getSentenceInstance(Locale where) 572bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 573bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where, KIND_SENTENCE); 574bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 575bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 576bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} Returns a new instance of BreakIterator that locates sentence boundaries. 578bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param where A Locale specifying the language of the text being analyzed. 579bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return A new instance of BreakIterator that locates sentence boundaries. 580bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.2 581bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 582bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getSentenceInstance(ULocale where) 583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 584bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where.toLocale(), KIND_SENTENCE); 585bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 586bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 587bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 588bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Returns a new instance of BreakIterator that locates title boundaries. 589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * This function assumes the text being analyzed is in the default locale's 590bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * language. The iterator returned locates title boundaries as described for 591bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration, 592bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * please use a word boundary iterator. {@link #getWordInstance} 593bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return A new instance of BreakIterator that locates title boundaries. 594bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 2.0 595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 596bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static BreakIterator getTitleInstance() 597bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// { 598bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// return getTitleInstance(Locale.getDefault()); 599bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 600bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 601bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 602bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Returns a new instance of BreakIterator that locates title boundaries. 603bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * The iterator returned locates title boundaries as described for 604bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration, 605bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * please use Word Boundary iterator.{@link #getWordInstance} 606bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param where A Locale specifying the language of the text being analyzed. 607bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return A new instance of BreakIterator that locates title boundaries. 608bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 2.0 609bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 610bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static BreakIterator getTitleInstance(Locale where) 611bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// { 612bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// return getBreakInstance(where, KIND_TITLE); 613bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 614bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 615bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 616bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Returns a new instance of BreakIterator that locates title boundaries. 617bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * The iterator returned locates title boundaries as described for 618bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration, 619bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * please use Word Boundary iterator.{@link #getWordInstance} 620bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param where A Locale specifying the language of the text being analyzed. 621bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return A new instance of BreakIterator that locates title boundaries. 622bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 3.2 623bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//s */ 624bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static BreakIterator getTitleInstance(ULocale where) 625bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// { 626bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// return getBreakInstance(where.toLocale(), KIND_TITLE); 627bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 628bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 629bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 630bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Registers a new break iterator of the indicated kind, to use in the given 631bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * locale. Clones of the iterator will be returned if a request for a break iterator 632bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * of the given kind matches or falls back to this locale. 633bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param iter the BreakIterator instance to adopt. 634bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param locale the Locale for which this instance is to be registered 635bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param kind the type of iterator for which this instance is to be registered 636bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return a registry key that can be used to unregister this instance 637bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 2.4 638bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 639bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static Object registerInstance(BreakIterator iter, Locale locale, int kind) { 640bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base"); 641bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 642bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 643bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 644bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Registers a new break iterator of the indicated kind, to use in the given 645bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * locale. Clones of the iterator will be returned if a request for a break iterator 646bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * of the given kind matches or falls back to this locale. 647bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param iter the BreakIterator instance to adopt. 648bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param locale the Locale for which this instance is to be registered 649bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param kind the type of iterator for which this instance is to be registered 650bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return a registry key that can be used to unregister this instance 651bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 3.2 652bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 653bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static Object registerInstance(BreakIterator iter, ULocale locale, int kind) { 654bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base"); 655bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 656bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 657bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 658bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Unregisters a previously-registered BreakIterator using the key returned 659bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * from the register call. Key becomes invalid after this call and should not be used 660bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * again. 661bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param key the registry key returned by a previous call to registerInstance 662bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return true if the iterator for the key was successfully unregistered 663bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @stable ICU 2.4 664bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 665bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public static boolean unregister(Object key) { 666bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base"); 667bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 668bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 669bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // end of registration 670bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 671bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 672bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a particular kind of BreakIterator for a locale. 673bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Avoids writing a switch statement with getXYZInstance(where) calls. 674bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @internal 675bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @deprecated This API is ICU internal only. 676bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 677bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static BreakIterator getBreakInstance(ULocale where, int kind) { 678bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return getBreakInstance(where.toLocale(), KIND_SENTENCE); 679bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 680bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 681bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static BreakIterator getBreakInstance(Locale where, int kind) { 682bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert java.text.BreakIterator br = null; 683bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch(kind) { 684bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case KIND_CHARACTER: br = java.text.BreakIterator.getCharacterInstance(where); break; 685bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case KIND_WORD: br = java.text.BreakIterator.getWordInstance(where); break; 686bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case KIND_LINE: br = java.text.BreakIterator.getLineInstance(where); break; 687bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case KIND_SENTENCE: br = java.text.BreakIterator.getSentenceInstance(where); break; 688bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// case KIND_TITLE: throw new UnsupportedOperationException("Title break is not supported by com.ibm.icu.base"); 689bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 690bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return new BreakIteratorHandle(br); 691bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 692bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 693bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 694bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns a list of locales for which BreakIterators can be used. 695bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return An array of Locales. All of the locales in the array can 696bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * be used when creating a BreakIterator. 697bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.6 698bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 699bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static synchronized Locale[] getAvailableLocales() { 700bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return java.text.BreakIterator.getAvailableLocales(); 701bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 702bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 703bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 704bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icu} Returns a list of locales for which BreakIterators can be used. 705bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return An array of Locales. All of the locales in the array can 706bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * be used when creating a BreakIterator. 707bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @draft ICU 3.2 (retain) 708bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @provisional This API might change or be removed in a future release. 709bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 710bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static synchronized ULocale[] getAvailableULocales() { 711bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Locale[] locales = java.text.BreakIterator.getAvailableLocales(); 712bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ULocale[] ulocales = new ULocale[locales.length]; 713bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < locales.length; ++i) { 714bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ulocales[i] = ULocale.forLocale(locales[i]); 715bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 716bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return ulocales; 717bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 718bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 719bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// /** 720bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * {@icu} Returns the locale that was used to create this object, or null. 721bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * This may may differ from the locale requested at the time of 722bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * this object's creation. For example, if an object is created 723bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * for locale <tt>en_US_CALIFORNIA</tt>, the actual data may be 724bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * drawn from <tt>en</tt> (the <i>actual</i> locale), and 725bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * <tt>en_US</tt> may be the most specific locale that exists (the 726bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * <i>valid</i> locale). 727bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * 728bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * <p>Note: The <i>actual</i> locale is returned correctly, but the <i>valid</i> 729bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * locale is not, in most cases. 730bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @param type type of information requested, either {@link 731bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * com.ibm.icu.util.ULocale#VALID_LOCALE} or {@link 732bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * com.ibm.icu.util.ULocale#ACTUAL_LOCALE}. 733bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @return the information specified by <i>type</i>, or null if 734bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * this object was not constructed from locale data. 735bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @see com.ibm.icu.util.ULocale 736bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @see com.ibm.icu.util.ULocale#VALID_LOCALE 737bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @see com.ibm.icu.util.ULocale#ACTUAL_LOCALE 738bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @draft ICU 2.8 (retain) 739bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// * @provisional This API might change or be removed in a future release. 740bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// */ 741bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// public final ULocale getLocale(ULocale.Type type) { 742bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base"); 743bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } 744bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 745bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // forwarding implementation class 746bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert static final class BreakIteratorHandle extends BreakIterator { 747bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 748bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @internal 749bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 750bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final java.text.BreakIterator breakIterator; 751bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 752bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 753bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @internal 754bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param delegate the BreakIterator to which to delegate 755bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 756bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public BreakIteratorHandle(java.text.BreakIterator delegate) { 757bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.breakIterator = delegate; 758bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 759bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 760bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int first() { 761bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.first(); 762bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 763bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int last() { 764bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.last(); 765bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 766bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int next(int n) { 767bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.next(n); 768bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 769bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int next() { 770bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.next(); 771bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 772bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int previous() { 773bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.previous(); 774bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 775bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int following(int offset) { 776bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.following(offset); 777bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 778bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int preceding(int offset) { 779bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.preceding(offset); 780bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 781bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public boolean isBoundary(int offset) { 782bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.isBoundary(offset); 783bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 784bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int current() { 785bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.current(); 786bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 787bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public CharacterIterator getText() { 788bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.getText(); 789bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 790bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void setText(CharacterIterator newText) { 791bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert breakIterator.setText(newText); 792bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 793bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 794bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 795bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return a string suitable for debugging. 796bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return a string suitable for debugging 797bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.4.3 798bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 799bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public String toString() { 800bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.toString(); 801bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 802bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 803bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 804bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return a clone of this BreakIterator. 805bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return a clone of this BreakIterator 806bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.4.3 807bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 808bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Object clone() { 809bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return new BreakIteratorHandle((java.text.BreakIterator)breakIterator.clone()); 810bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 811bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 812bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 813bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return true if rhs is a BreakIterator with the same break behavior as this. 814bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return true if rhs equals this 815bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.4.3 816bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 817bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public boolean equals(Object rhs) { 818bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert try { 819bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.equals(((BreakIteratorHandle)rhs).breakIterator); 820bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 821bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert catch (Exception e) { 822bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return false; 823bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 824bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 825bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 826bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 827bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Return a hashCode. 828bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @return a hashCode 829bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 3.4.3 830bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 831bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int hashCode() { 832bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return breakIterator.hashCode(); 833bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 834bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 835bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert} 836