History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/awt/im (18 of 18352 files). Show all

Unified · Split

18 files
  1. java/pkg/java/awt/im/InputContext.class +0 −0
  2. java/pkg/java/awt/im/InputContext.java +339 −0
  3. java/pkg/java/awt/im/InputMethodHighlight.class +0 −0
  4. java/pkg/java/awt/im/InputMethodHighlight.java +195 −0
  5. java/pkg/java/awt/im/InputMethodRequests.class +0 −0
  6. java/pkg/java/awt/im/InputMethodRequests.java +208 −0
  7. java/pkg/java/awt/im/InputSubset.class +0 −0
  8. java/pkg/java/awt/im/InputSubset.java +114 −0
  9. java/pkg/java/awt/im/mkfile +15 −0
  10. java/pkg/java/awt/im/package.html +69 −0
  11. java/pkg/java/awt/im/spi/InputMethod.class +0 −0
  12. java/pkg/java/awt/im/spi/InputMethod.java +382 −0
  13. java/pkg/java/awt/im/spi/InputMethodContext.class +0 −0
  14. java/pkg/java/awt/im/spi/InputMethodContext.java +140 −0
  15. java/pkg/java/awt/im/spi/InputMethodDescriptor.class +0 −0
  16. java/pkg/java/awt/im/spi/InputMethodDescriptor.java +124 −0
  17. java/pkg/java/awt/im/spi/mkfile +10 −0
  18. java/pkg/java/awt/im/spi/package.html +126 −0
java/pkg/java/awt/im/InputContext.class+0−0

Binary file not shown.

java/pkg/java/awt/im/InputContext.java+339−0
@@ -0,0 +1,339 @@
1+/*
2+ * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im;
27+
28+import java.awt.Component;
29+import java.util.Locale;
30+import java.awt.AWTEvent;
31+import java.beans.Transient;
32+import java.lang.Character.Subset;
33+import sun.awt.im.InputMethodContext;
34+
35+/**
36+ * Provides methods to control text input facilities such as input
37+ * methods and keyboard layouts.
38+ * Two methods handle both input methods and keyboard layouts: selectInputMethod
39+ * lets a client component select an input method or keyboard layout by locale,
40+ * getLocale lets a client component obtain the locale of the current input method
41+ * or keyboard layout.
42+ * The other methods more specifically support interaction with input methods:
43+ * They let client components control the behavior of input methods, and
44+ * dispatch events from the client component to the input method.
45+ *
46+ * <p>
47+ * By default, one InputContext instance is created per Window instance,
48+ * and this input context is shared by all components within the window's
49+ * container hierarchy. However, this means that only one text input
50+ * operation is possible at any one time within a window, and that the
51+ * text needs to be committed when moving the focus from one text component
52+ * to another. If this is not desired, text components can create their
53+ * own input context instances.
54+ *
55+ * <p>
56+ * The Java Platform supports input methods that have been developed in the Java
57+ * programming language, using the interfaces in the {@link java.awt.im.spi} package,
58+ * and installed into a Java SE Runtime Environment as extensions. Implementations
59+ * may also support using the native input methods of the platforms they run on;
60+ * however, not all platforms and locales provide input methods. Keyboard layouts
61+ * are provided by the host platform.
62+ *
63+ * <p>
64+ * Input methods are <em>unavailable</em> if (a) no input method written
65+ * in the Java programming language has been installed and (b) the Java Platform implementation
66+ * or the underlying platform does not support native input methods. In this case,
67+ * input contexts can still be created and used; their behavior is specified with
68+ * the individual methods below.
69+ *
70+ * @see java.awt.Component#getInputContext
71+ * @see java.awt.Component#enableInputMethods
72+ * @author JavaSoft Asia/Pacific
73+ * @since 1.2
74+ */
75+
76+public class InputContext {
77+
78+ /**
79+ * Constructs an InputContext.
80+ * This method is protected so clients cannot instantiate
81+ * InputContext directly. Input contexts are obtained by
82+ * calling {@link #getInstance}.
83+ */
84+ protected InputContext() {
85+ // real implementation is in sun.awt.im.InputContext
86+ }
87+
88+ /**
89+ * Returns a new InputContext instance.
90+ */
91+ public static InputContext getInstance() {
92+ return new sun.awt.im.InputMethodContext();
93+ }
94+
95+ /**
96+ * Attempts to select an input method or keyboard layout that
97+ * supports the given locale, and returns a value indicating whether such
98+ * an input method or keyboard layout has been successfully selected. The
99+ * following steps are taken until an input method has been selected:
100+ *
101+ * <p>
102+ * <ul>
103+ * <li>
104+ * If the currently selected input method or keyboard layout supports the
105+ * requested locale, it remains selected.</li>
106+ *
107+ * <li>
108+ * If there is no input method or keyboard layout available that supports
109+ * the requested locale, the current input method or keyboard layout remains
110+ * selected.</li>
111+ *
112+ * <li>
113+ * If the user has previously selected an input method or keyboard layout
114+ * for the requested locale from the user interface, then the most recently
115+ * selected such input method or keyboard layout is reselected.</li>
116+ *
117+ * <li>
118+ * Otherwise, an input method or keyboard layout that supports the requested
119+ * locale is selected in an implementation dependent way.</li>
120+ *
121+ * <p>
122+ * </ul>
123+ * Before switching away from an input method, any currently uncommitted text
124+ * is committed. If no input method or keyboard layout supporting the requested
125+ * locale is available, then false is returned.
126+ *
127+ * <p>
128+ * Not all host operating systems provide API to determine the locale of
129+ * the currently selected native input method or keyboard layout, and to
130+ * select a native input method or keyboard layout by locale.
131+ * For host operating systems that don't provide such API,
132+ * <code>selectInputMethod</code> assumes that native input methods or
133+ * keyboard layouts provided by the host operating system support only the
134+ * system's default locale.
135+ *
136+ * <p>
137+ * A text editing component may call this method, for example, when
138+ * the user changes the insertion point, so that the user can
139+ * immediately continue typing in the language of the surrounding text.
140+ *
141+ * @param locale The desired new locale.
142+ * @return true if the input method or keyboard layout that's active after
143+ * this call supports the desired locale.
144+ * @exception NullPointerException if <code>locale</code> is null
145+ */
146+ public boolean selectInputMethod(Locale locale) {
147+ // real implementation is in sun.awt.im.InputContext
148+ return false;
149+ }
150+
151+ /**
152+ * Returns the current locale of the current input method or keyboard
153+ * layout.
154+ * Returns null if the input context does not have a current input method
155+ * or keyboard layout or if the current input method's
156+ * {@link java.awt.im.spi.InputMethod#getLocale()} method returns null.
157+ *
158+ * <p>
159+ * Not all host operating systems provide API to determine the locale of
160+ * the currently selected native input method or keyboard layout.
161+ * For host operating systems that don't provide such API,
162+ * <code>getLocale</code> assumes that the current locale of all native
163+ * input methods or keyboard layouts provided by the host operating system
164+ * is the system's default locale.
165+ *
166+ * @return the current locale of the current input method or keyboard layout
167+ * @since 1.3
168+ */
169+ public Locale getLocale() {
170+ // real implementation is in sun.awt.im.InputContext
171+ return null;
172+ }
173+
174+ /**
175+ * Sets the subsets of the Unicode character set that input methods of this input
176+ * context should be allowed to input. Null may be passed in to
177+ * indicate that all characters are allowed. The initial value
178+ * is null. The setting applies to the current input method as well
179+ * as input methods selected after this call is made. However,
180+ * applications cannot rely on this call having the desired effect,
181+ * since this setting cannot be passed on to all host input methods -
182+ * applications still need to apply their own character validation.
183+ * If no input methods are available, then this method has no effect.
184+ *
185+ * @param subsets The subsets of the Unicode character set from which characters may be input
186+ */
187+ public void setCharacterSubsets(Subset[] subsets) {
188+ // real implementation is in sun.awt.im.InputContext
189+ }
190+
191+ /**
192+ * Enables or disables the current input method for composition,
193+ * depending on the value of the parameter <code>enable</code>.
194+ * <p>
195+ * An input method that is enabled for composition interprets incoming
196+ * events for both composition and control purposes, while a
197+ * disabled input method does not interpret events for composition.
198+ * Note however that events are passed on to the input method regardless
199+ * whether it is enabled or not, and that an input method that is disabled
200+ * for composition may still interpret events for control purposes,
201+ * including to enable or disable itself for composition.
202+ * <p>
203+ * For input methods provided by host operating systems, it is not always possible to
204+ * determine whether this operation is supported. For example, an input method may enable
205+ * composition only for some locales, and do nothing for other locales. For such input
206+ * methods, it is possible that this method does not throw
207+ * {@link java.lang.UnsupportedOperationException UnsupportedOperationException},
208+ * but also does not affect whether composition is enabled.
209+ *
210+ * @param enable whether to enable the current input method for composition
211+ * @throws UnsupportedOperationException if there is no current input
212+ * method available or the current input method does not support
213+ * the enabling/disabling operation
214+ * @see #isCompositionEnabled
215+ * @since 1.3
216+ */
217+ public void setCompositionEnabled(boolean enable) {
218+ // real implementation is in sun.awt.im.InputContext
219+ }
220+
221+ /**
222+ * Determines whether the current input method is enabled for composition.
223+ * An input method that is enabled for composition interprets incoming
224+ * events for both composition and control purposes, while a
225+ * disabled input method does not interpret events for composition.
226+ *
227+ * @return <code>true</code> if the current input method is enabled for
228+ * composition; <code>false</code> otherwise
229+ * @throws UnsupportedOperationException if there is no current input
230+ * method available or the current input method does not support
231+ * checking whether it is enabled for composition
232+ * @see #setCompositionEnabled
233+ * @since 1.3
234+ */
235+ @Transient
236+ public boolean isCompositionEnabled() {
237+ // real implementation is in sun.awt.im.InputContext
238+ return false;
239+ }
240+
241+ /**
242+ * Asks the current input method to reconvert text from the
243+ * current client component. The input method obtains the text to
244+ * be reconverted from the client component using the
245+ * {@link InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
246+ * method. The other <code>InputMethodRequests</code> methods
247+ * must be prepared to deal with further information requests by
248+ * the input method. The composed and/or committed text will be
249+ * sent to the client component as a sequence of
250+ * <code>InputMethodEvent</code>s. If the input method cannot
251+ * reconvert the given text, the text is returned as committed
252+ * text in an <code>InputMethodEvent</code>.
253+ *
254+ * @throws UnsupportedOperationException if there is no current input
255+ * method available or the current input method does not support
256+ * the reconversion operation.
257+ *
258+ * @since 1.3
259+ */
260+ public void reconvert() {
261+ // real implementation is in sun.awt.im.InputContext
262+ }
263+
264+ /**
265+ * Dispatches an event to the active input method. Called by AWT.
266+ * If no input method is available, then the event will never be consumed.
267+ *
268+ * @param event The event
269+ * @exception NullPointerException if <code>event</code> is null
270+ */
271+ public void dispatchEvent(AWTEvent event) {
272+ // real implementation is in sun.awt.im.InputContext
273+ }
274+
275+ /**
276+ * Notifies the input context that a client component has been
277+ * removed from its containment hierarchy, or that input method
278+ * support has been disabled for the component. This method is
279+ * usually called from the client component's
280+ * {@link java.awt.Component#removeNotify() Component.removeNotify}
281+ * method. Potentially pending input from input methods
282+ * for this component is discarded.
283+ * If no input methods are available, then this method has no effect.
284+ *
285+ * @param client Client component
286+ * @exception NullPointerException if <code>client</code> is null
287+ */
288+ public void removeNotify(Component client) {
289+ // real implementation is in sun.awt.im.InputContext
290+ }
291+
292+ /**
293+ * Ends any input composition that may currently be going on in this
294+ * context. Depending on the platform and possibly user preferences,
295+ * this may commit or delete uncommitted text. Any changes to the text
296+ * are communicated to the active component using an input method event.
297+ * If no input methods are available, then this method has no effect.
298+ *
299+ * <p>
300+ * A text editing component may call this in a variety of situations,
301+ * for example, when the user moves the insertion point within the text
302+ * (but outside the composed text), or when the component's text is
303+ * saved to a file or copied to the clipboard.
304+ *
305+ */
306+ public void endComposition() {
307+ // real implementation is in sun.awt.im.InputContext
308+ }
309+
310+ /**
311+ * Releases the resources used by this input context.
312+ * Called by AWT for the default input context of each Window.
313+ * If no input methods are available, then this method
314+ * has no effect.
315+ */
316+ public void dispose() {
317+ // real implementation is in sun.awt.im.InputContext
318+ }
319+
320+ /**
321+ * Returns a control object from the current input method, or null. A
322+ * control object provides methods that control the behavior of the
323+ * input method or obtain information from the input method. The type
324+ * of the object is an input method specific class. Clients have to
325+ * compare the result against known input method control object
326+ * classes and cast to the appropriate class to invoke the methods
327+ * provided.
328+ * <p>
329+ * If no input methods are available or the current input method does
330+ * not provide an input method control object, then null is returned.
331+ *
332+ * @return A control object from the current input method, or null.
333+ */
334+ public Object getInputMethodControlObject() {
335+ // real implementation is in sun.awt.im.InputContext
336+ return null;
337+ }
338+
339+}
java/pkg/java/awt/im/InputMethodHighlight.class+0−0

