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.EN; 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.HashMap; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.ArrayList; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 227b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawaimport jp.co.omronsoft.openwnn.*; 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences; 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 263feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The OpenWnn engine class for English IME. 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 283feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class OpenWnnEngineEN implements WnnEngine { 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Normal dictionary */ 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public static final int DICT_DEFAULT = 0; 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Dictionary for mistype correction */ 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public static final int DICT_FOR_CORRECT_MISTYPE = 1; 357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** Score(frequency value) of word in the learning dictionary */ 367b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public static final int FREQ_LEARN = 600; 377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** Score(frequency value) of word in the user dictionary */ 387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public static final int FREQ_USER = 500; 394ea4d400da5130039b3dd11ad0adfdd4e8cab0ffDaisuke Miyakawa /** Limitation of predicted candidates */ 404ea4d400da5130039b3dd11ad0adfdd4e8cab0ffDaisuke Miyakawa public static final int PREDICT_LIMIT = 300; 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** OpenWnn dictionary */ 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private WnnDictionary mDictionary; 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Word list */ 457b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa private ArrayList<WnnWord> mConvResult; 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** HashMap for checking duplicate word */ 477b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa private HashMap<String, WnnWord> mCandTable; 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Input string */ 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private String mInputString; 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Searching string */ 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private String mSearchKey; 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Number of output candidates */ 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private int mOutputNum; 547b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** The candidate filter */ 557b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa private CandidateFilter mFilter = null; 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Candidate's case 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * <br> 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * CASE_LOWER: all letters are lower.<br> 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * CASE_HEAD_UPPER: the first letter is upper; others are lower.<br> 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * CASE_UPPER: all letters are upper.<br> 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private int mCandidateCase; 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int CASE_LOWER = 0; 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int CASE_UPPER = 1; 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int CASE_HEAD_UPPER = 3; 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 713feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * 723feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param writableDictionaryName Writable dictionary file name(null if not use) 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public OpenWnnEngineEN(String writableDictionaryName) { 757b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mConvResult = new ArrayList<WnnWord>(); 767b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mCandTable = new HashMap<String, WnnWord>(); 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSearchKey = null; 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mOutputNum = 0; 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary = new OpenWnnDictionaryImpl( 813feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa "/data/data/jp.co.omronsoft.openwnn/lib/libWnnEngDic.so", 823feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa writableDictionaryName); 833feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa if (!mDictionary.isActive()) { 843feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mDictionary = new OpenWnnDictionaryImpl( 853feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa "/system/lib/libWnnEngDic.so", 863feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa writableDictionaryName); 873feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa } 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.clearDictionary( ); 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 907b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mDictionary.setDictionary(0, 400, 550); 917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mDictionary.setDictionary(1, 400, 550); 927b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mDictionary.setDictionary(2, 400, 550); 937b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mDictionary.setDictionary(WnnDictionary.INDEX_USER_DICTIONARY, FREQ_USER, FREQ_USER); 947b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mDictionary.setDictionary(WnnDictionary.INDEX_LEARN_DICTIONARY, FREQ_LEARN, FREQ_LEARN); 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.setApproxPattern(WnnDictionary.APPROX_PATTERN_EN_QWERTY_NEAR); 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.setInUseState( false ); 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Get a candidate. 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 1043feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param index Index of candidate 1053feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @return A candidate; {@code null} if no candidate for the index. 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private WnnWord getCandidate(int index) { 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord word; 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* search the candidate from the dictionaries */ 1104ea4d400da5130039b3dd11ad0adfdd4e8cab0ffDaisuke Miyakawa while (mConvResult.size() < PREDICT_LIMIT && index >= mConvResult.size()) { 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project while ((word = mDictionary.getNextWord()) != null) { 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* adjust the case of letter */ 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project char c = word.candidate.charAt(0); 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mCandidateCase == CASE_LOWER) { 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (Character.isLowerCase(c)) { 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if (mCandidateCase == CASE_HEAD_UPPER) { 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (Character.isLowerCase(c)) { 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word.candidate = Character.toString(Character.toUpperCase(c)) + word.candidate.substring(1); 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word.candidate = word.candidate.toUpperCase(); 125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (word == null) { 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* check duplication */ 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addCandidate(word); 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* get the default candidates */ 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (index >= mConvResult.size()) { 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* input string itself */ 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addCandidate(new WnnWord(mInputString, mSearchKey)); 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Capitalize the head of input */ 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mSearchKey.length() > 1) { 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addCandidate(new WnnWord(mSearchKey.substring(0,1).toUpperCase() + mSearchKey.substring(1), 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSearchKey)); 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Capitalize all */ 147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addCandidate(new WnnWord(mSearchKey.toUpperCase(), mSearchKey)); 148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (index >= mConvResult.size()) { 151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return null; 152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1537b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa return mConvResult.get(index); 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Add a word to the candidates list if there is no duplication. 1583feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * 1593feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param word A word 1603feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @return {@code true} if the word is added to the list; {@code false} if not. 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean addCandidate(WnnWord word) { 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (word.candidate == null || mCandTable.containsKey(word.candidate)) { 164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (mFilter != null && !mFilter.isAllowed(word)) { 1677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa return false; 1687b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa } 169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandTable.put(word.candidate, word); 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mConvResult.add(word); 171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void clearCandidates() { 175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mConvResult.clear(); 176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandTable.clear(); 177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mOutputNum = 0; 178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSearchKey = null; 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Set dictionary. 183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 1843feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param type Type of dictionary (DIC_DEFAULT or DIC_FOR_CORRECT_MISTYPE) 1853feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @return {@code true} if the dictionary is changed; {@code false} if not. 186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean setDictionary(int type) { 188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (type == DICT_FOR_CORRECT_MISTYPE) { 189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.clearApproxPattern(); 190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.setApproxPattern(WnnDictionary.APPROX_PATTERN_EN_QWERTY_NEAR); 191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDictionary.clearApproxPattern(); 193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Set search key for the dictionary. 199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * <br> 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * To search the dictionary, this method set the lower case of 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * input string to the search key. And hold the input string's 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * capitalization information to adjust the candidates 203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * capitalization later. 204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 2053feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param input Input string 2063feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @return {@code true} if the search key is set; {@code false} if not. 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean setSearchKey(String input) { 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (input.length() == 0) { 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* set mInputString */ 214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mInputString = input; 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* set mSearchKey */ 217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSearchKey = input.toLowerCase(); 218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* set mCandidateCase */ 220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (Character.isUpperCase(input.charAt(0))) { 221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (input.length() > 1 && Character.isUpperCase(input.charAt(1))) { 222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateCase = CASE_UPPER; 223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateCase = CASE_HEAD_UPPER; 225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateCase = CASE_LOWER; 228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 2327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 2337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** 2347b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * Set the candidate filter 2353feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * 2363feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param filter The candidate filter 2377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa */ 2387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public void setFilter(CandidateFilter filter) { 2397b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mFilter = filter; 2407b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa } 2417b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /*********************************************************************** 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WnnEngine's interface 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project **********************************************************************/ 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#init */ 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void init() {} 247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#close */ 249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void close() {} 250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#predict */ 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int predict(ComposingText text, int minLen, int maxLen) { 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearCandidates(); 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (text == null) { return 0; } 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project String input = text.toString(2); 258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (!setSearchKey(input)) { 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* set dictionaries by the length of input */ 263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnDictionary dict = mDictionary; 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.clearDictionary(); 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setDictionary(0, 400, 550); 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (input.length() > 1) { 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setDictionary(1, 400, 550); 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (input.length() > 2) { 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setDictionary(2, 400, 550); 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 2747b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa dict.setDictionary(WnnDictionary.INDEX_USER_DICTIONARY, FREQ_USER, FREQ_USER); 2757b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa dict.setDictionary(WnnDictionary.INDEX_LEARN_DICTIONARY, FREQ_LEARN, FREQ_LEARN); 276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* search dictionaries */ 278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.searchWord(WnnDictionary.SEARCH_PREFIX, WnnDictionary.ORDER_BY_FREQUENCY, mSearchKey); 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 1; 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#convert */ 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int convert(ComposingText text) { 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearCandidates(); 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#searchWords */ 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int searchWords(String key) { 290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearCandidates(); 291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#searchWords */ 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int searchWords(WnnWord word) { 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearCandidates(); 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#getNextCandidate */ 301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnWord getNextCandidate() { 302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mSearchKey == null) { 303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return null; 304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord word = getCandidate(mOutputNum); 306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (word != null) { 307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mOutputNum++; 308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return word; 310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#learn */ 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean learn(WnnWord word) { 314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( mDictionary.learnWord(word) == 0 ); 315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#addWord */ 318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int addWord(WnnWord word) { 319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnDictionary dict = mDictionary; 320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.addWordToUserDictionary(word); 322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( false ); 323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#deleteWord */ 327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean deleteWord(WnnWord word) { 328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnDictionary dict = mDictionary; 329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.removeWordFromUserDictionary(word); 331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( false ); 332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#setPreferences */ 336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void setPreferences(SharedPreferences pref) {} 337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#breakSequence */ 339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void breakSequence() {} 340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#makeCandidateListOf */ 342053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public int makeCandidateListOf(int clausePosition) {return 0;} 343053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#initializeDictionary */ 345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean initializeDictionary(int dictionary) { 346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnDictionary dict = mDictionary; 347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch( dictionary ) { 349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case WnnEngine.DICTIONARY_TYPE_LEARN: 350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.clearLearnDictionary(); 352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( false ); 353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case WnnEngine.DICTIONARY_TYPE_USER: 356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.clearUserDictionary(); 358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( false ); 359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 3637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 3647b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** @see jp.co.omronsoft.openwnn.WnnEngine#initializeDictionary */ 3657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public boolean initializeDictionary(int dictionary, int type) { 3667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa return initializeDictionary(dictionary); 3677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa } 368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see jp.co.omronsoft.openwnn.WnnEngine#getUserDictionaryWords */ 370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnWord[] getUserDictionaryWords( ) { 371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnDictionary dict = mDictionary; 372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( true ); 373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord[] result = dict.getUserDictionaryWords( ); 374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dict.setInUseState( false ); 375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return result; 376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 379