// BreakIterator.java - Iterate over logical breaks in text. /* Copyright (C) 1999 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.text; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * @author Tom Tromey * @date March 19, 1999 */ /* Written using "Java Class Libraries", 2nd edition, plus online * API docs for JDK 1.2 beta from http://www.javasoft.com. * Status: Believed complete and correct to 1.1. */ public abstract class BreakIterator implements Cloneable { // The value was discovered by writing a test program. public static final int DONE = -1; protected BreakIterator () { } public abstract int current (); public abstract int first (); public abstract int following (int pos); public static synchronized Locale[] getAvailableLocales () { // FIXME. return null; } private static BreakIterator getInstance (String type, Locale loc) { String className; try { ResourceBundle res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc); className = res.getString(type); } catch (MissingResourceException x) { return null; } try { Class k = Class.forName(className); return (BreakIterator) k.newInstance(); } catch (ClassNotFoundException x1) { return null; } catch (InstantiationException x2) { return null; } catch (IllegalAccessException x3) { return null; } } public static BreakIterator getCharacterInstance () { return getCharacterInstance (Locale.getDefault()); } public static BreakIterator getCharacterInstance (Locale loc) { BreakIterator r = getInstance ("CharacterIterator", loc); if (r == null) r = new gnu.gcj.text.CharacterBreakIterator (); return r; } public static BreakIterator getLineInstance () { return getLineInstance (Locale.getDefault()); } public static BreakIterator getLineInstance (Locale loc) { BreakIterator r = getInstance ("LineIterator", loc); if (r == null) r = new gnu.gcj.text.LineBreakIterator (); return r; } public static BreakIterator getSentenceInstance () { return getSentenceInstance (Locale.getDefault()); } public static BreakIterator getSentenceInstance (Locale loc) { BreakIterator r = getInstance ("SentenceIterator", loc); if (r == null) r = new gnu.gcj.text.SentenceBreakIterator (); return r; } public abstract CharacterIterator getText (); public static BreakIterator getWordInstance () { return getWordInstance (Locale.getDefault()); } public static BreakIterator getWordInstance (Locale loc) { BreakIterator r = getInstance ("WordIterator", loc); if (r == null) r = new gnu.gcj.text.WordBreakIterator (); return r; } public boolean isBoundary (int pos) { if (pos == 0) return true; return following (pos - 1) == pos; } public abstract int last (); public abstract int next (); public abstract int next (int n); public int preceding (int pos) { if (following (pos) == DONE) last (); while (previous () >= pos) ; return current (); } public abstract int previous (); public void setText (String newText) { setText (new StringCharacterIterator (newText)); } public abstract void setText (CharacterIterator newText); }