| // 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 <tromey@cygnus.com> |
| * @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); |
| } |