Binary file not shown.

java/pkg/java/awt/im/InputMethodHighlight.java+195−0
@@ -0,0 +1,195 @@
1+/*
2+ * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im;
27+
28+import java.awt.font.TextAttribute;
29+import java.util.Map;
30+
31+/**
32+* An InputMethodHighlight is used to describe the highlight
33+* attributes of text being composed.
34+* The description can be at two levels:
35+* at the abstract level it specifies the conversion state and whether the
36+* text is selected; at the concrete level it specifies style attributes used
37+* to render the highlight.
38+* An InputMethodHighlight must provide the description at the
39+* abstract level; it may or may not provide the description at the concrete
40+* level.
41+* If no concrete style is provided, a renderer should use
42+* {@link java.awt.Toolkit#mapInputMethodHighlight} to map to a concrete style.
43+* <p>
44+* The abstract description consists of three fields: <code>selected</code>,
45+* <code>state</code>, and <code>variation</code>.
46+* <code>selected</code> indicates whether the text range is the one that the
47+* input method is currently working on, for example, the segment for which
48+* conversion candidates are currently shown in a menu.
49+* <code>state</code> represents the conversion state. State values are defined
50+* by the input method framework and should be distinguished in all
51+* mappings from abstract to concrete styles. Currently defined state values
52+* are raw (unconverted) and converted.
53+* These state values are recommended for use before and after the
54+* main conversion step of text composition, say, before and after kana->kanji
55+* or pinyin->hanzi conversion.
56+* The <code>variation</code> field allows input methods to express additional
57+* information about the conversion results.
58+* <p>
59+*
60+* InputMethodHighlight instances are typically used as attribute values
61+* returned from AttributedCharacterIterator for the INPUT_METHOD_HIGHLIGHT
62+* attribute. They may be wrapped into {@link java.text.Annotation Annotation}
63+* instances to indicate separate text segments.
64+*
65+* @see java.text.AttributedCharacterIterator
66+* @since 1.2
67+*/
68+
69+public class InputMethodHighlight {
70+
71+ /**
72+ * Constant for the raw text state.
73+ */
74+ public final static int RAW_TEXT = 0;
75+
76+ /**
77+ * Constant for the converted text state.
78+ */
79+ public final static int CONVERTED_TEXT = 1;
80+
81+
82+ /**
83+ * Constant for the default highlight for unselected raw text.
84+ */
85+ public final static InputMethodHighlight UNSELECTED_RAW_TEXT_HIGHLIGHT =
86+ new InputMethodHighlight(false, RAW_TEXT);
87+
88+ /**
89+ * Constant for the default highlight for selected raw text.
90+ */
91+ public final static InputMethodHighlight SELECTED_RAW_TEXT_HIGHLIGHT =
92+ new InputMethodHighlight(true, RAW_TEXT);
93+
94+ /**
95+ * Constant for the default highlight for unselected converted text.
96+ */
97+ public final static InputMethodHighlight UNSELECTED_CONVERTED_TEXT_HIGHLIGHT =
98+ new InputMethodHighlight(false, CONVERTED_TEXT);
99+
100+ /**
101+ * Constant for the default highlight for selected converted text.
102+ */
103+ public final static InputMethodHighlight SELECTED_CONVERTED_TEXT_HIGHLIGHT =
104+ new InputMethodHighlight(true, CONVERTED_TEXT);
105+
106+
107+ /**
108+ * Constructs an input method highlight record.
109+ * The variation is set to 0, the style to null.
110+ * @param selected Whether the text range is selected
111+ * @param state The conversion state for the text range - RAW_TEXT or CONVERTED_TEXT
112+ * @see InputMethodHighlight#RAW_TEXT
113+ * @see InputMethodHighlight#CONVERTED_TEXT
114+ * @exception IllegalArgumentException if a state other than RAW_TEXT or CONVERTED_TEXT is given
115+ */
116+ public InputMethodHighlight(boolean selected, int state) {
117+ this(selected, state, 0, null);
118+ }
119+
120+ /**
121+ * Constructs an input method highlight record.
122+ * The style is set to null.
123+ * @param selected Whether the text range is selected
124+ * @param state The conversion state for the text range - RAW_TEXT or CONVERTED_TEXT
125+ * @param variation The style variation for the text range
126+ * @see InputMethodHighlight#RAW_TEXT
127+ * @see InputMethodHighlight#CONVERTED_TEXT
128+ * @exception IllegalArgumentException if a state other than RAW_TEXT or CONVERTED_TEXT is given
129+ */
130+ public InputMethodHighlight(boolean selected, int state, int variation) {
131+ this(selected, state, variation, null);
132+ }
133+
134+ /**
135+ * Constructs an input method highlight record.
136+ * The style attributes map provided must be unmodifiable.
137+ * @param selected whether the text range is selected
138+ * @param state the conversion state for the text range - RAW_TEXT or CONVERTED_TEXT
139+ * @param variation the variation for the text range
140+ * @param style the rendering style attributes for the text range, or null
141+ * @see InputMethodHighlight#RAW_TEXT
142+ * @see InputMethodHighlight#CONVERTED_TEXT
143+ * @exception IllegalArgumentException if a state other than RAW_TEXT or CONVERTED_TEXT is given
144+ * @since 1.3
145+ */
146+ public InputMethodHighlight(boolean selected, int state, int variation,
147+ Map<TextAttribute,?> style)
148+ {
149+ this.selected = selected;
150+ if (!(state == RAW_TEXT || state == CONVERTED_TEXT)) {
151+ throw new IllegalArgumentException("unknown input method highlight state");
152+ }
153+ this.state = state;
154+ this.variation = variation;
155+ this.style = style;
156+ }
157+
158+ /**
159+ * Returns whether the text range is selected.
160+ */
161+ public boolean isSelected() {
162+ return selected;
163+ }
164+
165+ /**
166+ * Returns the conversion state of the text range.
167+ * @return The conversion state for the text range - RAW_TEXT or CONVERTED_TEXT.
168+ * @see InputMethodHighlight#RAW_TEXT
169+ * @see InputMethodHighlight#CONVERTED_TEXT
170+ */
171+ public int getState() {
172+ return state;
173+ }
174+
175+ /**
176+ * Returns the variation of the text range.
177+ */
178+ public int getVariation() {
179+ return variation;
180+ }
181+
182+ /**
183+ * Returns the rendering style attributes for the text range, or null.
184+ * @since 1.3
185+ */
186+ public Map<TextAttribute,?> getStyle() {
187+ return style;
188+ }
189+
190+ private boolean selected;
191+ private int state;
192+ private int variation;
193+ private Map style;
194+
195+};
java/pkg/java/awt/im/InputMethodRequests.class+0−0

