1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.
3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License.
6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at
7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and
14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License.
15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn;
18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences;
20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * The interface of the text converter accessed from OpenWnn.
23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * <br>
24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * The realization class of this interface should be an singleton class.
25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD.  All Rights Reserved.
27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic interface WnnEngine {
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /*
30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * DEFINITION OF CONSTANTS
31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
32d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa    /** The identifier of the learning dictionary */
33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public static final int DICTIONARY_TYPE_LEARN = 1;
34d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa    /** The identifier of the user dictionary */
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public static final int DICTIONARY_TYPE_USER  = 2;
36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /*
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * DEFINITION OF METHODS
39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Initialize parameters.
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void init();
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Close the converter.
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * OpenWnn calls this method when it is destroyed.
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void close();
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Predict words/phrases.
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
56d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param text      The input string
57d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param minLen    The minimum length of a word to predict (0  : no limit)
58d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param maxLen    The maximum length of a word to predict (-1 : no limit)
59d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          Plus value if there are candidates; 0 if there is no candidate; minus value if a error occurs.
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int predict(ComposingText text, int minLen, int maxLen);
62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Convert a string.
65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * This method is used to consecutive/single clause convert in
67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Japanese, Pinyin to Kanji convert in Chinese, Hangul to Hanja
68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * convert in Korean, etc.
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
70f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * The result of conversion is set into the layer 2 in the {@link ComposingText}.
71f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * To get other candidates of each clause, call {@link #makeCandidateListOf(int)}.
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
73d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param text      The input string
74d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return      Plus value if there are candidates; 0 if there is no candidate; minus value if a error occurs.
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int convert(ComposingText text);
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Search words from the dictionaries.
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
81d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param key       The search key (stroke)
82d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return      Plus value if there are candidates; 0 if there is no candidate; minus value if a error occurs.
83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int searchWords(String key);
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Search words from the dictionaries.
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
89d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param word      A word to search
90d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          Plus value if there are candidates; 0 if there is no candidate; minus value if a error occurs.
91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int searchWords(WnnWord word);
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get a candidate.
96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
97f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * After {@link #predict(ComposingText, int, int)} or {@link #makeCandidateListOf(int)} or
98f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * {@code searchWords()}, call this method to get the
99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * results.  This method will return a candidate in decreasing
100f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * frequency order for {@link #predict(ComposingText, int, int)} and
101f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * {@link #makeCandidateListOf(int)}, in increasing character code order for
102f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * {@code searchWords()}.
103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
104d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          The candidate; {@code null} if there is no more candidate.
105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public WnnWord getNextCandidate();
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Retrieve the list of registered words.
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
111d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          {@code null} if no word is registered; the array of {@link WnnWord} if some words is registered.
112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public WnnWord[] getUserDictionaryWords();
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Learn a word.
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * This method is used to register the word selected from
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * candidates to the learning dictionary or update the frequency
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * of the word.
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
122d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param word      The selected word
123d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          {@code true} if success; {@code false} if fail or not supported.
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public boolean learn(WnnWord word);
126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Register a word to the user's dictionary.
129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
130d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param word      A word to register
131d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          Number of registered words in the user's dictionary after the operation; minus value if a error occurs.
132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int addWord(WnnWord word);
134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Delete a word from the user's dictionary.
137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
138d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param word      A word to delete
139d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return          {@code true} if success; {@code false} if fail or not supported.
140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public boolean deleteWord(WnnWord word);
142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Delete all words from the user's dictionary.
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
146d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param dictionary    {@code DICTIONARY_TYPE_LEARN} or {@code DICTIONARY_TYPE_USER}
147d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return              {@code true} if success; {@code false} if fail or not supported.
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public boolean initializeDictionary(int dictionary);
150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
152f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * Delete all words from the user's dictionary of the specified language.
153f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * <br>
154d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param dictionary        {@code DICTIONARY_TYPE_LEARN} or {@code DICTIONARY_TYPE_USER}
155d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @param type              Dictionary type (language, etc...)
156d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return                  {@code true} if success; {@code false} if fail or not supported.
157f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     */
158f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa    public boolean initializeDictionary(int dictionary, int type);
159f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa
160f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa    /**
161d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa     * Reflect the preferences in the converter.
162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param pref  The preferences
164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void setPreferences(SharedPreferences pref);
166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Break the sequence of words.
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * This method is used to notice breaking the sequence of input
171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * words to the converter.  The converter will stop learning
172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * collocation between previous input words and words which will
173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * input after this break.
174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void breakSequence();
176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Makes the candidate list.
179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * This method is used when to make a list of other candidates of
181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * the clause which is in the result of consecutive clause
182f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * conversion({@link #convert(ComposingText)}).
183f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa     * To get the elements of the list, call {@link #getNextCandidate()}.
184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param clausePosition  The position of a clause
186d2f2d7241a8f9e02da0930b31b7cb90e4d43423bDaisuke Miyakawa     * @return                  Plus value if there are candidates; 0 if there is no candidate; minus value if a error occurs.
187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int makeCandidateListOf(int clausePosition);
189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
190