Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
9d98d838
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9d98d838
编写于
5月 18, 2010
作者:
P
peytoia
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6953294: Fix for 6909002 was incorrectly merged
Reviewed-by: okutsu
上级
86a9d2ae
变更
25
显示空白变更内容
内联
并排
Showing
25 changed file
with
1 addition
and
2644 deletion
+1
-2644
make/com/sun/Makefile
make/com/sun/Makefile
+1
-1
make/com/sun/inputmethods/Makefile
make/com/sun/inputmethods/Makefile
+0
-39
make/com/sun/inputmethods/indicim/Makefile
make/com/sun/inputmethods/indicim/Makefile
+0
-79
make/com/sun/inputmethods/thaiim/Makefile
make/com/sun/inputmethods/thaiim/Makefile
+0
-79
src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java
...ods/internal/indicim/DevanagariInputMethodDescriptor.java
+0
-102
src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariTables.java
...m/sun/inputmethods/internal/indicim/DevanagariTables.java
+0
-255
src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethod.java
...m/sun/inputmethods/internal/indicim/IndicInputMethod.java
+0
-436
src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java
...n/inputmethods/internal/indicim/IndicInputMethodImpl.java
+0
-475
src/share/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor
...ds/internal/indicim/java.awt.im.spi.InputMethodDescriptor
+0
-1
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties
...ethods/internal/indicim/resources/DisplayNames.properties
+0
-6
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties
...ods/internal/indicim/resources/DisplayNames_de.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties
...ods/internal/indicim/resources/DisplayNames_es.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties
...ods/internal/indicim/resources/DisplayNames_fr.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties
...ods/internal/indicim/resources/DisplayNames_it.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties
...ods/internal/indicim/resources/DisplayNames_ja.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties
...ods/internal/indicim/resources/DisplayNames_ko.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties
...ods/internal/indicim/resources/DisplayNames_sv.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties
.../internal/indicim/resources/DisplayNames_zh_CN.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties
.../internal/indicim/resources/DisplayNames_zh_TW.properties
+0
-5
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java
...com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java
+0
-437
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java
...putmethods/internal/thaiim/ThaiInputMethodDescriptor.java
+0
-99
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java
...sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java
+0
-235
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiRules.java
...asses/com/sun/inputmethods/internal/thaiim/ThaiRules.java
+0
-348
src/share/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
...ods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
+0
-1
src/share/classes/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties
...methods/internal/thaiim/resources/DisplayNames.properties
+0
-6
未找到文件。
make/com/sun/Makefile
浏览文件 @
9d98d838
...
@@ -42,7 +42,7 @@ endif
...
@@ -42,7 +42,7 @@ endif
SUBDIRS
=
java security net/ssl jarsigner
SUBDIRS
=
java security net/ssl jarsigner
SUBDIRS_management
=
jmx
SUBDIRS_management
=
jmx
SUBDIRS_desktop
=
image
inputmethods
SUBDIRS_desktop
=
image
SUBDIRS_enterprise
=
crypto/provider jndi
\
SUBDIRS_enterprise
=
crypto/provider jndi
\
org xml rowset net/httpserver
org xml rowset net/httpserver
SUBDIRS_misc
=
$(SCRIPT_SUBDIR)
tracing servicetag nio demo
SUBDIRS_misc
=
$(SCRIPT_SUBDIR)
tracing servicetag nio demo
...
...
make/com/sun/inputmethods/Makefile
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
#
# Makefile for building Java input methods
#
BUILDDIR
=
../../..
PRODUCT
=
sun
include
$(BUILDDIR)/common/Defs.gmk
SUBDIRS
=
indicim thaiim
include
$(BUILDDIR)/common/Subdirs.gmk
all build clean clobber
::
$
(
SUBDIRS-loop
)
make/com/sun/inputmethods/indicim/Makefile
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
#
# Makefile for indic input method.
#
BUILDDIR
=
../../../..
PACKAGE
=
com.sun.inputmethods.internal.indicim
PRODUCT
=
sun
CLASSDESTDIR
=
$(TEMPDIR)
/classes
SERVICESDIR
=
META-INF/services
IMJAR
=
$(IMJARDIR)
/indicim.jar
IMJARDIR
=
$(LIBDIR)
/im
include
$(BUILDDIR)/common/Defs.gmk
#
# Files
#
AUTO_FILES_JAVA_DIRS
=
com/sun/inputmethods/internal/indicim
FILES_copy
=
\
$(CLASSDESTDIR)
/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties
PROVIDER_CONF_FILE
=
\
$(CLASSDESTDIR)
/
$(SERVICESDIR)
/java.awt.im.spi.InputMethodDescriptor
#
# Rules
#
include
$(BUILDDIR)/common/Classes.gmk
build
:
$(IMJAR)
#
# Extra rules to build im.
#
$(CLASSDESTDIR)/com/sun/inputmethods/internal/indicim/resources/%
:
$(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/resources/%
$
(
install-file
)
$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
:
$(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor
$
(
install-file
)
$(IMJAR)
:
$(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
$
(
prep-target
)
$(BOOT_JAR_CMD)
-cf
$@
\
-C
$(CLASSDESTDIR)
com
\
-C
$(CLASSDESTDIR)
$(SERVICESDIR)
\
$(BOOT_JAR_JFLAGS)
@
$
(
java-vm-cleanup
)
clean
::
$(RM)
-r
$(CLASSDESTDIR)
$(RM)
$(IMJAR)
make/com/sun/inputmethods/thaiim/Makefile
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
#
# Makefile for thai input method.
#
BUILDDIR
=
../../../..
PACKAGE
=
com.sun.inputmethods.internal.thaiim
PRODUCT
=
sun
CLASSDESTDIR
=
$(TEMPDIR)
/classes
SERVICESDIR
=
META-INF/services
IMJAR
=
$(IMJARDIR)
/thaiim.jar
IMJARDIR
=
$(LIBDIR)
/im
include
$(BUILDDIR)/common/Defs.gmk
#
# Files
#
AUTO_FILES_JAVA_DIRS
=
com/sun/inputmethods/internal/thaiim
FILES_copy
=
\
$(CLASSDESTDIR)
/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties
PROVIDER_CONF_FILE
=
\
$(CLASSDESTDIR)
/
$(SERVICESDIR)
/java.awt.im.spi.InputMethodDescriptor
#
# Rules
#
include
$(BUILDDIR)/common/Classes.gmk
build
:
$(IMJAR)
#
# Extra rules to build im.
#
$(CLASSDESTDIR)/com/sun/inputmethods/internal/thaiim/resources/%
:
$(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/resources/%
$
(
install-file
)
$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
:
$(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
$
(
install-file
)
$(IMJAR)
:
$(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
$
(
prep-target
)
$(BOOT_JAR_CMD)
-cf
$@
\
-C
$(CLASSDESTDIR)
com
\
-C
$(CLASSDESTDIR)
$(SERVICESDIR)
\
$(BOOT_JAR_JFLAGS)
@
$
(
java-vm-cleanup
)
clean
::
$(RM)
-r
$(CLASSDESTDIR)
$(RM)
$(IMJAR)
src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.indicim
;
import
java.awt.Image
;
import
java.awt.im.spi.InputMethod
;
import
java.awt.im.spi.InputMethodDescriptor
;
import
java.util.Locale
;
import
java.util.MissingResourceException
;
import
java.util.ResourceBundle
;
public
class
DevanagariInputMethodDescriptor
implements
InputMethodDescriptor
{
static
final
Locale
HINDI
=
new
Locale
(
"hi"
,
"IN"
);
public
DevanagariInputMethodDescriptor
()
{
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
*/
public
Locale
[]
getAvailableLocales
()
{
return
new
Locale
[]
{
HINDI
};
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
*/
public
boolean
hasDynamicLocaleList
()
{
return
false
;
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
*/
public
synchronized
String
getInputMethodDisplayName
(
Locale
inputLocale
,
Locale
displayLanguage
)
{
try
{
ResourceBundle
resources
=
ResourceBundle
.
getBundle
(
"com.sun.inputmethods.internal.indicim.resources.DisplayNames"
,
displayLanguage
);
return
resources
.
getString
(
"DisplayName.Devanagari"
);
}
catch
(
MissingResourceException
mre
)
{
return
"Devanagari Input Method"
;
}
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
*/
public
Image
getInputMethodIcon
(
Locale
inputLocale
)
{
return
null
;
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
*/
public
InputMethod
createInputMethod
()
throws
Exception
{
IndicInputMethodImpl
impl
=
new
IndicInputMethodImpl
(
DevanagariTables
.
keyboardMap
,
DevanagariTables
.
joinWithNukta
,
DevanagariTables
.
nuktaForm
,
DevanagariTables
.
substitutionTable
);
return
new
IndicInputMethod
(
HINDI
,
impl
);
}
public
String
toString
()
{
return
getClass
().
getName
();
}
}
src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariTables.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Copyright 2002-2003 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.indicim
;
class
DevanagariTables
{
static
final
char
[]
keyboardMap
=
{
/* 00 */
'\u0000'
,
/* 01 */
'\u0001'
,
/* 02 */
'\u0002'
,
/* 03 */
'\u0003'
,
/* 04 */
'\u0004'
,
/* 05 */
'\u0005'
,
/* 06 */
'\u0006'
,
/* 07 */
'\u0007'
,
/* 08 */
'\u0008'
,
/* 09 */
'\u0009'
,
/* 0A */
'\
012
'
,
/* 0B */
'\
u000B
'
,
/* 0C */
'\
u000C
'
,
/* 0D */
'\
015
'
,
/* 0E */
'\
u000E
'
,
/* 0F */
'\
u000F
'
,
/* 10 */
'\u0010'
,
/* 11 */
'\u0011'
,
/* 12 */
'\u0012'
,
/* 13 */
'\u0013'
,
/* 14 */
'\u0014'
,
/* 15 */
'\u0015'
,
/* 16 */
'\u0016'
,
/* 17 */
'\u0017'
,
/* 18 */
'\u0018'
,
/* 19 */
'\u0019'
,
/* 1A */
'\
u001A
'
,
/* 1B */
'\
u001B
'
,
/* 1C */
'\
u001C
'
,
/* 1D */
'\
u001D
'
,
/* 1E */
'\
u001E
'
,
/* 1F */
'\
u001F
'
,
/* 20 */
'\u0020'
,
/* 21 */
'\
u090D
'
,
// '!'
/* 22 */
'\u0920'
,
// '"'
/* 23 */
'\
uFF00
'
,
// '#'
/* 24 */
'\
uFF01
'
,
// '$'
/* 25 */
'\
uFF02
'
,
// '%'
/* 26 */
'\
uFF04
'
,
// '&'
/* 27 */
'\
u091F
'
,
// '''
/* 28 */
'\u0028'
,
// '('
/* 29 */
'\u0029'
,
// ')'
/* 2A */
'\
uFF05
'
,
// '*'
/* 2B */
'\
u090B
'
,
// '+'
/* 2C */
'\
u002C
'
,
// ','
/* 2D */
'\
u002D
'
,
// '-'
/* 2E */
'\
u002E
'
,
// '.'
/* 2F */
'\
u092F
'
,
// '/'
/* 30 */
'\u0966'
,
// '0'
/* 31 */
'\u0967'
,
// '1'
/* 32 */
'\u0968'
,
// '2'
/* 33 */
'\u0969'
,
// '3'
/* 34 */
'\
u096A
'
,
// '4'
/* 35 */
'\
u096B
'
,
// '5'
/* 36 */
'\
u096C
'
,
// '6'
/* 37 */
'\
u096D
'
,
// '7'
/* 38 */
'\
u096E
'
,
// '8'
/* 39 */
'\
u096F
'
,
// '9'
/* 3A */
'\
u091B
'
,
// ':'
/* 3B */
'\
u091A
'
,
// ';'
/* 3C */
'\u0937'
,
// '<'
/* 3D */
'\u0943'
,
// '='
/* 3E */
'\u0964'
,
// '>'
/* 3F */
'\
u095F
'
,
// '?'
/* 40 */
'\u0945'
,
// '@'
/* 41 */
'\u0913'
,
// 'A'
/* 42 */
'\u0934'
,
// 'B'
/* 43 */
'\u0923'
,
// 'C'
/* 44 */
'\u0905'
,
// 'D'
/* 45 */
'\u0906'
,
// 'E'
/* 46 */
'\u0907'
,
// 'F'
/* 47 */
'\u0909'
,
// 'G'
/* 48 */
'\
u092B
'
,
// 'H'
/* 49 */
'\u0918'
,
// 'I'
/* 4A */
'\u0931'
,
// 'J'
/* 4B */
'\u0916'
,
// 'K'
/* 4C */
'\u0925'
,
// 'L'
/* 4D */
'\u0936'
,
// 'M'
/* 4E */
'\u0933'
,
// 'N'
/* 4F */
'\u0927'
,
// 'O'
/* 50 */
'\
u091D
'
,
// 'P'
/* 51 */
'\u0914'
,
// 'Q'
/* 52 */
'\u0908'
,
// 'R'
/* 53 */
'\
u090F
'
,
// 'S'
/* 54 */
'\
u090A
'
,
// 'T'
/* 55 */
'\u0919'
,
// 'U'
/* 56 */
'\u0929'
,
// 'V'
/* 57 */
'\u0910'
,
// 'W'
/* 58 */
'\u0901'
,
// 'X'
/* 59 */
'\
u092D
'
,
// 'Y'
/* 5A */
'\
u090E
'
,
// 'Z'
/* 5B */
'\u0921'
,
// '['
/* 5C */
'\u0949'
,
// '\'
/* 5D */
'\
u093C
'
,
// ']'
/* 5E */
'\
uFF03
'
,
// '^'
/* 5F */
'\u0903'
,
// '_'
/* 60 */
'\
u094A
'
,
// '`'
/* 61 */
'\
u094B
'
,
// 'a'
/* 62 */
'\u0935'
,
// 'b'
/* 63 */
'\
u092E
'
,
// 'c'
/* 64 */
'\
u094D
'
,
// 'd'
/* 65 */
'\
u093E
'
,
// 'e'
/* 66 */
'\
u093F
'
,
// 'f'
/* 67 */
'\u0941'
,
// 'g'
/* 68 */
'\
u092A
'
,
// 'h'
/* 69 */
'\u0917'
,
// 'i'
/* 6A */
'\u0930'
,
// 'j'
/* 6B */
'\u0915'
,
// 'k'
/* 6C */
'\u0924'
,
// 'l'
/* 6D */
'\u0938'
,
// 'm'
/* 6E */
'\u0932'
,
// 'n'
/* 6F */
'\u0926'
,
// 'o'
/* 70 */
'\
u091C
'
,
// 'p'
/* 71 */
'\
u094C
'
,
// 'q'
/* 72 */
'\u0940'
,
// 'r'
/* 73 */
'\u0947'
,
// 's'
/* 74 */
'\u0942'
,
// 't'
/* 75 */
'\u0939'
,
// 'u'
/* 76 */
'\u0928'
,
// 'v'
/* 77 */
'\u0948'
,
// 'w'
/* 78 */
'\u0902'
,
// 'x'
/* 79 */
'\
u092C
'
,
// 'y'
/* 7A */
'\u0946'
,
// 'z'
/* 7B */
'\u0922'
,
// '{'
/* 7C */
'\u0911'
,
// '|'
/* 7D */
'\
u091E
'
,
// '}'
/* 7E */
'\u0912'
,
// '~'
/* 7F */
'\
u007F
'
//
};
// the character substitutions for the meta characters.
static
final
char
[]
RA_SUB
=
{
'\
u094D
'
,
'\u0930'
};
static
final
char
[]
RA_SUP
=
{
'\u0930'
,
'\
u094D
'
};
static
final
char
[]
CONJ_JA_NYA
=
{
'\
u091C
'
,
'\
u094D
'
,
'\
u091E
'
};
static
final
char
[]
CONJ_TA_RA
=
{
'\u0924'
,
'\
u094D
'
,
'\u0930'
};
static
final
char
[]
CONJ_KA_SSA
=
{
'\u0915'
,
'\
u094D
'
,
'\u0937'
};
static
final
char
[]
CONJ_SHA_RA
=
{
'\u0936'
,
'\
u094D
'
,
'\u0930'
};
static
final
char
[][]
substitutionTable
=
{
RA_SUB
,
RA_SUP
,
CONJ_JA_NYA
,
CONJ_TA_RA
,
CONJ_KA_SSA
,
CONJ_SHA_RA
};
// The following characters followed by Nukta should be replaced
// by the corresponding character as defined in ISCII91
static
final
char
SIGN_CANDRABINDU
=
'\u0901'
;
static
final
char
LETTER_I
=
'\u0907'
;
static
final
char
LETTER_II
=
'\u0908'
;
static
final
char
LETTER_VOCALIC_R
=
'\
u090B
'
;
static
final
char
LETTER_KA
=
'\u0915'
;
static
final
char
LETTER_KHA
=
'\u0916'
;
static
final
char
LETTER_GA
=
'\u0917'
;
static
final
char
LETTER_JA
=
'\
u091C
'
;
static
final
char
LETTER_DDA
=
'\u0921'
;
static
final
char
LETTER_DDHA
=
'\u0922'
;
static
final
char
LETTER_PHA
=
'\
u092B
'
;
static
final
char
VOWEL_SIGN_I
=
'\
u093F
'
;
static
final
char
VOWEL_SIGN_II
=
'\u0940'
;
static
final
char
VOWEL_SIGN_VOCALIC_R
=
'\u0943'
;
static
final
char
DANDA
=
'\u0964'
;
// The follwing characters replace the above characters followed by Nukta. These
// are defined in one to one correspondence order.
static
final
char
SIGN_OM
=
'\u0950'
;
static
final
char
LETTER_VOCALIC_L
=
'\
u090C
'
;
static
final
char
LETTER_VOCALIC_LL
=
'\u0961'
;
static
final
char
LETTER_VOCALIC_RR
=
'\u0960'
;
static
final
char
LETTER_QA
=
'\u0958'
;
static
final
char
LETTER_KHHA
=
'\u0959'
;
static
final
char
LETTER_GHHA
=
'\
u095A
'
;
static
final
char
LETTER_ZA
=
'\
u095B
'
;
static
final
char
LETTER_DDDHA
=
'\
u095C
'
;
static
final
char
LETTER_RHA
=
'\
u095D
'
;
static
final
char
LETTER_FA
=
'\
u095E
'
;
static
final
char
VOWEL_SIGN_VOCALIC_L
=
'\u0962'
;
static
final
char
VOWEL_SIGN_VOCALIC_LL
=
'\u0963'
;
static
final
char
VOWEL_SIGN_VOCALIC_RR
=
'\u0944'
;
static
final
char
SIGN_AVAGRAHA
=
'\
u093D
'
;
static
final
char
[]
joinWithNukta
=
{
SIGN_CANDRABINDU
,
LETTER_I
,
LETTER_II
,
LETTER_VOCALIC_R
,
LETTER_KA
,
LETTER_KHA
,
LETTER_GA
,
LETTER_JA
,
LETTER_DDA
,
LETTER_DDHA
,
LETTER_PHA
,
VOWEL_SIGN_I
,
VOWEL_SIGN_II
,
VOWEL_SIGN_VOCALIC_R
,
DANDA
};
static
final
char
[]
nuktaForm
=
{
SIGN_OM
,
LETTER_VOCALIC_L
,
LETTER_VOCALIC_LL
,
LETTER_VOCALIC_RR
,
LETTER_QA
,
LETTER_KHHA
,
LETTER_GHHA
,
LETTER_ZA
,
LETTER_DDDHA
,
LETTER_RHA
,
LETTER_FA
,
VOWEL_SIGN_VOCALIC_L
,
VOWEL_SIGN_VOCALIC_LL
,
VOWEL_SIGN_VOCALIC_RR
,
SIGN_AVAGRAHA
};
}
src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethod.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.indicim
;
import
java.awt.im.spi.InputMethod
;
import
java.awt.im.spi.InputMethodContext
;
import
java.awt.AWTEvent
;
import
java.awt.Rectangle
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.MouseEvent
;
import
java.lang.Character.Subset
;
import
java.util.Locale
;
class
IndicInputMethod
implements
InputMethod
{
private
IndicInputMethodImpl
impl
;
private
Locale
locale
;
IndicInputMethod
(
Locale
theLocale
,
IndicInputMethodImpl
theImplementation
)
{
locale
=
theLocale
;
impl
=
theImplementation
;
}
/**
* Sets the input method context, which is used to dispatch input method
* events to the client component and to request information from
* the client component.
* <p>
* This method is called once immediately after instantiating this input
* method.
*
* @param context the input method context for this input method
* @exception NullPointerException if <code>context</code> is null
*/
public
void
setInputMethodContext
(
InputMethodContext
context
)
{
impl
.
setInputMethodContext
(
context
);
}
/**
* Attempts to set the input locale. If the input method supports the
* desired locale, it changes its behavior to support input for the locale
* and returns true.
* Otherwise, it returns false and does not change its behavior.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* <li>when switching to this input method through the user interface if the user
* specified a locale or if the previously selected input method's
* {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
* returns a non-null value.
* </ul>
*
* @param locale locale to input
* @return whether the specified locale is supported
* @exception NullPointerException if <code>locale</code> is null
*/
public
boolean
setLocale
(
Locale
locale
)
{
if
(
locale
.
getLanguage
().
equals
(
this
.
locale
.
getLanguage
()))
{
//System.out.println("returning true for locale " + locale);
return
true
;
}
else
{
//System.out.println("returning false for locale " + locale);
return
false
;
}
}
/**
* Returns the current input locale. Might return null in exceptional cases.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
* <li>when switching from this input method to a different one through the
* user interface.
* </ul>
*
* @return the current input locale, or null
*/
public
Locale
getLocale
()
{
return
locale
;
}
/**
* Sets the subsets of the Unicode character set that this input method
* is allowed to input. Null may be passed in to indicate that all
* characters are allowed.
* <p>
* This method is called
* <ul>
* <li>immediately after instantiating this input method,
* <li>when switching to this input method from a different one, and
* <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
* </ul>
*
* @param subsets the subsets of the Unicode character set from which
* characters may be input
*/
public
void
setCharacterSubsets
(
Subset
[]
subsets
)
{
}
/**
* Enables or disables this input method for composition,
* depending on the value of the parameter <code>enable</code>.
* <p>
* An input method that is enabled for composition interprets incoming
* events for both composition and control purposes, while a
* disabled input method does not interpret events for composition.
* Note however that events are passed on to the input method regardless
* whether it is enabled or not, and that an input method that is disabled
* for composition may still interpret events for control purposes,
* including to enable or disable itself for composition.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
* <li>when switching to this input method from a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* if the previously selected input method's
* {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
* method returns without throwing an exception.
* </ul>
*
* @param enable whether to enable the input method for composition
* @throws UnsupportedOperationException if this input method does not
* support the enabling/disabling operation
* @see #isCompositionEnabled
*/
public
void
setCompositionEnabled
(
boolean
enable
)
{
throw
new
UnsupportedOperationException
();
}
/**
* Determines whether this input method is enabled.
* An input method that is enabled for composition interprets incoming
* events for both composition and control purposes, while a
* disabled input method does not interpret events for composition.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
*
* @return <code>true</code> if this input method is enabled for
* composition; <code>false</code> otherwise.
* @throws UnsupportedOperationException if this input method does not
* support checking whether it is enabled for composition
* @see #setCompositionEnabled
*/
public
boolean
isCompositionEnabled
()
{
return
true
;
}
/**
* Starts the reconversion operation. The input method obtains the
* text to be reconverted from the current client component using the
* {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
* method. It can use other <code>InputMethodRequests</code>
* methods to request additional information required for the
* reconversion operation. The composed and committed text
* produced by the operation is sent to the client component as a
* sequence of <code>InputMethodEvent</code>s. If the given text
* cannot be reconverted, the same text should be sent to the
* client component as committed text.
* <p>
* This method is called by
* {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
*
* @throws UnsupportedOperationException if the input method does not
* support the reconversion operation.
*/
public
void
reconvert
()
{
throw
new
UnsupportedOperationException
(
"This input method does not reconvert."
);
}
/**
* Dispatches the event to the input method. If input method support is
* enabled for the focussed component, incoming events of certain types
* are dispatched to the current input method for this component before
* they are dispatched to the component's methods or event listeners.
* The input method decides whether it needs to handle the event. If it
* does, it also calls the event's <code>consume</code> method; this
* causes the event to not get dispatched to the component's event
* processing methods or event listeners.
* <p>
* Events are dispatched if they are instances of InputEvent or its
* subclasses.
* This includes instances of the AWT classes KeyEvent and MouseEvent.
* <p>
* This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
*
* @param event the event being dispatched to the input method
* @exception NullPointerException if <code>event</code> is null
*/
public
void
dispatchEvent
(
AWTEvent
event
)
{
if
(
event
instanceof
KeyEvent
)
{
KeyEvent
keyEvent
=
(
KeyEvent
)
event
;
if
(
event
.
getID
()
==
KeyEvent
.
KEY_TYPED
)
{
impl
.
handleKeyTyped
(
keyEvent
);
}
//System.out.println("handled event " + event);
}
else
{
//System.out.println("did not handle event " + event);
}
}
/**
* Notifies this input method of changes in the client window
* location or state. This method is called while this input
* method is the current input method of its input context and
* notifications for it are enabled (see {@link
* InputMethodContext#enableClientWindowNotification
* InputMethodContext.enableClientWindowNotification}). Calls
* to this method are temporarily suspended if the input context's
* {@link java.awt.im.InputContext#removeNotify removeNotify}
* method is called, and resume when the input method is activated
* for a new client component. It is called in the following
* situations:
* <ul>
* <li>
* when the window containing the current client component changes
* in location, size, visibility, iconification state, or when the
* window is closed.</li>
* <li>
* from <code> enableClientWindowNotification(inputMethod,
* true)</code> if the current client component exists,</li>
* <li>
* when activating the input method for the first time after it
* called
* <code>enableClientWindowNotification(inputMethod,
* true)</code> if during the call no current client component was
* available,</li>
* <li>
* when activating the input method for a new client component
* after the input context's removeNotify method has been
* called.</li>
* </ul>
* @param bounds client window's {@link
* java.awt.Component#getBounds bounds} on the screen; or null if
* the client window is iconified or invisible
*/
public
void
notifyClientWindowChange
(
Rectangle
bounds
)
{
}
/**
* Activates the input method for immediate input processing.
* <p>
* If an input method provides its own windows, it should make sure
* at this point that all necessary windows are open and visible.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when a client component receives a FOCUS_GAINED event,
* <li>when switching to this input method from a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
* The method is only called when the input method is inactive.
* A newly instantiated input method is assumed to be inactive.
*/
public
void
activate
()
{
//System.out.println("activated");
}
/**
* Deactivates the input method.
* The isTemporary argument has the same meaning as in
* {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
* <p>
* If an input method provides its own windows, only windows that relate
* to the current composition (such as a lookup choice window) should be
* closed at this point.
* It is possible that the input method will be immediately activated again
* for a different client component, and closing and reopening more
* persistent windows (such as a control panel) would create unnecessary
* screen flicker.
* Before an instance of a different input method class is activated,
* {@link #hideWindows} is called on the current input method.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when a client component receives a FOCUS_LOST event,
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* <li>before {@link #removeNotify removeNotify} if the current client component is
* removed.
* </ul>
* The method is only called when the input method is active.
*
* @param isTemporary whether the focus change is temporary
*/
public
void
deactivate
(
boolean
isTemporary
)
{
//System.out.println("deactivated");
}
/**
* Closes or hides all windows opened by this input method instance or
* its class.
* <p>
* This method is called
* <ul>
* <li>before calling {@link #activate activate} on an instance of a different input
* method class,
* <li>before calling {@link #dispose dispose} on this input method.
* </ul>
* The method is only called when the input method is inactive.
*/
public
void
hideWindows
()
{
}
/**
* Notifies the input method that a client component has been
* removed from its containment hierarchy, or that input method
* support has been disabled for the component.
* <p>
* This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
* <p>
* The method is only called when the input method is inactive.
*/
public
void
removeNotify
()
{
}
/**
* Ends any input composition that may currently be going on in this
* context. Depending on the platform and possibly user preferences,
* this may commit or delete uncommitted text. Any changes to the text
* are communicated to the active component using an input method event.
*
* <p>
* A text editing component may call this in a variety of situations,
* for example, when the user moves the insertion point within the text
* (but outside the composed text), or when the component's text is
* saved to a file or copied to the clipboard.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when switching to a different client component
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
*/
public
void
endComposition
()
{
impl
.
endComposition
();
}
/**
* Disposes of the input method and releases the resources used by it.
* In particular, the input method should dispose windows and close files that are no
* longer needed.
* <p>
* This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
* <p>
* The method is only called when the input method is inactive.
* No method of this interface is called on this instance after dispose.
*/
public
void
dispose
()
{
}
/**
* Returns a control object from this input method, or null. A
* control object provides methods that control the behavior of the
* input method or obtain information from the input method. The type
* of the object is an input method specific class. Clients have to
* compare the result against known input method control object
* classes and cast to the appropriate class to invoke the methods
* provided.
* <p>
* This method is called by
* {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
*
* @return a control object from this input method, or null
*/
public
Object
getControlObject
()
{
return
null
;
}
}
src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.indicim
;
import
java.awt.im.spi.InputMethodContext
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.InputMethodEvent
;
import
java.awt.font.TextAttribute
;
import
java.awt.font.TextHitInfo
;
import
java.text.AttributedCharacterIterator
;
import
java.util.Hashtable
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Set
;
class
IndicInputMethodImpl
{
protected
char
[]
KBD_MAP
;
private
static
final
char
SUBSTITUTION_BASE
=
'\uff00'
;
// Indexed by map value - SUBSTITUTION_BASE
protected
char
[][]
SUBSTITUTION_TABLE
;
// Invalid character.
private
static
final
char
INVALID_CHAR
=
'\uffff'
;
// Unmapped versions of some interesting characters.
private
static
final
char
KEY_SIGN_VIRAMA
=
'\u0064'
;
// or just 'd'??
private
static
final
char
KEY_SIGN_NUKTA
=
'\u005d'
;
// or just ']'??
// Two succeeding viramas are replaced by one virama and one ZWNJ.
// Viram followed by Nukta is replaced by one VIRAMA and one ZWJ
private
static
final
char
ZWJ
=
'\u200d'
;
private
static
final
char
ZWNJ
=
'\u200c'
;
// Backspace
private
static
final
char
BACKSPACE
=
'\u0008'
;
// Sorted list of characters which can be followed by Nukta
protected
char
[]
JOIN_WITH_NUKTA
;
// Nukta form of the above characters
protected
char
[]
NUKTA_FORM
;
private
int
log2
;
private
int
power
;
private
int
extra
;
// cached TextHitInfo. Only one type of TextHitInfo is required.
private
static
final
TextHitInfo
ZERO_TRAILING_HIT_INFO
=
TextHitInfo
.
trailing
(
0
);
/**
* Returns the index of the given character in the JOIN_WITH_NUKTA array.
* If character is not found, -1 is returned.
*/
private
int
nuktaIndex
(
char
ch
)
{
if
(
JOIN_WITH_NUKTA
==
null
)
{
return
-
1
;
}
int
probe
=
power
;
int
index
=
0
;
if
(
JOIN_WITH_NUKTA
[
extra
]
<=
ch
)
{
index
=
extra
;
}
while
(
probe
>
(
1
<<
0
))
{
probe
>>=
1
;
if
(
JOIN_WITH_NUKTA
[
index
+
probe
]
<=
ch
)
{
index
+=
probe
;
}
}
if
(
JOIN_WITH_NUKTA
[
index
]
!=
ch
)
{
index
=
-
1
;
}
return
index
;
}
/**
* Returns the equivalent character for hindi locale.
* @param originalChar The original character.
*/
private
char
getMappedChar
(
char
originalChar
)
{
if
(
originalChar
<=
KBD_MAP
.
length
)
{
return
KBD_MAP
[
originalChar
];
}
return
originalChar
;
}
//getMappedChar()
// Array used to hold the text to be sent.
// If the last character was not committed it is stored in text[0].
// The variable totalChars give an indication of whether the last
// character was committed or not. If at any time ( but not within a
// a call to dispatchEvent ) totalChars is not equal to 0 ( it can
// only be 1 otherwise ) the last character was not committed.
private
char
[]
text
=
new
char
[
4
];
// this is always 0 before and after call to dispatchEvent. This character assumes
// significance only within a call to dispatchEvent.
private
int
committedChars
=
0
;
// number of committed characters
// the total valid characters in variable text currently.
private
int
totalChars
=
0
;
//number of total characters ( committed + composed )
private
boolean
lastCharWasVirama
=
false
;
private
InputMethodContext
context
;
//
// Finds the high bit by binary searching
// through the bits in n.
//
private
static
byte
highBit
(
int
n
)
{
if
(
n
<=
0
)
{
return
-
32
;
}
byte
bit
=
0
;
if
(
n
>=
1
<<
16
)
{
n
>>=
16
;
bit
+=
16
;
}
if
(
n
>=
1
<<
8
)
{
n
>>=
8
;
bit
+=
8
;
}
if
(
n
>=
1
<<
4
)
{
n
>>=
4
;
bit
+=
4
;
}
if
(
n
>=
1
<<
2
)
{
n
>>=
2
;
bit
+=
2
;
}
if
(
n
>=
1
<<
1
)
{
n
>>=
1
;
bit
+=
1
;
}
return
bit
;
}
IndicInputMethodImpl
(
char
[]
keyboardMap
,
char
[]
joinWithNukta
,
char
[]
nuktaForm
,
char
[][]
substitutionTable
)
{
KBD_MAP
=
keyboardMap
;
JOIN_WITH_NUKTA
=
joinWithNukta
;
NUKTA_FORM
=
nuktaForm
;
SUBSTITUTION_TABLE
=
substitutionTable
;
if
(
JOIN_WITH_NUKTA
!=
null
)
{
int
log2
=
highBit
(
JOIN_WITH_NUKTA
.
length
);
power
=
1
<<
log2
;
extra
=
JOIN_WITH_NUKTA
.
length
-
power
;
}
else
{
power
=
extra
=
0
;
}
}
void
setInputMethodContext
(
InputMethodContext
context
)
{
this
.
context
=
context
;
}
void
handleKeyTyped
(
KeyEvent
kevent
)
{
char
keyChar
=
kevent
.
getKeyChar
();
char
currentChar
=
getMappedChar
(
keyChar
);
// The Explicit and Soft Halanta case.
if
(
lastCharWasVirama
)
{
switch
(
keyChar
)
{
case
KEY_SIGN_NUKTA:
currentChar
=
ZWJ
;
break
;
case
KEY_SIGN_VIRAMA:
currentChar
=
ZWNJ
;
break
;
default
:
}
//endSwitch
}
//endif
if
(
currentChar
==
INVALID_CHAR
)
{
kevent
.
consume
();
return
;
}
if
(
currentChar
==
BACKSPACE
)
{
lastCharWasVirama
=
false
;
if
(
totalChars
>
0
)
{
totalChars
=
committedChars
=
0
;
}
else
{
return
;
}
}
else
if
(
keyChar
==
KEY_SIGN_NUKTA
)
{
int
nuktaIndex
=
nuktaIndex
(
text
[
0
]);
if
(
nuktaIndex
!=
-
1
)
{
text
[
0
]
=
NUKTA_FORM
[
nuktaIndex
];
}
else
{
// the last character was committed, commit just Nukta.
// Note : the lastChar must have been committed if it is not one of
// the characters which combine with nukta.
// the state must be totalChars = committedChars = 0;
text
[
totalChars
++]
=
currentChar
;
}
committedChars
+=
1
;
}
else
{
int
nuktaIndex
=
nuktaIndex
(
currentChar
);
if
(
nuktaIndex
!=
-
1
)
{
// Commit everything but currentChar
text
[
totalChars
++]
=
currentChar
;
committedChars
=
totalChars
-
1
;
}
else
{
if
(
currentChar
>=
SUBSTITUTION_BASE
)
{
char
[]
sub
=
SUBSTITUTION_TABLE
[
currentChar
-
SUBSTITUTION_BASE
];
System
.
arraycopy
(
sub
,
0
,
text
,
totalChars
,
sub
.
length
);
totalChars
+=
sub
.
length
;
}
else
{
text
[
totalChars
++]
=
currentChar
;
}
committedChars
=
totalChars
;
}
}
ACIText
aText
=
new
ACIText
(
text
,
0
,
totalChars
,
committedChars
);
int
composedCharLength
=
totalChars
-
committedChars
;
TextHitInfo
caret
=
null
,
visiblePosition
=
null
;
switch
(
composedCharLength
)
{
case
0
:
break
;
case
1
:
visiblePosition
=
caret
=
ZERO_TRAILING_HIT_INFO
;
break
;
default
:
assert
false
:
"The code should not reach here. There is no case where there can be more than one character pending."
;
}
context
.
dispatchInputMethodEvent
(
InputMethodEvent
.
INPUT_METHOD_TEXT_CHANGED
,
aText
,
committedChars
,
caret
,
visiblePosition
);
if
(
totalChars
==
0
)
{
text
[
0
]
=
INVALID_CHAR
;
}
else
{
text
[
0
]
=
text
[
totalChars
-
1
];
// make text[0] hold the last character
}
lastCharWasVirama
=
keyChar
==
KEY_SIGN_VIRAMA
&&
!
lastCharWasVirama
;
totalChars
-=
committedChars
;
committedChars
=
0
;
// state now text[0] = last character
// totalChars = ( last character committed )? 0 : 1;
// committedChars = 0;
kevent
.
consume
();
// prevent client from getting this event.
}
//dispatchEvent()
void
endComposition
()
{
if
(
totalChars
!=
0
)
{
// if some character is not committed.
ACIText
aText
=
new
ACIText
(
text
,
0
,
totalChars
,
totalChars
);
context
.
dispatchInputMethodEvent
(
InputMethodEvent
.
INPUT_METHOD_TEXT_CHANGED
,
aText
,
totalChars
,
null
,
null
);
totalChars
=
committedChars
=
0
;
text
[
0
]
=
INVALID_CHAR
;
lastCharWasVirama
=
false
;
}
//end if
}
//endComposition()
// custom AttributedCharacterIterator -- much lightweight since currently there is no
// attribute defined on the text being generated by the input method.
private
class
ACIText
implements
AttributedCharacterIterator
{
private
char
[]
text
=
null
;
private
int
committed
=
0
;
private
int
index
=
0
;
ACIText
(
char
[]
chArray
,
int
offset
,
int
length
,
int
committed
)
{
this
.
text
=
new
char
[
length
];
this
.
committed
=
committed
;
System
.
arraycopy
(
chArray
,
offset
,
text
,
0
,
length
);
}
//c'tor
// CharacterIterator methods.
public
char
first
()
{
return
_setIndex
(
0
);
}
public
char
last
()
{
if
(
text
.
length
==
0
)
{
return
_setIndex
(
text
.
length
);
}
return
_setIndex
(
text
.
length
-
1
);
}
public
char
current
()
{
if
(
index
==
text
.
length
)
return
DONE
;
return
text
[
index
];
}
public
char
next
()
{
if
(
index
==
text
.
length
)
{
return
DONE
;
}
return
_setIndex
(
index
+
1
);
}
public
char
previous
()
{
if
(
index
==
0
)
return
DONE
;
return
_setIndex
(
index
-
1
);
}
public
char
setIndex
(
int
position
)
{
if
(
position
<
0
||
position
>
text
.
length
)
{
throw
new
IllegalArgumentException
();
}
return
_setIndex
(
position
);
}
public
int
getBeginIndex
()
{
return
0
;
}
public
int
getEndIndex
()
{
return
text
.
length
;
}
public
int
getIndex
()
{
return
index
;
}
public
Object
clone
()
{
try
{
ACIText
clone
=
(
ACIText
)
super
.
clone
();
return
clone
;
}
catch
(
CloneNotSupportedException
e
)
{
throw
new
InternalError
();
}
}
// AttributedCharacterIterator methods.
public
int
getRunStart
()
{
return
index
>=
committed
?
committed
:
0
;
}
public
int
getRunStart
(
AttributedCharacterIterator
.
Attribute
attribute
)
{
return
(
index
>=
committed
&&
attribute
==
TextAttribute
.
INPUT_METHOD_UNDERLINE
)
?
committed
:
0
;
}
public
int
getRunStart
(
Set
<?
extends
Attribute
>
attributes
)
{
return
(
index
>=
committed
&&
attributes
.
contains
(
TextAttribute
.
INPUT_METHOD_UNDERLINE
))
?
committed
:
0
;
}
public
int
getRunLimit
()
{
return
index
<
committed
?
committed
:
text
.
length
;
}
public
int
getRunLimit
(
AttributedCharacterIterator
.
Attribute
attribute
)
{
return
(
index
<
committed
&&
attribute
==
TextAttribute
.
INPUT_METHOD_UNDERLINE
)
?
committed
:
text
.
length
;
}
public
int
getRunLimit
(
Set
<?
extends
Attribute
>
attributes
)
{
return
(
index
<
committed
&&
attributes
.
contains
(
TextAttribute
.
INPUT_METHOD_UNDERLINE
))
?
committed
:
text
.
length
;
}
public
Map
getAttributes
()
{
Hashtable
result
=
new
Hashtable
();
if
(
index
>=
committed
&&
committed
<
text
.
length
)
{
result
.
put
(
TextAttribute
.
INPUT_METHOD_UNDERLINE
,
TextAttribute
.
UNDERLINE_LOW_ONE_PIXEL
);
}
return
result
;
}
public
Object
getAttribute
(
AttributedCharacterIterator
.
Attribute
attribute
)
{
if
(
index
>=
committed
&&
committed
<
text
.
length
&&
attribute
==
TextAttribute
.
INPUT_METHOD_UNDERLINE
)
{
return
TextAttribute
.
UNDERLINE_LOW_ONE_PIXEL
;
}
return
null
;
}
public
Set
getAllAttributeKeys
()
{
HashSet
result
=
new
HashSet
();
if
(
committed
<
text
.
length
)
{
result
.
add
(
TextAttribute
.
INPUT_METHOD_UNDERLINE
);
}
return
result
;
}
// private methods
/**
* This is always called with valid i ( 0 < i <= text.length )
*/
private
char
_setIndex
(
int
i
)
{
index
=
i
;
if
(
i
==
text
.
length
)
{
return
DONE
;
}
return
text
[
i
];
}
//_setIndex()
}
//end of inner class
}
src/share/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor
已删除
100644 → 0
浏览文件 @
86a9d2ae
com.sun.inputmethods.internal.indicim.DevanagariInputMethodDescriptor
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
\u
30c7
\u
30fc
\u
30f4
\u
30a1
\u
30ca
\u
30fc
\u
30ac
\u
30ea
\u
30fc
\u
30a4
\u
30f3
\u
30d7
\u
30c3
\u
30c8
\u
30e1
\u
30bd
\u
30c3
\u
30c9
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari
\u
c785
\u
b825
\u
ba54
\u
c18c
\u
b4dc
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari Input Method
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari
\u
8f93
\u5165\u
6cd5
src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Indic input methods
#
DisplayName.Devanagari
=
Devanagari
\u
8f38
\u5165\u
6cd5
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Portions Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.thaiim
;
import
java.awt.im.spi.InputMethod
;
import
java.awt.im.spi.InputMethodContext
;
import
java.awt.AWTEvent
;
import
java.awt.Rectangle
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.MouseEvent
;
import
java.lang.Character.Subset
;
import
java.util.Locale
;
class
ThaiInputMethod
implements
InputMethod
{
private
ThaiInputMethodImpl
impl
;
private
Locale
locale
;
ThaiInputMethod
(
Locale
theLocale
,
ThaiInputMethodImpl
theImplementation
)
{
locale
=
theLocale
;
impl
=
theImplementation
;
}
/**
* Sets the input method context, which is used to dispatch input method
* events to the client component and to request information from
* the client component.
* <p>
* This method is called once immediately after instantiating this input
* method.
*
* @param context the input method context for this input method
* @exception NullPointerException if <code>context</code> is null
*/
public
void
setInputMethodContext
(
InputMethodContext
context
)
{
impl
.
setInputMethodContext
(
context
);
}
/**
* Attempts to set the input locale. If the input method supports the
* desired locale, it changes its behavior to support input for the locale
* and returns true.
* Otherwise, it returns false and does not change its behavior.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* <li>when switching to this input method through the user interface if the user
* specified a locale or if the previously selected input method's
* {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
* returns a non-null value.
* </ul>
*
* @param locale locale to input
* @return whether the specified locale is supported
* @exception NullPointerException if <code>locale</code> is null
*/
public
boolean
setLocale
(
Locale
locale
)
{
if
(
locale
.
getLanguage
().
equals
(
this
.
locale
.
getLanguage
()))
{
//System.out.println("returning true for locale " + locale);
return
true
;
}
else
{
//System.out.println("returning false for locale " + locale);
return
false
;
}
}
/**
* Returns the current input locale. Might return null in exceptional cases.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
* <li>when switching from this input method to a different one through the
* user interface.
* </ul>
*
* @return the current input locale, or null
*/
public
Locale
getLocale
()
{
return
locale
;
}
/**
* Sets the subsets of the Unicode character set that this input method
* is allowed to input. Null may be passed in to indicate that all
* characters are allowed.
* <p>
* This method is called
* <ul>
* <li>immediately after instantiating this input method,
* <li>when switching to this input method from a different one, and
* <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
* </ul>
*
* @param subsets the subsets of the Unicode character set from which
* characters may be input
*/
public
void
setCharacterSubsets
(
Subset
[]
subsets
)
{
}
/**
* Enables or disables this input method for composition,
* depending on the value of the parameter <code>enable</code>.
* <p>
* An input method that is enabled for composition interprets incoming
* events for both composition and control purposes, while a
* disabled input method does not interpret events for composition.
* Note however that events are passed on to the input method regardless
* whether it is enabled or not, and that an input method that is disabled
* for composition may still interpret events for control purposes,
* including to enable or disable itself for composition.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
* <li>when switching to this input method from a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* if the previously selected input method's
* {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
* method returns without throwing an exception.
* </ul>
*
* @param enable whether to enable the input method for composition
* @throws UnsupportedOperationException if this input method does not
* support the enabling/disabling operation
* @see #isCompositionEnabled
*/
public
void
setCompositionEnabled
(
boolean
enable
)
{
throw
new
UnsupportedOperationException
();
}
/**
* Determines whether this input method is enabled.
* An input method that is enabled for composition interprets incoming
* events for both composition and control purposes, while a
* disabled input method does not interpret events for composition.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
*
* @return <code>true</code> if this input method is enabled for
* composition; <code>false</code> otherwise.
* @throws UnsupportedOperationException if this input method does not
* support checking whether it is enabled for composition
* @see #setCompositionEnabled
*/
public
boolean
isCompositionEnabled
()
{
return
true
;
}
/**
* Starts the reconversion operation. The input method obtains the
* text to be reconverted from the current client component using the
* {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
* method. It can use other <code>InputMethodRequests</code>
* methods to request additional information required for the
* reconversion operation. The composed and committed text
* produced by the operation is sent to the client component as a
* sequence of <code>InputMethodEvent</code>s. If the given text
* cannot be reconverted, the same text should be sent to the
* client component as committed text.
* <p>
* This method is called by
* {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
*
* @throws UnsupportedOperationException if the input method does not
* support the reconversion operation.
*/
public
void
reconvert
()
{
throw
new
UnsupportedOperationException
(
"This input method does not reconvert."
);
}
/**
* Dispatches the event to the input method. If input method support is
* enabled for the focussed component, incoming events of certain types
* are dispatched to the current input method for this component before
* they are dispatched to the component's methods or event listeners.
* The input method decides whether it needs to handle the event. If it
* does, it also calls the event's <code>consume</code> method; this
* causes the event to not get dispatched to the component's event
* processing methods or event listeners.
* <p>
* Events are dispatched if they are instances of InputEvent or its
* subclasses.
* This includes instances of the AWT classes KeyEvent and MouseEvent.
* <p>
* This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
*
* @param event the event being dispatched to the input method
* @exception NullPointerException if <code>event</code> is null
*/
public
void
dispatchEvent
(
AWTEvent
event
)
{
if
(
event
instanceof
KeyEvent
)
{
KeyEvent
keyEvent
=
(
KeyEvent
)
event
;
if
(
event
.
getID
()
==
KeyEvent
.
KEY_TYPED
)
{
//System.out.println("handled event " + event);
impl
.
handleKeyTyped
(
keyEvent
);
}
}
else
{
//System.out.println("did not handle event " + event);
}
}
/**
* Notifies this input method of changes in the client window
* location or state. This method is called while this input
* method is the current input method of its input context and
* notifications for it are enabled (see {@link
* InputMethodContext#enableClientWindowNotification
* InputMethodContext.enableClientWindowNotification}). Calls
* to this method are temporarily suspended if the input context's
* {@link java.awt.im.InputContext#removeNotify removeNotify}
* method is called, and resume when the input method is activated
* for a new client component. It is called in the following
* situations:
* <ul>
* <li>
* when the window containing the current client component changes
* in location, size, visibility, iconification state, or when the
* window is closed.</li>
* <li>
* from <code> enableClientWindowNotification(inputMethod,
* true)</code> if the current client component exists,</li>
* <li>
* when activating the input method for the first time after it
* called
* <code>enableClientWindowNotification(inputMethod,
* true)</code> if during the call no current client component was
* available,</li>
* <li>
* when activating the input method for a new client component
* after the input context's removeNotify method has been
* called.</li>
* </ul>
* @param bounds client window's {@link
* java.awt.Component#getBounds bounds} on the screen; or null if
* the client window is iconified or invisible
*/
public
void
notifyClientWindowChange
(
Rectangle
bounds
)
{
}
/**
* Activates the input method for immediate input processing.
* <p>
* If an input method provides its own windows, it should make sure
* at this point that all necessary windows are open and visible.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when a client component receives a FOCUS_GAINED event,
* <li>when switching to this input method from a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
* The method is only called when the input method is inactive.
* A newly instantiated input method is assumed to be inactive.
*/
public
void
activate
()
{
//System.out.println("activated");
}
/**
* Deactivates the input method.
* The isTemporary argument has the same meaning as in
* {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
* <p>
* If an input method provides its own windows, only windows that relate
* to the current composition (such as a lookup choice window) should be
* closed at this point.
* It is possible that the input method will be immediately activated again
* for a different client component, and closing and reopening more
* persistent windows (such as a control panel) would create unnecessary
* screen flicker.
* Before an instance of a different input method class is activated,
* {@link #hideWindows} is called on the current input method.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when a client component receives a FOCUS_LOST event,
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
* <li>before {@link #removeNotify removeNotify} if the current client component is
* removed.
* </ul>
* The method is only called when the input method is active.
*
* @param isTemporary whether the focus change is temporary
*/
public
void
deactivate
(
boolean
isTemporary
)
{
//System.out.println("deactivated");
}
/**
* Closes or hides all windows opened by this input method instance or
* its class.
* <p>
* This method is called
* <ul>
* <li>before calling {@link #activate activate} on an instance of a different input
* method class,
* <li>before calling {@link #dispose dispose} on this input method.
* </ul>
* The method is only called when the input method is inactive.
*/
public
void
hideWindows
()
{
}
/**
* Notifies the input method that a client component has been
* removed from its containment hierarchy, or that input method
* support has been disabled for the component.
* <p>
* This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
* <p>
* The method is only called when the input method is inactive.
*/
public
void
removeNotify
()
{
}
/**
* Ends any input composition that may currently be going on in this
* context. Depending on the platform and possibly user preferences,
* this may commit or delete uncommitted text. Any changes to the text
* are communicated to the active component using an input method event.
*
* <p>
* A text editing component may call this in a variety of situations,
* for example, when the user moves the insertion point within the text
* (but outside the composed text), or when the component's text is
* saved to a file or copied to the clipboard.
* <p>
* This method is called
* <ul>
* <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
* <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
* when switching to a different client component
* <li>when switching from this input method to a different one using the
* user interface or
* {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
* </ul>
*/
public
void
endComposition
()
{
impl
.
endComposition
();
}
/**
* Disposes of the input method and releases the resources used by it.
* In particular, the input method should dispose windows and close files that are no
* longer needed.
* <p>
* This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
* <p>
* The method is only called when the input method is inactive.
* No method of this interface is called on this instance after dispose.
*/
public
void
dispose
()
{
}
/**
* Returns a control object from this input method, or null. A
* control object provides methods that control the behavior of the
* input method or obtain information from the input method. The type
* of the object is an input method specific class. Clients have to
* compare the result against known input method control object
* classes and cast to the appropriate class to invoke the methods
* provided.
* <p>
* This method is called by
* {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
*
* @return a control object from this input method, or null
*/
public
Object
getControlObject
()
{
return
null
;
}
}
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Portions Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.thaiim
;
import
java.awt.Image
;
import
java.awt.im.spi.InputMethod
;
import
java.awt.im.spi.InputMethodDescriptor
;
import
java.util.Locale
;
import
java.util.MissingResourceException
;
import
java.util.ResourceBundle
;
public
class
ThaiInputMethodDescriptor
implements
InputMethodDescriptor
{
static
final
Locale
THAI
=
new
Locale
(
"th"
);
public
ThaiInputMethodDescriptor
()
{
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
*/
public
Locale
[]
getAvailableLocales
()
{
return
new
Locale
[]
{
THAI
};
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
*/
public
boolean
hasDynamicLocaleList
()
{
return
false
;
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
*/
public
synchronized
String
getInputMethodDisplayName
(
Locale
inputLocale
,
Locale
displayLanguage
)
{
try
{
ResourceBundle
resources
=
ResourceBundle
.
getBundle
(
"com.sun.inputmethods.internal.thaiim.resources.DisplayNames"
,
displayLanguage
);
return
resources
.
getString
(
"DisplayName.Thai"
);
}
catch
(
MissingResourceException
mre
)
{
return
"Thai Input Method"
;
}
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
*/
public
Image
getInputMethodIcon
(
Locale
inputLocale
)
{
return
null
;
}
/**
* @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
*/
public
InputMethod
createInputMethod
()
throws
Exception
{
ThaiInputMethodImpl
impl
=
new
ThaiInputMethodImpl
();
return
new
ThaiInputMethod
(
THAI
,
impl
);
}
public
String
toString
()
{
return
getClass
().
getName
();
}
}
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Portions Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
*
* (C) Copyright IBM Corp. 2000 - All Rights Reserved
*
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
*
*/
package
com.sun.inputmethods.internal.thaiim
;
import
java.awt.im.InputMethodRequests
;
import
java.awt.im.spi.InputMethodContext
;
import
java.awt.Toolkit
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.InputMethodEvent
;
import
java.awt.font.TextAttribute
;
import
java.awt.font.TextHitInfo
;
import
java.text.AttributedCharacterIterator
;
import
java.text.AttributedString
;
class
ThaiInputMethodImpl
{
private
static
final
char
[]
keyboardMap
=
{
/* 00 */
'\u0000'
,
/* 01 */
'\u0001'
,
/* 02 */
'\u0002'
,
/* 03 */
'\u0003'
,
/* 04 */
'\u0004'
,
/* 05 */
'\u0005'
,
/* 06 */
'\u0006'
,
/* 07 */
'\u0007'
,
/* 08 */
'\u0008'
,
/* 09 */
'\u0009'
,
/* 0A */
'\
012
'
,
/* 0B */
'\
u000B
'
,
/* 0C */
'\
u000C
'
,
/* 0D */
'\
015
'
,
/* 0E */
'\
u000E
'
,
/* 0F */
'\
u000F
'
,
/* 10 */
'\u0010'
,
/* 11 */
'\u0011'
,
/* 12 */
'\u0012'
,
/* 13 */
'\u0013'
,
/* 14 */
'\u0014'
,
/* 15 */
'\u0015'
,
/* 16 */
'\u0016'
,
/* 17 */
'\u0017'
,
/* 18 */
'\u0018'
,
/* 19 */
'\u0019'
,
/* 1A */
'\
u001A
'
,
/* 1B */
'\
u001B
'
,
/* 1C */
'\
u001C
'
,
/* 1D */
'\
u001D
'
,
/* 1E */
'\
u001E
'
,
/* 1F */
'\
u001F
'
,
/* 20 */
'\u0020'
,
/* 21 */
'\u0e45'
,
// '!'
/* 22 */
'\u002e'
,
// '"'
/* 23 */
'\u0e52'
,
// '#'
/* 24 */
'\u0e53'
,
// '$'
/* 25 */
'\u0e54'
,
// '%'
/* 26 */
'\u0e4e'
,
// '&'
/* 27 */
'\u0e07'
,
// '''
/* 28 */
'\u0e56'
,
// '('
/* 29 */
'\u0e57'
,
// ')'
/* 2A */
'\u0e55'
,
// '*'
/* 2B */
'\u0e59'
,
// '+'
/* 2C */
'\u0e21'
,
// ','
/* 2D */
'\u0e02'
,
// '-'
/* 2E */
'\u0e43'
,
// '.'
/* 2F */
'\u0e1d'
,
// '/'
/* 30 */
'\u0e08'
,
// '0'
/* 31 */
'\u0e3f'
,
// '1'
/* 32 */
'\u002f'
,
// '2'
/* 33 */
'\u002d'
,
// '3'
/* 34 */
'\u0e20'
,
// '4'
/* 35 */
'\u0e16'
,
// '5'
/* 36 */
'\u0e38'
,
// '6'
/* 37 */
'\u0e36'
,
// '7'
/* 38 */
'\u0e04'
,
// '8'
/* 39 */
'\u0e15'
,
// '9'
/* 3A */
'\u0e0b'
,
// ':'
/* 3B */
'\u0e27'
,
// ';'
/* 3C */
'\u0e12'
,
// '<'
/* 3D */
'\u0e0a'
,
// '='
/* 3E */
'\u0e2c'
,
// '>'
/* 3F */
'\u0e26'
,
// '?'
/* 40 */
'\u0e51'
,
// '@'
/* 41 */
'\u0e24'
,
// 'A'
/* 42 */
'\u0e3a'
,
// 'B'
/* 43 */
'\u0e09'
,
// 'C'
/* 44 */
'\u0e0f'
,
// 'D'
/* 45 */
'\u0e0e'
,
// 'E'
/* 46 */
'\u0e42'
,
// 'F'
/* 47 */
'\u0e0c'
,
// 'G'
/* 48 */
'\u0e47'
,
// 'H'
/* 49 */
'\u0e13'
,
// 'I'
/* 4A */
'\u0e4b'
,
// 'J'
/* 4B */
'\u0e29'
,
// 'K'
/* 4C */
'\u0e28'
,
// 'L'
/* 4D */
'\u003f'
,
// 'M'
/* 4E */
'\u0e4c'
,
// 'N'
/* 4F */
'\u0e2f'
,
// 'O'
/* 50 */
'\u0e0d'
,
// 'P'
/* 51 */
'\u0e50'
,
// 'Q'
/* 52 */
'\u0e11'
,
// 'R'
/* 53 */
'\u0e06'
,
// 'S'
/* 54 */
'\u0e18'
,
// 'T'
/* 55 */
'\u0e4a'
,
// 'U'
/* 56 */
'\u0e2e'
,
// 'V'
/* 57 */
'\u0022'
,
// 'W'
/* 58 */
'\u0029'
,
// 'X'
/* 59 */
'\u0e4d'
,
// 'Y'
/* 5A */
'\u0028'
,
// 'Z'
/* 5B */
'\u0e1a'
,
// '['
/* 5C */
'\u0e05'
,
// '\'
/* 5D */
'\u0e25'
,
// ']'
/* 5E */
'\u0e39'
,
// '^'
/* 5F */
'\u0e58'
,
// '_'
/* 60 */
'\u0e4f'
,
// '`'
/* 61 */
'\u0e1f'
,
// 'a'
/* 62 */
'\u0e34'
,
// 'b'
/* 63 */
'\u0e41'
,
// 'c'
/* 64 */
'\u0e01'
,
// 'd'
/* 65 */
'\u0e33'
,
// 'e'
/* 66 */
'\u0e14'
,
// 'f'
/* 67 */
'\u0e40'
,
// 'g'
/* 68 */
'\u0e49'
,
// 'h'
/* 69 */
'\u0e23'
,
// 'i'
/* 6A */
'\u0e48'
,
// 'j'
/* 6B */
'\u0e32'
,
// 'k'
/* 6C */
'\u0e2a'
,
// 'l'
/* 6D */
'\u0e17'
,
// 'm'
/* 6E */
'\u0e37'
,
// 'n'
/* 6F */
'\u0e19'
,
// 'o'
/* 70 */
'\u0e22'
,
// 'p'
/* 71 */
'\u0e46'
,
// 'q'
/* 72 */
'\u0e1e'
,
// 'r'
/* 73 */
'\u0e2b'
,
// 's'
/* 74 */
'\u0e30'
,
// 't'
/* 75 */
'\u0e35'
,
// 'u'
/* 76 */
'\u0e2d'
,
// 'v'
/* 77 */
'\u0e44'
,
// 'w'
/* 78 */
'\u0e1b'
,
// 'x'
/* 79 */
'\u0e31'
,
// 'y'
/* 7A */
'\u0e1c'
,
// 'z'
/* 7B */
'\u0e10'
,
// '{'
/* 7C */
'\u0e03'
,
// '|'
/* 7D */
'\u002c'
,
// '}'
/* 7E */
'\u0e5b'
,
// '~'
/* 7F */
'\
u007F
'
//
};
// cached TextHitInfo. Only one type of TextHitInfo is required.
private
static
final
TextHitInfo
ZERO_TRAILING_HIT_INFO
=
TextHitInfo
.
trailing
(
0
);
private
ThaiRules
rules
;
/**
* Returns the equivalent character for thai locale.
* @param originalChar The original character.
*/
private
char
getMappedChar
(
char
originalChar
)
{
if
(
originalChar
<=
keyboardMap
.
length
)
{
return
keyboardMap
[
originalChar
];
}
return
originalChar
;
}
//getMappedChar()
private
InputMethodContext
context
;
void
setInputMethodContext
(
InputMethodContext
context
)
{
this
.
context
=
context
;
rules
=
new
ThaiRules
((
InputMethodRequests
)
context
);
}
void
handleKeyTyped
(
KeyEvent
kevent
)
{
char
keyChar
=
kevent
.
getKeyChar
();
char
currentChar
=
getMappedChar
(
keyChar
);
if
(!
Character
.
UnicodeBlock
.
THAI
.
equals
(
Character
.
UnicodeBlock
.
of
(
currentChar
)))
{
// don't care
return
;
}
else
if
(
rules
.
isInputValid
(
currentChar
))
{
Character
tmp
=
new
Character
(
currentChar
);
String
tmp2
=
tmp
.
toString
();
context
.
dispatchInputMethodEvent
(
InputMethodEvent
.
INPUT_METHOD_TEXT_CHANGED
,
(
new
AttributedString
(
tmp2
)).
getIterator
(),
1
,
ZERO_TRAILING_HIT_INFO
,
ZERO_TRAILING_HIT_INFO
);
}
else
{
// input sequence is not allowed
Toolkit
.
getDefaultToolkit
().
beep
();
}
kevent
.
consume
();
// prevent client from getting this event.
return
;
}
//dispatchEvent()
void
endComposition
()
{
}
//endComposition()
}
src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiRules.java
已删除
100644 → 0
浏览文件 @
86a9d2ae
/*
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package
com.sun.inputmethods.internal.thaiim
;
import
java.awt.im.InputMethodRequests
;
public
class
ThaiRules
{
public
static
final
char
BASE
=
0x0e00
;
public
static
final
byte
NON
=
0
;
public
static
final
byte
CONS
=
1
;
public
static
final
byte
LV
=
2
;
public
static
final
byte
FV1
=
3
;
public
static
final
byte
FV2
=
4
;
public
static
final
byte
FV3
=
5
;
public
static
final
byte
FV4
=
6
;
/* Note that FV4 is added. It is not in WTT.
* We need it for SARA AM since it has a
* weired characteristic to share the same
* cell with whatever consonant preceeds it.
*/
public
static
final
byte
BV1
=
7
;
public
static
final
byte
BV2
=
8
;
public
static
final
byte
BD
=
9
;
public
static
final
byte
TONE
=
10
;
public
static
final
byte
AD1
=
11
;
public
static
final
byte
AD2
=
12
;
public
static
final
byte
AD3
=
13
;
public
static
final
byte
AV1
=
14
;
public
static
final
byte
AV2
=
15
;
public
static
final
byte
AV3
=
16
;
/**
* Constants for validity checking and auto correction
*/
public
static
final
byte
STRICT
=
0
;
public
static
final
byte
LOOSE
=
1
;
public
static
final
byte
NOREPLACE
=
2
;
public
static
final
byte
[]
CHARTYPE
=
{
/* 0e00 UNUSED */
NON
,
/* THAI CHARACTER KO KAI */
CONS
,
/* THAI CHARACTER KHO KHAI */
CONS
,
/* THAI CHARACTER KHO KHUAT */
CONS
,
/* THAI CHARACTER KHO KHWAI */
CONS
,
/* THAI CHARACTER KHO KHON */
CONS
,
/* THAI CHARACTER KHO RAKHANG */
CONS
,
/* THAI CHARACTER NGO NGU */
CONS
,
/* THAI CHARACTER CHO CHAN */
CONS
,
/* THAI CHARACTER CHO CHING */
CONS
,
/* THAI CHARACTER CHO CHANG */
CONS
,
/* THAI CHARACTER SO SO */
CONS
,
/* THAI CHARACTER CHO CHOE */
CONS
,
/* THAI CHARACTER YO YING */
CONS
,
/* THAI CHARACTER DO CHADA */
CONS
,
/* THAI CHARACTER TO PATAK */
CONS
,
/* THAI CHARACTER THO THAN */
CONS
,
/* THAI CHARACTER THO NANGMONTHO */
CONS
,
/* THAI CHARACTER THO PHUTHAO */
CONS
,
/* THAI CHARACTER NO NEN */
CONS
,
/* THAI CHARACTER DO DEK */
CONS
,
/* THAI CHARACTER TO TAO */
CONS
,
/* THAI CHARACTER THO THUNG */
CONS
,
/* THAI CHARACTER THO THAHAN */
CONS
,
/* THAI CHARACTER THO THONG */
CONS
,
/* THAI CHARACTER NO NU */
CONS
,
/* THAI CHARACTER BO BAIMAI */
CONS
,
/* THAI CHARACTER PO PLA */
CONS
,
/* THAI CHARACTER PHO PHUNG */
CONS
,
/* THAI CHARACTER FO FA */
CONS
,
/* THAI CHARACTER PHO PHAN */
CONS
,
/* THAI CHARACTER FO FAN */
CONS
,
/* THAI CHARACTER PHO SAMPHAO */
CONS
,
/* THAI CHARACTER MO MA */
CONS
,
/* THAI CHARACTER YO YAK */
CONS
,
/* THAI CHARACTER RO RUA */
CONS
,
/* THAI CHARACTER RU */
FV3
,
/* THAI CHARACTER LO LING */
CONS
,
/* THAI CHARACTER LU */
FV3
,
/* THAI CHARACTER WO WAEN */
CONS
,
/* THAI CHARACTER SO SALA */
CONS
,
/* THAI CHARACTER SO RUSI */
CONS
,
/* THAI CHARACTER SO SUA */
CONS
,
/* THAI CHARACTER HO HIP */
CONS
,
/* THAI CHARACTER LO CHULA */
CONS
,
/* THAI CHARACTER O ANG */
CONS
,
/* THAI CHARACTER HO NOKHUK */
CONS
,
/* THAI CHARACTER PAIYANNOI */
NON
,
/* THAI CHARACTER SARA A */
FV1
,
/* THAI CHARACTER MAI HAN-AKAT */
AV2
,
/* THAI CHARACTER SARA AA */
FV1
,
/* THAI CHARACTER SARA AM */
FV4
,
/* THAI CHARACTER SARA I */
AV1
,
/* THAI CHARACTER SARA II */
AV3
,
/* THAI CHARACTER SARA UE */
AV2
,
/* THAI CHARACTER SARA UEE */
AV3
,
/* THAI CHARACTER SARA U */
BV1
,
/* THAI CHARACTER SARA UU */
BV2
,
/* THAI CHARACTER PHINTHU */
BD
,
/* 0e3b UNUSED */
NON
,
/* 0e3c UNUSED */
NON
,
/* 0e3d UNUSED */
NON
,
/* 0e3e UNUSED */
NON
,
/* THAI CURRENCY SYMBOL BAHT */
NON
,
/* THAI CHARACTER SARA E */
LV
,
/* THAI CHARACTER SARA AE */
LV
,
/* THAI CHARACTER SARA O */
LV
,
/* THAI CHARACTER SARA AI MAIMUAN */
LV
,
/* THAI CHARACTER SARA AI MAIMALAI */
LV
,
/* THAI CHARACTER LAKKHANGYAO */
FV2
,
/* THAI CHARACTER MAIYAMOK */
NON
,
/* THAI CHARACTER MAITAIKHU */
AD2
,
/* THAI CHARACTER MAI EK */
TONE
,
/* THAI CHARACTER MAI THO */
TONE
,
/* THAI CHARACTER MAI TRI */
TONE
,
/* THAI CHARACTER MAI CHATTAWA */
TONE
,
/* THAI CHARACTER THANTHAKHAT */
AD1
,
/* THAI CHARACTER NIKHAHIT */
AD3
,
/* THAI CHARACTER YAMAKKAN */
AD3
,
/* THAI CHARACTER FONGMAN */
NON
,
/* THAI DIGIT ZERO */
NON
,
/* THAI DIGIT ONE */
NON
,
/* THAI DIGIT TWO */
NON
,
/* THAI DIGIT THREE */
NON
,
/* THAI DIGIT FOUR */
NON
,
/* THAI DIGIT FIVE */
NON
,
/* THAI DIGIT SIX */
NON
,
/* THAI DIGIT SEVEN */
NON
,
/* THAI DIGIT EIGHT */
NON
,
/* THAI DIGIT NINE */
NON
,
/* THAI CHARACTER ANGKHANKHU */
NON
,
/* THAI CHARACTER KHOMUT */
NON
};
private
InputMethodRequests
requests
;
ThaiRules
(
InputMethodRequests
requests
)
{
this
.
requests
=
requests
;
}
public
static
byte
getCharType
(
char
c
)
{
byte
cType
;
int
ci
=
((
int
)
c
)
-
(
int
)
BASE
;
if
(
ci
<
0
||
ci
>=
CHARTYPE
.
length
)
cType
=
NON
;
else
cType
=
CHARTYPE
[
ci
];
return
cType
;
}
private
static
boolean
isValid
(
char
c1
,
char
c2
,
int
[]
validityArray
)
{
return
((
validityArray
[
getCharType
(
c1
)]
&
(
1
<<
getCharType
(
c2
)))
!=
0
);
}
/**
* VALIDITY is a bit matrix defining whether one
* character is allowed to be typed in after the
* previous one (array index). Determining the
* validity is done by bit-anding the 2nd char
* type's mask (obtained by 1 << chartype) with
* the array element indexed by the first char
* type. If the result is non-zero, the 2nd
* character is allowed to follow the first.
*/
/* Please note that the bits in the comment below
* are displayed least significant bit first.
* The actual value reflexs this representation
* when the bits are swapped.
*/
private
static
final
int
[]
INPUTVALIDITY
=
{
/* NON 1110 010 0 0000 0000 0 */
0x00027
,
/* CONS 1111 111 1 1111 1111 1 */
0x1ffff
,
/* LV 0100 000 0 0000 0000 0 */
0x00002
,
/* FV1 1110 010 0 0000 0000 0 */
0x00027
,
/* FV2 1110 010 0 0000 0000 0 */
0x00027
,
/* FV3 1110 110 0 0000 0000 0 */
0x00037
,
/* FV4 1110 010 0 0000 0000 0 */
0x00027
,
/* BV1 1110 010 0 0011 0000 0 */
0x00c27
,
/* BV2 1110 010 0 0010 0000 0 */
0x00427
,
/* BD 1110 010 0 0000 0000 0 */
0x00027
,
/* TONE 1111 011 0 0000 0000 0 */
0x0006f
,
/* AD1 1110 010 0 0000 0000 0 */
0x00027
,
/* AD2 1110 010 0 0000 0000 0 */
0x00027
,
/* AD3 1110 010 0 0000 0000 0 */
0x00027
,
/* AV1 1110 010 0 0011 0000 0 */
0x00c27
,
/* AV2 1110 010 0 0010 0000 0 */
0x00427
,
/* AV3 1110 010 0 0010 0100 0 */
0x02427
};
private
static
final
int
[]
COMPOSABLE
=
{
/* NON 0000 000 0 0000 0000 0 */
0x00000
,
/* CONS 0000 001 1 1111 1111 1 */
0x1ffc0
,
/* LV 0000 000 0 0000 0000 0 */
0x00000
,
/* FV1 0000 000 0 0000 0000 0 */
0x00000
,
/* FV2 0000 000 0 0000 0000 0 */
0x00000
,
/* FV3 0000 000 0 0000 0000 0 */
0x00000
,
/* FV4 0000 000 0 0000 0000 0 */
0x00000
,
/* BV1 0000 000 0 0011 0000 0 */
0x00c00
,
/* BV2 0000 000 0 0010 0000 0 */
0x00400
,
/* BD 0000 000 0 0000 0000 0 */
0x00000
,
/* TONE 0000 001 0 0000 0000 0 */
0x00040
,
/* AD1 0000 000 0 0000 0000 0 */
0x00000
,
/* AD2 0000 000 0 0000 0000 0 */
0x00000
,
/* AD3 0000 000 0 0000 0000 0 */
0x00000
,
/* AV1 0000 000 0 0011 0000 0 */
0x00c00
,
/* AV2 0000 000 0 0010 0000 0 */
0x00400
,
/* AV3 0000 000 0 0010 0100 0 */
0x02400
};
private
static
final
int
[]
REPLACABLE
=
{
/* NON 0000 000 0 0000 0000 0 */
0x00000
,
/* CONS 0000 000 0 0000 0000 0 */
0x00000
,
/* LV 0000 000 0 0000 0000 0 */
0x00000
,
/* FV1 0000 000 0 0000 0000 0 */
0x00000
,
/* FV2 0000 000 0 0000 0000 0 */
0x00000
,
/* FV3 0000 000 0 0000 0000 0 */
0x00000
,
/* FV4 0000 001 1 1001 1111 1 */
0x1f9c0
,
/* BV1 0000 001 1 1100 1111 1 */
0x1f3c0
,
/* BV2 0000 001 1 1101 1111 1 */
0x1fbc0
,
/* BD 0000 001 1 1111 1111 1 */
0x1ffc0
,
/* TONE 0000 000 0 0111 1100 0 */
0x03e00
,
/* AD1 0000 001 0 1111 1101 1 */
0x1bf40
,
/* AD2 0000 001 1 1111 1111 1 */
0x1ffc0
,
/* AD3 0000 001 1 1111 1111 0 */
0x0ffc0
,
/* AV1 0000 001 1 1100 1111 1 */
0x1f3c0
,
/* AV2 0000 001 1 1101 1111 1 */
0x1fbc0
,
/* AV3 0000 001 1 1101 1011 1 */
0x1dbc0
};
private
static
final
int
[]
SWAPPABLE
=
{
/* NON 0000 000 0 0000 0000 0 */
0x00000
,
/* CONS 0000 000 0 0000 0000 0 */
0x00000
,
/* LV 0000 000 0 0000 0000 0 */
0x00000
,
/* FV1 0000 000 0 0000 0000 0 */
0x00000
,
/* FV2 0000 000 0 0000 0000 0 */
0x00000
,
/* FV3 0000 000 0 0000 0000 0 */
0x00000
,
/* FV4 0000 000 0 0010 0000 0 */
0x00400
,
/* BV1 0000 000 0 0000 0000 0 */
0x00000
,
/* BV2 0000 000 0 0000 0000 0 */
0x00000
,
/* BD 0000 000 0 0000 0000 0 */
0x00000
,
/* TONE 0000 000 1 1000 0011 1 */
0x1c180
,
/* AD1 0000 000 1 0000 0010 0 */
0x04080
,
/* AD2 0000 000 0 0000 0000 0 */
0x00000
,
/* AD3 0000 000 0 0000 0000 1 */
0x10000
,
/* AV1 0000 000 0 0000 0000 0 */
0x00000
,
/* AV2 0000 000 0 0000 0000 0 */
0x00000
,
/* AV3 0000 000 0 0000 0000 0 */
0x00000
};
public
static
boolean
isInputValid
(
char
c1
,
char
c2
)
{
return
isValid
(
c1
,
c2
,
INPUTVALIDITY
);
}
public
static
boolean
isComposable
(
char
c1
,
char
c2
)
{
return
isValid
(
c1
,
c2
,
COMPOSABLE
);
}
public
static
boolean
isSwappable
(
char
c1
,
char
c2
)
{
return
isValid
(
c1
,
c2
,
SWAPPABLE
);
}
public
static
boolean
isReplacable
(
char
c1
,
char
c2
)
{
return
isValid
(
c1
,
c2
,
REPLACABLE
);
}
public
static
boolean
isForward
(
char
c
)
{
return
(
getCharType
(
c
)
<
FV4
);
}
public
static
boolean
isDead
(
char
c
)
{
return
(
getCharType
(
c
)
>
FV3
);
}
public
boolean
isInputValid
(
char
current
)
{
int
offset
=
requests
.
getInsertPositionOffset
();
if
(
offset
==
0
)
{
byte
charType
=
getCharType
(
current
);
return
((
charType
<
FV1
)
||
(
charType
==
FV3
));
}
else
{
char
prev
=
requests
.
getCommittedText
(
offset
-
1
,
offset
,
null
).
first
();
if
(
isForward
(
current
))
{
if
(
isInputValid
(
prev
,
current
))
{
if
(
getCharType
(
prev
)
==
TONE
&&
getCharType
(
current
)
==
FV1
)
{
if
(
offset
==
1
)
{
return
true
;
}
else
{
char
pprev
=
requests
.
getCommittedText
(
offset
-
2
,
offset
-
1
,
null
).
first
();
return
isInputValid
(
pprev
,
current
);
}
}
else
{
return
true
;
}
}
else
if
(
prev
==
'\u0e32'
&&
// SARA AA
current
==
'\u0e30'
)
{
// SARA A
return
true
;
}
else
if
(
prev
==
'\u0e4d'
&&
// NIKAHIT
current
==
'\u0e32'
)
{
// SARA AA
// Special compose to SARA AM
return
true
;
}
else
{
return
false
;
}
}
else
{
if
(
isInputValid
(
prev
,
current
))
{
if
(
getCharType
(
prev
)
==
TONE
&&
getCharType
(
current
)
==
FV4
)
{
return
(
offset
!=
1
);
}
else
{
return
true
;
}
}
else
{
return
false
;
}
}
}
}
}
src/share/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
已删除
100644 → 0
浏览文件 @
86a9d2ae
com.sun.inputmethods.internal.thaiim.ThaiInputMethodDescriptor
src/share/classes/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties
已删除
100644 → 0
浏览文件 @
86a9d2ae
#
# Default Input method display names for Thai input methods
#
DisplayName.Thai
=
Thai Input Method
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录