Binary file not shown.

java/pkg/java/awt/im/InputMethodRequests.java+208−0
@@ -0,0 +1,208 @@
1+/*
2+ * Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im;
27+
28+import java.awt.Rectangle;
29+import java.awt.font.TextHitInfo;
30+import java.text.AttributedCharacterIterator;
31+import java.text.AttributedCharacterIterator.Attribute;
32+
33+/**
34+ * InputMethodRequests defines the requests that a text editing component
35+ * has to handle in order to work with input methods. The component
36+ * can implement this interface itself or use a separate object that
37+ * implements it. The object implementing this interface must be returned
38+ * from the component's getInputMethodRequests method.
39+ *
40+ * <p>
41+ * The text editing component also has to provide an input method event
42+ * listener.
43+ *
44+ * <p>
45+ * The interface is designed to support one of two input user interfaces:
46+ * <ul>
47+ * <li><em>on-the-spot</em> input, where the composed text is displayed as part
48+ * of the text component's text body.
49+ * <li><em>below-the-spot</em> input, where the composed text is displayed in
50+ * a separate composition window just below the insertion point where
51+ * the text will be inserted when it is committed. Note that, if text is
52+ * selected within the component's text body, this text will be replaced by
53+ * the committed text upon commitment; therefore it is not considered part
54+ * of the context that the text is input into.
55+ * </ul>
56+ *
57+ * @see java.awt.Component#getInputMethodRequests
58+ * @see java.awt.event.InputMethodListener
59+ *
60+ * @author JavaSoft Asia/Pacific
61+ * @since 1.2
62+ */
63+
64+public interface InputMethodRequests {
65+
66+ /**
67+ * Gets the location of a specified offset in the current composed text,
68+ * or of the selection in committed text.
69+ * This information is, for example, used to position the candidate window
70+ * near the composed text, or a composition window near the location
71+ * where committed text will be inserted.
72+ *
73+ * <p>
74+ * If the component has composed text (because the most recent
75+ * InputMethodEvent sent to it contained composed text), then the offset is
76+ * relative to the composed text - offset 0 indicates the first character
77+ * in the composed text. The location returned should be for this character.
78+ *
79+ * <p>
80+ * If the component doesn't have composed text, the offset should be ignored,
81+ * and the location returned should reflect the beginning (in line
82+ * direction) of the highlight in the last line containing selected text.
83+ * For example, for horizontal left-to-right text (such as English), the
84+ * location to the left of the left-most character on the last line
85+ * containing selected text is returned. For vertical top-to-bottom text,
86+ * with lines proceding from right to left, the location to the top of the
87+ * left-most line containing selected text is returned.
88+ *
89+ * <p>
90+ * The location is represented as a 0-thickness caret, that is, it has 0
91+ * width if the text is drawn horizontally, and 0 height if the text is
92+ * drawn vertically. Other text orientations need to be mapped to
93+ * horizontal or vertical orientation. The rectangle uses absolute screen
94+ * coordinates.
95+ *
96+ * @param offset the offset within the composed text, if there is composed
97+ * text; null otherwise
98+ * @return a rectangle representing the screen location of the offset
99+ */
100+ Rectangle getTextLocation(TextHitInfo offset);
101+
102+ /**
103+ * Gets the offset within the composed text for the specified absolute x
104+ * and y coordinates on the screen. This information is used, for example
105+ * to handle mouse clicks and the mouse cursor. The offset is relative to
106+ * the composed text, so offset 0 indicates the beginning of the composed
107+ * text.
108+ *
109+ * <p>
110+ * Return null if the location is outside the area occupied by the composed
111+ * text.
112+ *
113+ * @param x the absolute x coordinate on screen
114+ * @param y the absolute y coordinate on screen
115+ * @return a text hit info describing the offset in the composed text.
116+ */
117+ TextHitInfo getLocationOffset(int x, int y);
118+
119+ /**
120+ * Gets the offset of the insert position in the committed text contained
121+ * in the text editing component. This is the offset at which characters
122+ * entered through an input method are inserted. This information is used
123+ * by an input method, for example, to examine the text surrounding the
124+ * insert position.
125+ *
126+ * @return the offset of the insert position
127+ */
128+ int getInsertPositionOffset();
129+
130+ /**
131+ * Gets an iterator providing access to the entire text and attributes
132+ * contained in the text editing component except for uncommitted
133+ * text. Uncommitted (composed) text should be ignored for index
134+ * calculations and should not be made accessible through the iterator.
135+ *
136+ * <p>
137+ * The input method may provide a list of attributes that it is
138+ * interested in. In that case, information about other attributes that
139+ * the implementor may have need not be made accessible through the
140+ * iterator. If the list is null, all available attribute information
141+ * should be made accessible.
142+ *
143+ * @param beginIndex the index of the first character
144+ * @param endIndex the index of the character following the last character
145+ * @param attributes a list of attributes that the input method is
146+ * interested in
147+ * @return an iterator providing access to the text and its attributes
148+ */
149+ AttributedCharacterIterator getCommittedText(int beginIndex, int endIndex,
150+ Attribute[] attributes);
151+
152+ /**
153+ * Gets the length of the entire text contained in the text
154+ * editing component except for uncommitted (composed) text.
155+ *
156+ * @return the length of the text except for uncommitted text
157+ */
158+ int getCommittedTextLength();
159+
160+ /**
161+ * Gets the latest committed text from the text editing component and
162+ * removes it from the component's text body.
163+ * This is used for the "Undo Commit" feature in some input methods, where
164+ * the committed text reverts to its previous composed state. The composed
165+ * text will be sent to the component using an InputMethodEvent.
166+ *
167+ * <p>
168+ * Generally, this feature should only be supported immediately after the
169+ * text was committed, not after the user performed other operations on the
170+ * text. When the feature is not supported, return null.
171+ *
172+ * <p>
173+ * The input method may provide a list of attributes that it is
174+ * interested in. In that case, information about other attributes that
175+ * the implementor may have need not be made accessible through the
176+ * iterator. If the list is null, all available attribute information
177+ * should be made accessible.
178+ *
179+ * @param attributes a list of attributes that the input method is
180+ * interested in
181+ * @return the latest committed text, or null when the "Undo Commit"
182+ * feature is not supported
183+ */
184+ AttributedCharacterIterator cancelLatestCommittedText(Attribute[] attributes);
185+
186+ /**
187+ * Gets the currently selected text from the text editing component.
188+ * This may be used for a variety of purposes.
189+ * One of them is the "Reconvert" feature in some input methods.
190+ * In this case, the input method will typically send an input method event
191+ * to replace the selected text with composed text. Depending on the input
192+ * method's capabilities, this may be the original composed text for the
193+ * selected text, the latest composed text entered anywhere in the text, or
194+ * a version of the text that's converted back from the selected text.
195+ *
196+ * <p>
197+ * The input method may provide a list of attributes that it is
198+ * interested in. In that case, information about other attributes that
199+ * the implementor may have need not be made accessible through the
200+ * iterator. If the list is null, all available attribute information
201+ * should be made accessible.
202+ *
203+ * @param attributes a list of attributes that the input method is
204+ * interested in
205+ * @return the currently selected text
206+ */
207+ AttributedCharacterIterator getSelectedText(Attribute[] attributes);
208+}
java/pkg/java/awt/im/InputSubset.class+0−0

