/* * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jp.co.omronsoft.openwnn; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import org.xmlpull.v1.XmlPullParserException; import android.content.SharedPreferences; import android.content.res.XmlResourceParser; import android.util.Log; /** * The generator class of symbol list. *
* This class is used for generating lists of symbols. * * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. */ public class SymbolList implements WnnEngine { /* * DEFINITION OF CONSTANTS */ /** Language definition (English) */ public static final int LANG_EN = 0; /** Language definition (Japanese) */ public static final int LANG_JA = 1; /** Language definition (Chinese) */ public static final int LANG_ZHCN = 2; /** Key string to get normal symbol list for Japanese */ public static final String SYMBOL_JAPANESE = "j"; /** Key string to get normal symbol list for English */ public static final String SYMBOL_ENGLISH = "e"; /** Key string to get normal symbol list for Chinese */ public static final String SYMBOL_CHINESE = "c1"; /** Key string to get face mark list for Japanese */ public static final String SYMBOL_JAPANESE_FACE = "j_face"; /** The name of XML tag key */ private static final String XMLTAG_KEY = "string"; /* * DEFINITION OF VARIABLES */ /** Symbols data */ protected HashMap> mSymbols; /** OpenWnn which has this instance */ private OpenWnn mWnn; /** current list of symbols */ private ArrayList mCurrentList; /** Iterator for getting symbols from the list */ private Iterator mCurrentListIterator; /* * DEFINITION OF METHODS */ /** * Constructor * * @param parent OpenWnn instance which uses this. * @param lang Language ({@code LANG_EN}, {@code LANG_JA} or {@code LANG_ZHCN}) */ public SymbolList(OpenWnn parent, int lang) { mWnn = parent; mSymbols = new HashMap>(); switch (lang) { case LANG_EN: /* symbols for English IME */ mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin12_list)); mCurrentList = mSymbols.get(SYMBOL_ENGLISH); break; case LANG_JA: /* symbols for Japanese IME */ mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin1_list)); mSymbols.put(SYMBOL_JAPANESE, getXmlfile(R.xml.symbols_japan_list)); mSymbols.put(SYMBOL_JAPANESE_FACE, getXmlfile(R.xml.symbols_japan_face_list)); mCurrentList = mSymbols.get(SYMBOL_ENGLISH); break; case LANG_ZHCN: /* symbols for Chinese IME */ mSymbols.put(SYMBOL_CHINESE, getXmlfile(R.xml.symbols_china_list)); mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin1_list)); mCurrentList = mSymbols.get(SYMBOL_CHINESE); break; } mCurrentList = null; } /** * Get a attribute value from a XML resource. * * @param xrp XML resource * @param name The attribute name * * @return The value of the attribute */ private String getXmlAttribute(XmlResourceParser xrp, String name) { int resId = xrp.getAttributeResourceValue(null, name, 0); if (resId == 0) { return xrp.getAttributeValue(null, name); } else { return mWnn.getString(resId); } } /** * Load a symbols list from XML resource. * * @param id XML resource ID * @return The symbols list */ private ArrayList getXmlfile(int id) { ArrayList list = new ArrayList(); XmlResourceParser xrp = mWnn.getResources().getXml(id); try { int xmlEventType; while ((xmlEventType = xrp.next()) != XmlResourceParser.END_DOCUMENT) { if (xmlEventType == XmlResourceParser.START_TAG) { String attribute = xrp.getName(); if (XMLTAG_KEY.equals(attribute)) { String value = getXmlAttribute(xrp, "value"); if (value != null) { list.add(value); } } } } xrp.close(); } catch (XmlPullParserException e) { Log.e("OpenWnn", "Ill-formatted keybaord resource file"); } catch (IOException e) { Log.e("OpenWnn", "Unable to read keyboard resource file"); } return list; } /** * Set the dictionary * * @param listType The list of symbol * @return {@code true} if valid type is specified; {@code false} if not; */ public boolean setDictionary(String listType) { mCurrentList = mSymbols.get(listType); return (mCurrentList != null); } /*********************************************************************** * WnnEngine's interface **********************************************************************/ /** @see jp.co.omronsoft.openwnn.WnnEngine#init */ public void init() {} /** @see jp.co.omronsoft.openwnn.WnnEngine#close */ public void close() {} /** @see jp.co.omronsoft.openwnn.WnnEngine#predict */ public int predict(ComposingText text, int minLen, int maxLen) { /* ignore if there is no list for the type */ if (mCurrentList == null) { mCurrentListIterator = null; return 0; } /* return the iterator of the list */ mCurrentListIterator = mCurrentList.iterator(); return 1; } /** @see jp.co.omronsoft.openwnn.WnnEngine#convert */ public int convert(ComposingText text) { return 0; } /** @see jp.co.omronsoft.openwnn.WnnEngine#searchWords */ public int searchWords(String key) {return 0;} /** @see jp.co.omronsoft.openwnn.WnnEngine#searchWords */ public int searchWords(WnnWord word) {return 0;} /** @see jp.co.omronsoft.openwnn.WnnEngine#getNextCandidate */ public WnnWord getNextCandidate() { if (mCurrentListIterator == null || !mCurrentListIterator.hasNext()) { return null; } String str = mCurrentListIterator.next(); WnnWord word = new WnnWord(str, str); return word; } /** @see jp.co.omronsoft.openwnn.WnnEngine#learn */ public boolean learn(WnnWord word) {return false;} /** @see jp.co.omronsoft.openwnn.WnnEngine#addWord */ public int addWord(WnnWord word) {return 0;} /** @see jp.co.omronsoft.openwnn.WnnEngine#deleteWord */ public boolean deleteWord(WnnWord word) {return false;} /** @see jp.co.omronsoft.openwnn.WnnEngine#setPreferences */ public void setPreferences(SharedPreferences pref) {} /** @see jp.co.omronsoft.openwnn.WnnEngine#breakSequence */ public void breakSequence() {} /** @see jp.co.omronsoft.openwnn.WnnEngine#makeCandidateListOf */ public int makeCandidateListOf(int clausePosition) {return 0;} /** @see jp.co.omronsoft.openwnn.WnnEngine#initializeDictionary */ public boolean initializeDictionary(int dictionary) {return true;} /** @see jp.co.omronsoft.openwnn.WnnEngine#initializeDictionary */ public boolean initializeDictionary(int dictionary, int type) {return true;} /** @see jp.co.omronsoft.openwnn.WnnEngine#getUserDictionaryWords */ public WnnWord[] getUserDictionaryWords() {return null;} }