Initial revision
[gcc.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 }