Binary file not shown.

java/pkg/java/awt/im/InputSubset.java+114−0
@@ -0,0 +1,114 @@
1+/*
2+ * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im;
27+
28+
29+/**
30+ * Defines additional Unicode subsets for use by input methods. Unlike the
31+ * UnicodeBlock subsets defined in the <code>{@link
32+ * java.lang.Character.UnicodeBlock}</code> class, these constants do not
33+ * directly correspond to Unicode code blocks.
34+ *
35+ * @since 1.2
36+ */
37+
38+public final class InputSubset extends Character.Subset {
39+
40+ private InputSubset(String name) {
41+ super(name);
42+ }
43+
44+ /**
45+ * Constant for all Latin characters, including the characters
46+ * in the BASIC_LATIN, LATIN_1_SUPPLEMENT, LATIN_EXTENDED_A,
47+ * LATIN_EXTENDED_B Unicode character blocks.
48+ */
49+ public static final InputSubset LATIN
50+ = new InputSubset("LATIN");
51+
52+ /**
53+ * Constant for the digits included in the BASIC_LATIN Unicode character
54+ * block.
55+ */
56+ public static final InputSubset LATIN_DIGITS
57+ = new InputSubset("LATIN_DIGITS");
58+
59+ /**
60+ * Constant for all Han characters used in writing Traditional Chinese,
61+ * including a subset of the CJK unified ideographs as well as Traditional
62+ * Chinese Han characters that may be defined as surrogate characters.
63+ */
64+ public static final InputSubset TRADITIONAL_HANZI
65+ = new InputSubset("TRADITIONAL_HANZI");
66+
67+ /**
68+ * Constant for all Han characters used in writing Simplified Chinese,
69+ * including a subset of the CJK unified ideographs as well as Simplified
70+ * Chinese Han characters that may be defined as surrogate characters.
71+ */
72+ public static final InputSubset SIMPLIFIED_HANZI
73+ = new InputSubset("SIMPLIFIED_HANZI");
74+
75+ /**
76+ * Constant for all Han characters used in writing Japanese, including a
77+ * subset of the CJK unified ideographs as well as Japanese Han characters
78+ * that may be defined as surrogate characters.
79+ */
80+ public static final InputSubset KANJI
81+ = new InputSubset("KANJI");
82+
83+ /**
84+ * Constant for all Han characters used in writing Korean, including a
85+ * subset of the CJK unified ideographs as well as Korean Han characters
86+ * that may be defined as surrogate characters.
87+ */
88+ public static final InputSubset HANJA
89+ = new InputSubset("HANJA");
90+
91+ /**
92+ * Constant for the halfwidth katakana subset of the Unicode halfwidth and
93+ * fullwidth forms character block.
94+ */
95+ public static final InputSubset HALFWIDTH_KATAKANA
96+ = new InputSubset("HALFWIDTH_KATAKANA");
97+
98+ /**
99+ * Constant for the fullwidth ASCII variants subset of the Unicode halfwidth and
100+ * fullwidth forms character block.
101+ * @since 1.3
102+ */
103+ public static final InputSubset FULLWIDTH_LATIN
104+ = new InputSubset("FULLWIDTH_LATIN");
105+
106+ /**
107+ * Constant for the fullwidth digits included in the Unicode halfwidth and
108+ * fullwidth forms character block.
109+ * @since 1.3
110+ */
111+ public static final InputSubset FULLWIDTH_DIGITS
112+ = new InputSubset("FULLWIDTH_DIGITS");
113+
114+}
java/pkg/java/awt/im/mkfile+15−0
@@ -0,0 +1,15 @@
1+<../../../../../mkconfig
2+
3+DIRS=\
4+ spi\
5+
6+TARG=\
7+ InputContext.dis\
8+ InputMethodHighlight.dis\
9+ InputMethodRequests.dis\
10+ InputSubset.dis\
11+
12+DISBIN=$ROOT/java/dis/java/java/java/awt/im
13+
14+<$ROOT/mkfiles/mkjava
15+<$ROOT/mkfiles/mksubdirs
java/pkg/java/awt/im/package.html+69−0
@@ -0,0 +1,69 @@
1+<!--
2+ Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
3+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
5+ This code is free software; you can redistribute it and/or modify it
6+ under the terms of the GNU General Public License version 2 only, as
7+ published by the Free Software Foundation. Oracle designates this
8+ particular file as subject to the "Classpath" exception as provided
9+ by Oracle in the LICENSE file that accompanied this code.
10+
11+ This code is distributed in the hope that it will be useful, but WITHOUT
12+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ version 2 for more details (a copy is included in the LICENSE file that
15+ accompanied this code).
16+
17+ You should have received a copy of the GNU General Public License version
18+ 2 along with this work; if not, write to the Free Software Foundation,
19+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
21+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ or visit www.oracle.com if you need additional information or have any
23+ questions.
24+-->
25+
26+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
27+<HTML>
28+<HEAD>
29+ <META NAME=GENERATOR CONTENT="Claris Home Page 2.0">
30+ <X-SAS-WINDOW TOP=42 BOTTOM=589 LEFT=4 RIGHT=534>
31+</HEAD>
32+<BODY BGCOLOR="#FFFFFF">
33+
34+<P>Provides classes and interfaces for the input method framework.
35+This package enables text editing components to receive text input
36+through input methods. Input methods are software components that let
37+the user enter text in ways other than simple typing on a keyboard.
38+They are commonly used to enter Japanese, Chinese, or Korean -
39+languages using thousands of different characters - on keyboards with
40+far fewer keys. However, the framework also supports input methods
41+for other languages and the use of entirely different input
42+mechanisms, such as handwriting or speech recognition.</P>
43+
44+<H2>Package Specification</H2>
45+
46+<UL>
47+ <LI><B><A HREF="{@docRoot}/../technotes/guides/imf/spec.html">Input Method
48+ Framework Specification</A></B>
49+
50+ <LI><B><A HREF="{@docRoot}/../technotes/guides/imf/api-reference.html">Input
51+ Method Client API Reference</A></B>
52+</UL>
53+
54+<H2>Related Documentation</H2>
55+
56+<P>For overviews, tutorials, examples, guides, and tool
57+documentation, please see:</P>
58+
59+<UL>
60+ <LI><B><A HREF="{@docRoot}/../technotes/guides/imf/overview.html">Input Method
61+ Framework Overview</A></B>
62+
63+ <LI><B><A HREF="{@docRoot}/../technotes/guides/imf/api-tutorial.html">Input
64+ Method Client API Tutorial</A></B>
65+</UL>
66+
67+@since 1.2
68+</BODY>
69+</HTML>
java/pkg/java/awt/im/spi/InputMethod.class+0−0

