1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20c27a366a89e470690e99374b15270e7b9169ade1Elliott Hughesimport libcore.icu.NativeBreakIterator; 219672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 23c27a366a89e470690e99374b15270e7b9169ade1Elliott Hughes * Default implementation of BreakIterator. Wraps libcore.icu.NativeBreakIterator. 249672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes * We need this because BreakIterator.isBoundary and BreakIterator.preceding are non-abstract, 259672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes * and we don't have Java implementations of those methods (other than the current ones, which 269672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes * forward to the wrapped NativeBreakIterator). 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass RuleBasedBreakIterator extends BreakIterator { 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 309672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes RuleBasedBreakIterator(NativeBreakIterator iterator) { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(iterator); 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int current() { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.current(); 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int first() { 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.first(); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int following(int offset) { 43db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes checkOffset(offset); 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.following(offset); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes private void checkOffset(int offset) { 48db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes if (!wrapped.hasText()) { 49db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes throw new IllegalArgumentException("BreakIterator has no text"); 50db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CharacterIterator it = wrapped.getText(); 52b78750f753a3496a694753127c3cc3d2cd80566fGilles Debunne if (offset < it.getBeginIndex() || offset > it.getEndIndex()) { 53b78750f753a3496a694753127c3cc3d2cd80566fGilles Debunne String message = "Valid range is [" + it.getBeginIndex() + " " + it.getEndIndex() + "]"; 54b78750f753a3496a694753127c3cc3d2cd80566fGilles Debunne throw new IllegalArgumentException(message); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public CharacterIterator getText() { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.getText(); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int last() { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.last(); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int next() { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.next(); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int next(int n) { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.next(n); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int previous() { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.previous(); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public void setText(CharacterIterator newText) { 79db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes if (newText == null) { 80db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes throw new NullPointerException("newText == null"); 81db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newText.current(); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project wrapped.setText(newText); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 86ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public boolean isBoundary(int offset) { 87db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes checkOffset(offset); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.isBoundary(offset); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int preceding(int offset) { 92db1a2e3641d679faf34ce6532c487ab0236550a1Elliott Hughes checkOffset(offset); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.preceding(offset); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public boolean equals(Object o) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(o instanceof RuleBasedBreakIterator)) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.equals(((RuleBasedBreakIterator) o).wrapped); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public String toString() { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.toString(); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 107ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public int hashCode() { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrapped.hashCode(); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111ae704b984c10a63883cc366e823d53902d6ac7a9Elliott Hughes @Override public Object clone() { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project RuleBasedBreakIterator cloned = (RuleBasedBreakIterator) super.clone(); 1139672b4887f2972c1b7c5f3d1a6cf882deccf857fElliott Hughes cloned.wrapped = (NativeBreakIterator) wrapped.clone(); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return cloned; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 117