OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / libjava / java / text / BreakIterator.java
1 // BreakIterator.java - Iterate over logical breaks in text.
2
3 /* Copyright (C) 1999  Cygnus Solutions
4
5    This file is part of libgcj.
6
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
9 details.  */
10
11 package java.text;
12
13 import java.io.Serializable;
14 import java.util.Locale;
15 import java.util.MissingResourceException;
16 import java.util.ResourceBundle;
17
18 /**
19  * @author Tom Tromey <tromey@cygnus.com>
20  * @date March 19, 1999
21  */
22 /* Written using "Java Class Libraries", 2nd edition, plus online
23  * API docs for JDK 1.2 beta from http://www.javasoft.com.
24  * Status:  Believed complete and correct to 1.1.
25  */
26
27 public abstract class BreakIterator implements Cloneable, Serializable
28 {
29   // The value was discovered by writing a test program.
30   public static final int DONE = -1;
31
32   protected BreakIterator ()
33   {
34   }
35
36   public abstract int current ();
37   public abstract int first ();
38   public abstract int following (int pos);
39
40   public static synchronized Locale[] getAvailableLocales ()
41   {
42     // FIXME.
43     return null;
44   }
45
46   private static BreakIterator getInstance (String type, Locale loc)
47   {
48     String className;
49     try
50       {
51         ResourceBundle res
52           = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
53         className = res.getString(type);
54       }
55     catch (MissingResourceException x)
56       {
57         return null;
58       }
59     try
60       {
61         Class k = Class.forName(className);
62         return (BreakIterator) k.newInstance();
63       }
64     catch (ClassNotFoundException x1)
65       {
66         return null;
67       }
68     catch (InstantiationException x2)
69       {
70         return null;
71       }
72     catch (IllegalAccessException x3)
73       {
74         return null;
75       }
76   }
77
78   public static BreakIterator getCharacterInstance ()
79   {
80     return getCharacterInstance (Locale.getDefault());
81   }
82
83   public static BreakIterator getCharacterInstance (Locale loc)
84   {
85     BreakIterator r = getInstance ("CharacterIterator", loc);
86     if (r == null)
87       r = new gnu.gcj.text.CharacterBreakIterator ();
88     return r;
89   }
90
91   public static BreakIterator getLineInstance ()
92   {
93     return getLineInstance (Locale.getDefault());
94   }
95
96   public static BreakIterator getLineInstance (Locale loc)
97   {
98     BreakIterator r = getInstance ("LineIterator", loc);
99     if (r == null)
100       r = new gnu.gcj.text.LineBreakIterator ();
101     return r;
102   }
103
104   public static BreakIterator getSentenceInstance ()
105   {
106     return getSentenceInstance (Locale.getDefault());
107   }
108
109   public static BreakIterator getSentenceInstance (Locale loc)
110   {
111     BreakIterator r = getInstance ("SentenceIterator", loc);
112     if (r == null)
113       r = new gnu.gcj.text.SentenceBreakIterator ();
114     return r;
115   }
116
117   public abstract CharacterIterator getText ();
118
119   public static BreakIterator getWordInstance ()
120   {
121     return getWordInstance (Locale.getDefault());
122   }
123
124   public static BreakIterator getWordInstance (Locale loc)
125   {
126     BreakIterator r = getInstance ("WordIterator", loc);
127     if (r == null)
128       r = new gnu.gcj.text.WordBreakIterator ();
129     return r;
130   }
131
132   public boolean isBoundary (int pos)
133   {
134     if (pos == 0)
135       return true;
136     return following (pos - 1) == pos;
137   }
138
139   public abstract int last ();
140   public abstract int next ();
141   public abstract int next (int n);
142
143   public int preceding (int pos)
144   {
145     if (following (pos) == DONE)
146       last ();
147     while (previous () >= pos)
148       ;
149     return current ();
150   }
151
152   public abstract int previous ();
153
154   public void setText (String newText)
155   {
156     setText (new StringCharacterIterator (newText));
157   }
158
159   public abstract void setText (CharacterIterator newText);
160 }