Binary file not shown.

java/pkg/java/awt/im/spi/InputMethod.java+382−0
@@ -0,0 +1,382 @@
1+/*
2+ * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im.spi;
27+
28+import java.util.Locale;
29+import java.awt.AWTEvent;
30+import java.awt.Rectangle;
31+import java.lang.Character.Subset;
32+
33+
34+/**
35+ * Defines the interface for an input method that supports complex text input.
36+ * Input methods traditionally support text input for languages that have
37+ * more characters than can be represented on a standard-size keyboard,
38+ * such as Chinese, Japanese, and Korean. However, they may also be used to
39+ * support phonetic text input for English or character reordering for Thai.
40+ * <p>
41+ * Subclasses of InputMethod can be loaded by the input method framework; they
42+ * can then be selected either through the API
43+ * ({@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod})
44+ * or the user interface (the input method selection menu).
45+ *
46+ * @since 1.3
47+ *
48+ * @author JavaSoft International
49+ */
50+
51+public interface InputMethod {
52+
53+ /**
54+ * Sets the input method context, which is used to dispatch input method
55+ * events to the client component and to request information from
56+ * the client component.
57+ * <p>
58+ * This method is called once immediately after instantiating this input
59+ * method.
60+ *
61+ * @param context the input method context for this input method
62+ * @exception NullPointerException if <code>context</code> is null
63+ */
64+ public void setInputMethodContext(InputMethodContext context);
65+
66+ /**
67+ * Attempts to set the input locale. If the input method supports the
68+ * desired locale, it changes its behavior to support input for the locale
69+ * and returns true.
70+ * Otherwise, it returns false and does not change its behavior.
71+ * <p>
72+ * This method is called
73+ * <ul>
74+ * <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
75+ * <li>when switching to this input method through the user interface if the user
76+ * specified a locale or if the previously selected input method's
77+ * {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
78+ * returns a non-null value.
79+ * </ul>
80+ *
81+ * @param locale locale to input
82+ * @return whether the specified locale is supported
83+ * @exception NullPointerException if <code>locale</code> is null
84+ */
85+ public boolean setLocale(Locale locale);
86+
87+ /**
88+ * Returns the current input locale. Might return null in exceptional cases.
89+ * <p>
90+ * This method is called
91+ * <ul>
92+ * <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
93+ * <li>when switching from this input method to a different one through the
94+ * user interface.
95+ * </ul>
96+ *
97+ * @return the current input locale, or null
98+ */
99+ public Locale getLocale();
100+
101+ /**
102+ * Sets the subsets of the Unicode character set that this input method
103+ * is allowed to input. Null may be passed in to indicate that all
104+ * characters are allowed.
105+ * <p>
106+ * This method is called
107+ * <ul>
108+ * <li>immediately after instantiating this input method,
109+ * <li>when switching to this input method from a different one, and
110+ * <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
111+ * </ul>
112+ *
113+ * @param subsets the subsets of the Unicode character set from which
114+ * characters may be input
115+ */
116+ public void setCharacterSubsets(Subset[] subsets);
117+
118+ /**
119+ * Enables or disables this input method for composition,
120+ * depending on the value of the parameter <code>enable</code>.
121+ * <p>
122+ * An input method that is enabled for composition interprets incoming
123+ * events for both composition and control purposes, while a
124+ * disabled input method does not interpret events for composition.
125+ * Note however that events are passed on to the input method regardless
126+ * whether it is enabled or not, and that an input method that is disabled
127+ * for composition may still interpret events for control purposes,
128+ * including to enable or disable itself for composition.
129+ * <p>
130+ * For input methods provided by host operating systems, it is not always possible to
131+ * determine whether this operation is supported. For example, an input method may enable
132+ * composition only for some locales, and do nothing for other locales. For such input
133+ * methods, it is possible that this method does not throw
134+ * {@link java.lang.UnsupportedOperationException UnsupportedOperationException},
135+ * but also does not affect whether composition is enabled.
136+ * <p>
137+ * This method is called
138+ * <ul>
139+ * <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
140+ * <li>when switching to this input method from a different one using the
141+ * user interface or
142+ * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
143+ * if the previously selected input method's
144+ * {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
145+ * method returns without throwing an exception.
146+ * </ul>
147+ *
148+ * @param enable whether to enable the input method for composition
149+ * @throws UnsupportedOperationException if this input method does not
150+ * support the enabling/disabling operation
151+ * @see #isCompositionEnabled
152+ */
153+ public void setCompositionEnabled(boolean enable);
154+
155+ /**
156+ * Determines whether this input method is enabled.
157+ * An input method that is enabled for composition interprets incoming
158+ * events for both composition and control purposes, while a
159+ * disabled input method does not interpret events for composition.
160+ * <p>
161+ * This method is called
162+ * <ul>
163+ * <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
164+ * <li>when switching from this input method to a different one using the
165+ * user interface or
166+ * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
167+ * </ul>
168+ *
169+ * @return <code>true</code> if this input method is enabled for
170+ * composition; <code>false</code> otherwise.
171+ * @throws UnsupportedOperationException if this input method does not
172+ * support checking whether it is enabled for composition
173+ * @see #setCompositionEnabled
174+ */
175+ public boolean isCompositionEnabled();
176+
177+ /**
178+ * Starts the reconversion operation. The input method obtains the
179+ * text to be reconverted from the current client component using the
180+ * {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
181+ * method. It can use other <code>InputMethodRequests</code>
182+ * methods to request additional information required for the
183+ * reconversion operation. The composed and committed text
184+ * produced by the operation is sent to the client component as a
185+ * sequence of <code>InputMethodEvent</code>s. If the given text
186+ * cannot be reconverted, the same text should be sent to the
187+ * client component as committed text.
188+ * <p>
189+ * This method is called by
190+ * {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
191+ *
192+ * @throws UnsupportedOperationException if the input method does not
193+ * support the reconversion operation.
194+ */
195+ public void reconvert();
196+
197+ /**
198+ * Dispatches the event to the input method. If input method support is
199+ * enabled for the focussed component, incoming events of certain types
200+ * are dispatched to the current input method for this component before
201+ * they are dispatched to the component's methods or event listeners.
202+ * The input method decides whether it needs to handle the event. If it
203+ * does, it also calls the event's <code>consume</code> method; this
204+ * causes the event to not get dispatched to the component's event
205+ * processing methods or event listeners.
206+ * <p>
207+ * Events are dispatched if they are instances of InputEvent or its
208+ * subclasses.
209+ * This includes instances of the AWT classes KeyEvent and MouseEvent.
210+ * <p>
211+ * This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
212+ *
213+ * @param event the event being dispatched to the input method
214+ * @exception NullPointerException if <code>event</code> is null
215+ */
216+ public void dispatchEvent(AWTEvent event);
217+
218+ /**
219+ * Notifies this input method of changes in the client window
220+ * location or state. This method is called while this input
221+ * method is the current input method of its input context and
222+ * notifications for it are enabled (see {@link
223+ * InputMethodContext#enableClientWindowNotification
224+ * InputMethodContext.enableClientWindowNotification}). Calls
225+ * to this method are temporarily suspended if the input context's
226+ * {@link java.awt.im.InputContext#removeNotify removeNotify}
227+ * method is called, and resume when the input method is activated
228+ * for a new client component. It is called in the following
229+ * situations:
230+ * <ul>
231+ * <li>
232+ * when the window containing the current client component changes
233+ * in location, size, visibility, iconification state, or when the
234+ * window is closed.</li>
235+ * <li>
236+ * from <code> enableClientWindowNotification(inputMethod,
237+ * true)</code> if the current client component exists,</li>
238+ * <li>
239+ * when activating the input method for the first time after it
240+ * called
241+ * <code>enableClientWindowNotification(inputMethod,
242+ * true)</code> if during the call no current client component was
243+ * available,</li>
244+ * <li>
245+ * when activating the input method for a new client component
246+ * after the input context's removeNotify method has been
247+ * called.</li>
248+ * </ul>
249+ * @param bounds client window's {@link
250+ * java.awt.Component#getBounds bounds} on the screen; or null if
251+ * the client window is iconified or invisible
252+ */
253+ public void notifyClientWindowChange(Rectangle bounds);
254+
255+ /**
256+ * Activates the input method for immediate input processing.
257+ * <p>
258+ * If an input method provides its own windows, it should make sure
259+ * at this point that all necessary windows are open and visible.
260+ * <p>
261+ * This method is called
262+ * <ul>
263+ * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
264+ * when a client component receives a FOCUS_GAINED event,
265+ * <li>when switching to this input method from a different one using the
266+ * user interface or
267+ * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
268+ * </ul>
269+ * The method is only called when the input method is inactive.
270+ * A newly instantiated input method is assumed to be inactive.
271+ */
272+ public void activate();
273+
274+ /**
275+ * Deactivates the input method.
276+ * The isTemporary argument has the same meaning as in
277+ * {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
278+ * <p>
279+ * If an input method provides its own windows, only windows that relate
280+ * to the current composition (such as a lookup choice window) should be
281+ * closed at this point.
282+ * It is possible that the input method will be immediately activated again
283+ * for a different client component, and closing and reopening more
284+ * persistent windows (such as a control panel) would create unnecessary
285+ * screen flicker.
286+ * Before an instance of a different input method class is activated,
287+ * {@link #hideWindows} is called on the current input method.
288+ * <p>
289+ * This method is called
290+ * <ul>
291+ * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
292+ * when a client component receives a FOCUS_LOST event,
293+ * <li>when switching from this input method to a different one using the
294+ * user interface or
295+ * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
296+ * <li>before {@link #removeNotify removeNotify} if the current client component is
297+ * removed.
298+ * </ul>
299+ * The method is only called when the input method is active.
300+ *
301+ * @param isTemporary whether the focus change is temporary
302+ */
303+ public void deactivate(boolean isTemporary);
304+
305+ /**
306+ * Closes or hides all windows opened by this input method instance or
307+ * its class.
308+ * <p>
309+ * This method is called
310+ * <ul>
311+ * <li>before calling {@link #activate activate} on an instance of a different input
312+ * method class,
313+ * <li>before calling {@link #dispose dispose} on this input method.
314+ * </ul>
315+ * The method is only called when the input method is inactive.
316+ */
317+ public void hideWindows();
318+
319+ /**
320+ * Notifies the input method that a client component has been
321+ * removed from its containment hierarchy, or that input method
322+ * support has been disabled for the component.
323+ * <p>
324+ * This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
325+ * <p>
326+ * The method is only called when the input method is inactive.
327+ */
328+ public void removeNotify();
329+
330+ /**
331+ * Ends any input composition that may currently be going on in this
332+ * context. Depending on the platform and possibly user preferences,
333+ * this may commit or delete uncommitted text. Any changes to the text
334+ * are communicated to the active component using an input method event.
335+ *
336+ * <p>
337+ * A text editing component may call this in a variety of situations,
338+ * for example, when the user moves the insertion point within the text
339+ * (but outside the composed text), or when the component's text is
340+ * saved to a file or copied to the clipboard.
341+ * <p>
342+ * This method is called
343+ * <ul>
344+ * <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
345+ * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
346+ * when switching to a different client component
347+ * <li>when switching from this input method to a different one using the
348+ * user interface or
349+ * {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
350+ * </ul>
351+ */
352+ public void endComposition();
353+
354+ /**
355+ * Releases the resources used by this input method.
356+ * In particular, the input method should dispose windows and close files that are no
357+ * longer needed.
358+ * <p>
359+ * This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
360+ * <p>
361+ * The method is only called when the input method is inactive.
362+ * No method of this interface is called on this instance after dispose.
363+ */
364+ public void dispose();
365+
366+ /**
367+ * Returns a control object from this input method, or null. A
368+ * control object provides methods that control the behavior of the
369+ * input method or obtain information from the input method. The type
370+ * of the object is an input method specific class. Clients have to
371+ * compare the result against known input method control object
372+ * classes and cast to the appropriate class to invoke the methods
373+ * provided.
374+ * <p>
375+ * This method is called by
376+ * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
377+ *
378+ * @return a control object from this input method, or null
379+ */
380+ public Object getControlObject();
381+
382+}
java/pkg/java/awt/im/spi/InputMethodContext.class+0−0

