OSDN Git Service

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