|
GateIMDescriptor |
|
1 /* 2 * GateIMDescriptor.java 3 * 4 * Copyright (c) 2000-2001, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June1991. 9 * 10 * A copy of this licence is included in the distribution in the file 11 * licence.html, and is also available at http://gate.ac.uk/gate/licence.html. 12 * 13 * Valentin Tablan, October 2000 14 * 15 * $Id: GateIMDescriptor.java,v 1.3 2001/04/17 18:09:11 oana Exp $ 16 */ 17 package guk.im; 18 19 import java.util.Locale; 20 import java.awt.*; 21 import java.awt.Image; 22 import java.awt.im.spi.InputMethod; 23 import java.awt.im.spi.InputMethodDescriptor; 24 import java.io.*; 25 import java.util.*; 26 27 import guk.*; 28 29 30 /** 31 * Provides a way for the Gate input method to be discovered by the system. 32 * 33 * @see java.awt.im 34 * @see java.awt.im.spi 35 */ 36 public class GateIMDescriptor implements InputMethodDescriptor { 37 38 /** 39 * Default constructor. 40 */ 41 public GateIMDescriptor() { 42 try{ 43 InputStream is = GateIM.class.getResourceAsStream( 44 GateIM.getIMBase() + "im.list"); 45 if (is==null) throw new IllegalArgumentException( 46 "Failed to retrieve resource 'im.list'. Please reset classpath."); 47 BufferedReader br = new BufferedReader(new InputStreamReader(is)); 48 String line = br.readLine(); 49 StringTokenizer st; 50 String filename, language, country, variant; 51 supportedLocales = new HashMap(); 52 while(line != null){ 53 //skip comments and empty lines 54 if(line.startsWith("#") || line.startsWith("//") || 55 line.length() == 0 ){ 56 line = br.readLine(); 57 continue; 58 } 59 language = country = variant = null; 60 st = new StringTokenizer(line, "\t", false); 61 if(st.hasMoreTokens()){ 62 //get the file 63 filename = st.nextToken(); 64 if(st.hasMoreTokens()){ 65 //get the language 66 language = st.nextToken(); 67 if(st.hasMoreElements()){ 68 //get the country 69 country = st.nextToken(); 70 if(country.equals("--")) country = ""; 71 if(st.hasMoreElements()){ 72 //get the variant 73 variant = st.nextToken(); 74 supportedLocales.put(new Locale(language,country,variant), 75 filename); 76 } else { 77 //no variant 78 supportedLocales.put(new Locale(language,country), filename); 79 } 80 } else { 81 //no country 82 throw new IllegalArgumentException( 83 "Invalid input methods definition file!\n"); 84 } 85 } else { 86 //no language 87 throw new IllegalArgumentException( 88 "Invalid input methods definition file!\n"); 89 } 90 } 91 line = br.readLine(); 92 } 93 } catch(IOException ioe){ 94 ioe.printStackTrace(); 95 } 96 } 97 98 /** 99 * Gets an Array with the locales supported by the Gate input method. 100 * 101 * @exception AWTException 102 */ 103 public Locale[] getAvailableLocales() throws AWTException { 104 java.util.List locales = new ArrayList(supportedLocales.keySet()); 105 Collections.sort(locales, new Comparator(){ 106 /** 107 * Comparison method used for sorting the available locales. 108 * 109 * @param a 110 * @param b 111 */ 112 public int compare(Object a, Object b){ 113 if(a instanceof Locale && b instanceof Locale){ 114 Locale l1 = (Locale) a; 115 Locale l2 = (Locale) b; 116 return l1.getDisplayLanguage().compareTo(l2.getDisplayLanguage()); 117 }else throw new ClassCastException(); 118 }// int compare(Object a, Object b) 119 }); 120 return (Locale[])locales.toArray(new Locale[0]); 121 } 122 123 /** 124 * Is the available locales list dynamic. Always returns <tt>false</tt>; 125 * 126 */ 127 public boolean hasDynamicLocaleList() { 128 return false; 129 } 130 131 /** 132 * Returns the display name for the input method for a given locale. 133 * 134 * @param inputLocale the locale for which the display name is sought 135 * @param displayLanguage the current locale to be used for displaying the 136 * name 137 */ 138 public String getInputMethodDisplayName(Locale inputLocale, 139 Locale displayLanguage) { 140 if(inputLocale == null) return "Gate Unicode Input Methods"; 141 return inputLocale.getDisplayName(inputLocale); 142 } 143 144 /** 145 * Provides an icon for the gate input method. 146 * 147 * @param inputLocale 148 */ 149 public Image getInputMethodIcon(Locale inputLocale) { 150 //not yet! 151 return null; 152 } 153 154 /** 155 * Creates a new {@link GateIM} object and returns a handle. 156 * 157 * @exception Exception 158 */ 159 public InputMethod createInputMethod() throws Exception { 160 return new GateIM(supportedLocales); 161 } 162 163 /* static public void main(String[] args){ 164 try{ 165 GateIMDescriptor gd = new GateIMDescriptor(); 166 InputMethod im = gd.createInputMethod(); 167 // im.setLocale(new Locale("ar","","Windows")); 168 //try all locales 169 Locale[] locales = gd.getAvailableLocales(); 170 for(int i=0; i < locales.length; i++) im.setLocale(locales[i]); 171 }catch(Exception e){ 172 e.printStackTrace(); 173 } 174 } 175 */ 176 /** 177 * The available locales. Maps from locale to filename. 178 * 179 */ 180 Map supportedLocales; 181 }// class GateIMDescriptor implements InputMethodDescriptor 182
|
GateIMDescriptor |
|