Binary file not shown.

java/pkg/java/awt/im/spi/InputMethodContext.java+140−0
@@ -0,0 +1,140 @@
1+/*
2+ * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package java.awt.im.spi;
27+
28+import java.awt.HeadlessException;
29+import java.awt.Window;
30+import java.awt.font.TextHitInfo;
31+import java.awt.im.InputMethodRequests;
32+import java.text.AttributedCharacterIterator;
33+import javax.swing.JFrame;
34+
35+/**
36+ * Provides methods that input methods
37+ * can use to communicate with their client components or to request
38+ * other services. This interface is implemented by the input method
39+ * framework, and input methods call its methods on the instance they
40+ * receive through
41+ * {@link java.awt.im.spi.InputMethod#setInputMethodContext}.
42+ * There should be no other implementors or callers.
43+ *
44+ * @since 1.3
45+ *
46+ * @author JavaSoft International
47+ */
48+
49+public interface InputMethodContext extends InputMethodRequests {
50+
51+ /**
52+ * Creates an input method event from the arguments given
53+ * and dispatches it to the client component. For arguments,
54+ * see {@link java.awt.event.InputMethodEvent#InputMethodEvent}.
55+ */
56+ public void dispatchInputMethodEvent(int id,
57+ AttributedCharacterIterator text, int committedCharacterCount,
58+ TextHitInfo caret, TextHitInfo visiblePosition);
59+
60+ /**
61+ * Creates a top-level window for use by the input method.
62+ * The intended behavior of this window is:
63+ * <ul>
64+ * <li>it floats above all document windows and dialogs
65+ * <li>it and all components that it contains do not receive the focus
66+ * <li>it has lightweight decorations, such as a reduced drag region without title
67+ * </ul>
68+ * However, the actual behavior with respect to these three items is platform dependent.
69+ * <p>
70+ * The title may or may not be displayed, depending on the actual type of window created.
71+ * <p>
72+ * If attachToInputContext is true, the new window will share the input context that
73+ * corresponds to this input method context, so that events for components in the window
74+ * are automatically dispatched to the input method.
75+ * Also, when the window is opened using setVisible(true), the input context will prevent
76+ * deactivate and activate calls to the input method that might otherwise be caused.
77+ * <p>
78+ * Input methods must call {@link java.awt.Window#dispose() Window.dispose} on the
79+ * returned input method window when it is no longer needed.
80+ * <p>
81+ * @param title the title to be displayed in the window's title bar,
82+ * if there is such a title bar.
83+ * A <code>null</code> value is treated as an empty string, "".
84+ * @param attachToInputContext whether this window should share the input context
85+ * that corresponds to this input method context
86+ * @return a window with special characteristics for use by input methods
87+ * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless
88+ * </code> returns <code>true</code>
89+ */
90+ public Window createInputMethodWindow(String title, boolean attachToInputContext);
91+
92+ /**
93+ * Creates a top-level Swing JFrame for use by the input method.
94+ * The intended behavior of this window is:
95+ * <ul>
96+ * <li>it floats above all document windows and dialogs
97+ * <li>it and all components that it contains do not receive the focus
98+ * <li>it has lightweight decorations, such as a reduced drag region without title
99+ * </ul>
100+ * However, the actual behavior with respect to these three items is platform dependent.
101+ * <p>
102+ * The title may or may not be displayed, depending on the actual type of window created.
103+ * <p>
104+ * If attachToInputContext is true, the new window will share the input context that
105+ * corresponds to this input method context, so that events for components in the window
106+ * are automatically dispatched to the input method.
107+ * Also, when the window is opened using setVisible(true), the input context will prevent
108+ * deactivate and activate calls to the input method that might otherwise be caused.
109+ * <p>
110+ * Input methods must call {@link java.awt.Window#dispose() Window.dispose} on the
111+ * returned input method window when it is no longer needed.
112+ * <p>
113+ * @param title the title to be displayed in the window's title bar,
114+ * if there is such a title bar.
115+ * A <code>null</code> value is treated as an empty string, "".
116+ * @param attachToInputContext whether this window should share the input context
117+ * that corresponds to this input method context
118+ * @return a JFrame with special characteristics for use by input methods
119+ * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless
120+ * </code> returns <code>true</code>
121+ *
122+ * @since 1.4
123+ */
124+ public JFrame createInputMethodJFrame(String title, boolean attachToInputContext);
125+
126+ /**
127+ * Enables or disables notification of the current client window's
128+ * location and state for the specified input method. When
129+ * notification is enabled, the input method's {@link
130+ * java.awt.im.spi.InputMethod#notifyClientWindowChange
131+ * notifyClientWindowChange} method is called as described in that
132+ * method's specification. Notification is automatically disabled
133+ * when the input method is disposed.
134+ *
135+ * @param inputMethod the input method for which notifications are
136+ * enabled or disabled
137+ * @param enable true to enable, false to disable
138+ */
139+ public void enableClientWindowNotification(InputMethod inputMethod, boolean enable);
140+}
java/pkg/java/awt/im/spi/InputMethodDescriptor.class+0−0

