Merge
This commit is contained in:
commit
ed94c35f61
1
.hgtags
1
.hgtags
@ -70,3 +70,4 @@ ff9031a745d9cc52318f2148e43ca3b07ee08098 jdk7-b92
|
||||
b5dab6a313fdff4c043250e4d9c8f66fd624d27e jdk7-b93
|
||||
8bb281f0f91582104d65d032be22522bfd2d8110 jdk7-b94
|
||||
654298d26561b76dfe3cfcffbbd7078080837300 jdk7-b95
|
||||
d260f892491e040ae385a8e6df59557a7d721abf jdk7-b96
|
||||
|
@ -70,3 +70,4 @@ cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85
|
||||
5fc102ff48f0e787ce9cc77249841d5ff0941b75 jdk7-b93
|
||||
d7f35c61afa092b6357c2c4bce3f298f16620f71 jdk7-b94
|
||||
fd3663286e77b9f13c39eee124db2beb079b3ca6 jdk7-b95
|
||||
cf71cb5151166f35433afebaf67dbf34a704a170 jdk7-b96
|
||||
|
@ -70,3 +70,4 @@ bcd2fc089227559ac5be927923609fac29f067fa jdk7-b91
|
||||
9718d624864c29dca44373d541e93cdd309a994f jdk7-b93
|
||||
533c11186b44e3a02d6c5fe69a73260505fcfe5e jdk7-b94
|
||||
06dbf406818c789bb586c1de4c002024cd26ecd2 jdk7-b95
|
||||
edc2a2659c77dabc55cb55bb617bad89e3a05bb3 jdk7-b96
|
||||
|
@ -1,31 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2003, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
IOSER_IO_java = \
|
||||
com/sun/corba/se/internal/io/ObjectStreamClass.java \
|
||||
com/sun/corba/se/internal/io/IIOPInputStream.java \
|
||||
com/sun/corba/se/internal/io/IIOPOutputStream.java \
|
||||
com/sun/corba/se/internal/io/LibraryManager.java
|
||||
|
@ -176,7 +176,16 @@ ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += $(CC_LOWER_OPT)
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
|
||||
CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"'
|
||||
|
||||
# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here)
|
||||
ifneq ($(ARCH),alpha)
|
||||
CPP_ARCH_FLAGS += -D$(ARCH)
|
||||
else
|
||||
CPP_ARCH_FLAGS += -D_$(ARCH)_
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \
|
||||
-D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
|
||||
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
|
@ -30,7 +30,7 @@
|
||||
BUILDDIR = ../..
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
SUBDIRS = org
|
||||
SUBDIRS = org core
|
||||
all build clean clobber::
|
||||
$(SUBDIRS-loop)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1997, 2005, Oracle and/or its affiliates. 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
|
||||
@ -24,16 +24,49 @@
|
||||
#
|
||||
|
||||
#
|
||||
# Makefile for building Java input methods
|
||||
# Makefile for building RMI/IIOP
|
||||
#
|
||||
|
||||
BUILDDIR = ../../..
|
||||
PRODUCT = sun
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
SUBDIRS = indicim thaiim
|
||||
include $(BUILDDIR)/common/Subdirs.gmk
|
||||
#
|
||||
# Files to compile.
|
||||
#
|
||||
CORBA_JMK_DIRECTORY=$(TOPDIR)/make/com/sun/corba/minclude/
|
||||
include $(CORBA_JMK_DIRECTORY)javax_rmi.jmk
|
||||
include $(CORBA_JMK_DIRECTORY)javax_rmi_CORBA.jmk
|
||||
include $(CORBA_JMK_DIRECTORY)javax_transaction.jmk
|
||||
include $(CORBA_JMK_DIRECTORY)javax_activity.jmk
|
||||
include $(CORBA_JMK_DIRECTORY)sun_corba.jmk
|
||||
|
||||
all build clean clobber::
|
||||
$(SUBDIRS-loop)
|
||||
FILES_java = \
|
||||
$(javax_rmi_java) \
|
||||
$(javax_rmi_CORBA_java) \
|
||||
$(javax_transaction_java) \
|
||||
$(javax_activity_java) \
|
||||
$(sun_corba_java)
|
||||
|
||||
#
|
||||
# Resources
|
||||
#
|
||||
LOCALE_SET_DEFINITION = jre
|
||||
RESOURCE_BUNDLES_PROPERTIES = \
|
||||
com/sun/corba/se/impl/orbutil/resources/sunorb.properties
|
||||
|
||||
#
|
||||
# Rules
|
||||
#
|
||||
include $(BUILDDIR)/common/Classes.gmk
|
||||
|
||||
|
||||
#
|
||||
# Extra clean rules because we build more than one package.
|
||||
#
|
||||
clean:: classheaders.clean objects.clean
|
||||
$(RM) -r $(CLASSBINDIR)/javax/rmi
|
||||
$(RM) -r $(CLASSBINDIR)/javax/transaction
|
||||
$(RM) -r $(CLASSBINDIR)/javax/activity
|
||||
$(RM) -r $(CLASSBINDIR)/com/sun/corba/se/impl
|
||||
|
@ -70,7 +70,4 @@ REQUIRED_Group = \
|
||||
com/sun/corba/se/internal/util/IdentityHashtable.java \
|
||||
com/sun/corba/se/internal/util/Utility.java \
|
||||
com/sun/corba/se/internal/util/JDKBridge.java \
|
||||
com/sun/corba/se/internal/io/LibraryManager.java \
|
||||
com/sun/corba/se/internal/io/ObjectStreamClass.java \
|
||||
com/sun/corba/se/internal/io/TypeMismatchException.java \
|
||||
com/sun/corba/se/internal/util/RepositoryId.java
|
||||
|
@ -98,3 +98,5 @@ e0a1a502e402dbe7bf2d9102b4084a7e79a99a9b jdk7-b91
|
||||
d38f45079fe98792a7381dbb4b64f5b589ec8c58 jdk7-b94
|
||||
8bfe9058ca4661779ac1d0572329f3943e68362e hs19-b01
|
||||
91d861ba858daca645993a1ab6ba2fa06a8f4a5b jdk7-b95
|
||||
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 jdk7-b96
|
||||
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 hs19-b02
|
||||
|
@ -70,3 +70,4 @@ e6a40e4bb10499fb6ee9db71ab5654e5a17ab75b jdk7-b92
|
||||
c725ca829c5aa4b50a8ed5728579ec8809fbfb1d jdk7-b93
|
||||
2de307cd3b4e71127e75dff70809c1b1fbc1a494 jdk7-b94
|
||||
07050840f98cda357aa6a8d416fdccbd03038d35 jdk7-b95
|
||||
9510ed0e1c7ab46a8b6659234e1dc7786407a72b jdk7-b96
|
||||
|
@ -70,3 +70,4 @@ df7c033f6a11c0973ab0e74701b1248aee9b659f jdk7-b92
|
||||
797bef19197566ffb056edaa1b34db43bd9bf7b0 jdk7-b93
|
||||
8515e093efd14ac054e941ef743f76561a393a70 jdk7-b94
|
||||
ee06cfb113d554b5c8a9a53383bae2b168533829 jdk7-b95
|
||||
208fd4451232f7a522ddb20334c598656844ccb7 jdk7-b96
|
||||
|
@ -70,3 +70,4 @@ f2dce7210cc00453c23e53edeec7156f112ca382 jdk7-b92
|
||||
219b84b9533ae4fe3c6c2083f8a8962cb579f1de jdk7-b93
|
||||
cf44386c8fe3fbdb9da14346be25d19fd1092f71 jdk7-b94
|
||||
db951e984ccf50756160fee3078c791300b0917e jdk7-b95
|
||||
51b9e5dbc2da0631414484b934ac3fb62e48a2c6 jdk7-b96
|
||||
|
@ -42,7 +42,7 @@ endif
|
||||
SUBDIRS = java security net/ssl jarsigner
|
||||
|
||||
SUBDIRS_management = jmx
|
||||
SUBDIRS_desktop = image inputmethods
|
||||
SUBDIRS_desktop = image
|
||||
SUBDIRS_enterprise = crypto/provider jndi \
|
||||
org xml rowset net/httpserver
|
||||
SUBDIRS_misc = $(SCRIPT_SUBDIR) tracing servicetag nio demo
|
||||
|
@ -1,79 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2002, 2008, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.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)
|
@ -1,79 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2002, 2008, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.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)
|
@ -194,7 +194,16 @@ ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
|
||||
CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"'
|
||||
|
||||
# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here)
|
||||
ifneq ($(ARCH),alpha)
|
||||
CPP_ARCH_FLAGS += -D$(ARCH)
|
||||
else
|
||||
CPP_ARCH_FLAGS += -D_$(ARCH)_
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \
|
||||
-D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
|
||||
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
|
@ -639,21 +639,8 @@ AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB)
|
||||
# in general this is ok to continue to do.
|
||||
LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1
|
||||
|
||||
# Math Library (libm.so), do not use -lm.
|
||||
# There might be two versions of libm.so on the build system:
|
||||
# libm.so.1 and libm.so.2, and we want libm.so.1.
|
||||
# Depending on the Solaris release being used to build with,
|
||||
# /usr/lib/libm.so could point at a libm.so.2, so we are
|
||||
# explicit here so that the libjvm.so you have built will work on an
|
||||
# older Solaris release that might not have libm.so.2.
|
||||
# This is a critical factor in allowing builds on Solaris 10 or newer
|
||||
# to run on Solaris 8 or 9.
|
||||
#
|
||||
# Note: Historically there was also a problem picking up a static version
|
||||
# of libm.a from the compiler area, but that problem has gone away
|
||||
# with the newer compilers. Use of libm.a would cause .so bloat.
|
||||
#
|
||||
LIBM = /usr/lib$(ISA_DIR)/libm.so.1
|
||||
# JDK now requires Solaris 10, so pick up libm.so.2
|
||||
LIBM = /usr/lib$(ISA_DIR)/libm.so.2
|
||||
|
||||
# Socket library
|
||||
LIBSOCKET = -lsocket
|
||||
|
@ -47,8 +47,7 @@ IMAGE_BINDIR = bin
|
||||
# Swing has taken this approach only as a temporary measure to avoid
|
||||
# the compiler warnings until we can properly document these packages.
|
||||
# This is covered under 6491853.
|
||||
EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf \
|
||||
com.sun.java.swing.plaf.windows \
|
||||
EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \
|
||||
com.sun.java.swing.plaf.motif \
|
||||
com.sun.java.swing.plaf.gtk
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1997, 20010, Oracle and/or its affiliates. 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
|
||||
@ -231,15 +231,35 @@ ifeq ($(PLATFORM), windows)
|
||||
# Temporary disk area
|
||||
TEMP_DISK=C:/temp
|
||||
# GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always
|
||||
# return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead.
|
||||
PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER))
|
||||
PROC_ARCH:=$(subst x86,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst Intel64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst em64t,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst EM64T,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst amd64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst AMD64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(subst ia64,IA64,$(PROC_ARCH))
|
||||
# return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead.
|
||||
# And sometimes PROCESSOR_IDENTIFIER is not defined at all
|
||||
# (in some restricted shells), so we use uname if we have to.
|
||||
ifeq ($(PROCESSOR_IDENTIFIER),)
|
||||
PROC_ARCH:=$(shell uname -m)
|
||||
else
|
||||
PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER))
|
||||
endif
|
||||
# Cover all the possibilities, MKS uname, CYGWIN uname, PROCESSOR_IDENTIFIER
|
||||
# Get: X86, X64, or IA64
|
||||
PROC_ARCH:=$(patsubst 386,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst 486,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst 586,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst 686,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst i386,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst i486,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst i586,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst i686,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst x86,X86,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst intel64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst Intel64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst INTEL64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst em64t,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst EM64T,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst amd64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst AMD64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst 8664,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst x86_64,X64,$(PROC_ARCH))
|
||||
PROC_ARCH:=$(patsubst ia64,IA64,$(PROC_ARCH))
|
||||
ifndef ARCH_DATA_MODEL
|
||||
ifeq ($(PROC_ARCH),IA64)
|
||||
ARCH_DATA_MODEL=64
|
||||
|
@ -34,6 +34,7 @@ JAVA_JAVA_java = \
|
||||
java/lang/Thread.java \
|
||||
java/lang/Character.java \
|
||||
java/lang/CharacterData.java \
|
||||
java/lang/CharacterName.java \
|
||||
sun/misc/ASCIICaseInsensitiveComparator.java \
|
||||
sun/misc/VM.java \
|
||||
sun/misc/Signal.java \
|
||||
|
@ -384,6 +384,27 @@ clean::
|
||||
$(RM) $(GENSRCDIR)/java/lang/CharacterDataUndefined.java
|
||||
$(RM) $(GENSRCDIR)/java/lang/CharacterDataPrivateUse.java
|
||||
|
||||
#
|
||||
# Rules to generate classes/java/lang/uniName.dat
|
||||
#
|
||||
|
||||
|
||||
|
||||
UNINAME = $(CLASSBINDIR)/java/lang/uniName.dat
|
||||
GENERATEUNINAME_JARFILE = $(BUILDTOOLJARDIR)/generatecharacter.jar
|
||||
|
||||
build: $(UNINAME)
|
||||
|
||||
$(UNINAME): $(UNICODEDATA)/UnicodeData.txt \
|
||||
$(GENERATECHARACTER_JARFILE)
|
||||
@$(prep-target)
|
||||
$(BOOT_JAVA_CMD) -classpath $(GENERATECHARACTER_JARFILE) \
|
||||
build.tools.generatecharacter.CharacterName \
|
||||
$(UNICODEDATA)/UnicodeData.txt $(UNINAME)
|
||||
|
||||
clean::
|
||||
$(RM) $(UNINAME)
|
||||
|
||||
#
|
||||
# End of rules to create $(GENSRCDIR)/java/lang/CharacterDataXX.java
|
||||
#
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
MISC_FILES = \
|
||||
$(CLASSBINDIR)/javax/swing/text/html/default.css \
|
||||
$(CLASSBINDIR)/javax/swing/text/html/parser/html32.bdtd \
|
||||
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/NeXT.txt \
|
||||
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/ansi.txt \
|
||||
$(CLASSBINDIR)/javax/swing/text/rtf/charsets/cpg437.txt \
|
||||
|
@ -59,9 +59,6 @@ $(CLASSBINDIR)/%.gif: $(SHARE_SRC)/classes/%.gif
|
||||
$(CLASSBINDIR)/%.css: $(SHARE_SRC)/classes/%.css
|
||||
$(install-file)
|
||||
|
||||
$(CLASSBINDIR)/%.bdtd: $(SHARE_SRC)/classes/%.bdtd
|
||||
$(install-file)
|
||||
|
||||
$(CLASSBINDIR)/%.txt: $(SHARE_SRC)/classes/%.txt
|
||||
$(install-file)
|
||||
|
||||
|
@ -174,7 +174,7 @@ else
|
||||
|
||||
# Check CYGWIN (should have already been done)
|
||||
# Assumption here is that you are in a shell window via cygwin.
|
||||
proc_arch=`echo "$(PROCESSOR_IDENTIFIER)" | expand | cut -d' ' -f1 | sed -e 's@x86@X86@g' -e 's@Intel64@X64@g' -e 's@em64t@X64@g' -e 's@EM64T@X64@g' -e 's@amd64@X64@g' -e 's@AMD64@X64@g' -e 's@ia64@IA64@g'`
|
||||
proc_arch=`echo "${PROCESSOR_IDENTIFIER}" | expand | cut -d' ' -f1 | sed -e 's@x86@X86@g' -e 's@Intel64@X64@g' -e 's@em64t@X64@g' -e 's@EM64T@X64@g' -e 's@amd64@X64@g' -e 's@AMD64@X64@g' -e 's@ia64@IA64@g'`
|
||||
if [ "${proc_arch}" = "X64" ] ; then
|
||||
windows_arch=amd64
|
||||
else
|
||||
|
@ -823,6 +823,10 @@ module jar-tool {
|
||||
include sun.tools.jar.**;
|
||||
}
|
||||
|
||||
module policytool {
|
||||
include sun.security.tools.policytool.*;
|
||||
}
|
||||
|
||||
module security-tools {
|
||||
include sun.security.tools.**;
|
||||
|
||||
|
@ -312,6 +312,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_awt_X11GraphicsEnvironment_initGLX;
|
||||
Java_sun_awt_X11GraphicsEnvironment_pRunningXinerama;
|
||||
Java_sun_awt_X11GraphicsEnvironment_getXineramaCenterPoint;
|
||||
Java_sun_awt_X11GraphicsEnvironment_initXRender;
|
||||
#Java_sun_awt_motif_MEmbedCanvasPeer_initXEmbedServer;
|
||||
#Java_sun_awt_motif_MEmbedCanvasPeer_destroyXEmbedServer;
|
||||
#Java_sun_awt_motif_MEmbedCanvasPeer_isXEmbedActive;
|
||||
@ -406,18 +407,53 @@ SUNWprivate_1.1 {
|
||||
Java_sun_java2d_x11_X11SurfaceData_initIDs;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initOps;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initSurface;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable;
|
||||
Java_sun_java2d_x11_X11SurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetCopyMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetXorMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetForeground;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetGraphicsExposures;
|
||||
|
||||
Java_sun_java2d_x11_XSurfaceData_initOps;
|
||||
Java_sun_java2d_x11_XSurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_XSurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_flushNativeSurface;
|
||||
Java_sun_java2d_x11_XSurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_XSurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetGraphicsExposures;
|
||||
Java_sun_java2d_xr_XRSurfaceData_initXRPicture;
|
||||
Java_sun_java2d_xr_XRSurfaceData_initIDs;
|
||||
Java_sun_java2d_xr_XRSurfaceData_XRInitSurface;
|
||||
Java_sun_java2d_xr_XRBackendNative_initIDs;
|
||||
Java_sun_java2d_xr_XIDGenerator_bufferXIDs;
|
||||
Java_sun_java2d_xr_XRBackendNative_freeGC;
|
||||
Java_sun_java2d_xr_XRBackendNative_createGC;
|
||||
Java_sun_java2d_xr_XRBackendNative_createPixmap;
|
||||
Java_sun_java2d_xr_XRBackendNative_createPictureNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_freePicture;
|
||||
Java_sun_java2d_xr_XRBackendNative_freePixmap;
|
||||
Java_sun_java2d_xr_XRBackendNative_setPictureRepeat;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCExposures;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCForeground;
|
||||
Java_sun_java2d_xr_XRBackendNative_copyArea;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderComposite;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderRectangle;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderRectanglesNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRSetTransformNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRCreateLinearGradientPaintNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRCreateRadialGradientPaintNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_setFilter;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRSetClipNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_putMaskNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRFreeGlyphsNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderCreateGlyphSetNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCMode;
|
||||
Java_sun_java2d_xr_XRBackendNative_GCRectanglesNative;
|
||||
Java_sun_java2d_xr_XRUtils_initFormatPtrs;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderCompositeTrapezoidsNative;
|
||||
XRT_DrawGlyphList;
|
||||
|
||||
Java_sun_java2d_opengl_OGLContext_getOGLIdString;
|
||||
Java_sun_java2d_opengl_OGLMaskFill_maskFill;
|
||||
|
@ -425,6 +425,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_awt_X11GraphicsEnvironment_initDisplay;
|
||||
Java_sun_awt_X11GraphicsEnvironment_pRunningXinerama;
|
||||
Java_sun_awt_X11GraphicsEnvironment_getXineramaCenterPoint;
|
||||
Java_sun_awt_X11GraphicsEnvironment_initXRender;
|
||||
|
||||
|
||||
|
||||
|
@ -46,17 +46,20 @@ SUNWprivate_1.1 {
|
||||
Java_sun_java2d_x11_X11Renderer_XFillRoundRect;
|
||||
Java_sun_java2d_x11_X11Renderer_devCopyArea;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initIDs;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initOps;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initSurface;
|
||||
Java_sun_java2d_x11_X11SurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetCopyMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetXorMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetForeground;
|
||||
|
||||
Java_sun_java2d_x11_XSurfaceData_initOps;
|
||||
Java_sun_java2d_x11_XSurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_XSurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_flushNativeSurface;
|
||||
Java_sun_java2d_x11_XSurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_XSurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetGraphicsExposures;
|
||||
|
||||
X11SurfaceData_GetOps;
|
||||
Java_java_awt_Font_initIDs;
|
||||
Java_sun_font_FontConfigManager_getFontConfig;
|
||||
|
@ -113,7 +113,7 @@ CPPFLAGS += -I$(OPENWIN_HOME)/include \
|
||||
# Libraries to link in.
|
||||
#
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -L$(OPENWIN_LIB) -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt
|
||||
OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -L$(OPENWIN_LIB) -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt -L/usr/openwin/sfw/lib$(ISA_DIR) -lXrender
|
||||
endif # PLATFORM
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1997, 2010, Oracle and/or its affiliates. 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
|
||||
@ -47,5 +47,5 @@ include $(BUILDDIR)/common/Classes.gmk
|
||||
|
||||
build:
|
||||
$(call make-launcher, keytool, sun.security.tools.KeyTool, , )
|
||||
$(call make-launcher, policytool, sun.security.tools.PolicyTool, , )
|
||||
$(call make-launcher, policytool, sun.security.tools.policytool.PolicyTool, , )
|
||||
|
||||
|
@ -80,4 +80,6 @@ FILES_c = \
|
||||
swing_GTKEngine.c \
|
||||
swing_GTKStyle.c \
|
||||
rect.c \
|
||||
sun_awt_X11_GtkFileDialogPeer.c
|
||||
sun_awt_X11_GtkFileDialogPeer.c \
|
||||
XRSurfaceData.c \
|
||||
XRBackendNative.c
|
||||
|
@ -49,6 +49,11 @@ AUTO_JAVA_PRUNE = WrapperGenerator.java
|
||||
|
||||
LDFLAGS += -L$(OPENWIN_LIB)
|
||||
|
||||
# For Xrender extension.
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
LDFLAGS += -L/usr/openwin/sfw/lib$(ISA_DIR) -R/usr/openwin/sfw/lib$(ISA_DIR)
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
LDFLAGS += -lpthread
|
||||
dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
|
||||
@ -88,7 +93,7 @@ vpath %.c $(SHARE_SRC)/native/sun/java2d/opengl
|
||||
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/opengl
|
||||
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/x11
|
||||
|
||||
OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -ldl \
|
||||
OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender -ldl \
|
||||
$(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
@ -122,7 +127,7 @@ CPPFLAGS += -DXAWT -DXAWT_HACK \
|
||||
-I$(PLATFORM_SRC)/native/sun/awt/medialib \
|
||||
-I$(PLATFORM_SRC)/native/sun/font \
|
||||
-I$(SHARE_SRC)/native/sun/awt \
|
||||
-I$(PLATFORM_SRC)/native/sun/awt
|
||||
-I$(PLATFORM_SRC)/native/sun/awt
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
# Allows for builds on Debian GNU Linux, X11 is in a different place
|
||||
|
@ -192,6 +192,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_font_X11FontManager_setNativeFontPath;
|
||||
Java_sun_awt_X11GraphicsEnvironment_initDisplay;
|
||||
Java_sun_awt_X11GraphicsEnvironment_initGLX;
|
||||
Java_sun_awt_X11GraphicsEnvironment_initXRender;
|
||||
Java_sun_awt_X11GraphicsEnvironment_checkShmExt;
|
||||
Java_sun_awt_X11GraphicsEnvironment_getNumScreens;
|
||||
Java_sun_awt_X11GraphicsEnvironment_getDefaultScreenNum;
|
||||
@ -355,21 +356,52 @@ SUNWprivate_1.1 {
|
||||
Java_sun_java2d_x11_X11Renderer_XFillRect;
|
||||
Java_sun_java2d_x11_X11Renderer_XFillRoundRect;
|
||||
Java_sun_java2d_x11_X11Renderer_devCopyArea;
|
||||
Java_sun_java2d_x11_X11SurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initIDs;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable;
|
||||
Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initOps;
|
||||
Java_sun_java2d_x11_X11SurfaceData_initSurface;
|
||||
Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetCopyMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetXorMode;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetForeground;
|
||||
Java_sun_java2d_x11_X11SurfaceData_XSetGraphicsExposures;
|
||||
|
||||
Java_sun_java2d_x11_XSurfaceData_initOps;
|
||||
Java_sun_java2d_x11_XSurfaceData_XCreateGC;
|
||||
Java_sun_java2d_x11_XSurfaceData_XResetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetClip;
|
||||
Java_sun_java2d_x11_XSurfaceData_flushNativeSurface;
|
||||
Java_sun_java2d_x11_XSurfaceData_isDrawableValid;
|
||||
Java_sun_java2d_x11_XSurfaceData_setInvalid;
|
||||
Java_sun_java2d_x11_XSurfaceData_XSetGraphicsExposures;
|
||||
Java_sun_java2d_xr_XRSurfaceData_initXRPicture;
|
||||
Java_sun_java2d_xr_XRSurfaceData_initIDs;
|
||||
Java_sun_java2d_xr_XRSurfaceData_XRInitSurface;
|
||||
Java_sun_java2d_xr_XRBackendNative_initIDs;
|
||||
Java_sun_java2d_xr_XRBackendNative_freeGC;
|
||||
Java_sun_java2d_xr_XRBackendNative_createGC;
|
||||
Java_sun_java2d_xr_XRBackendNative_createPixmap;
|
||||
Java_sun_java2d_xr_XRBackendNative_createPictureNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_freePicture;
|
||||
Java_sun_java2d_xr_XRBackendNative_freePixmap;
|
||||
Java_sun_java2d_xr_XRBackendNative_setPictureRepeat;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCExposures;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCForeground;
|
||||
Java_sun_java2d_xr_XRBackendNative_copyArea;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderComposite;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderRectangle;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderRectanglesNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRSetTransformNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRCreateLinearGradientPaintNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRCreateRadialGradientPaintNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_setFilter;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRSetClipNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_putMaskNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRFreeGlyphsNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderCreateGlyphSetNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_setGCMode;
|
||||
Java_sun_java2d_xr_XRBackendNative_GCRectanglesNative;
|
||||
Java_sun_java2d_xr_XRBackendNative_renderCompositeTrapezoidsNative;
|
||||
|
||||
Java_com_sun_java_swing_plaf_gtk_GTKEngine_native_1paint_1arrow;
|
||||
Java_com_sun_java_swing_plaf_gtk_GTKEngine_native_1paint_1box;
|
||||
@ -397,8 +429,8 @@ SUNWprivate_1.1 {
|
||||
Java_com_sun_java_swing_plaf_gtk_GTKStyle_nativeGetClassValue;
|
||||
Java_com_sun_java_swing_plaf_gtk_GTKStyle_nativeGetPangoFontName;
|
||||
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
||||
|
||||
Java_sun_print_CUPSPrinter_initIDs;
|
||||
Java_sun_print_CUPSPrinter_getCupsServer;
|
||||
|
1972
jdk/make/tools/UnicodeData/Scripts.txt
Normal file
1972
jdk/make/tools/UnicodeData/Scripts.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -2259,7 +2259,6 @@ com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue
|
||||
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
|
||||
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
|
||||
javax/swing/plaf/synth/SynthPanelUI
|
||||
sun/swing/plaf/synth/SynthUI
|
||||
javax/swing/plaf/synth/SynthConstants
|
||||
javax/swing/plaf/synth/SynthContext
|
||||
javax/swing/plaf/synth/SynthBorder
|
||||
@ -2271,6 +2270,7 @@ javax/swing/plaf/basic/BasicBorders$FieldBorder
|
||||
javax/swing/plaf/synth/SynthMenuBarUI
|
||||
javax/swing/plaf/synth/DefaultMenuLayout
|
||||
javax/swing/plaf/synth/SynthMenuUI
|
||||
javax/swing/plaf/synth/SynthUI
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
|
||||
|
@ -2360,7 +2360,6 @@ com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue
|
||||
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
|
||||
com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
|
||||
javax/swing/plaf/synth/SynthPanelUI
|
||||
sun/swing/plaf/synth/SynthUI
|
||||
javax/swing/plaf/synth/SynthConstants
|
||||
javax/swing/plaf/synth/SynthContext
|
||||
javax/swing/plaf/synth/SynthBorder
|
||||
@ -2373,6 +2372,7 @@ javax/swing/plaf/basic/BasicBorders$FieldBorder
|
||||
javax/swing/plaf/synth/SynthMenuBarUI
|
||||
javax/swing/plaf/synth/DefaultMenuLayout
|
||||
javax/swing/plaf/synth/SynthMenuUI
|
||||
javax/swing/plaf/synth/SynthUI
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
|
||||
com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
|
||||
|
@ -0,0 +1,100 @@
|
||||
package build.tools.generatecharacter;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.*;
|
||||
import java.util.*;
|
||||
import java.util.zip.*;
|
||||
|
||||
public class CharacterName {
|
||||
|
||||
public static void main(String[] args) {
|
||||
FileReader reader = null;
|
||||
try {
|
||||
if (args.length != 2) {
|
||||
System.err.println("Usage: java CharacterName UniocdeData.txt uniName.dat");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
reader = new FileReader(args[0]);
|
||||
BufferedReader bfr = new BufferedReader(reader);
|
||||
String line = null;
|
||||
|
||||
StringBuilder namePool = new StringBuilder();
|
||||
byte[] cpPoolBytes = new byte[0x100000];
|
||||
ByteBuffer cpBB = ByteBuffer.wrap(cpPoolBytes);
|
||||
int lastCp = 0;
|
||||
int cpNum = 0;
|
||||
|
||||
while ((line = bfr.readLine()) != null) {
|
||||
if (line.startsWith("#"))
|
||||
continue;
|
||||
UnicodeSpec spec = UnicodeSpec.parse(line);
|
||||
if (spec != null) {
|
||||
int cp = spec.getCodePoint();
|
||||
String name = spec.getName();
|
||||
cpNum++;
|
||||
if (name.equals("<control>") && spec.getOldName() != null) {
|
||||
if (spec.getOldName().length() != 0)
|
||||
name = spec.getOldName();
|
||||
else
|
||||
continue;
|
||||
} else if (name.startsWith("<")) {
|
||||
/*
|
||||
3400 <CJK Ideograph Extension A, First>
|
||||
4db5 <CJK Ideograph Extension A, Last>
|
||||
4e00 <CJK Ideograph, First>
|
||||
9fc3 <CJK Ideograph, Last>
|
||||
ac00 <Hangul Syllable, First>
|
||||
d7a3 <Hangul Syllable, Last>
|
||||
d800 <Non Private Use High Surrogate, First>
|
||||
db7f <Non Private Use High Surrogate, Last>
|
||||
db80 <Private Use High Surrogate, First>
|
||||
dbff <Private Use High Surrogate, Last>
|
||||
dc00 <Low Surrogate, First>
|
||||
dfff <Low Surrogate, Last>
|
||||
e000 <Private Use, First>
|
||||
f8ff <Private Use, Last>
|
||||
20000 <CJK Ideograph Extension B, First>
|
||||
2a6d6 <CJK Ideograph Extension B, Last>
|
||||
f0000 <Plane 15 Private Use, First>
|
||||
ffffd <Plane 15 Private Use, Last>
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cp == lastCp + 1) {
|
||||
cpBB.put((byte)name.length());
|
||||
} else {
|
||||
cpBB.put((byte)0); // segment start flag
|
||||
cpBB.putInt((name.length() << 24) | (cp & 0xffffff));
|
||||
}
|
||||
namePool.append(name);
|
||||
lastCp = cp;
|
||||
}
|
||||
}
|
||||
|
||||
byte[] namePoolBytes = namePool.toString().getBytes("ASCII");
|
||||
int cpLen = cpBB.position();
|
||||
int total = cpLen + namePoolBytes.length;
|
||||
|
||||
DataOutputStream dos = new DataOutputStream(
|
||||
new DeflaterOutputStream(
|
||||
new FileOutputStream(args[1])));
|
||||
dos.writeInt(total); // total
|
||||
dos.writeInt(cpLen); // nameOff
|
||||
dos.write(cpPoolBytes, 0, cpLen);
|
||||
dos.write(namePoolBytes);
|
||||
dos.close();
|
||||
|
||||
} catch (Throwable e) {
|
||||
System.out.println("Unexpected exception:");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (Throwable ee) { ee.printStackTrace(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,214 @@
|
||||
import java.util.regex.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
public class CharacterScript {
|
||||
|
||||
// generate the code needed for j.l.C.UnicodeScript
|
||||
static void fortest(String fmt, Object... o) {
|
||||
//System.out.printf(fmt, o);
|
||||
}
|
||||
|
||||
static void print(String fmt, Object... o) {
|
||||
System.out.printf(fmt, o);
|
||||
}
|
||||
|
||||
static void debug(String fmt, Object... o) {
|
||||
//System.out.printf(fmt, o);
|
||||
}
|
||||
|
||||
public static void main(String args[]){
|
||||
try {
|
||||
if (args.length != 1) {
|
||||
System.out.println("java CharacterScript script.txt out");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
int i, j;
|
||||
BufferedReader sbfr = new BufferedReader(new FileReader(args[0]));
|
||||
HashMap<String,Integer> scriptMap = new HashMap<String,Integer>();
|
||||
String line = null;
|
||||
|
||||
Matcher m = Pattern.compile("(\\p{XDigit}+)(?:\\.{2}(\\p{XDigit}+))?\\s+;\\s+(\\w+)\\s+#.*").matcher("");
|
||||
|
||||
int prevS = -1;
|
||||
int prevE = -1;
|
||||
String prevN = null;
|
||||
int[][] scripts = new int[1024][3];
|
||||
int scriptSize = 0;
|
||||
|
||||
while ((line = sbfr.readLine()) != null) {
|
||||
if (line.length() <= 1 || line.charAt(0) == '#') {
|
||||
continue;
|
||||
}
|
||||
m.reset(line);
|
||||
if (m.matches()) {
|
||||
int start = Integer.parseInt(m.group(1), 16);
|
||||
int end = (m.group(2)==null)?start
|
||||
:Integer.parseInt(m.group(2), 16);
|
||||
String name = m.group(3);
|
||||
if (name.equals(prevN) && start == prevE + 1) {
|
||||
prevE = end;
|
||||
} else {
|
||||
if (prevS != -1) {
|
||||
if (scriptMap.get(prevN) == null) {
|
||||
scriptMap.put(prevN, scriptMap.size());
|
||||
}
|
||||
scripts[scriptSize][0] = prevS;
|
||||
scripts[scriptSize][1] = prevE;
|
||||
scripts[scriptSize][2] = scriptMap.get(prevN);
|
||||
scriptSize++;
|
||||
}
|
||||
debug("%x-%x\t%s%n", prevS, prevE, prevN);
|
||||
prevS = start; prevE = end; prevN = name;
|
||||
}
|
||||
} else {
|
||||
debug("Warning: Unrecognized line <%s>%n", line);
|
||||
}
|
||||
}
|
||||
|
||||
//last one.
|
||||
if (scriptMap.get(prevN) == null) {
|
||||
scriptMap.put(prevN, scriptMap.size());
|
||||
}
|
||||
scripts[scriptSize][0] = prevS;
|
||||
scripts[scriptSize][1] = prevE;
|
||||
scripts[scriptSize][2] = scriptMap.get(prevN);
|
||||
scriptSize++;
|
||||
|
||||
debug("%x-%x\t%s%n", prevS, prevE, prevN);
|
||||
debug("-----------------%n");
|
||||
debug("Total scripts=%s%n", scriptMap.size());
|
||||
debug("-----------------%n%n");
|
||||
|
||||
String[] names = new String[scriptMap.size()];
|
||||
for (String name: scriptMap.keySet()) {
|
||||
names[scriptMap.get(name).intValue()] = name;
|
||||
}
|
||||
|
||||
for (j = 0; j < scriptSize; j++) {
|
||||
for (int cp = scripts[j][0]; cp <= scripts[j][1]; cp++) {
|
||||
String name = names[scripts[j][2]].toUpperCase(Locale.ENGLISH);;
|
||||
if (cp > 0xffff)
|
||||
System.out.printf("%05X %s%n", cp, name);
|
||||
else
|
||||
System.out.printf("%05X %s%n", cp, name);
|
||||
}
|
||||
}
|
||||
|
||||
Arrays.sort(scripts, 0, scriptSize,
|
||||
new Comparator<int[]>() {
|
||||
public int compare(int[] a1, int[] a2) {
|
||||
return a1[0] - a2[0];
|
||||
}
|
||||
public boolean compare(Object obj) {
|
||||
return obj == this;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Consolidation: there are lots of "reserved" code points
|
||||
// embedded in those otherwise "sequential" blocks.
|
||||
// To make the lookup table smaller, we combine those
|
||||
// separated segments with the assumption that the lookup
|
||||
// implementation checks
|
||||
// Character.getType() != Character.UNASSIGNED
|
||||
// first (return UNKNOWN for unassigned)
|
||||
|
||||
ArrayList<int[]> list = new ArrayList();
|
||||
list.add(scripts[0]);
|
||||
|
||||
int[] last = scripts[0];
|
||||
for (i = 1; i < scriptSize; i++) {
|
||||
if (scripts[i][0] != (last[1] + 1)) {
|
||||
|
||||
boolean isNotUnassigned = false;
|
||||
for (int cp = last[1] + 1; cp < scripts[i][0]; cp++) {
|
||||
if (Character.getType(cp) != Character.UNASSIGNED) {
|
||||
isNotUnassigned = true;
|
||||
debug("Warning: [%x] is ASSIGNED but in NON script%n", cp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isNotUnassigned) {
|
||||
// surrogates only?
|
||||
int[] a = new int[3];
|
||||
a[0] = last[1] + 1;
|
||||
a[1] = scripts[i][0] - 1;
|
||||
a[2] = -1; // unknown
|
||||
list.add(a);
|
||||
} else {
|
||||
if (last[2] == scripts[i][2]) {
|
||||
//combine
|
||||
last[1] = scripts[i][1];
|
||||
continue;
|
||||
} else {
|
||||
// expand last
|
||||
last[1] = scripts[i][0] - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(scripts[i]);
|
||||
last = scripts[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < list.size(); i++) {
|
||||
int[] a = (int[])list.get(i);
|
||||
String name = "UNKNOWN";
|
||||
if (a[2] != -1)
|
||||
name = names[a[2]].toUpperCase(Locale.US);
|
||||
debug("0x%05x, 0x%05x %s%n", a[0], a[1], name);
|
||||
}
|
||||
debug("--->total=%d%n", list.size());
|
||||
|
||||
|
||||
//////////////////OUTPUT//////////////////////////////////
|
||||
print("public class Scripts {%n%n");
|
||||
print(" public static enum UnicodeScript {%n");
|
||||
for (i = 0; i < names.length; i++) {
|
||||
print(" /**%n * Unicode script \"%s\".%n */%n", names[i]);
|
||||
print(" %s,%n%n", names[i].toUpperCase(Locale.US));
|
||||
}
|
||||
print(" /**%n * Unicode script \"Unknown\".%n */%n UNKNOWN;%n%n");
|
||||
|
||||
|
||||
// lookup table
|
||||
print(" private static final int[] scriptStarts = {%n");
|
||||
for (int[] a : list) {
|
||||
String name = "UNKNOWN";
|
||||
if (a[2] != -1)
|
||||
name = names[a[2]].toUpperCase(Locale.US);
|
||||
if (a[0] < 0x10000)
|
||||
print(" 0x%04X, // %04X..%04X; %s%n",
|
||||
a[0], a[0], a[1], name);
|
||||
else
|
||||
print(" 0x%05X, // %05X..%05X; %s%n",
|
||||
a[0], a[0], a[1], name);
|
||||
}
|
||||
last = list.get(list.size() -1);
|
||||
if (last[1] != Character.MAX_CODE_POINT)
|
||||
print(" 0x%05X // %05X..%06X; %s%n",
|
||||
last[1] + 1, last[1] + 1, Character.MAX_CODE_POINT,
|
||||
"UNKNOWN");
|
||||
print("%n };%n%n");
|
||||
|
||||
print(" private static final UnicodeScript[] scripts = {%n");
|
||||
for (int[] a : list) {
|
||||
String name = "UNKNOWN";
|
||||
if (a[2] != -1)
|
||||
name = names[a[2]].toUpperCase(Locale.US);
|
||||
print(" %s,%n", name);
|
||||
}
|
||||
|
||||
if (last[1] != Character.MAX_CODE_POINT)
|
||||
print(" UNKNOWN%n");
|
||||
print(" };%n");
|
||||
print(" }%n");
|
||||
print("}%n");
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -35,6 +35,8 @@ import java.io.BufferedWriter;
|
||||
import java.io.FileWriter;
|
||||
import java.io.File;
|
||||
|
||||
import build.tools.generatecharacter.CharacterName;
|
||||
|
||||
/**
|
||||
* This program generates the source code for the class java.lang.Character.
|
||||
* It also generates native C code that can perform the same operations.
|
||||
|
@ -1,102 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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();
|
||||
}
|
||||
}
|
@ -1,255 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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
|
||||
};
|
||||
}
|
@ -1,436 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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;
|
||||
}
|
||||
}
|
@ -1,475 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2004, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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
|
||||
}
|
@ -1 +0,0 @@
|
||||
com.sun.inputmethods.internal.indicim.DevanagariInputMethodDescriptor
|
@ -1,6 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
||||
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = \u30c7\u30fc\u30f4\u30a1\u30ca\u30fc\u30ac\u30ea\u30fc\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari \uc785\ub825 \uba54\uc18c\ub4dc
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari Input Method
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari \u8f93\u5165\u6cd5
|
@ -1,5 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Indic input methods
|
||||
#
|
||||
|
||||
DisplayName.Devanagari = Devanagari \u8f38\u5165\u6cd5
|
@ -1,437 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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;
|
||||
}
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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();
|
||||
}
|
||||
}
|
@ -1,235 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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()
|
||||
}
|
@ -1,348 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
com.sun.inputmethods.internal.thaiim.ThaiInputMethodDescriptor
|
@ -1,6 +0,0 @@
|
||||
#
|
||||
# Default Input method display names for Thai input methods
|
||||
#
|
||||
|
||||
DisplayName.Thai = Thai Input Method
|
||||
|
@ -35,6 +35,7 @@ import javax.swing.table.*;
|
||||
import static com.sun.java.swing.plaf.windows.TMSchema.*;
|
||||
import static com.sun.java.swing.plaf.windows.XPStyle.*;
|
||||
import sun.swing.table.*;
|
||||
import sun.swing.SwingUtilities2;
|
||||
|
||||
|
||||
public class WindowsTableHeaderUI extends BasicTableHeaderUI {
|
||||
@ -163,18 +164,13 @@ public class WindowsTableHeaderUI extends BasicTableHeaderUI {
|
||||
return this;
|
||||
}
|
||||
|
||||
private int viewIndexForColumn(TableColumn aColumn) {
|
||||
if (aColumn != null) {
|
||||
return header.getTable().convertColumnIndexToView(
|
||||
aColumn.getModelIndex());
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
Dimension size = getSize();
|
||||
State state = State.NORMAL;
|
||||
if (column == viewIndexForColumn(header.getDraggedColumn())) {
|
||||
TableColumn draggedColumn = header.getDraggedColumn();
|
||||
if (draggedColumn != null &&
|
||||
column == SwingUtilities2.convertColumnIndexToView(
|
||||
header.getColumnModel(), draggedColumn.getModelIndex())) {
|
||||
state = State.PRESSED;
|
||||
} else if (isSelected || hasFocus || hasRollover) {
|
||||
state = State.HOT;
|
||||
|
@ -525,11 +525,11 @@ public class DnsClient {
|
||||
}
|
||||
byte[] pkt;
|
||||
if ((pkt = (byte[]) resps.get(xid)) != null) {
|
||||
checkResponseCode(new Header(pkt, pkt.length));
|
||||
synchronized (queuesLock) {
|
||||
resps.remove(xid);
|
||||
reqs.remove(xid);
|
||||
}
|
||||
checkResponseCode(new Header(pkt, pkt.length));
|
||||
|
||||
if (debug) {
|
||||
dprint("FOUND (" + Thread.currentThread() +
|
||||
@ -562,12 +562,12 @@ public class DnsClient {
|
||||
dprint("XID MATCH:" + xid);
|
||||
}
|
||||
|
||||
checkResponseCode(hdr);
|
||||
// remove the response for the xid if received by some other thread.
|
||||
synchronized (queuesLock) {
|
||||
resps.remove(xid);
|
||||
reqs.remove(xid);
|
||||
}
|
||||
checkResponseCode(hdr);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -343,6 +343,10 @@ public class Font implements java.io.Serializable
|
||||
* Identify a font resource of type TRUETYPE.
|
||||
* Used to specify a TrueType font resource to the
|
||||
* {@link #createFont} method.
|
||||
* The TrueType format was extended to become the OpenType
|
||||
* format, which adds support for fonts with Postscript outlines,
|
||||
* this tag therefore references these fonts, as well as those
|
||||
* with TrueType outlines.
|
||||
* @since 1.3
|
||||
*/
|
||||
|
||||
|
@ -222,6 +222,25 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate {
|
||||
|
||||
// Write out the properties of this instance.
|
||||
private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) {
|
||||
for (Field field : type.getFields()) {
|
||||
int mod = field.getModifiers();
|
||||
if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Expression oldGetExp = new Expression(field, "get", new Object[] { oldInstance });
|
||||
Expression newGetExp = new Expression(field, "get", new Object[] { newInstance });
|
||||
Object oldValue = oldGetExp.getValue();
|
||||
Object newValue = newGetExp.getValue();
|
||||
out.writeExpression(oldGetExp);
|
||||
if (!equals(newValue, out.get(oldValue))) {
|
||||
out.writeStatement(new Statement(field, "set", new Object[] { oldInstance, oldValue }));
|
||||
}
|
||||
}
|
||||
catch (Exception exception) {
|
||||
out.getExceptionListener().exceptionThrown(exception);
|
||||
}
|
||||
}
|
||||
BeanInfo info;
|
||||
try {
|
||||
info = Introspector.getBeanInfo(type);
|
||||
|
@ -700,56 +700,6 @@ class java_beans_beancontext_BeanContextSupport_PersistenceDelegate extends java
|
||||
|
||||
// AWT
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link Dimension}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
* because all getters have return types that differ from parameter types
|
||||
* of the constructor {@link Dimension#Dimension(int, int)}.
|
||||
*
|
||||
* @author Sergey A. Malenkov
|
||||
*/
|
||||
final class java_awt_Dimension_PersistenceDelegate extends PersistenceDelegate {
|
||||
protected boolean mutatesTo(Object oldInstance, Object newInstance) {
|
||||
return oldInstance.equals(newInstance);
|
||||
}
|
||||
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Dimension dimension = (Dimension) oldInstance;
|
||||
Object[] args = new Object[] {
|
||||
dimension.width,
|
||||
dimension.height,
|
||||
};
|
||||
return new Expression(dimension, dimension.getClass(), "new", args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link GridBagConstraints}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
* because this class does not have any properties.
|
||||
*
|
||||
* @author Sergey A. Malenkov
|
||||
*/
|
||||
final class java_awt_GridBagConstraints_PersistenceDelegate extends PersistenceDelegate {
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
GridBagConstraints gbc = (GridBagConstraints) oldInstance;
|
||||
Object[] args = new Object[] {
|
||||
gbc.gridx,
|
||||
gbc.gridy,
|
||||
gbc.gridwidth,
|
||||
gbc.gridheight,
|
||||
gbc.weightx,
|
||||
gbc.weighty,
|
||||
gbc.anchor,
|
||||
gbc.fill,
|
||||
gbc.insets,
|
||||
gbc.ipadx,
|
||||
gbc.ipady,
|
||||
};
|
||||
return new Expression(gbc, gbc.getClass(), "new", args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link Insets}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
@ -774,54 +724,6 @@ final class java_awt_Insets_PersistenceDelegate extends PersistenceDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link Point}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
* because all getters have return types that differ from parameter types
|
||||
* of the constructor {@link Point#Point(int, int)}.
|
||||
*
|
||||
* @author Sergey A. Malenkov
|
||||
*/
|
||||
final class java_awt_Point_PersistenceDelegate extends PersistenceDelegate {
|
||||
protected boolean mutatesTo(Object oldInstance, Object newInstance) {
|
||||
return oldInstance.equals(newInstance);
|
||||
}
|
||||
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Point point = (Point) oldInstance;
|
||||
Object[] args = new Object[] {
|
||||
point.x,
|
||||
point.y,
|
||||
};
|
||||
return new Expression(point, point.getClass(), "new", args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link Rectangle}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
* because all getters have return types that differ from parameter types
|
||||
* of the constructor {@link Rectangle#Rectangle(int, int, int, int)}.
|
||||
*
|
||||
* @author Sergey A. Malenkov
|
||||
*/
|
||||
final class java_awt_Rectangle_PersistenceDelegate extends PersistenceDelegate {
|
||||
protected boolean mutatesTo(Object oldInstance, Object newInstance) {
|
||||
return oldInstance.equals(newInstance);
|
||||
}
|
||||
|
||||
protected Expression instantiate(Object oldInstance, Encoder out) {
|
||||
Rectangle rectangle = (Rectangle) oldInstance;
|
||||
Object[] args = new Object[] {
|
||||
rectangle.x,
|
||||
rectangle.y,
|
||||
rectangle.width,
|
||||
rectangle.height,
|
||||
};
|
||||
return new Expression(rectangle, rectangle.getClass(), "new", args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The persistence delegate for {@link Font}.
|
||||
* It is impossible to use {@link DefaultPersistenceDelegate}
|
||||
|
@ -407,7 +407,20 @@ public class XMLEncoder extends Encoder {
|
||||
os.writeObject(this);
|
||||
*/
|
||||
mark(oldStm);
|
||||
statementList(oldStm.getTarget()).add(oldStm);
|
||||
Object target = oldStm.getTarget();
|
||||
if (target instanceof Field) {
|
||||
String method = oldStm.getMethodName();
|
||||
Object[] args = oldStm.getArguments();
|
||||
if ((method == null) || (args == null)) {
|
||||
}
|
||||
else if (method.equals("get") && (args.length == 1)) {
|
||||
target = args[0];
|
||||
}
|
||||
else if (method.equals("set") && (args.length == 2)) {
|
||||
target = args[0];
|
||||
}
|
||||
}
|
||||
statementList(target).add(oldStm);
|
||||
}
|
||||
catch (Exception e) {
|
||||
getExceptionListener().exceptionThrown(new Exception("XMLEncoder: discarding statement " + oldStm, e));
|
||||
@ -703,7 +716,9 @@ public class XMLEncoder extends Encoder {
|
||||
statements.add(exp);
|
||||
}
|
||||
outputValue(target, outer, false);
|
||||
outputValue(value, outer, isArgument);
|
||||
if (expression) {
|
||||
outputValue(value, outer, isArgument);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (expression && (d.refs > 1)) {
|
||||
@ -722,8 +737,10 @@ public class XMLEncoder extends Encoder {
|
||||
}
|
||||
else if ((!expression && methodName.startsWith("set") && args.length == 1) ||
|
||||
(expression && methodName.startsWith("get") && args.length == 0)) {
|
||||
attributes = attributes + " property=" +
|
||||
quote(Introspector.decapitalize(methodName.substring(3)));
|
||||
if (3 < methodName.length()) {
|
||||
attributes = attributes + " property=" +
|
||||
quote(Introspector.decapitalize(methodName.substring(3)));
|
||||
}
|
||||
}
|
||||
else if (!methodName.equals("new") && !methodName.equals("newInstance")) {
|
||||
attributes = attributes + " method=" + quote(methodName);
|
||||
|
@ -117,7 +117,7 @@ abstract class AbstractStringBuilder implements Appendable, CharSequence {
|
||||
* size check or synchronization.
|
||||
*/
|
||||
void expandCapacity(int minimumCapacity) {
|
||||
int newCapacity = value.length * 2;
|
||||
int newCapacity = value.length * 2 + 2;
|
||||
if (newCapacity - minimumCapacity < 0)
|
||||
newCapacity = minimumCapacity;
|
||||
if (newCapacity < 0) {
|
||||
|
File diff suppressed because it is too large
Load Diff
106
jdk/src/share/classes/java/lang/CharacterName.java
Normal file
106
jdk/src/share/classes/java/lang/CharacterName.java
Normal file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright 2010 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 java.lang;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.util.Arrays;
|
||||
import java.util.zip.InflaterInputStream;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
class CharacterName {
|
||||
|
||||
private static SoftReference<byte[]> refStrPool;
|
||||
private static int[][] lookup;
|
||||
|
||||
private static synchronized byte[] initNamePool() {
|
||||
byte[] strPool = null;
|
||||
if (refStrPool != null && (strPool = refStrPool.get()) != null)
|
||||
return strPool;
|
||||
DataInputStream dis = null;
|
||||
try {
|
||||
dis = new DataInputStream(new InflaterInputStream(
|
||||
AccessController.doPrivileged(new PrivilegedAction<InputStream>()
|
||||
{
|
||||
public InputStream run() {
|
||||
return getClass().getResourceAsStream("uniName.dat");
|
||||
}
|
||||
})));
|
||||
|
||||
lookup = new int[(Character.MAX_CODE_POINT + 1) >> 8][];
|
||||
int total = dis.readInt();
|
||||
int cpEnd = dis.readInt();
|
||||
byte ba[] = new byte[cpEnd];
|
||||
dis.readFully(ba);
|
||||
|
||||
int nameOff = 0;
|
||||
int cpOff = 0;
|
||||
int cp = 0;
|
||||
do {
|
||||
int len = ba[cpOff++] & 0xff;
|
||||
if (len == 0) {
|
||||
len = ba[cpOff++] & 0xff;
|
||||
// always big-endian
|
||||
cp = ((ba[cpOff++] & 0xff) << 16) |
|
||||
((ba[cpOff++] & 0xff) << 8) |
|
||||
((ba[cpOff++] & 0xff));
|
||||
} else {
|
||||
cp++;
|
||||
}
|
||||
int hi = cp >> 8;
|
||||
if (lookup[hi] == null) {
|
||||
lookup[hi] = new int[0x100];
|
||||
}
|
||||
lookup[hi][cp&0xff] = (nameOff << 8) | len;
|
||||
nameOff += len;
|
||||
} while (cpOff < cpEnd);
|
||||
strPool = new byte[total - cpEnd];
|
||||
dis.readFully(strPool);
|
||||
refStrPool = new SoftReference<byte[]>(strPool);
|
||||
} catch (Exception x) {
|
||||
throw new InternalError(x.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
if (dis != null)
|
||||
dis.close();
|
||||
} catch (Exception xx) {}
|
||||
}
|
||||
return strPool;
|
||||
}
|
||||
|
||||
public static String get(int cp) {
|
||||
byte[] strPool = null;
|
||||
if (refStrPool == null || (strPool = refStrPool.get()) == null)
|
||||
strPool = initNamePool();
|
||||
int off = 0;
|
||||
if (lookup[cp>>8] == null ||
|
||||
(off = lookup[cp>>8][cp&0xff]) == 0)
|
||||
return null;
|
||||
return new String(strPool, 0, off >>> 8, off & 0xff); // ASCII
|
||||
}
|
||||
}
|
@ -2491,6 +2491,8 @@ public final class URI
|
||||
|
||||
// Tell whether the given character is permitted by the given mask pair
|
||||
private static boolean match(char c, long lowMask, long highMask) {
|
||||
if (c == 0) // 0 doesn't have a slot in the mask. So, it never matches.
|
||||
return false;
|
||||
if (c < 64)
|
||||
return ((1L << c) & lowMask) != 0;
|
||||
if (c < 128)
|
||||
|
@ -76,7 +76,7 @@ class JarVerifier {
|
||||
private ByteArrayOutputStream baos;
|
||||
|
||||
/** The ManifestDigester object */
|
||||
private ManifestDigester manDig;
|
||||
private volatile ManifestDigester manDig;
|
||||
|
||||
/** the bytes for the manDig object */
|
||||
byte manifestRawBytes[] = null;
|
||||
|
@ -29,6 +29,7 @@ import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.text.CharacterIterator;
|
||||
import java.text.Normalizer;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -200,8 +201,9 @@ import java.util.Arrays;
|
||||
* <td>Equivalent to java.lang.Character.isMirrored()</td></tr>
|
||||
*
|
||||
* <tr><th> </th></tr>
|
||||
* <tr align="left"><th colspan="2" id="unicode">Classes for Unicode blocks and categories</th></tr>
|
||||
*
|
||||
* <tr align="left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks and categories</th></tr>
|
||||
* * <tr><td valign="top" headers="construct unicode"><tt>\p{IsLatin}</tt></td>
|
||||
* <td headers="matches">A Latin script character (simple <a href="#ubc">script</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode"><tt>\p{InGreek}</tt></td>
|
||||
* <td headers="matches">A character in the Greek block (simple <a href="#ubc">block</a>)</td></tr>
|
||||
* <tr><td valign="top" headers="construct unicode"><tt>\p{Lu}</tt></td>
|
||||
@ -527,25 +529,40 @@ import java.util.Arrays;
|
||||
* while not equal, compile into the same pattern, which matches the character
|
||||
* with hexadecimal value <tt>0x2014</tt>.
|
||||
*
|
||||
* <a name="ubc"> <p>Unicode blocks and categories are written with the
|
||||
* <tt>\p</tt> and <tt>\P</tt> constructs as in
|
||||
* Perl. <tt>\p{</tt><i>prop</i><tt>}</tt> matches if the input has the
|
||||
* property <i>prop</i>, while <tt>\P{</tt><i>prop</i><tt>}</tt> does not match if
|
||||
* the input has that property. Blocks are specified with the prefix
|
||||
* <tt>In</tt>, as in <tt>InMongolian</tt>. Categories may be specified with
|
||||
* the optional prefix <tt>Is</tt>: Both <tt>\p{L}</tt> and <tt>\p{IsL}</tt>
|
||||
* denote the category of Unicode letters. Blocks and categories can be used
|
||||
* both inside and outside of a character class.
|
||||
*
|
||||
* <a name="ubc">
|
||||
* <p>Unicode scripts, blocks and categories are written with the <tt>\p</tt> and
|
||||
* <tt>\P</tt> constructs as in Perl. <tt>\p{</tt><i>prop</i><tt>}</tt> matches if
|
||||
* the input has the property <i>prop</i>, while <tt>\P{</tt><i>prop</i><tt>}</tt>
|
||||
* does not match if the input has that property.
|
||||
* <p>
|
||||
* Scripts are specified either with the prefix {@code Is}, as in
|
||||
* {@code IsHiragana}, or by using the {@code script} keyword (or its short
|
||||
* form {@code sc})as in {@code script=Hiragana} or {@code sc=Hiragana}.
|
||||
* <p>
|
||||
* Blocks are specified with the prefix {@code In}, as in
|
||||
* {@code InMongolian}, or by using the keyword {@code block} (or its short
|
||||
* form {@code blk}) as in {@code block=Mongolian} or {@code blk=Mongolian}.
|
||||
* <p>
|
||||
* Categories may be specified with the optional prefix {@code Is}:
|
||||
* Both {@code \p{L}} and {@code \p{IsL}} denote the category of Unicode
|
||||
* letters. Same as scripts and blocks, categories can also be specified
|
||||
* by using the keyword {@code general_category} (or its short form
|
||||
* {@code gc}) as in {@code general_category=Lu} or {@code gc=Lu}.
|
||||
* <p>
|
||||
* Scripts, blocks and categories can be used both inside and outside of a
|
||||
* character class.
|
||||
* <p> The supported categories are those of
|
||||
* <a href="http://www.unicode.org/unicode/standard/standard.html">
|
||||
* <i>The Unicode Standard</i></a> in the version specified by the
|
||||
* {@link java.lang.Character Character} class. The category names are those
|
||||
* defined in the Standard, both normative and informative.
|
||||
* The script names supported by <code>Pattern</code> are the valid script names
|
||||
* accepted and defined by
|
||||
* {@link java.lang.Character.UnicodeScript#forName(String) UnicodeScript.forName}.
|
||||
* The block names supported by <code>Pattern</code> are the valid block names
|
||||
* accepted and defined by
|
||||
* {@link java.lang.Character.UnicodeBlock#forName(String) UnicodeBlock.forName}.
|
||||
*
|
||||
* <p>
|
||||
* <a name="jcc"> <p>Categories that behave like the java.lang.Character
|
||||
* boolean is<i>methodname</i> methods (except for the deprecated ones) are
|
||||
* available through the same <tt>\p{</tt><i>prop</i><tt>}</tt> syntax where
|
||||
@ -2488,12 +2505,34 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
|
||||
name = new String(temp, i, j-i-1);
|
||||
}
|
||||
|
||||
if (name.startsWith("In")) {
|
||||
node = unicodeBlockPropertyFor(name.substring(2));
|
||||
int i = name.indexOf('=');
|
||||
if (i != -1) {
|
||||
// property construct \p{name=value}
|
||||
String value = name.substring(i + 1);
|
||||
name = name.substring(0, i).toLowerCase(Locale.ENGLISH);
|
||||
if ("sc".equals(name) || "script".equals(name)) {
|
||||
node = unicodeScriptPropertyFor(value);
|
||||
} else if ("blk".equals(name) || "block".equals(name)) {
|
||||
node = unicodeBlockPropertyFor(value);
|
||||
} else if ("gc".equals(name) || "general_category".equals(name)) {
|
||||
node = charPropertyNodeFor(value);
|
||||
} else {
|
||||
throw error("Unknown Unicode property {name=<" + name + ">, "
|
||||
+ "value=<" + value + ">}");
|
||||
}
|
||||
} else {
|
||||
if (name.startsWith("Is"))
|
||||
if (name.startsWith("In")) {
|
||||
// \p{inBlockName}
|
||||
node = unicodeBlockPropertyFor(name.substring(2));
|
||||
} else if (name.startsWith("Is")) {
|
||||
// \p{isGeneralCategory} and \p{isScriptName}
|
||||
name = name.substring(2);
|
||||
node = charPropertyNodeFor(name);
|
||||
node = CharPropertyNames.charPropertyFor(name);
|
||||
if (node == null)
|
||||
node = unicodeScriptPropertyFor(name);
|
||||
} else {
|
||||
node = charPropertyNodeFor(name);
|
||||
}
|
||||
}
|
||||
if (maybeComplement) {
|
||||
if (node instanceof Category || node instanceof Block)
|
||||
@ -2503,6 +2542,21 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a CharProperty matching all characters belong to
|
||||
* a UnicodeScript.
|
||||
*/
|
||||
private CharProperty unicodeScriptPropertyFor(String name) {
|
||||
final Character.UnicodeScript script;
|
||||
try {
|
||||
script = Character.UnicodeScript.forName(name);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
throw error("Unknown character script name {" + name + "}");
|
||||
}
|
||||
return new Script(script);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CharProperty matching all characters in a UnicodeBlock.
|
||||
*/
|
||||
@ -3566,6 +3620,19 @@ loop: for(int x=0, offset=0; x<nCodePoints; x++, offset+=len) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Node class that matches a Unicode script
|
||||
*/
|
||||
static final class Script extends CharProperty {
|
||||
final Character.UnicodeScript script;
|
||||
Script(Character.UnicodeScript script) {
|
||||
this.script = script;
|
||||
}
|
||||
boolean isSatisfiedBy(int ch) {
|
||||
return script == Character.UnicodeScript.of(ch);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Node class that matches a Unicode category.
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2010, Oracle and/or its affiliates. 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
|
||||
@ -66,19 +66,24 @@ class GZIPInputStream extends InflaterInputStream {
|
||||
* Creates a new input stream with the specified buffer size.
|
||||
* @param in the input stream
|
||||
* @param size the input buffer size
|
||||
*
|
||||
* @exception ZipException if a GZIP format error has occurred or the
|
||||
* compression method used is unsupported
|
||||
* @exception IOException if an I/O error has occurred
|
||||
* @exception IllegalArgumentException if size is <= 0
|
||||
*/
|
||||
public GZIPInputStream(InputStream in, int size) throws IOException {
|
||||
super(in, new Inflater(true), size);
|
||||
usesDefaultInflater = true;
|
||||
readHeader();
|
||||
crc.reset();
|
||||
readHeader(in);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new input stream with a default buffer size.
|
||||
* @param in the input stream
|
||||
*
|
||||
* @exception ZipException if a GZIP format error has occurred or the
|
||||
* compression method used is unsupported
|
||||
* @exception IOException if an I/O error has occurred
|
||||
*/
|
||||
public GZIPInputStream(InputStream in) throws IOException {
|
||||
@ -94,26 +99,30 @@ class GZIPInputStream extends InflaterInputStream {
|
||||
* @param len the maximum number of bytes read
|
||||
* @return the actual number of bytes read, or -1 if the end of the
|
||||
* compressed input stream is reached
|
||||
*
|
||||
* @exception NullPointerException If <code>buf</code> is <code>null</code>.
|
||||
* @exception IndexOutOfBoundsException If <code>off</code> is negative,
|
||||
* <code>len</code> is negative, or <code>len</code> is greater than
|
||||
* <code>buf.length - off</code>
|
||||
* @exception IOException if an I/O error has occurred or the compressed
|
||||
* input data is corrupt
|
||||
* @exception ZipException if the compressed input data is corrupt.
|
||||
* @exception IOException if an I/O error has occurred.
|
||||
*
|
||||
*/
|
||||
public int read(byte[] buf, int off, int len) throws IOException {
|
||||
ensureOpen();
|
||||
if (eos) {
|
||||
return -1;
|
||||
}
|
||||
len = super.read(buf, off, len);
|
||||
if (len == -1) {
|
||||
readTrailer();
|
||||
eos = true;
|
||||
int n = super.read(buf, off, len);
|
||||
if (n == -1) {
|
||||
if (readTrailer())
|
||||
eos = true;
|
||||
else
|
||||
return this.read(buf, off, len);
|
||||
} else {
|
||||
crc.update(buf, off, len);
|
||||
crc.update(buf, off, n);
|
||||
}
|
||||
return len;
|
||||
return n;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,48 +153,61 @@ class GZIPInputStream extends InflaterInputStream {
|
||||
private final static int FCOMMENT = 16; // File comment
|
||||
|
||||
/*
|
||||
* Reads GZIP member header.
|
||||
* Reads GZIP member header and returns the total byte number
|
||||
* of this member header.
|
||||
*/
|
||||
private void readHeader() throws IOException {
|
||||
CheckedInputStream in = new CheckedInputStream(this.in, crc);
|
||||
private int readHeader(InputStream this_in) throws IOException {
|
||||
CheckedInputStream in = new CheckedInputStream(this_in, crc);
|
||||
crc.reset();
|
||||
// Check header magic
|
||||
if (readUShort(in) != GZIP_MAGIC) {
|
||||
throw new IOException("Not in GZIP format");
|
||||
throw new ZipException("Not in GZIP format");
|
||||
}
|
||||
// Check compression method
|
||||
if (readUByte(in) != 8) {
|
||||
throw new IOException("Unsupported compression method");
|
||||
throw new ZipException("Unsupported compression method");
|
||||
}
|
||||
// Read flags
|
||||
int flg = readUByte(in);
|
||||
// Skip MTIME, XFL, and OS fields
|
||||
skipBytes(in, 6);
|
||||
int n = 2 + 2 + 6;
|
||||
// Skip optional extra field
|
||||
if ((flg & FEXTRA) == FEXTRA) {
|
||||
skipBytes(in, readUShort(in));
|
||||
int m = readUShort(in);
|
||||
skipBytes(in, m);
|
||||
n += m + 2;
|
||||
}
|
||||
// Skip optional file name
|
||||
if ((flg & FNAME) == FNAME) {
|
||||
while (readUByte(in) != 0) ;
|
||||
do {
|
||||
n++;
|
||||
} while (readUByte(in) != 0);
|
||||
}
|
||||
// Skip optional file comment
|
||||
if ((flg & FCOMMENT) == FCOMMENT) {
|
||||
while (readUByte(in) != 0) ;
|
||||
do {
|
||||
n++;
|
||||
} while (readUByte(in) != 0);
|
||||
}
|
||||
// Check optional header CRC
|
||||
if ((flg & FHCRC) == FHCRC) {
|
||||
int v = (int)crc.getValue() & 0xffff;
|
||||
if (readUShort(in) != v) {
|
||||
throw new IOException("Corrupt GZIP header");
|
||||
throw new ZipException("Corrupt GZIP header");
|
||||
}
|
||||
n += 2;
|
||||
}
|
||||
crc.reset();
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reads GZIP member trailer.
|
||||
* Reads GZIP member trailer and returns true if the eos
|
||||
* reached, false if there are more (concatenated gzip
|
||||
* data set)
|
||||
*/
|
||||
private void readTrailer() throws IOException {
|
||||
private boolean readTrailer() throws IOException {
|
||||
InputStream in = this.in;
|
||||
int n = inf.getRemaining();
|
||||
if (n > 0) {
|
||||
@ -196,7 +218,25 @@ class GZIPInputStream extends InflaterInputStream {
|
||||
if ((readUInt(in) != crc.getValue()) ||
|
||||
// rfc1952; ISIZE is the input size modulo 2^32
|
||||
(readUInt(in) != (inf.getBytesWritten() & 0xffffffffL)))
|
||||
throw new IOException("Corrupt GZIP trailer");
|
||||
throw new ZipException("Corrupt GZIP trailer");
|
||||
|
||||
// If there are more bytes available in "in" or
|
||||
// the leftover in the "inf" is > 26 bytes:
|
||||
// this.trailer(8) + next.header.min(10) + next.trailer(8)
|
||||
// try concatenated case
|
||||
if (this.in.available() > 0 || n > 26) {
|
||||
int m = 8; // this.trailer
|
||||
try {
|
||||
m += readHeader(in); // next.header
|
||||
} catch (IOException ze) {
|
||||
return true; // ignore any malformed, do nothing
|
||||
}
|
||||
inf.reset();
|
||||
if (n > m)
|
||||
inf.setInput(buf, len - n + m, n - m);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -231,7 +271,6 @@ class GZIPInputStream extends InflaterInputStream {
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
private byte[] tmpbuf = new byte[128];
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2010, Oracle and/or its affiliates. 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
|
||||
@ -54,25 +54,82 @@ class GZIPOutputStream extends DeflaterOutputStream {
|
||||
|
||||
/**
|
||||
* Creates a new output stream with the specified buffer size.
|
||||
*
|
||||
* <p>The new output stream instance is created as if by invoking
|
||||
* the 3-argument constructor GZIPOutputStream(out, size, false).
|
||||
*
|
||||
* @param out the output stream
|
||||
* @param size the output buffer size
|
||||
* @exception IOException If an I/O error has occurred.
|
||||
* @exception IllegalArgumentException if size is <= 0
|
||||
|
||||
*/
|
||||
public GZIPOutputStream(OutputStream out, int size) throws IOException {
|
||||
super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true), size);
|
||||
this(out, size, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new output stream with the specified buffer size and
|
||||
* flush mode.
|
||||
*
|
||||
* @param out the output stream
|
||||
* @param size the output buffer size
|
||||
* @param syncFlush
|
||||
* if {@code true} invocation of the inherited
|
||||
* {@link DeflaterOutputStream#flush() flush()} method of
|
||||
* this instance flushes the compressor with flush mode
|
||||
* {@link Deflater#SYNC_FLUSH} before flushing the output
|
||||
* stream, otherwise only flushes the output stream
|
||||
* @exception IOException If an I/O error has occurred.
|
||||
* @exception IllegalArgumentException if size is <= 0
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public GZIPOutputStream(OutputStream out, int size, boolean syncFlush)
|
||||
throws IOException
|
||||
{
|
||||
super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true),
|
||||
size,
|
||||
syncFlush);
|
||||
usesDefaultDeflater = true;
|
||||
writeHeader();
|
||||
crc.reset();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new output stream with a default buffer size.
|
||||
*
|
||||
* <p>The new output stream instance is created as if by invoking
|
||||
* the 2-argument constructor GZIPOutputStream(out, false).
|
||||
*
|
||||
* @param out the output stream
|
||||
* @exception IOException If an I/O error has occurred.
|
||||
*/
|
||||
public GZIPOutputStream(OutputStream out) throws IOException {
|
||||
this(out, 512);
|
||||
this(out, 512, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new output stream with a default buffer size and
|
||||
* the specified flush mode.
|
||||
*
|
||||
* @param out the output stream
|
||||
* @param syncFlush
|
||||
* if {@code true} invocation of the inherited
|
||||
* {@link DeflaterOutputStream#flush() flush()} method of
|
||||
* this instance flushes the compressor with flush mode
|
||||
* {@link Deflater#SYNC_FLUSH} before flushing the output
|
||||
* stream, otherwise only flushes the output stream
|
||||
*
|
||||
* @exception IOException If an I/O error has occurred.
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public GZIPOutputStream(OutputStream out, boolean syncFlush)
|
||||
throws IOException
|
||||
{
|
||||
this(out, 512, syncFlush);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,22 +179,19 @@ class GZIPOutputStream extends DeflaterOutputStream {
|
||||
/*
|
||||
* Writes GZIP member header.
|
||||
*/
|
||||
|
||||
private final static byte[] header = {
|
||||
(byte) GZIP_MAGIC, // Magic number (short)
|
||||
(byte)(GZIP_MAGIC >> 8), // Magic number (short)
|
||||
Deflater.DEFLATED, // Compression method (CM)
|
||||
0, // Flags (FLG)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Extra flags (XFLG)
|
||||
0 // Operating system (OS)
|
||||
};
|
||||
|
||||
private void writeHeader() throws IOException {
|
||||
out.write(header);
|
||||
out.write(new byte[] {
|
||||
(byte) GZIP_MAGIC, // Magic number (short)
|
||||
(byte)(GZIP_MAGIC >> 8), // Magic number (short)
|
||||
Deflater.DEFLATED, // Compression method (CM)
|
||||
0, // Flags (FLG)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Modification time MTIME (int)
|
||||
0, // Extra flags (XFLG)
|
||||
0 // Operating system (OS)
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1995, 2010, Oracle and/or its affiliates. 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
|
||||
@ -40,7 +40,7 @@ class ZipException extends IOException {
|
||||
private static final long serialVersionUID = 8000196834066748623L;
|
||||
|
||||
/**
|
||||
* Constructs an <code>ZipException</code> with <code>null</code>
|
||||
* Constructs a <code>ZipException</code> with <code>null</code>
|
||||
* as its error detail message.
|
||||
*/
|
||||
public ZipException() {
|
||||
@ -48,7 +48,7 @@ class ZipException extends IOException {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>ZipException</code> with the specified detail
|
||||
* Constructs a <code>ZipException</code> with the specified detail
|
||||
* message.
|
||||
*
|
||||
* @param s the detail message.
|
||||
|
@ -58,25 +58,22 @@ input streams.
|
||||
PKWARE ZIP File Format Specification</a> - Language Encoding Flag (EFS) to
|
||||
encode ZIP entry filename and comment fields using UTF-8.
|
||||
<p>
|
||||
<li><a href="http://www.isi.edu/in-notes/rfc1950.txt">
|
||||
<li><a href="http://www.ietf.org/rfc/rfc1950.txt">
|
||||
ZLIB Compressed Data Format Specification version 3.3</a>
|
||||
|
||||
<a href="http://www.isi.edu/in-notes/rfc1950.ps">
|
||||
(PostScript)</a>
|
||||
<a href="http://www.ietf.org/rfc/rfc1950.txt.pdf">(pdf)</a>
|
||||
(RFC 1950)
|
||||
<p>
|
||||
<li><a href="http://www.isi.edu/in-notes/rfc1951.txt">
|
||||
<li><a href="http://www.ietf.org/rfc/rfc1951.txt">
|
||||
DEFLATE Compressed Data Format Specification version 1.3</a>
|
||||
|
||||
<a href="http://www.isi.edu/in-notes/rfc1951.ps">
|
||||
(PostScript)</a>
|
||||
<a href="http://www.ietf.org/rfc/rfc1951.txt.pdf">(pdf)</a>
|
||||
(RFC 1951)
|
||||
<p>
|
||||
<li><a href="http://www.isi.edu/in-notes/rfc1952.txt">
|
||||
<li><a href="http://www.ietf.org/rfc/rfc1952.txt">
|
||||
GZIP file format specification version 4.3</a>
|
||||
|
||||
<a href="http://www.isi.edu/in-notes/rfc1952.ps">
|
||||
(PostScript)</a>
|
||||
<a href="http://www.ietf.org/rfc/rfc1952.txt.pdf">(pdf)</a>
|
||||
(RFC 1952)
|
||||
<p>
|
||||
<li>CRC-32 checksum is described in RFC 1952 (above)
|
||||
|
@ -34,7 +34,7 @@ import javax.naming.directory.SearchControls;
|
||||
* of events fired when objects named in a directory context changes.
|
||||
*<p>
|
||||
* The methods in this interface support identification of objects by
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2254.txt">RFC 2254</a>
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2254.txt">RFC 2254</a>
|
||||
* search filters.
|
||||
*
|
||||
*<P>Using the search filter, it is possible to register interest in objects
|
||||
|
@ -27,7 +27,7 @@ package javax.naming.ldap;
|
||||
|
||||
/**
|
||||
* This interface represents an LDAPv3 control as defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
*<p>
|
||||
* The LDAPv3 protocol uses controls to send and receive additional data
|
||||
* to affect the behavior of predefined operations.
|
||||
|
@ -37,7 +37,7 @@ import com.sun.naming.internal.ResourceManager;
|
||||
/**
|
||||
* This abstract class represents a factory for creating LDAPv3 controls.
|
||||
* LDAPv3 controls are defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
*<p>
|
||||
* When a service provider receives a response control, it uses control
|
||||
* factories to return the specific/appropriate control class implementation.
|
||||
|
@ -29,7 +29,7 @@ import javax.naming.NamingException;
|
||||
|
||||
/**
|
||||
* This interface represents an LDAPv3 extended operation request as defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
* <pre>
|
||||
* ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
|
||||
* requestName [0] LDAPOID,
|
||||
|
@ -27,7 +27,7 @@ package javax.naming.ldap;
|
||||
|
||||
/**
|
||||
* This interface represents an LDAP extended operation response as defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
* <pre>
|
||||
* ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
|
||||
* COMPONENTS OF LDAPResult,
|
||||
|
@ -29,7 +29,7 @@ import javax.naming.NamingException;
|
||||
|
||||
/**
|
||||
* This interface represents an unsolicited notification as defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
* An unsolicited notification is sent by the LDAP server to the LDAP
|
||||
* client without any provocation from the client.
|
||||
* Its format is that of an extended response (<tt>ExtendedResponse</tt>).
|
||||
|
@ -30,7 +30,7 @@ import javax.naming.event.NamingListener;
|
||||
/**
|
||||
* This interface is for handling <tt>UnsolicitedNotificationEvent</tt>.
|
||||
* "Unsolicited notification" is defined in
|
||||
* <A HREF="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC 2251</A>.
|
||||
* <A HREF="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</A>.
|
||||
* It allows the server to send unsolicited notifications to the client.
|
||||
* A <tt>UnsolicitedNotificationListener</tt> must:
|
||||
*<ol>
|
||||
|
@ -83,7 +83,7 @@ import java.io.Serializable;
|
||||
* doc flavor's MIME type is one of the standard media types telling how to
|
||||
* interpret the sequence of characters or bytes. For a list of standard media
|
||||
* types, see the Internet Assigned Numbers Authority's (IANA's) <A
|
||||
* HREF="http://www.isi.edu/in-notes/iana/assignments/media-types/">Media Types
|
||||
* HREF="http://www.iana.org/assignments/media-types/">Media Types
|
||||
* Directory</A>. Interface {@link Doc Doc} provides two utility operations,
|
||||
* {@link Doc#getReaderForText() getReaderForText} and
|
||||
* {@link Doc#getStreamForBytes() getStreamForBytes()}, to help a
|
||||
|
@ -26,17 +26,13 @@
|
||||
|
||||
package javax.swing;
|
||||
|
||||
import java.awt.*;
|
||||
import java.beans.PropertyVetoException;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.border.Border;
|
||||
import java.awt.event.ComponentListener;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
import java.awt.event.ComponentEvent;
|
||||
|
||||
import com.sun.awt.AWTUtilities;
|
||||
import sun.awt.AWTAccessor;
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import java.awt.*;
|
||||
import java.beans.PropertyVetoException;
|
||||
|
||||
/** This is an implementation of the <code>DesktopManager</code>.
|
||||
* It currently implements the basic behaviors for managing
|
||||
* <code>JInternalFrame</code>s in an arbitrary parent.
|
||||
@ -318,7 +314,10 @@ public class DefaultDesktopManager implements DesktopManager, java.io.Serializab
|
||||
dragMode = DEFAULT_DRAG_MODE;
|
||||
if (p != null) {
|
||||
String mode = (String)p.getClientProperty("JDesktopPane.dragMode");
|
||||
if (mode != null && mode.equals("outline")) {
|
||||
Window window = SwingUtilities.getWindowAncestor(f);
|
||||
if (window != null && !AWTUtilities.isWindowOpaque(window)) {
|
||||
dragMode = DEFAULT_DRAG_MODE;
|
||||
} else if (mode != null && mode.equals("outline")) {
|
||||
dragMode = OUTLINE_DRAG_MODE;
|
||||
} else if (mode != null && mode.equals("faster")
|
||||
&& f instanceof JInternalFrame
|
||||
|
@ -2583,10 +2583,8 @@ public class JTable extends JComponent implements TableModelListener, Scrollable
|
||||
* @see #convertColumnIndexToView
|
||||
*/
|
||||
public int convertColumnIndexToModel(int viewColumnIndex) {
|
||||
if (viewColumnIndex < 0) {
|
||||
return viewColumnIndex;
|
||||
}
|
||||
return getColumnModel().getColumn(viewColumnIndex).getModelIndex();
|
||||
return SwingUtilities2.convertColumnIndexToModel(
|
||||
getColumnModel(), viewColumnIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2603,16 +2601,8 @@ public class JTable extends JComponent implements TableModelListener, Scrollable
|
||||
* @see #convertColumnIndexToModel
|
||||
*/
|
||||
public int convertColumnIndexToView(int modelColumnIndex) {
|
||||
if (modelColumnIndex < 0) {
|
||||
return modelColumnIndex;
|
||||
}
|
||||
TableColumnModel cm = getColumnModel();
|
||||
for (int column = 0; column < getColumnCount(); column++) {
|
||||
if (cm.getColumn(column).getModelIndex() == modelColumnIndex) {
|
||||
return column;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
return SwingUtilities2.convertColumnIndexToView(
|
||||
getColumnModel(), modelColumnIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. 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
|
||||
@ -26,7 +26,6 @@ package javax.swing.border;
|
||||
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Component;
|
||||
import java.awt.Color;
|
||||
|
||||
@ -133,63 +132,29 @@ public class MatteBorder extends EmptyBorder
|
||||
g.fillRect(width - insets.right, 0, insets.right, height - insets.bottom);
|
||||
|
||||
} else if (tileIcon != null) {
|
||||
|
||||
int tileW = tileIcon.getIconWidth();
|
||||
int tileH = tileIcon.getIconHeight();
|
||||
int xpos, ypos, startx, starty;
|
||||
Graphics cg;
|
||||
|
||||
// Paint top matte edge
|
||||
cg = g.create();
|
||||
cg.setClip(0, 0, width, insets.top);
|
||||
for (ypos = 0; insets.top - ypos > 0; ypos += tileH) {
|
||||
for (xpos = 0; width - xpos > 0; xpos += tileW) {
|
||||
tileIcon.paintIcon(c, cg, xpos, ypos);
|
||||
}
|
||||
}
|
||||
cg.dispose();
|
||||
|
||||
// Paint left matte edge
|
||||
cg = g.create();
|
||||
cg.setClip(0, insets.top, insets.left, height - insets.top);
|
||||
starty = insets.top - (insets.top%tileH);
|
||||
startx = 0;
|
||||
for (ypos = starty; height - ypos > 0; ypos += tileH) {
|
||||
for (xpos = startx; insets.left - xpos > 0; xpos += tileW) {
|
||||
tileIcon.paintIcon(c, cg, xpos, ypos);
|
||||
}
|
||||
}
|
||||
cg.dispose();
|
||||
|
||||
// Paint bottom matte edge
|
||||
cg = g.create();
|
||||
cg.setClip(insets.left, height - insets.bottom, width - insets.left, insets.bottom);
|
||||
starty = (height - insets.bottom) - ((height - insets.bottom)%tileH);
|
||||
startx = insets.left - (insets.left%tileW);
|
||||
for (ypos = starty; height - ypos > 0; ypos += tileH) {
|
||||
for (xpos = startx; width - xpos > 0; xpos += tileW) {
|
||||
tileIcon.paintIcon(c, cg, xpos, ypos);
|
||||
}
|
||||
}
|
||||
cg.dispose();
|
||||
|
||||
// Paint right matte edge
|
||||
cg = g.create();
|
||||
cg.setClip(width - insets.right, insets.top, insets.right, height - insets.top - insets.bottom);
|
||||
starty = insets.top - (insets.top%tileH);
|
||||
startx = width - insets.right - ((width - insets.right)%tileW);
|
||||
for (ypos = starty; height - ypos > 0; ypos += tileH) {
|
||||
for (xpos = startx; width - xpos > 0; xpos += tileW) {
|
||||
tileIcon.paintIcon(c, cg, xpos, ypos);
|
||||
}
|
||||
}
|
||||
cg.dispose();
|
||||
paintEdge(c, g, 0, 0, width - insets.right, insets.top, tileW, tileH);
|
||||
paintEdge(c, g, 0, insets.top, insets.left, height - insets.top, tileW, tileH);
|
||||
paintEdge(c, g, insets.left, height - insets.bottom, width - insets.left, insets.bottom, tileW, tileH);
|
||||
paintEdge(c, g, width - insets.right, 0, insets.right, height - insets.bottom, tileW, tileH);
|
||||
}
|
||||
g.translate(-x, -y);
|
||||
g.setColor(oldColor);
|
||||
|
||||
}
|
||||
|
||||
private void paintEdge(Component c, Graphics g, int x, int y, int width, int height, int tileW, int tileH) {
|
||||
g = g.create(x, y, width, height);
|
||||
int sY = -(y % tileH);
|
||||
for (x = -(x % tileW); x < width; x += tileW) {
|
||||
for (y = sY; y < height; y += tileH) {
|
||||
this.tileIcon.paintIcon(c, g, x, y);
|
||||
}
|
||||
}
|
||||
g.dispose();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reinitialize the insets parameter with this Border's current Insets.
|
||||
* @param c the component for which this border insets value applies
|
||||
|
@ -3524,7 +3524,13 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants {
|
||||
}
|
||||
else if (name =="indexForTitle") {
|
||||
calculatedBaseline = false;
|
||||
updateHtmlViews((Integer)e.getNewValue());
|
||||
Integer index = (Integer) e.getNewValue();
|
||||
// remove the current index
|
||||
// to let updateHtmlViews() insert the correct one
|
||||
if (htmlViews != null) {
|
||||
htmlViews.removeElementAt(index);
|
||||
}
|
||||
updateHtmlViews(index);
|
||||
} else if (name == "tabLayoutPolicy") {
|
||||
BasicTabbedPaneUI.this.uninstallUI(pane);
|
||||
BasicTabbedPaneUI.this.installUI(pane);
|
||||
|
@ -98,15 +98,18 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
private Cursor otherCursor = resizeCursor;
|
||||
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
if (e.getClickCount() % 2 == 1 &&
|
||||
SwingUtilities.isLeftMouseButton(e)){
|
||||
SwingUtilities.isLeftMouseButton(e)) {
|
||||
JTable table = header.getTable();
|
||||
RowSorter sorter;
|
||||
if (table != null && (sorter = table.getRowSorter()) != null) {
|
||||
int columnIndex = header.columnAtPoint(e.getPoint());
|
||||
if (columnIndex != -1) {
|
||||
columnIndex = table.convertColumnIndexToModel(
|
||||
columnIndex);
|
||||
columnIndex);
|
||||
sorter.toggleSortOrder(columnIndex);
|
||||
}
|
||||
}
|
||||
@ -140,6 +143,9 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
}
|
||||
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
header.setDraggedColumn(null);
|
||||
header.setResizingColumn(null);
|
||||
header.setDraggedDistance(0);
|
||||
@ -182,6 +188,9 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
}
|
||||
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
if (canResize(getResizingColumn(e.getPoint()), header) !=
|
||||
(header.getCursor() == resizeCursor)) {
|
||||
swapCursor();
|
||||
@ -190,6 +199,9 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
}
|
||||
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
int mouseX = e.getX();
|
||||
|
||||
TableColumn resizingColumn = header.getResizingColumn();
|
||||
@ -217,21 +229,23 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
if (0 <= newColumnIndex && newColumnIndex < cm.getColumnCount()) {
|
||||
int width = cm.getColumn(newColumnIndex).getWidth();
|
||||
if (Math.abs(draggedDistance) > (width / 2)) {
|
||||
JTable table = header.getTable();
|
||||
|
||||
mouseXOffset = mouseXOffset + direction * width;
|
||||
header.setDraggedDistance(draggedDistance - direction * width);
|
||||
|
||||
//Cache the selected column.
|
||||
int selectedIndex = table.convertColumnIndexToModel(
|
||||
getSelectedColumnIndex());
|
||||
int selectedIndex =
|
||||
SwingUtilities2.convertColumnIndexToModel(
|
||||
header.getColumnModel(),
|
||||
getSelectedColumnIndex());
|
||||
|
||||
//Now do the move.
|
||||
cm.moveColumn(columnIndex, newColumnIndex);
|
||||
|
||||
//Update the selected index.
|
||||
selectColumn(
|
||||
table.convertColumnIndexToView(selectedIndex),
|
||||
SwingUtilities2.convertColumnIndexToView(
|
||||
header.getColumnModel(), selectedIndex),
|
||||
false);
|
||||
|
||||
return;
|
||||
@ -244,6 +258,9 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
}
|
||||
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
setDraggedDistance(0, viewIndexForColumn(header.getDraggedColumn()));
|
||||
|
||||
header.setResizingColumn(null);
|
||||
@ -253,10 +270,16 @@ public class BasicTableHeaderUI extends TableHeaderUI {
|
||||
}
|
||||
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
updateRolloverColumn(e);
|
||||
}
|
||||
|
||||
public void mouseExited(MouseEvent e) {
|
||||
if (!header.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
int oldRolloverColumn = rolloverColumn;
|
||||
rolloverColumn = -1;
|
||||
rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);
|
||||
|
@ -779,20 +779,16 @@ public abstract class BasicTextUI extends TextUI implements ViewFactory {
|
||||
if (c instanceof JTextComponent) {
|
||||
editor = (JTextComponent) c;
|
||||
|
||||
// common case is background painted... this can
|
||||
// easily be changed by subclasses or from outside
|
||||
// of the component.
|
||||
LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
|
||||
LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
|
||||
|
||||
// install defaults
|
||||
installDefaults();
|
||||
installDefaults2();
|
||||
|
||||
// This is a workaround as these should not override what synth has
|
||||
// set them to
|
||||
if (! (this instanceof SynthUI)) {
|
||||
// common case is background painted... this can
|
||||
// easily be changed by subclasses or from outside
|
||||
// of the component.
|
||||
LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
|
||||
LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
|
||||
}
|
||||
|
||||
// attach to the model and editor
|
||||
editor.addPropertyChangeListener(updateHandler);
|
||||
Document doc = editor.getDocument();
|
||||
|
@ -56,8 +56,8 @@ public class BasicViewportUI extends ViewportUI {
|
||||
}
|
||||
|
||||
public void uninstallUI(JComponent c) {
|
||||
uninstallDefaults(c);
|
||||
super.uninstallUI(c);
|
||||
|
||||
}
|
||||
|
||||
protected void installDefaults(JComponent c) {
|
||||
|
@ -361,12 +361,14 @@ public class SynthTableUI extends BasicTableUI
|
||||
cMax = table.getColumnCount()-1;
|
||||
}
|
||||
|
||||
// Paint the grid.
|
||||
paintGrid(context, g, rMin, rMax, cMin, cMax);
|
||||
|
||||
// Paint the cells.
|
||||
paintCells(context, g, rMin, rMax, cMin, cMax);
|
||||
|
||||
// Paint the grid.
|
||||
// it is important to paint the grid after the cells, otherwise the grid will be overpainted
|
||||
// because in Synth cell renderers are likely to be opaque
|
||||
paintGrid(context, g, rMin, rMax, cMin, cMax);
|
||||
|
||||
paintDropLines(context, g);
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,28 @@ public class SynthTextPaneUI extends SynthEditorPaneUI {
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Installs the UI for a component. This does the following
|
||||
* things.
|
||||
* <ol>
|
||||
* <li>
|
||||
* Sets opaqueness of the associated component according to its style,
|
||||
* if the opaque property has not already been set by the client program.
|
||||
* <li>
|
||||
* Installs the default caret and highlighter into the
|
||||
* associated component. These properties are only set if their
|
||||
* current value is either {@code null} or an instance of
|
||||
* {@link UIResource}.
|
||||
* <li>
|
||||
* Attaches to the editor and model. If there is no
|
||||
* model, a default one is created.
|
||||
* <li>
|
||||
* Creates the view factory and the view hierarchy used
|
||||
* to represent the model.
|
||||
* </ol>
|
||||
*
|
||||
* @param c the editor component
|
||||
* @see BasicTextUI#installUI
|
||||
* @see ComponentUI#installUI
|
||||
*/
|
||||
@Override
|
||||
public void installUI(JComponent c) {
|
||||
|
@ -24,8 +24,6 @@
|
||||
*/
|
||||
package javax.swing.text;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.Properties;
|
||||
import java.awt.*;
|
||||
import java.lang.ref.SoftReference;
|
||||
import javax.swing.event.*;
|
||||
@ -236,9 +234,6 @@ public class WrappedPlainView extends BoxView implements TabExpander {
|
||||
Segment segment = SegmentCache.getSharedSegment();
|
||||
loadText(segment, p0, p1);
|
||||
int currentWidth = getWidth();
|
||||
if (currentWidth == Integer.MAX_VALUE) {
|
||||
currentWidth = (int) getDefaultSpan(View.X_AXIS);
|
||||
}
|
||||
if (wordWrap) {
|
||||
p = p0 + Utilities.getBreakLocation(segment, metrics,
|
||||
tabBase, tabBase + currentWidth,
|
||||
@ -324,53 +319,6 @@ public class WrappedPlainView extends BoxView implements TabExpander {
|
||||
tabSize = getTabSize() * metrics.charWidth('m');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return reasonable default values for the view dimensions. The standard
|
||||
* text terminal size 80x24 is pretty suitable for the wrapped plain view.
|
||||
*
|
||||
* The size should not be larger than the component housing the view's
|
||||
* container.
|
||||
*/
|
||||
private float getDefaultSpan(int axis) {
|
||||
Container host = getContainer();
|
||||
Component parent = null;
|
||||
|
||||
if (host != null) {
|
||||
parent = host.getParent();
|
||||
}
|
||||
|
||||
switch (axis) {
|
||||
case View.X_AXIS:
|
||||
int defaultWidth = 80 * metrics.getWidths()['M'];
|
||||
int parentWidth = 0;
|
||||
|
||||
if (parent != null) {
|
||||
parentWidth = parent.getWidth();
|
||||
}
|
||||
|
||||
if (defaultWidth > parentWidth) {
|
||||
return parentWidth;
|
||||
}
|
||||
return defaultWidth;
|
||||
|
||||
case View.Y_AXIS:
|
||||
int defaultHeight = 24 * metrics.getHeight();
|
||||
int parentHeight = 0;
|
||||
|
||||
if (parent != null) {
|
||||
parentHeight = parent.getHeight();
|
||||
}
|
||||
|
||||
if (defaultHeight > parentHeight) {
|
||||
return parentHeight;
|
||||
}
|
||||
return defaultHeight;
|
||||
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid axis: " + axis);
|
||||
}
|
||||
}
|
||||
|
||||
// --- TabExpander methods ------------------------------------------
|
||||
|
||||
/**
|
||||
@ -605,18 +553,14 @@ public class WrappedPlainView extends BoxView implements TabExpander {
|
||||
if (width == Integer.MAX_VALUE) {
|
||||
// We have been initially set to MAX_VALUE, but we don't
|
||||
// want this as our preferred.
|
||||
width = getDefaultSpan(axis);
|
||||
return 100f;
|
||||
}
|
||||
return width;
|
||||
case View.Y_AXIS:
|
||||
if (getDocument().getLength() > 0) {
|
||||
if ((lineCount < 0) || widthChanging) {
|
||||
breakLines(getStartOffset());
|
||||
}
|
||||
return lineCount * metrics.getHeight();
|
||||
} else {
|
||||
return getDefaultSpan(axis);
|
||||
if (lineCount < 0 || widthChanging) {
|
||||
breakLines(getStartOffset());
|
||||
}
|
||||
return lineCount * metrics.getHeight();
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid axis: " + axis);
|
||||
}
|
||||
|
Binary file not shown.
32
jdk/src/share/classes/sun/font/GlyphDisposedListener.java
Normal file
32
jdk/src/share/classes/sun/font/GlyphDisposedListener.java
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010 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 sun.font;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public interface GlyphDisposedListener {
|
||||
public void glyphDisposed(ArrayList<Long> glyphs);
|
||||
}
|
@ -31,6 +31,7 @@ import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.*;
|
||||
|
||||
import sun.java2d.Disposer;
|
||||
import sun.java2d.pipe.BufferedContext;
|
||||
@ -66,6 +67,9 @@ public final class StrikeCache {
|
||||
|
||||
static ReferenceQueue refQueue = Disposer.getQueue();
|
||||
|
||||
static ArrayList<GlyphDisposedListener> disposeListeners = new ArrayList<GlyphDisposedListener>(1);
|
||||
|
||||
|
||||
/* Reference objects may have their referents cleared when GC chooses.
|
||||
* During application client start-up there is typically at least one
|
||||
* GC which causes the hotspot VM to clear soft (not just weak) references
|
||||
@ -108,6 +112,8 @@ public final class StrikeCache {
|
||||
static int topLeftXOffset;
|
||||
static int topLeftYOffset;
|
||||
static int pixelDataOffset;
|
||||
static int cacheCellOffset;
|
||||
static int managedOffset;
|
||||
static long invisibleGlyphPtr;
|
||||
|
||||
/* Native method used to return information used for unsafe
|
||||
@ -129,7 +135,7 @@ public final class StrikeCache {
|
||||
|
||||
static {
|
||||
|
||||
long[] nativeInfo = new long[11];
|
||||
long[] nativeInfo = new long[13];
|
||||
getGlyphCacheDescription(nativeInfo);
|
||||
//Can also get address size from Unsafe class :-
|
||||
//nativeAddressSize = unsafe.addressSize();
|
||||
@ -144,6 +150,9 @@ public final class StrikeCache {
|
||||
topLeftYOffset = (int)nativeInfo[8];
|
||||
pixelDataOffset = (int)nativeInfo[9];
|
||||
invisibleGlyphPtr = nativeInfo[10];
|
||||
cacheCellOffset = (int) nativeInfo[11];
|
||||
managedOffset = (int) nativeInfo[12];
|
||||
|
||||
if (nativeAddressSize < 4) {
|
||||
throw new InternalError("Unexpected address size for font data: " +
|
||||
nativeAddressSize);
|
||||
@ -195,10 +204,10 @@ public final class StrikeCache {
|
||||
|
||||
private static final void doDispose(FontStrikeDisposer disposer) {
|
||||
if (disposer.intGlyphImages != null) {
|
||||
freeIntMemory(disposer.intGlyphImages,
|
||||
freeCachedIntMemory(disposer.intGlyphImages,
|
||||
disposer.pScalerContext);
|
||||
} else if (disposer.longGlyphImages != null) {
|
||||
freeLongMemory(disposer.longGlyphImages,
|
||||
freeCachedLongMemory(disposer.longGlyphImages,
|
||||
disposer.pScalerContext);
|
||||
} else if (disposer.segIntGlyphImages != null) {
|
||||
/* NB Now making multiple JNI calls in this case.
|
||||
@ -207,7 +216,7 @@ public final class StrikeCache {
|
||||
*/
|
||||
for (int i=0; i<disposer.segIntGlyphImages.length; i++) {
|
||||
if (disposer.segIntGlyphImages[i] != null) {
|
||||
freeIntMemory(disposer.segIntGlyphImages[i],
|
||||
freeCachedIntMemory(disposer.segIntGlyphImages[i],
|
||||
disposer.pScalerContext);
|
||||
/* native will only free the scaler context once */
|
||||
disposer.pScalerContext = 0L;
|
||||
@ -218,19 +227,19 @@ public final class StrikeCache {
|
||||
* for a strike that never was asked to rasterise a glyph.
|
||||
*/
|
||||
if (disposer.pScalerContext != 0L) {
|
||||
freeIntMemory(new int[0], disposer.pScalerContext);
|
||||
freeCachedIntMemory(new int[0], disposer.pScalerContext);
|
||||
}
|
||||
} else if (disposer.segLongGlyphImages != null) {
|
||||
for (int i=0; i<disposer.segLongGlyphImages.length; i++) {
|
||||
if (disposer.segLongGlyphImages[i] != null) {
|
||||
freeLongMemory(disposer.segLongGlyphImages[i],
|
||||
freeCachedLongMemory(disposer.segLongGlyphImages[i],
|
||||
disposer.pScalerContext);
|
||||
disposer.pScalerContext = 0L;
|
||||
disposer.segLongGlyphImages[i] = null;
|
||||
}
|
||||
}
|
||||
if (disposer.pScalerContext != 0L) {
|
||||
freeLongMemory(new long[0], disposer.pScalerContext);
|
||||
freeCachedLongMemory(new long[0], disposer.pScalerContext);
|
||||
}
|
||||
} else if (disposer.pScalerContext != 0L) {
|
||||
/* Rarely a strike may have been created that never cached
|
||||
@ -238,9 +247,9 @@ public final class StrikeCache {
|
||||
* context.
|
||||
*/
|
||||
if (longAddresses()) {
|
||||
freeLongMemory(new long[0], disposer.pScalerContext);
|
||||
freeCachedLongMemory(new long[0], disposer.pScalerContext);
|
||||
} else {
|
||||
freeIntMemory(new int[0], disposer.pScalerContext);
|
||||
freeCachedIntMemory(new int[0], disposer.pScalerContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -304,6 +313,68 @@ public final class StrikeCache {
|
||||
private static native void freeIntMemory(int[] glyphPtrs, long pContext);
|
||||
private static native void freeLongMemory(long[] glyphPtrs, long pContext);
|
||||
|
||||
private static void freeCachedIntMemory(int[] glyphPtrs, long pContext) {
|
||||
synchronized(disposeListeners) {
|
||||
if (disposeListeners.size() > 0) {
|
||||
ArrayList<Long> gids = null;
|
||||
|
||||
for (int i = 0; i < glyphPtrs.length; i++) {
|
||||
if (glyphPtrs[i] != 0 && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0
|
||||
&& unsafe.getInt(glyphPtrs[i] + cacheCellOffset) != 0) {
|
||||
|
||||
if (gids == null) {
|
||||
gids = new ArrayList<Long>();
|
||||
}
|
||||
gids.add((long) glyphPtrs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (gids != null) {
|
||||
notifyDisposeListeners(gids);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
freeIntMemory(glyphPtrs, pContext);
|
||||
}
|
||||
|
||||
private static void freeCachedLongMemory(long[] glyphPtrs, long pContext) {
|
||||
synchronized(disposeListeners) {
|
||||
if (disposeListeners.size() > 0) {
|
||||
ArrayList<Long> gids = null;
|
||||
|
||||
for (int i=0; i < glyphPtrs.length; i++) {
|
||||
if (glyphPtrs[i] != 0
|
||||
&& unsafe.getByte(glyphPtrs[i] + managedOffset) == 0
|
||||
&& unsafe.getInt(glyphPtrs[i] + cacheCellOffset) != 0) {
|
||||
|
||||
if (gids == null) {
|
||||
gids = new ArrayList<Long>();
|
||||
}
|
||||
gids.add((long) glyphPtrs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (gids != null) {
|
||||
notifyDisposeListeners(gids);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
freeLongMemory(glyphPtrs, pContext);
|
||||
}
|
||||
|
||||
public static void addGlyphDisposedListener(GlyphDisposedListener listener) {
|
||||
synchronized(disposeListeners) {
|
||||
disposeListeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
||||
private static void notifyDisposeListeners(ArrayList<Long> glyphs) {
|
||||
for (GlyphDisposedListener listener : disposeListeners) {
|
||||
listener.glyphDisposed(glyphs);
|
||||
}
|
||||
}
|
||||
|
||||
public static Reference getStrikeRef(FontStrike strike) {
|
||||
return getStrikeRef(strike, cacheRefTypeWeak);
|
||||
|
@ -73,7 +73,9 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
return(name.startsWith(".ttf", offset) ||
|
||||
name.startsWith(".TTF", offset) ||
|
||||
name.startsWith(".ttc", offset) ||
|
||||
name.startsWith(".TTC", offset));
|
||||
name.startsWith(".TTC", offset) ||
|
||||
name.startsWith(".otf", offset) ||
|
||||
name.startsWith(".OTF", offset));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -108,7 +110,9 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
name.startsWith(".ttf", offset) ||
|
||||
name.startsWith(".TTF", offset) ||
|
||||
name.startsWith(".ttc", offset) ||
|
||||
name.startsWith(".TTC", offset);
|
||||
name.startsWith(".TTC", offset) ||
|
||||
name.startsWith(".otf", offset) ||
|
||||
name.startsWith(".OTF", offset);
|
||||
if (isTT) {
|
||||
return true;
|
||||
} else if (noType1Font) {
|
||||
|
@ -307,7 +307,7 @@ public class BufferedPaints {
|
||||
* linear RGB space. Copied directly from the
|
||||
* MultipleGradientPaintContext class.
|
||||
*/
|
||||
private static int convertSRGBtoLinearRGB(int color) {
|
||||
public static int convertSRGBtoLinearRGB(int color) {
|
||||
float input, output;
|
||||
|
||||
input = color / 255.0f;
|
||||
|
@ -117,6 +117,11 @@ public class RenderBuffer {
|
||||
curAddress = baseAddress;
|
||||
}
|
||||
|
||||
public final RenderBuffer skip(long numBytes) {
|
||||
curAddress += numBytes;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* putByte() methods...
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user