Binary file not shown.

java/pkg/java/awt/im/spi/InputMethodDescriptor.java+124−0
@@ -0,0 +1,124 @@
1+/*
2+ * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+
27+package java.awt.im.spi;
28+
29+import java.awt.AWTException;
30+import java.awt.Image;
31+import java.util.Locale;
32+
33+/**
34+ * Defines methods that provide sufficient information about an input method
35+ * to enable selection and loading of that input method.
36+ * The input method itself is only loaded when it is actually used.
37+ *
38+ * @since 1.3
39+ */
40+
41+public interface InputMethodDescriptor {
42+
43+ /**
44+ * Returns the locales supported by the corresponding input method.
45+ * The locale may describe just the language, or may also include
46+ * country and variant information if needed.
47+ * The information is used to select input methods by locale
48+ * ({@link java.awt.im.InputContext#selectInputMethod(Locale)}). It may also
49+ * be used to sort input methods by locale in a user-visible
50+ * list of input methods.
51+ * <p>
52+ * Only the input method's primary locales should be returned.
53+ * For example, if a Japanese input method also has a pass-through
54+ * mode for Roman characters, typically still only Japanese would
55+ * be returned. Thus, the list of locales returned is typically
56+ * a subset of the locales for which the corresponding input method's
57+ * implementation of {@link java.awt.im.spi.InputMethod#setLocale} returns true.
58+ * <p>
59+ * If {@link #hasDynamicLocaleList} returns true, this method is
60+ * called each time the information is needed. This
61+ * gives input methods that depend on network resources the chance
62+ * to add or remove locales as resources become available or
63+ * unavailable.
64+ *
65+ * @return the locales supported by the input method
66+ * @exception AWTException if it can be determined that the input method
67+ * is inoperable, for example, because of incomplete installation.
68+ */
69+ Locale[] getAvailableLocales() throws AWTException;
70+
71+ /**
72+ * Returns whether the list of available locales can change
73+ * at runtime. This may be the case, for example, for adapters
74+ * that access real input methods over the network.
75+ */
76+ boolean hasDynamicLocaleList();
77+
78+ /**
79+ * Returns the user-visible name of the corresponding
80+ * input method for the given input locale in the language in which
81+ * the name will be displayed.
82+ * <p>
83+ * The inputLocale parameter specifies the locale for which text
84+ * is input.
85+ * This parameter can only take values obtained from this descriptor's
86+ * {@link #getAvailableLocales} method or null. If it is null, an
87+ * input locale independent name for the input method should be
88+ * returned.
89+ * <p>
90+ * If a name for the desired display language is not available, the
91+ * method may fall back to some other language.
92+ *
93+ * @param inputLocale the locale for which text input is supported, or null
94+ * @param displayLanguage the language in which the name will be displayed
95+ */
96+ String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage);
97+
98+ /**
99+ * Returns an icon for the corresponding input method.
100+ * The icon may be used by a user interface for selecting input methods.
101+ * <p>
102+ * The inputLocale parameter specifies the locale for which text
103+ * is input.
104+ * This parameter can only take values obtained from this descriptor's
105+ * {@link #getAvailableLocales} method or null. If it is null, an
106+ * input locale independent icon for the input method should be
107+ * returned.
108+ * <p>
109+ * The icon's size should be 16&times;16 pixels.
110+ *
111+ * @param inputLocale the locale for which text input is supported, or null
112+ * @return an icon for the corresponding input method, or null
113+ */
114+ Image getInputMethodIcon(Locale inputLocale);
115+
116+ /**
117+ * Creates a new instance of the corresponding input method.
118+ *
119+ * @return a new instance of the corresponding input method
120+ * @exception Exception any exception that may occur while creating the
121+ * input method instance
122+ */
123+ InputMethod createInputMethod() throws Exception;
124+}
java/pkg/java/awt/im/spi/mkfile+10−0
@@ -0,0 +1,10 @@
1+<../../../../../../mkconfig
2+
3+TARG=\
4+ InputMethod.dis\
5+ InputMethodContext.dis\
6+ InputMethodDescriptor.dis\
7+
8+DISBIN=$ROOT/java/dis/java/java/java/awt/im/spi
9+
10+<$ROOT/mkfiles/mkjava
java/pkg/java/awt/im/spi/package.html+126−0
@@ -0,0 +1,126 @@
1+<!--
2+ Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
3+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
5+ This code is free software; you can redistribute it and/or modify it
6+ under the terms of the GNU General Public License version 2 only, as
7+ published by the Free Software Foundation. Oracle designates this
8+ particular file as subject to the "Classpath" exception as provided
9+ by Oracle in the LICENSE file that accompanied this code.
10+
11+ This code is distributed in the hope that it will be useful, but WITHOUT
12+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ version 2 for more details (a copy is included in the LICENSE file that
15+ accompanied this code).
16+
17+ You should have received a copy of the GNU General Public License version
18+ 2 along with this work; if not, write to the Free Software Foundation,
19+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
21+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ or visit www.oracle.com if you need additional information or have any
23+ questions.
24+-->
25+
26+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
27+<!--This file created 7/22/1999 11:47 by Claris Home Page version 2.0-->
28+<HTML>
29+<HEAD>
30+ <TITLE>Package java.awt.im.spi Description</TITLE>
31+ <META NAME=GENERATOR CONTENT="Claris Home Page 2.0">
32+ <X-SAS-WINDOW TOP=51 BOTTOM=592 LEFT=171 RIGHT=701>
33+</HEAD>
34+<BODY BGCOLOR="#FFFFFF">
35+
36+<P>Provides interfaces that enable the development of input methods
37+that can be used with any Java runtime environment. Input methods are
38+software components that let the user enter text in ways other than
39+simple typing on a keyboard. They are commonly used to enter
40+Japanese, Chinese, or Korean - languages using thousands of different
41+characters - on keyboards with far fewer keys. However, this package
42+also allows the development of input methods for other languages and
43+the use of entirely different input mechanisms, such as handwriting
44+recognition.</P>
45+
46+<H2><A NAME="package_specification"></A>Package Specification</H2>
47+
48+<UL>
49+ <LI><B><A HREF="../../../../../technotes/guides/imf/spec.html">Input Method
50+ Framework Specification</A></B>
51+
52+ <LI><B><A HREF="../../../../../technotes/guides/imf/spi-reference.html">Input
53+ Method Engine SPI Reference</A></B>
54+</UL>
55+
56+<H4><A NAME="Packaging"></A>Packaging Input Methods</H4>
57+
58+<P>Input methods are packaged as installed extensions, as specified
59+by the <A HREF="../../../../../technotes/guides/extensions/index.html">Extension
60+Mechanism</A>. The main JAR file of an input method must contain the
61+file:</P>
62+
63+<PRE> META-INF/services/java.awt.im.spi.InputMethodDescriptor</PRE>
64+
65+<P>The file should contain a list of fully-qualified class names, one
66+per line, of classes implementing the
67+<CODE>java.awt.im.spi.InputMethodDescriptor</CODE> interface. Space
68+and tab characters surrounding each name, as well as blank lines, are
69+ignored. The comment character is <CODE>'#'</CODE>
70+(<CODE>\u0023</CODE>); on each line all characters following the
71+first comment character are ignored. The file must be encoded in
72+UTF-8.</P>
73+
74+<P>For example, if the fully-qualified name of the class that
75+implements <CODE>java.awt.im.spi.InputMethodDesciptor</CODE> for the
76+<EM>Foo</EM> input method is
77+<CODE>com.sun.ime.FooInputMethodDescriptor</CODE>, the file
78+<CODE>META-INF/services/java.awt.im.spi.InputMethodDescriptor</CODE>
79+contains a line:</P>
80+
81+<PRE> com.sun.ime.FooInputMethodDescriptor</PRE>
82+
83+<P>The input method must also provide at least two classes: one class
84+implementing the <CODE>java.awt.im.spi.InputMethodDescriptor</CODE>
85+interface, one class implementing the
86+<CODE>java.awt.im.spi.InputMethod</CODE> interface. The input method
87+should separate the implementations for these interfaces, so that
88+loading of the class implementing <CODE>InputMethod</CODE> can be
89+deferred until actually needed.</P>
90+
91+<H4><A NAME="Loading"></A>Loading Input Methods</H4>
92+
93+<P>The input method framework will usually defer loading of input
94+method classes until they are absolutely needed. It loads only the
95+<CODE>InputMethodDescriptor</CODE> implementations during AWT
96+initialization. It loads an <CODE>InputMethod</CODE> implementation
97+when the input method has been selected.</P>
98+
99+<H4><A NAME="PeeredComponents"></A>Java Input Methods and Peered Text
100+Components</H4>
101+
102+<P>The Java input method framework intends to support all
103+combinations of input methods (host input methods and Java input
104+methods) and components (peered and lightweight). However, because of
105+limitations in the underlying platform, it may not always be possible
106+to enable the communication between Java input methods and peered AWT
107+components. Support for this specific combination is therefore
108+platform dependent. In Sun's Java SE Runtime Environments, this
109+combination is supported on Windows, but not on Solaris.</P>
110+
111+<H2>Related Documentation</H2>
112+
113+<P>For overviews, tutorials, examples, guides, and tool
114+documentation, please see:</P>
115+
116+<UL>
117+ <LI><B><A HREF="../../../../../technotes/guides/imf/overview.html">Input
118+ Method Framework Overview</A></B>
119+
120+ <LI><B><A HREF="../../../../../technotes/guides/imf/spi-tutorial.html">Input
121+ Method Engine SPI Tutorial</A></B>
122+</UL>
123+
124+@since JDK1.3
125+</BODY>
126+</HTML>