Merge
This commit is contained in:
commit
6cbba57d31
@ -94,3 +94,4 @@ e8ebdf41b9c01a26642848f4134f5504e8fb3233 jdk7-b115
|
|||||||
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
|
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
|
||||||
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
||||||
661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119
|
661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119
|
||||||
|
366ff0b6d2151595629806b033e2e1497e3a55d4 jdk7-b120
|
||||||
|
@ -93,3 +93,5 @@ da7561d479e0ddaa4650d8023ac0fc7294e014e3 jdk7-b115
|
|||||||
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
|
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
|
||||||
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
|
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
|
||||||
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
|
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
|
||||||
|
39829414ae31a0080578a49b751899edd518cd7d jdk7-b119
|
||||||
|
cff5a173ec1e89013359e804a3e31736ef6fb462 jdk7-b120
|
||||||
|
@ -131,3 +131,5 @@ bdbc48857210a509b3c50a3291ecb9dd6a72e016 jdk7-b115
|
|||||||
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
|
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
|
||||||
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
|
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
|
||||||
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
|
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
|
||||||
|
5484e7c53fa7da5e869902437ee08a9ae10c1c69 jdk7-b119
|
||||||
|
f5603a6e50422046ebc0d2f1671d55cb8f1bf1e9 jdk7-b120
|
||||||
|
@ -93,3 +93,5 @@ e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
|
|||||||
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
|
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
|
||||||
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
|
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
|
||||||
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
|
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
|
||||||
|
ecab7eefb8f2326fd90fb632f47f1b6f81e928f8 jdk7-b119
|
||||||
|
37d74e29687cf07c2bf9411af58c7e42440855c3 jdk7-b120
|
||||||
|
@ -83,14 +83,19 @@ ifndef CLOSED_SRC
|
|||||||
CLOSED_SRC = $(BUILDDIR)/../src/closed
|
CLOSED_SRC = $(BUILDDIR)/../src/closed
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# If we have no closed directory, force it to an openjdk build
|
# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any
|
||||||
CLOSED_SRC_DIR_EXISTS := $(shell \
|
# closed directory.
|
||||||
if [ -d $(CLOSED_SRC) ] ; then \
|
ifneq ($(CLOSED_SRC_INCLUDED), true)
|
||||||
echo true; \
|
CLOSED_SRC_INCLUDED := $(shell \
|
||||||
else \
|
if [ -d $(CLOSED_SRC) ] ; then \
|
||||||
echo false; \
|
echo true; \
|
||||||
fi)
|
else \
|
||||||
ifeq ($(CLOSED_SRC_DIR_EXISTS), false)
|
echo false; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Set OPENJDK based on CLOSED_SRC_INCLUDED
|
||||||
|
ifeq ($(CLOSED_SRC_INCLUDED), false)
|
||||||
OPENJDK = true
|
OPENJDK = true
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -85,6 +85,7 @@ FILES_src = \
|
|||||||
sun/io/ByteToCharCp500.java \
|
sun/io/ByteToCharCp500.java \
|
||||||
sun/io/ByteToCharCp737.java \
|
sun/io/ByteToCharCp737.java \
|
||||||
sun/io/ByteToCharCp775.java \
|
sun/io/ByteToCharCp775.java \
|
||||||
|
sun/io/ByteToCharCp833.java \
|
||||||
sun/io/ByteToCharCp834.java \
|
sun/io/ByteToCharCp834.java \
|
||||||
sun/io/ByteToCharCp838.java \
|
sun/io/ByteToCharCp838.java \
|
||||||
sun/io/ByteToCharCp850.java \
|
sun/io/ByteToCharCp850.java \
|
||||||
@ -214,6 +215,7 @@ FILES_src = \
|
|||||||
sun/io/CharToByteCp500.java \
|
sun/io/CharToByteCp500.java \
|
||||||
sun/io/CharToByteCp737.java \
|
sun/io/CharToByteCp737.java \
|
||||||
sun/io/CharToByteCp775.java \
|
sun/io/CharToByteCp775.java \
|
||||||
|
sun/io/CharToByteCp833.java \
|
||||||
sun/io/CharToByteCp834.java \
|
sun/io/CharToByteCp834.java \
|
||||||
sun/io/CharToByteCp838.java \
|
sun/io/CharToByteCp838.java \
|
||||||
sun/io/CharToByteCp850.java \
|
sun/io/CharToByteCp850.java \
|
||||||
@ -331,6 +333,7 @@ FILES_gen_extcs = \
|
|||||||
sun/nio/cs/ext/IBM420.java \
|
sun/nio/cs/ext/IBM420.java \
|
||||||
sun/nio/cs/ext/IBM424.java \
|
sun/nio/cs/ext/IBM424.java \
|
||||||
sun/nio/cs/ext/IBM500.java \
|
sun/nio/cs/ext/IBM500.java \
|
||||||
|
sun/nio/cs/ext/IBM833.java \
|
||||||
sun/nio/cs/ext/IBM838.java \
|
sun/nio/cs/ext/IBM838.java \
|
||||||
sun/nio/cs/ext/IBM856.java \
|
sun/nio/cs/ext/IBM856.java \
|
||||||
sun/nio/cs/ext/IBM860.java \
|
sun/nio/cs/ext/IBM860.java \
|
||||||
|
@ -432,6 +432,7 @@ SUNWprivate_1.1 {
|
|||||||
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
|
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
|
||||||
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
||||||
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
||||||
|
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
|
||||||
|
|
||||||
Java_sun_print_CUPSPrinter_initIDs;
|
Java_sun_print_CUPSPrinter_initIDs;
|
||||||
Java_sun_print_CUPSPrinter_getCupsServer;
|
Java_sun_print_CUPSPrinter_getCupsServer;
|
||||||
|
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal file
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
0x5A U+FF01
|
||||||
|
0x7F U+FF02
|
||||||
|
0x7B U+FF03
|
||||||
|
0x5B U+FF04
|
||||||
|
0x6C U+FF05
|
||||||
|
0x50 U+FF06
|
||||||
|
0x7D U+FF07
|
||||||
|
0x4D U+FF08
|
||||||
|
0x5D U+FF09
|
||||||
|
0x5C U+FF0A
|
||||||
|
0x4E U+FF0B
|
||||||
|
0x6B U+FF0C
|
||||||
|
0x60 U+FF0D
|
||||||
|
0x4B U+FF0E
|
||||||
|
0x61 U+FF0F
|
||||||
|
0xF0 U+FF10
|
||||||
|
0xF1 U+FF11
|
||||||
|
0xF2 U+FF12
|
||||||
|
0xF3 U+FF13
|
||||||
|
0xF4 U+FF14
|
||||||
|
0xF5 U+FF15
|
||||||
|
0xF6 U+FF16
|
||||||
|
0xF7 U+FF17
|
||||||
|
0xF8 U+FF18
|
||||||
|
0xF9 U+FF19
|
||||||
|
0x7A U+FF1A
|
||||||
|
0x5E U+FF1B
|
||||||
|
0x4C U+FF1C
|
||||||
|
0x7E U+FF1D
|
||||||
|
0x6E U+FF1E
|
||||||
|
0x6F U+FF1F
|
||||||
|
0x7C U+FF20
|
||||||
|
0xC1 U+FF21
|
||||||
|
0xC2 U+FF22
|
||||||
|
0xC3 U+FF23
|
||||||
|
0xC4 U+FF24
|
||||||
|
0xC5 U+FF25
|
||||||
|
0xC6 U+FF26
|
||||||
|
0xC7 U+FF27
|
||||||
|
0xC8 U+FF28
|
||||||
|
0xC9 U+FF29
|
||||||
|
0xD1 U+FF2A
|
||||||
|
0xD2 U+FF2B
|
||||||
|
0xD3 U+FF2C
|
||||||
|
0xD4 U+FF2D
|
||||||
|
0xD5 U+FF2E
|
||||||
|
0xD6 U+FF2F
|
||||||
|
0xD7 U+FF30
|
||||||
|
0xD8 U+FF31
|
||||||
|
0xD9 U+FF32
|
||||||
|
0xE2 U+FF33
|
||||||
|
0xE3 U+FF34
|
||||||
|
0xE4 U+FF35
|
||||||
|
0xE5 U+FF36
|
||||||
|
0xE6 U+FF37
|
||||||
|
0xE7 U+FF38
|
||||||
|
0xE8 U+FF39
|
||||||
|
0xE9 U+FF3A
|
||||||
|
0x70 U+FF3B
|
||||||
|
0xB2 U+FF3C
|
||||||
|
0x80 U+FF3D
|
||||||
|
0xB0 U+FF3E
|
||||||
|
0x6D U+FF3F
|
||||||
|
0x79 U+FF40
|
||||||
|
0x81 U+FF41
|
||||||
|
0x82 U+FF42
|
||||||
|
0x83 U+FF43
|
||||||
|
0x84 U+FF44
|
||||||
|
0x85 U+FF45
|
||||||
|
0x86 U+FF46
|
||||||
|
0x87 U+FF47
|
||||||
|
0x88 U+FF48
|
||||||
|
0x89 U+FF49
|
||||||
|
0x91 U+FF4A
|
||||||
|
0x92 U+FF4B
|
||||||
|
0x93 U+FF4C
|
||||||
|
0x94 U+FF4D
|
||||||
|
0x95 U+FF4E
|
||||||
|
0x96 U+FF4F
|
||||||
|
0x97 U+FF50
|
||||||
|
0x98 U+FF51
|
||||||
|
0x99 U+FF52
|
||||||
|
0xA2 U+FF53
|
||||||
|
0xA3 U+FF54
|
||||||
|
0xA4 U+FF55
|
||||||
|
0xA5 U+FF56
|
||||||
|
0xA6 U+FF57
|
||||||
|
0xA7 U+FF58
|
||||||
|
0xA8 U+FF59
|
||||||
|
0xA9 U+FF5A
|
||||||
|
0xC0 U+FF5B
|
||||||
|
0x4F U+FF5C
|
||||||
|
0xD0 U+FF5D
|
||||||
|
0xA1 U+FF5E
|
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal file
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
0x00 U+0000
|
||||||
|
0x01 U+0001
|
||||||
|
0x02 U+0002
|
||||||
|
0x03 U+0003
|
||||||
|
0x37 U+0004
|
||||||
|
0x2D U+0005
|
||||||
|
0x2E U+0006
|
||||||
|
0x2F U+0007
|
||||||
|
0x16 U+0008
|
||||||
|
0x05 U+0009
|
||||||
|
0x25 U+000A
|
||||||
|
0x0B U+000B
|
||||||
|
0x0C U+000C
|
||||||
|
0x0D U+000D
|
||||||
|
0x0E U+000E
|
||||||
|
0x0F U+000F
|
||||||
|
0x10 U+0010
|
||||||
|
0x11 U+0011
|
||||||
|
0x12 U+0012
|
||||||
|
0x13 U+0013
|
||||||
|
0x3C U+0014
|
||||||
|
0x3D U+0015
|
||||||
|
0x32 U+0016
|
||||||
|
0x26 U+0017
|
||||||
|
0x18 U+0018
|
||||||
|
0x19 U+0019
|
||||||
|
0x3F U+001A
|
||||||
|
0x27 U+001B
|
||||||
|
0x1C U+001C
|
||||||
|
0x1D U+001D
|
||||||
|
0x1E U+001E
|
||||||
|
0x1F U+001F
|
||||||
|
0x40 U+0020
|
||||||
|
0x5A U+0021
|
||||||
|
0x7F U+0022
|
||||||
|
0x7B U+0023
|
||||||
|
0x5B U+0024
|
||||||
|
0x6C U+0025
|
||||||
|
0x50 U+0026
|
||||||
|
0x7D U+0027
|
||||||
|
0x4D U+0028
|
||||||
|
0x5D U+0029
|
||||||
|
0x5C U+002A
|
||||||
|
0x4E U+002B
|
||||||
|
0x6B U+002C
|
||||||
|
0x60 U+002D
|
||||||
|
0x4B U+002E
|
||||||
|
0x61 U+002F
|
||||||
|
0xF0 U+0030
|
||||||
|
0xF1 U+0031
|
||||||
|
0xF2 U+0032
|
||||||
|
0xF3 U+0033
|
||||||
|
0xF4 U+0034
|
||||||
|
0xF5 U+0035
|
||||||
|
0xF6 U+0036
|
||||||
|
0xF7 U+0037
|
||||||
|
0xF8 U+0038
|
||||||
|
0xF9 U+0039
|
||||||
|
0x7A U+003A
|
||||||
|
0x5E U+003B
|
||||||
|
0x4C U+003C
|
||||||
|
0x7E U+003D
|
||||||
|
0x6E U+003E
|
||||||
|
0x6F U+003F
|
||||||
|
0x7C U+0040
|
||||||
|
0xC1 U+0041
|
||||||
|
0xC2 U+0042
|
||||||
|
0xC3 U+0043
|
||||||
|
0xC4 U+0044
|
||||||
|
0xC5 U+0045
|
||||||
|
0xC6 U+0046
|
||||||
|
0xC7 U+0047
|
||||||
|
0xC8 U+0048
|
||||||
|
0xC9 U+0049
|
||||||
|
0xD1 U+004A
|
||||||
|
0xD2 U+004B
|
||||||
|
0xD3 U+004C
|
||||||
|
0xD4 U+004D
|
||||||
|
0xD5 U+004E
|
||||||
|
0xD6 U+004F
|
||||||
|
0xD7 U+0050
|
||||||
|
0xD8 U+0051
|
||||||
|
0xD9 U+0052
|
||||||
|
0xE2 U+0053
|
||||||
|
0xE3 U+0054
|
||||||
|
0xE4 U+0055
|
||||||
|
0xE5 U+0056
|
||||||
|
0xE6 U+0057
|
||||||
|
0xE7 U+0058
|
||||||
|
0xE8 U+0059
|
||||||
|
0xE9 U+005A
|
||||||
|
0x70 U+005B
|
||||||
|
0xB2 U+005C
|
||||||
|
0x80 U+005D
|
||||||
|
0xB0 U+005E
|
||||||
|
0x6D U+005F
|
||||||
|
0x79 U+0060
|
||||||
|
0x81 U+0061
|
||||||
|
0x82 U+0062
|
||||||
|
0x83 U+0063
|
||||||
|
0x84 U+0064
|
||||||
|
0x85 U+0065
|
||||||
|
0x86 U+0066
|
||||||
|
0x87 U+0067
|
||||||
|
0x88 U+0068
|
||||||
|
0x89 U+0069
|
||||||
|
0x91 U+006A
|
||||||
|
0x92 U+006B
|
||||||
|
0x93 U+006C
|
||||||
|
0x94 U+006D
|
||||||
|
0x95 U+006E
|
||||||
|
0x96 U+006F
|
||||||
|
0x97 U+0070
|
||||||
|
0x98 U+0071
|
||||||
|
0x99 U+0072
|
||||||
|
0xA2 U+0073
|
||||||
|
0xA3 U+0074
|
||||||
|
0xA4 U+0075
|
||||||
|
0xA5 U+0076
|
||||||
|
0xA6 U+0077
|
||||||
|
0xA7 U+0078
|
||||||
|
0xA8 U+0079
|
||||||
|
0xA9 U+007A
|
||||||
|
0xC0 U+007B
|
||||||
|
0x4F U+007C
|
||||||
|
0xD0 U+007D
|
||||||
|
0xA1 U+007E
|
||||||
|
0x07 U+007F
|
||||||
|
0x20 U+0080
|
||||||
|
0x21 U+0081
|
||||||
|
0x22 U+0082
|
||||||
|
0x23 U+0083
|
||||||
|
0x24 U+0084
|
||||||
|
0x15 U+0085
|
||||||
|
0x06 U+0086
|
||||||
|
0x17 U+0087
|
||||||
|
0x28 U+0088
|
||||||
|
0x29 U+0089
|
||||||
|
0x2A U+008A
|
||||||
|
0x2B U+008B
|
||||||
|
0x2C U+008C
|
||||||
|
0x09 U+008D
|
||||||
|
0x0A U+008E
|
||||||
|
0x1B U+008F
|
||||||
|
0x30 U+0090
|
||||||
|
0x31 U+0091
|
||||||
|
0x1A U+0092
|
||||||
|
0x33 U+0093
|
||||||
|
0x34 U+0094
|
||||||
|
0x35 U+0095
|
||||||
|
0x36 U+0096
|
||||||
|
0x08 U+0097
|
||||||
|
0x38 U+0098
|
||||||
|
0x39 U+0099
|
||||||
|
0x3A U+009A
|
||||||
|
0x3B U+009B
|
||||||
|
0x04 U+009C
|
||||||
|
0x14 U+009D
|
||||||
|
0x3E U+009E
|
||||||
|
0xFF U+009F
|
||||||
|
0x4A U+00A2
|
||||||
|
0x6A U+00A6
|
||||||
|
0x5F U+00AC
|
||||||
|
0xA0 U+203E
|
||||||
|
0xE0 U+20A9
|
||||||
|
0x42 U+FFA0
|
||||||
|
0x43 U+FFA1
|
||||||
|
0x44 U+FFA2
|
||||||
|
0x45 U+FFA3
|
||||||
|
0x46 U+FFA4
|
||||||
|
0x47 U+FFA5
|
||||||
|
0x48 U+FFA6
|
||||||
|
0x49 U+FFA7
|
||||||
|
0x52 U+FFA8
|
||||||
|
0x53 U+FFA9
|
||||||
|
0x54 U+FFAA
|
||||||
|
0x55 U+FFAB
|
||||||
|
0x56 U+FFAC
|
||||||
|
0x57 U+FFAD
|
||||||
|
0x58 U+FFAE
|
||||||
|
0x59 U+FFAF
|
||||||
|
0x62 U+FFB0
|
||||||
|
0x63 U+FFB1
|
||||||
|
0x64 U+FFB2
|
||||||
|
0x65 U+FFB3
|
||||||
|
0x66 U+FFB4
|
||||||
|
0x67 U+FFB5
|
||||||
|
0x68 U+FFB6
|
||||||
|
0x69 U+FFB7
|
||||||
|
0x72 U+FFB8
|
||||||
|
0x73 U+FFB9
|
||||||
|
0x74 U+FFBA
|
||||||
|
0x75 U+FFBB
|
||||||
|
0x76 U+FFBC
|
||||||
|
0x77 U+FFBD
|
||||||
|
0x78 U+FFBE
|
||||||
|
0x8A U+FFC2
|
||||||
|
0x8B U+FFC3
|
||||||
|
0x8C U+FFC4
|
||||||
|
0x8D U+FFC5
|
||||||
|
0x8E U+FFC6
|
||||||
|
0x8F U+FFC7
|
||||||
|
0x9A U+FFCA
|
||||||
|
0x9B U+FFCB
|
||||||
|
0x9C U+FFCC
|
||||||
|
0x9D U+FFCD
|
||||||
|
0x9E U+FFCE
|
||||||
|
0x9F U+FFCF
|
||||||
|
0xAA U+FFD2
|
||||||
|
0xAB U+FFD3
|
||||||
|
0xAC U+FFD4
|
||||||
|
0xAD U+FFD5
|
||||||
|
0xAE U+FFD6
|
||||||
|
0xAF U+FFD7
|
||||||
|
0xBA U+FFDA
|
||||||
|
0xBB U+FFDB
|
||||||
|
0xBC U+FFDC
|
@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
|
|||||||
IBM420 IBM420 Cp420 false sun.nio.cs.ext
|
IBM420 IBM420 Cp420 false sun.nio.cs.ext
|
||||||
IBM424 IBM424 Cp424 false sun.nio.cs.ext
|
IBM424 IBM424 Cp424 false sun.nio.cs.ext
|
||||||
IBM500 IBM500 Cp500 false sun.nio.cs.ext
|
IBM500 IBM500 Cp500 false sun.nio.cs.ext
|
||||||
|
IBM833 x-IBM833 Cp833 false sun.nio.cs.ext
|
||||||
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
|
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
|
||||||
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
|
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
|
||||||
IBM860 IBM860 Cp860 false sun.nio.cs.ext
|
IBM860 IBM860 Cp860 false sun.nio.cs.ext
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -111,7 +111,7 @@ class CharacterData00 extends CharacterData {
|
|||||||
if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
|
if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
// map the offset overflow chars
|
// map the offset overflow chars
|
||||||
case 0x0130 : mapChar = 0x0069; break;
|
case 0x0130 : mapChar = 0x0069; break;
|
||||||
case 0x2126 : mapChar = 0x03C9; break;
|
case 0x2126 : mapChar = 0x03C9; break;
|
||||||
case 0x212A : mapChar = 0x006B; break;
|
case 0x212A : mapChar = 0x006B; break;
|
||||||
case 0x212B : mapChar = 0x00E5; break;
|
case 0x212B : mapChar = 0x00E5; break;
|
||||||
@ -192,7 +192,11 @@ class CharacterData00 extends CharacterData {
|
|||||||
case 0x2C6D : mapChar = 0x0251; break;
|
case 0x2C6D : mapChar = 0x0251; break;
|
||||||
case 0x2C6E : mapChar = 0x0271; break;
|
case 0x2C6E : mapChar = 0x0271; break;
|
||||||
case 0x2C6F : mapChar = 0x0250; break;
|
case 0x2C6F : mapChar = 0x0250; break;
|
||||||
|
case 0x2C70 : mapChar = 0x0252; break;
|
||||||
|
case 0x2C7E : mapChar = 0x023F; break;
|
||||||
|
case 0x2C7F : mapChar = 0x0240; break;
|
||||||
case 0xA77D : mapChar = 0x1D79; break;
|
case 0xA77D : mapChar = 0x1D79; break;
|
||||||
|
case 0xA78D : mapChar = 0x0265; break;
|
||||||
// default mapChar is already set, so no
|
// default mapChar is already set, so no
|
||||||
// need to redo it here.
|
// need to redo it here.
|
||||||
// default : mapChar = ch;
|
// default : mapChar = ch;
|
||||||
@ -246,8 +250,12 @@ class CharacterData00 extends CharacterData {
|
|||||||
case 0x1FC3 : mapChar = 0x1FCC; break;
|
case 0x1FC3 : mapChar = 0x1FCC; break;
|
||||||
case 0x1FF3 : mapChar = 0x1FFC; break;
|
case 0x1FF3 : mapChar = 0x1FFC; break;
|
||||||
|
|
||||||
|
case 0x023F : mapChar = 0x2C7E; break;
|
||||||
|
case 0x0240 : mapChar = 0x2C7F; break;
|
||||||
case 0x0250 : mapChar = 0x2C6F; break;
|
case 0x0250 : mapChar = 0x2C6F; break;
|
||||||
case 0x0251 : mapChar = 0x2C6D; break;
|
case 0x0251 : mapChar = 0x2C6D; break;
|
||||||
|
case 0x0252 : mapChar = 0x2C70; break;
|
||||||
|
case 0x0265 : mapChar = 0xA78D; break;
|
||||||
case 0x026B : mapChar = 0x2C62; break;
|
case 0x026B : mapChar = 0x2C62; break;
|
||||||
case 0x0271 : mapChar = 0x2C6E; break;
|
case 0x0271 : mapChar = 0x2C6E; break;
|
||||||
case 0x027D : mapChar = 0x2C64; break;
|
case 0x027D : mapChar = 0x2C64; break;
|
||||||
@ -487,8 +495,12 @@ class CharacterData00 extends CharacterData {
|
|||||||
case 0x017F : mapChar = 0x0053; break;
|
case 0x017F : mapChar = 0x0053; break;
|
||||||
case 0x1FBE : mapChar = 0x0399; break;
|
case 0x1FBE : mapChar = 0x0399; break;
|
||||||
|
|
||||||
|
case 0x023F : mapChar = 0x2C7E; break;
|
||||||
|
case 0x0240 : mapChar = 0x2C7F; break;
|
||||||
case 0x0250 : mapChar = 0x2C6F; break;
|
case 0x0250 : mapChar = 0x2C6F; break;
|
||||||
case 0x0251 : mapChar = 0x2C6D; break;
|
case 0x0251 : mapChar = 0x2C6D; break;
|
||||||
|
case 0x0252 : mapChar = 0x2C70; break;
|
||||||
|
case 0x0265 : mapChar = 0xA78D; break;
|
||||||
case 0x026B : mapChar = 0x2C62; break;
|
case 0x026B : mapChar = 0x2C62; break;
|
||||||
case 0x0271 : mapChar = 0x2C6E; break;
|
case 0x0271 : mapChar = 0x2C6E; break;
|
||||||
case 0x027D : mapChar = 0x2C64; break;
|
case 0x027D : mapChar = 0x2C64; break;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -251,9 +251,40 @@ class CharacterData01 extends CharacterData {
|
|||||||
case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY
|
case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY
|
||||||
case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
|
case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
|
||||||
case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
|
case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
|
||||||
|
case 0x01085D: retval = 100; break; // IMPERIAL ARAMAIC NUMBER ONE HUNDRED
|
||||||
|
case 0x01085E: retval = 1000; break; // IMPERIAL ARAMAIC NUMBER ONE THOUSAND
|
||||||
|
case 0x01085F: retval = 10000; break; // IMPERIAL ARAMAIC NUMBER TEN THOUSAND
|
||||||
case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
|
case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
|
||||||
case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
|
case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
|
||||||
case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
|
case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
|
||||||
|
case 0x010A7E: retval = 50; break; // OLD SOUTH ARABIAN NUMBER FIFTY
|
||||||
|
case 0x010B5E: retval = 100; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
|
||||||
|
case 0x010B5F: retval = 1000; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
|
||||||
|
case 0x010B7E: retval = 100; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
|
||||||
|
case 0x010B7F: retval = 1000; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
|
||||||
|
case 0x010E6C: retval = 40; break; // RUMI NUMBER FORTY
|
||||||
|
case 0x010E6D: retval = 50; break; // RUMI NUMBER FIFTY
|
||||||
|
case 0x010E6E: retval = 60; break; // RUMI NUMBER SIXTY
|
||||||
|
case 0x010E6F: retval = 70; break; // RUMI NUMBER SEVENTY
|
||||||
|
case 0x010E70: retval = 80; break; // RUMI NUMBER EIGHTY
|
||||||
|
case 0x010E71: retval = 90; break; // RUMI NUMBER NINETY
|
||||||
|
case 0x010E72: retval = 100; break; // RUMI NUMBER ONE HUNDRED
|
||||||
|
case 0x010E73: retval = 200; break; // RUMI NUMBER TWO HUNDRED
|
||||||
|
case 0x010E74: retval = 300; break; // RUMI NUMBER THREE HUNDRED
|
||||||
|
case 0x010E75: retval = 400; break; // RUMI NUMBER FOUR HUNDRED
|
||||||
|
case 0x010E76: retval = 500; break; // RUMI NUMBER FIVE HUNDRED
|
||||||
|
case 0x010E77: retval = 600; break; // RUMI NUMBER SIX HUNDRED
|
||||||
|
case 0x010E78: retval = 700; break; // RUMI NUMBER SEVEN HUNDRED
|
||||||
|
case 0x010E79: retval = 800; break; // RUMI NUMBER EIGHT HUNDRED
|
||||||
|
case 0x010E7A: retval = 900; break; // RUMI NUMBER NINE HUNDRED
|
||||||
|
case 0x01105E: retval = 40; break; // BRAHMI NUMBER FORTY
|
||||||
|
case 0x01105F: retval = 50; break; // BRAHMI NUMBER FIFTY
|
||||||
|
case 0x011060: retval = 60; break; // BRAHMI NUMBER SIXTY
|
||||||
|
case 0x011061: retval = 70; break; // BRAHMI NUMBER SEVENTY
|
||||||
|
case 0x011062: retval = 80; break; // BRAHMI NUMBER EIGHTY
|
||||||
|
case 0x011063: retval = 90; break; // BRAHMI NUMBER NINETY
|
||||||
|
case 0x011064: retval = 100; break; // BRAHMI NUMBER ONE HUNDRED
|
||||||
|
case 0x011065: retval = 1000; break; // BRAHMI NUMBER ONE THOUSAND
|
||||||
case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR
|
case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR
|
||||||
case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
|
case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
|
||||||
case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX
|
case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# Scripts-5.2.0.txt
|
# Scripts-6.0.0.txt
|
||||||
# Date: 2009-08-22, 04:58:43 GMT [MD]
|
# Date: 2010-08-19, 00:48:47 GMT [MD]
|
||||||
#
|
#
|
||||||
# Unicode Character Database
|
# Unicode Character Database
|
||||||
# Copyright (c) 1991-2009 Unicode, Inc.
|
# Copyright (c) 1991-2010 Unicode, Inc.
|
||||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||||
# For documentation, see http://www.unicode.org/reports/tr44/
|
# For documentation, see http://www.unicode.org/reports/tr44/
|
||||||
|
|
||||||
@ -73,7 +73,7 @@
|
|||||||
02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
|
02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
|
||||||
02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
|
02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
|
||||||
02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
|
02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
|
||||||
02E5..02EB ; Common # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
|
02E5..02E9 ; Common # Sk [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR
|
||||||
02EC ; Common # Lm MODIFIER LETTER VOICING
|
02EC ; Common # Lm MODIFIER LETTER VOICING
|
||||||
02ED ; Common # Sk MODIFIER LETTER UNASPIRATED
|
02ED ; Common # Sk MODIFIER LETTER UNASPIRATED
|
||||||
02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
|
02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
|
||||||
@ -83,7 +83,6 @@
|
|||||||
0385 ; Common # Sk GREEK DIALYTIKA TONOS
|
0385 ; Common # Sk GREEK DIALYTIKA TONOS
|
||||||
0387 ; Common # Po GREEK ANO TELEIA
|
0387 ; Common # Po GREEK ANO TELEIA
|
||||||
0589 ; Common # Po ARMENIAN FULL STOP
|
0589 ; Common # Po ARMENIAN FULL STOP
|
||||||
0600..0603 ; Common # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
|
|
||||||
060C ; Common # Po ARABIC COMMA
|
060C ; Common # Po ARABIC COMMA
|
||||||
061B ; Common # Po ARABIC SEMICOLON
|
061B ; Common # Po ARABIC SEMICOLON
|
||||||
061F ; Common # Po ARABIC QUESTION MARK
|
061F ; Common # Po ARABIC QUESTION MARK
|
||||||
@ -92,7 +91,6 @@
|
|||||||
06DD ; Common # Cf ARABIC END OF AYAH
|
06DD ; Common # Cf ARABIC END OF AYAH
|
||||||
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
|
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
|
||||||
0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
|
0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
|
||||||
0CF1..0CF2 ; Common # So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
|
|
||||||
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
|
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
|
||||||
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
|
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
|
||||||
10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
|
10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
|
||||||
@ -148,7 +146,7 @@
|
|||||||
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
|
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
|
||||||
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
|
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
|
||||||
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
|
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
|
||||||
20A0..20B8 ; Common # Sc [25] EURO-CURRENCY SIGN..TENGE SIGN
|
20A0..20B9 ; Common # Sc [26] EURO-CURRENCY SIGN..INDIAN RUPEE SIGN
|
||||||
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
|
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
|
||||||
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
|
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
|
||||||
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
|
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
|
||||||
@ -157,7 +155,8 @@
|
|||||||
210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
|
210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
|
||||||
2114 ; Common # So L B BAR SYMBOL
|
2114 ; Common # So L B BAR SYMBOL
|
||||||
2115 ; Common # L& DOUBLE-STRUCK CAPITAL N
|
2115 ; Common # L& DOUBLE-STRUCK CAPITAL N
|
||||||
2116..2118 ; Common # So [3] NUMERO SIGN..SCRIPT CAPITAL P
|
2116..2117 ; Common # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT
|
||||||
|
2118 ; Common # Sm SCRIPT CAPITAL P
|
||||||
2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
|
2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
|
||||||
211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
|
211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
|
||||||
2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
|
2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
|
||||||
@ -213,7 +212,7 @@
|
|||||||
239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
|
239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
|
||||||
23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
|
23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
|
||||||
23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
|
23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
|
||||||
23E2..23E8 ; Common # So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
|
23E2..23F3 ; Common # So [18] WHITE TRAPEZIUM..HOURGLASS WITH FLOWING SAND
|
||||||
2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
|
2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
|
||||||
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
|
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
|
||||||
2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
|
2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
|
||||||
@ -227,18 +226,8 @@
|
|||||||
25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
|
25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
|
||||||
2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
|
2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
|
||||||
266F ; Common # Sm MUSIC SHARP SIGN
|
266F ; Common # Sm MUSIC SHARP SIGN
|
||||||
2670..26CD ; Common # So [94] WEST SYRIAC CROSS..DISABLED CAR
|
2670..26FF ; Common # So [144] WEST SYRIAC CROSS..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
|
||||||
26CF..26E1 ; Common # So [19] PICK..RESTRICTED LEFT ENTRY-2
|
2701..2767 ; Common # So [103] UPPER BLADE SCISSORS..ROTATED FLORAL HEART BULLET
|
||||||
26E3 ; Common # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
|
|
||||||
26E8..26FF ; Common # So [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
|
|
||||||
2701..2704 ; Common # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
|
|
||||||
2706..2709 ; Common # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
|
|
||||||
270C..2727 ; Common # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
|
|
||||||
2729..274B ; Common # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
|
|
||||||
274D ; Common # So SHADOWED WHITE CIRCLE
|
|
||||||
274F..2752 ; Common # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
|
|
||||||
2756..275E ; Common # So [9] BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
|
|
||||||
2761..2767 ; Common # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
|
|
||||||
2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
|
2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
|
||||||
2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
|
2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
|
||||||
276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
|
276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
|
||||||
@ -254,15 +243,13 @@
|
|||||||
2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
|
2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
|
||||||
2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
|
2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
|
||||||
2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
|
2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
|
||||||
2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
|
2794..27BF ; Common # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
|
||||||
2798..27AF ; Common # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
|
|
||||||
27B1..27BE ; Common # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
|
|
||||||
27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
|
27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
|
||||||
27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
|
27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
|
||||||
27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
|
27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
|
||||||
27C7..27CA ; Common # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
|
27C7..27CA ; Common # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
|
||||||
27CC ; Common # Sm LONG DIVISION
|
27CC ; Common # Sm LONG DIVISION
|
||||||
27D0..27E5 ; Common # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
|
27CE..27E5 ; Common # Sm [24] SQUARED LOGICAL AND..WHITE SQUARE WITH RIGHTWARDS TICK
|
||||||
27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
|
27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
|
||||||
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
|
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
|
||||||
27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
|
27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
|
||||||
@ -555,27 +542,51 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
|
|||||||
1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
|
1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
|
||||||
1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
|
1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
|
||||||
1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
|
1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
|
||||||
|
1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
|
||||||
|
1F0B1..1F0BE ; Common # So [14] PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS
|
||||||
|
1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
|
||||||
|
1F0D1..1F0DF ; Common # So [15] PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
|
||||||
1F100..1F10A ; Common # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
|
1F100..1F10A ; Common # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
|
||||||
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
|
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
|
||||||
1F131 ; Common # So SQUARED LATIN CAPITAL LETTER B
|
1F130..1F169 ; Common # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
|
||||||
1F13D ; Common # So SQUARED LATIN CAPITAL LETTER N
|
1F170..1F19A ; Common # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
|
||||||
1F13F ; Common # So SQUARED LATIN CAPITAL LETTER P
|
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
|
||||||
1F142 ; Common # So SQUARED LATIN CAPITAL LETTER S
|
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
|
||||||
1F146 ; Common # So SQUARED LATIN CAPITAL LETTER W
|
1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
|
||||||
1F14A..1F14E ; Common # So [5] SQUARED HV..SQUARED PPV
|
|
||||||
1F157 ; Common # So NEGATIVE CIRCLED LATIN CAPITAL LETTER H
|
|
||||||
1F15F ; Common # So NEGATIVE CIRCLED LATIN CAPITAL LETTER P
|
|
||||||
1F179 ; Common # So NEGATIVE SQUARED LATIN CAPITAL LETTER J
|
|
||||||
1F17B..1F17C ; Common # So [2] NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M
|
|
||||||
1F17F ; Common # So NEGATIVE SQUARED LATIN CAPITAL LETTER P
|
|
||||||
1F18A..1F18D ; Common # So [4] CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA
|
|
||||||
1F190 ; Common # So SQUARE DJ
|
|
||||||
1F210..1F231 ; Common # So [34] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-6253
|
|
||||||
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
|
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
|
||||||
|
1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
|
||||||
|
1F300..1F320 ; Common # So [33] CYCLONE..SHOOTING STAR
|
||||||
|
1F330..1F335 ; Common # So [6] CHESTNUT..CACTUS
|
||||||
|
1F337..1F37C ; Common # So [70] TULIP..BABY BOTTLE
|
||||||
|
1F380..1F393 ; Common # So [20] RIBBON..GRADUATION CAP
|
||||||
|
1F3A0..1F3C4 ; Common # So [37] CAROUSEL HORSE..SURFER
|
||||||
|
1F3C6..1F3CA ; Common # So [5] TROPHY..SWIMMER
|
||||||
|
1F3E0..1F3F0 ; Common # So [17] HOUSE BUILDING..EUROPEAN CASTLE
|
||||||
|
1F400..1F43E ; Common # So [63] RAT..PAW PRINTS
|
||||||
|
1F440 ; Common # So EYES
|
||||||
|
1F442..1F4F7 ; Common # So [182] EAR..CAMERA
|
||||||
|
1F4F9..1F4FC ; Common # So [4] VIDEO CAMERA..VIDEOCASSETTE
|
||||||
|
1F500..1F53D ; Common # So [62] TWISTED RIGHTWARDS ARROWS..DOWN-POINTING SMALL RED TRIANGLE
|
||||||
|
1F550..1F567 ; Common # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
|
||||||
|
1F5FB..1F5FF ; Common # So [5] MOUNT FUJI..MOYAI
|
||||||
|
1F601..1F610 ; Common # So [16] GRINNING FACE WITH SMILING EYES..NEUTRAL FACE
|
||||||
|
1F612..1F614 ; Common # So [3] UNAMUSED FACE..PENSIVE FACE
|
||||||
|
1F616 ; Common # So CONFOUNDED FACE
|
||||||
|
1F618 ; Common # So FACE THROWING A KISS
|
||||||
|
1F61A ; Common # So KISSING FACE WITH CLOSED EYES
|
||||||
|
1F61C..1F61E ; Common # So [3] FACE WITH STUCK-OUT TONGUE AND WINKING EYE..DISAPPOINTED FACE
|
||||||
|
1F620..1F625 ; Common # So [6] ANGRY FACE..DISAPPOINTED BUT RELIEVED FACE
|
||||||
|
1F628..1F62B ; Common # So [4] FEARFUL FACE..TIRED FACE
|
||||||
|
1F62D ; Common # So LOUDLY CRYING FACE
|
||||||
|
1F630..1F633 ; Common # So [4] FACE WITH OPEN MOUTH AND COLD SWEAT..FLUSHED FACE
|
||||||
|
1F635..1F640 ; Common # So [12] DIZZY FACE..WEARY CAT FACE
|
||||||
|
1F645..1F64F ; Common # So [11] FACE WITH NO GOOD GESTURE..PERSON WITH FOLDED HANDS
|
||||||
|
1F680..1F6C5 ; Common # So [70] ROCKET..LEFT LUGGAGE
|
||||||
|
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
|
||||||
E0001 ; Common # Cf LANGUAGE TAG
|
E0001 ; Common # Cf LANGUAGE TAG
|
||||||
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
|
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
|
||||||
|
|
||||||
# Total code points: 5395
|
# Total code points: 6379
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -603,7 +614,7 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
|
|||||||
1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
|
1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
|
||||||
2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I
|
2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I
|
||||||
207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N
|
207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N
|
||||||
2090..2094 ; Latin # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
|
2090..209C ; Latin # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
|
||||||
212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
|
212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
|
||||||
2132 ; Latin # L& TURNED CAPITAL F
|
2132 ; Latin # L& TURNED CAPITAL F
|
||||||
214E ; Latin # L& TURNED SMALL F
|
214E ; Latin # L& TURNED SMALL F
|
||||||
@ -616,13 +627,16 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
|
|||||||
A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
|
A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
|
||||||
A770 ; Latin # Lm MODIFIER LETTER US
|
A770 ; Latin # Lm MODIFIER LETTER US
|
||||||
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
|
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
|
||||||
A78B..A78C ; Latin # L& [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
|
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
|
||||||
|
A790..A791 ; Latin # L& [2] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER N WITH DESCENDER
|
||||||
|
A7A0..A7A9 ; Latin # L& [10] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE..LATIN SMALL LETTER S WITH OBLIQUE STROKE
|
||||||
|
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
|
||||||
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
|
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
|
||||||
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
|
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
|
||||||
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
|
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
|
||||||
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
|
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
|
||||||
|
|
||||||
# Total code points: 1244
|
# Total code points: 1267
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -687,12 +701,11 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
|
|||||||
0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION
|
0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION
|
||||||
0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
|
0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
|
||||||
0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
|
0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
|
||||||
048A..0525 ; Cyrillic # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
|
048A..0527 ; Cyrillic # L& [158] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER SHHA WITH DESCENDER
|
||||||
1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
|
1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
|
||||||
1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
|
1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
|
||||||
2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
|
2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
|
||||||
A640..A65F ; Cyrillic # L& [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
|
A640..A66D ; Cyrillic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
|
||||||
A662..A66D ; Cyrillic # L& [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
|
|
||||||
A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
|
A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
|
||||||
A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
|
A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
|
||||||
A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
|
A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
|
||||||
@ -702,7 +715,7 @@ A67E ; Cyrillic # Po CYRILLIC KAVYKA
|
|||||||
A67F ; Cyrillic # Lm CYRILLIC PAYEROK
|
A67F ; Cyrillic # Lm CYRILLIC PAYEROK
|
||||||
A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
|
A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
|
||||||
|
|
||||||
# Total code points: 404
|
# Total code points: 408
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -744,6 +757,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
|
|||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
|
0600..0603 ; Arabic # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
|
||||||
0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
|
0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
|
||||||
0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
|
0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
|
||||||
060B ; Arabic # Sc AFGHANI SIGN
|
060B ; Arabic # Sc AFGHANI SIGN
|
||||||
@ -751,7 +765,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
|
|||||||
060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
|
060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
|
||||||
0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
|
0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
|
||||||
061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
|
061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
|
||||||
0621..063F ; Arabic # Lo [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
|
0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
|
||||||
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
|
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
|
||||||
0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
|
0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
|
||||||
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
|
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
|
||||||
@ -760,7 +774,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
|
|||||||
06D4 ; Arabic # Po ARABIC FULL STOP
|
06D4 ; Arabic # Po ARABIC FULL STOP
|
||||||
06D5 ; Arabic # Lo ARABIC LETTER AE
|
06D5 ; Arabic # Lo ARABIC LETTER AE
|
||||||
06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
|
06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
|
||||||
06DE ; Arabic # Me ARABIC START OF RUB EL HIZB
|
06DE ; Arabic # So ARABIC START OF RUB EL HIZB
|
||||||
06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
|
06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
|
||||||
06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
|
06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
|
||||||
06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
|
06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
|
||||||
@ -773,6 +787,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
|
|||||||
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
|
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
|
||||||
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
|
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
|
||||||
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
|
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
|
||||||
|
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
|
||||||
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
|
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
|
||||||
FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
|
FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
|
||||||
FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
|
FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
|
||||||
@ -782,7 +797,7 @@ FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN
|
|||||||
FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
|
FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
|
||||||
10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
|
10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
|
||||||
|
|
||||||
# Total code points: 1030
|
# Total code points: 1051
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -809,27 +824,29 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
|
|||||||
0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
|
0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
|
||||||
0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
|
0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
|
||||||
0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
|
0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
|
||||||
|
093A ; Devanagari # Mn DEVANAGARI VOWEL SIGN OE
|
||||||
|
093B ; Devanagari # Mc DEVANAGARI VOWEL SIGN OOE
|
||||||
093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA
|
093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA
|
||||||
093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
|
093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
|
||||||
093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
|
093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
|
||||||
0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
|
0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
|
||||||
0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
|
0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
|
||||||
094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA
|
094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA
|
||||||
094E ; Devanagari # Mc DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
|
094E..094F ; Devanagari # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
|
||||||
0950 ; Devanagari # Lo DEVANAGARI OM
|
0950 ; Devanagari # Lo DEVANAGARI OM
|
||||||
0953..0955 ; Devanagari # Mn [3] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN CANDRA LONG E
|
0953..0957 ; Devanagari # Mn [5] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN UUE
|
||||||
0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
|
0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
|
||||||
0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
|
0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
|
||||||
0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
|
0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
|
||||||
0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT
|
0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT
|
||||||
0972 ; Devanagari # Lo DEVANAGARI LETTER CANDRA A
|
0972..0977 ; Devanagari # Lo [6] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER UUE
|
||||||
0979..097F ; Devanagari # Lo [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
|
0979..097F ; Devanagari # Lo [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
|
||||||
A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
|
A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
|
||||||
A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
|
A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
|
||||||
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
|
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
|
||||||
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
||||||
|
|
||||||
# Total code points: 140
|
# Total code points: 150
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -941,8 +958,9 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
|||||||
0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
|
0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
|
||||||
0B70 ; Oriya # So ORIYA ISSHAR
|
0B70 ; Oriya # So ORIYA ISSHAR
|
||||||
0B71 ; Oriya # Lo ORIYA LETTER WA
|
0B71 ; Oriya # Lo ORIYA LETTER WA
|
||||||
|
0B72..0B77 ; Oriya # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
|
||||||
|
|
||||||
# Total code points: 84
|
# Total code points: 90
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1018,22 +1036,23 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
|||||||
0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
|
0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
|
||||||
0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
|
0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
|
||||||
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
|
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
|
||||||
|
0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
|
||||||
|
|
||||||
# Total code points: 84
|
# Total code points: 86
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
|
0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
|
||||||
0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
|
0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
|
||||||
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
|
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
|
||||||
0D12..0D28 ; Malayalam # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
|
0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
|
||||||
0D2A..0D39 ; Malayalam # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
|
|
||||||
0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
|
0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
|
||||||
0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
|
0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
|
||||||
0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
|
0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
|
||||||
0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
|
0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
|
||||||
0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
|
0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
|
||||||
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
|
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
|
||||||
|
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
|
||||||
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
|
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
|
||||||
0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
|
0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
|
||||||
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
|
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
|
||||||
@ -1042,7 +1061,7 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
|||||||
0D79 ; Malayalam # So MALAYALAM DATE MARK
|
0D79 ; Malayalam # So MALAYALAM DATE MARK
|
||||||
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
|
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
|
||||||
|
|
||||||
# Total code points: 95
|
# Total code points: 98
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1132,16 +1151,17 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
|||||||
0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
|
0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
|
||||||
0F85 ; Tibetan # Po TIBETAN MARK PALUTA
|
0F85 ; Tibetan # Po TIBETAN MARK PALUTA
|
||||||
0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
|
0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
|
||||||
0F88..0F8B ; Tibetan # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
|
0F88..0F8C ; Tibetan # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
|
||||||
0F90..0F97 ; Tibetan # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
|
0F8D..0F97 ; Tibetan # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
|
||||||
0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
|
0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
|
||||||
0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
|
0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
|
||||||
0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
|
0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
|
||||||
0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
|
0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
|
||||||
0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
|
0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
|
||||||
0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
|
0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
|
||||||
|
0FD9..0FDA ; Tibetan # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
|
||||||
|
|
||||||
# Total code points: 201
|
# Total code points: 207
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1201,6 +1221,7 @@ AA7B ; Myanmar # Mc MYANMAR SIGN PAO KAREN TONE
|
|||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
|
1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
|
||||||
|
302E..302F ; Hangul # Mn [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
|
||||||
3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
|
3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
|
||||||
3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
|
3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
|
||||||
3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
|
3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
|
||||||
@ -1214,7 +1235,7 @@ FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL
|
|||||||
FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
|
FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
|
||||||
FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
|
FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
|
||||||
|
|
||||||
# Total code points: 11737
|
# Total code points: 11739
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1234,7 +1255,7 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
|
|||||||
12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
|
12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
|
||||||
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
|
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
|
||||||
1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
|
1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
|
||||||
135F ; Ethiopic # Mn ETHIOPIC COMBINING GEMINATION MARK
|
135D..135F ; Ethiopic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
|
||||||
1360 ; Ethiopic # So ETHIOPIC SECTION MARK
|
1360 ; Ethiopic # So ETHIOPIC SECTION MARK
|
||||||
1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
|
1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
|
||||||
1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
|
1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
|
||||||
@ -1249,8 +1270,13 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
|
|||||||
2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
|
2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
|
||||||
2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
|
2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
|
||||||
2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
|
2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
|
||||||
|
AB01..AB06 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
|
||||||
|
AB09..AB0E ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
|
||||||
|
AB11..AB16 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
|
||||||
|
AB20..AB26 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
|
||||||
|
AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
|
||||||
|
|
||||||
# Total code points: 461
|
# Total code points: 495
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1329,9 +1355,10 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
|
|||||||
3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
|
3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
|
||||||
309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
|
309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
|
||||||
309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
|
309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
|
||||||
|
1B001 ; Hiragana # Lo HIRAGANA LETTER ARCHAIC YE
|
||||||
1F200 ; Hiragana # So SQUARE HIRAGANA HOKA
|
1F200 ; Hiragana # So SQUARE HIRAGANA HOKA
|
||||||
|
|
||||||
# Total code points: 90
|
# Total code points: 91
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1343,15 +1370,17 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
|
|||||||
3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO
|
3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO
|
||||||
FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
|
FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
|
||||||
FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
|
FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
|
||||||
|
1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E
|
||||||
|
|
||||||
# Total code points: 299
|
# Total code points: 300
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
|
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
|
||||||
3105..312D ; Bopomofo # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
|
3105..312D ; Bopomofo # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
|
||||||
31A0..31B7 ; Bopomofo # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
|
31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
|
||||||
|
|
||||||
# Total code points: 65
|
# Total code points: 70
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1370,9 +1399,10 @@ FA30..FA6D ; Han # Lo [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILI
|
|||||||
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
|
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
|
||||||
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
|
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
|
||||||
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
|
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
|
||||||
|
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
|
||||||
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
|
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
|
||||||
|
|
||||||
# Total code points: 75738
|
# Total code points: 75960
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1410,6 +1440,7 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
|
|||||||
0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
|
0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
|
||||||
0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
|
0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
|
||||||
064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
|
064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
|
||||||
|
065F ; Inherited # Mn ARABIC WAVY HAMZA BELOW
|
||||||
0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
|
0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
|
||||||
0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
|
0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
|
||||||
1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
|
1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
|
||||||
@ -1417,14 +1448,14 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
|
|||||||
1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
|
1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
|
||||||
1CED ; Inherited # Mn VEDIC SIGN TIRYAK
|
1CED ; Inherited # Mn VEDIC SIGN TIRYAK
|
||||||
1DC0..1DE6 ; Inherited # Mn [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
|
1DC0..1DE6 ; Inherited # Mn [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
|
||||||
1DFD..1DFF ; Inherited # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
|
1DFC..1DFF ; Inherited # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
|
||||||
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
|
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
|
||||||
20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
|
20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
|
||||||
20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
|
20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
|
||||||
20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
|
20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
|
||||||
20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
|
20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
|
||||||
20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
|
20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
|
||||||
302A..302F ; Inherited # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
|
302A..302D ; Inherited # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
|
||||||
3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
|
3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
|
||||||
FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
|
FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
|
||||||
FE20..FE26 ; Inherited # Mn [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
|
FE20..FE26 ; Inherited # Mn [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
|
||||||
@ -1568,8 +1599,9 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
|
|||||||
19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
|
19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
|
||||||
19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
|
19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
|
||||||
19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
|
19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
|
||||||
19D0..19DA ; New_Tai_Lue # Nd [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
|
19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
|
||||||
19DE..19DF ; New_Tai_Lue # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
|
19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE
|
||||||
|
19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
|
||||||
|
|
||||||
# Total code points: 83
|
# Total code points: 83
|
||||||
|
|
||||||
@ -1584,8 +1616,10 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
|
|||||||
|
|
||||||
2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
|
2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
|
||||||
2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
|
2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
|
||||||
|
2D70 ; Tifinagh # Po TIFINAGH SEPARATOR MARK
|
||||||
|
2D7F ; Tifinagh # Mn TIFINAGH CONSONANT JOINER
|
||||||
|
|
||||||
# Total code points: 55
|
# Total code points: 57
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1882,8 +1916,9 @@ A6A0..A6E5 ; Bamum # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
|
|||||||
A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
|
A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
|
||||||
A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
|
A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
|
||||||
A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
|
A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
|
||||||
|
16800..16A38 ; Bamum # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
|
||||||
|
|
||||||
# Total code points: 88
|
# Total code points: 657
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
@ -1969,4 +2004,40 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
|
|||||||
|
|
||||||
# Total code points: 66
|
# Total code points: 66
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
1BC0..1BE5 ; Batak # Lo [38] BATAK LETTER A..BATAK LETTER U
|
||||||
|
1BE6 ; Batak # Mn BATAK SIGN TOMPI
|
||||||
|
1BE7 ; Batak # Mc BATAK VOWEL SIGN E
|
||||||
|
1BE8..1BE9 ; Batak # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
|
||||||
|
1BEA..1BEC ; Batak # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
|
||||||
|
1BED ; Batak # Mn BATAK VOWEL SIGN KARO O
|
||||||
|
1BEE ; Batak # Mc BATAK VOWEL SIGN U
|
||||||
|
1BEF..1BF1 ; Batak # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
|
||||||
|
1BF2..1BF3 ; Batak # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
|
||||||
|
1BFC..1BFF ; Batak # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
|
||||||
|
|
||||||
|
# Total code points: 56
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
11000 ; Brahmi # Mc BRAHMI SIGN CANDRABINDU
|
||||||
|
11001 ; Brahmi # Mn BRAHMI SIGN ANUSVARA
|
||||||
|
11002 ; Brahmi # Mc BRAHMI SIGN VISARGA
|
||||||
|
11003..11037 ; Brahmi # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
|
||||||
|
11038..11046 ; Brahmi # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
|
||||||
|
11047..1104D ; Brahmi # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
|
||||||
|
11052..11065 ; Brahmi # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
|
||||||
|
11066..1106F ; Brahmi # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
|
||||||
|
|
||||||
|
# Total code points: 108
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
0840..0858 ; Mandaic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
|
||||||
|
0859..085B ; Mandaic # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
|
||||||
|
085E ; Mandaic # Po MANDAIC PUNCTUATION
|
||||||
|
|
||||||
|
# Total code points: 29
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
# SpecialCasing-5.1.0.txt
|
# SpecialCasing-6.0.0.txt
|
||||||
# Date: 2008-03-03, 21:58:10 GMT [MD]
|
# Date: 2010-05-18, 00:49:39 GMT [MD]
|
||||||
#
|
#
|
||||||
# Unicode Character Database
|
# Unicode Character Database
|
||||||
# Copyright (c) 1991-2008 Unicode, Inc.
|
# Copyright (c) 1991-2010 Unicode, Inc.
|
||||||
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
# For terms of use, see http://www.unicode.org/terms_of_use.html
|
||||||
# For documentation, see UCD.html
|
# For documentation, see http://www.unicode.org/reports/tr44/
|
||||||
#
|
#
|
||||||
# Special Casing Properties
|
# Special Casing Properties
|
||||||
#
|
#
|
||||||
@ -106,11 +106,11 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
|
|||||||
1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
|
1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
|
||||||
1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
|
1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
|
||||||
|
|
||||||
# IMPORTANT-when capitalizing iota-subscript (0345)
|
# IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
|
||||||
# It MUST be in normalized form--moved to the end of any sequence of combining marks.
|
# the result will be incorrect unless the iota-subscript is moved to the end
|
||||||
# This is because logically it represents a following base character!
|
# of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
|
||||||
# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
|
# This process can be achieved by first transforming the text to NFC before casing.
|
||||||
# It should never be the first character in a word, so in titlecasing it can be left as is.
|
# E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA>
|
||||||
|
|
||||||
# The following cases are already in the UnicodeData file, so are only commented here.
|
# The following cases are already in the UnicodeData file, so are only commented here.
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
5.1.0
|
6.0.0
|
||||||
|
@ -65,6 +65,7 @@ static jboolean printVersion = JNI_FALSE; /* print and exit */
|
|||||||
static jboolean showVersion = JNI_FALSE; /* print but continue */
|
static jboolean showVersion = JNI_FALSE; /* print but continue */
|
||||||
static jboolean printUsage = JNI_FALSE; /* print and exit*/
|
static jboolean printUsage = JNI_FALSE; /* print and exit*/
|
||||||
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
|
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
|
||||||
|
static char *showSettings = NULL; /* print but continue */
|
||||||
|
|
||||||
static const char *_program_name;
|
static const char *_program_name;
|
||||||
static const char *_launcher_name;
|
static const char *_launcher_name;
|
||||||
@ -109,6 +110,7 @@ static void SetApplicationClassPath(const char**);
|
|||||||
|
|
||||||
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
|
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
|
||||||
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
|
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
|
||||||
|
static void ShowSettings(JNIEnv* env, char *optString);
|
||||||
|
|
||||||
static void SetPaths(int argc, char **argv);
|
static void SetPaths(int argc, char **argv);
|
||||||
|
|
||||||
@ -157,6 +159,7 @@ static jboolean IsWildCardEnabled();
|
|||||||
* create a new thread to invoke JVM. See 6316197 for more information.
|
* create a new thread to invoke JVM. See 6316197 for more information.
|
||||||
*/
|
*/
|
||||||
static jlong threadStackSize = 0; /* stack size of the new thread */
|
static jlong threadStackSize = 0; /* stack size of the new thread */
|
||||||
|
static jlong heapSize = 0; /* heap size */
|
||||||
|
|
||||||
int JNICALL JavaMain(void * args); /* entry point */
|
int JNICALL JavaMain(void * args); /* entry point */
|
||||||
|
|
||||||
@ -376,6 +379,10 @@ JavaMain(void * _args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showSettings != NULL) {
|
||||||
|
ShowSettings(env, showSettings);
|
||||||
|
CHECK_EXCEPTION_LEAVE(0);
|
||||||
|
}
|
||||||
/* If the user specified neither a class name nor a JAR file */
|
/* If the user specified neither a class name nor a JAR file */
|
||||||
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
|
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
|
||||||
PrintUsage(env, printXUsage);
|
PrintUsage(env, printXUsage);
|
||||||
@ -611,7 +618,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
|
|||||||
|
|
||||||
/* copied from HotSpot function "atomll()" */
|
/* copied from HotSpot function "atomll()" */
|
||||||
static int
|
static int
|
||||||
parse_stack_size(const char *s, jlong *result) {
|
parse_size(const char *s, jlong *result) {
|
||||||
jlong n = 0;
|
jlong n = 0;
|
||||||
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
||||||
if (args_read != 1) {
|
if (args_read != 1) {
|
||||||
@ -673,10 +680,17 @@ AddOption(char *str, void *info)
|
|||||||
options[numOptions++].extraInfo = info;
|
options[numOptions++].extraInfo = info;
|
||||||
|
|
||||||
if (JLI_StrCCmp(str, "-Xss") == 0) {
|
if (JLI_StrCCmp(str, "-Xss") == 0) {
|
||||||
jlong tmp;
|
jlong tmp;
|
||||||
if (parse_stack_size(str + 4, &tmp)) {
|
if (parse_size(str + 4, &tmp)) {
|
||||||
threadStackSize = tmp;
|
threadStackSize = tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JLI_StrCCmp(str, "-Xmx") == 0) {
|
||||||
|
jlong tmp;
|
||||||
|
if (parse_size(str + 4, &tmp)) {
|
||||||
|
heapSize = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1014,6 +1028,13 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
|
|||||||
} else if (JLI_StrCmp(arg, "-X") == 0) {
|
} else if (JLI_StrCmp(arg, "-X") == 0) {
|
||||||
printXUsage = JNI_TRUE;
|
printXUsage = JNI_TRUE;
|
||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
|
/*
|
||||||
|
* The following case checks for -XshowSettings OR -XshowSetting:SUBOPT.
|
||||||
|
* In the latter case, any SUBOPT value not recognized will default to "all"
|
||||||
|
*/
|
||||||
|
} else if (JLI_StrCmp(arg, "-XshowSettings") == 0 ||
|
||||||
|
JLI_StrCCmp(arg, "-XshowSettings:") == 0) {
|
||||||
|
showSettings = arg;
|
||||||
/*
|
/*
|
||||||
* The following case provide backward compatibility with old-style
|
* The following case provide backward compatibility with old-style
|
||||||
* command line options.
|
* command line options.
|
||||||
@ -1474,6 +1495,27 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
|
|||||||
(*env)->CallStaticVoidMethod(env, ver, print);
|
(*env)->CallStaticVoidMethod(env, ver, print);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prints all the Java settings, see the java implementation for more details.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
ShowSettings(JNIEnv *env, char *optString)
|
||||||
|
{
|
||||||
|
jclass cls;
|
||||||
|
jmethodID showSettingsID;
|
||||||
|
jstring joptString;
|
||||||
|
NULL_CHECK(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
|
||||||
|
NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
|
||||||
|
"showSettings", "(ZLjava/lang/String;JJZ)V"));
|
||||||
|
joptString = (*env)->NewStringUTF(env, optString);
|
||||||
|
(*env)->CallStaticVoidMethod(env, cls, showSettingsID,
|
||||||
|
JNI_TRUE,
|
||||||
|
joptString,
|
||||||
|
(jlong)heapSize,
|
||||||
|
(jlong)threadStackSize,
|
||||||
|
ServerClassMachine());
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
|
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
|
||||||
*/
|
*/
|
||||||
|
@ -91,6 +91,7 @@ public class HttpsConfigurator {
|
|||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
/**
|
/**
|
||||||
* Called by the HttpsServer to configure the parameters
|
* Called by the HttpsServer to configure the parameters
|
||||||
* for a https connection currently being established.
|
* for a https connection currently being established.
|
||||||
@ -111,4 +112,5 @@ public class HttpsConfigurator {
|
|||||||
public void configure (HttpsParameters params) {
|
public void configure (HttpsParameters params) {
|
||||||
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
|
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
|
||||||
}
|
}
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
package com.sun.net.httpserver;
|
package com.sun.net.httpserver;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
import javax.net.ssl.SSLParameters;
|
import javax.net.ssl.SSLParameters;
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the set of parameters for each https
|
* Represents the set of parameters for each https
|
||||||
@ -67,6 +69,7 @@ public abstract class HttpsParameters {
|
|||||||
*/
|
*/
|
||||||
public abstract InetSocketAddress getClientAddress();
|
public abstract InetSocketAddress getClientAddress();
|
||||||
|
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
/**
|
/**
|
||||||
* Sets the SSLParameters to use for this HttpsParameters.
|
* Sets the SSLParameters to use for this HttpsParameters.
|
||||||
* The parameters must be supported by the SSLContext contained
|
* The parameters must be supported by the SSLContext contained
|
||||||
@ -79,6 +82,7 @@ public abstract class HttpsParameters {
|
|||||||
* invalid or unsupported.
|
* invalid or unsupported.
|
||||||
*/
|
*/
|
||||||
public abstract void setSSLParameters (SSLParameters params);
|
public abstract void setSSLParameters (SSLParameters params);
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a copy of the array of ciphersuites or null if none
|
* Returns a copy of the array of ciphersuites or null if none
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -140,7 +140,7 @@ syncrsimpl.valtores = Value to be resolved can either be in the database or in c
|
|||||||
#WebRowSetXmlReader exception
|
#WebRowSetXmlReader exception
|
||||||
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
|
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
|
||||||
wrsxmlreader.readxml = readXML : {0}
|
wrsxmlreader.readxml = readXML : {0}
|
||||||
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {0} , uri : {0}
|
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
|
||||||
|
|
||||||
#WebRowSetXmlWriter exceptions
|
#WebRowSetXmlWriter exceptions
|
||||||
wrsxmlwriter.ioex = IOException : {0}
|
wrsxmlwriter.ioex = IOException : {0}
|
||||||
@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
|
|||||||
#XmlReaderContentHandler exceptions
|
#XmlReaderContentHandler exceptions
|
||||||
xmlrch.errmap = Error setting Map : {0}
|
xmlrch.errmap = Error setting Map : {0}
|
||||||
xmlrch.errmetadata = Error setting metadata : {0}
|
xmlrch.errmetadata = Error setting metadata : {0}
|
||||||
xmlrch.errinsert = Error inserting values : {0}
|
xmlrch.errinsertval = Error inserting values : {0}
|
||||||
xmlrch.errconstr = Error constructing row : {0}
|
xmlrch.errconstr = Error constructing row : {0}
|
||||||
xmlrch.errdel = Error deleting row : {0}
|
xmlrch.errdel = Error deleting row : {0}
|
||||||
xmlrch.errinsert = Error constructing insert row : {0}
|
xmlrch.errinsert = Error constructing insert row : {0}
|
||||||
@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
|
|||||||
xmlrch.chars = characters :
|
xmlrch.chars = characters :
|
||||||
xmlrch.badvalue = Bad value ; non-nullable property
|
xmlrch.badvalue = Bad value ; non-nullable property
|
||||||
xmlrch.badvalue1 = Bad value ; non-nullable metadata
|
xmlrch.badvalue1 = Bad value ; non-nullable metadata
|
||||||
xmlrch.warning = ** Warning : {0} , line : {0} , uri : {0}
|
xmlrch.warning = ** Warning : {0} , line : {1} , uri : {2}
|
||||||
|
|
||||||
#RIOptimisticProvider Exceptions
|
#RIOptimisticProvider Exceptions
|
||||||
riop.locking = Locking classification is not supported
|
riop.locking = Locking classification is not supported
|
||||||
|
@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
|
|||||||
// columnValue now need to be reset to the empty string
|
// columnValue now need to be reset to the empty string
|
||||||
columnValue = "";
|
columnValue = "";
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage()));
|
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsertval").toString(), ex.getMessage()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RowTag:
|
case RowTag:
|
||||||
|
@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a brighter version
|
* components of this <code>Color</code> to create a brighter version
|
||||||
* of this <code>Color</code>. Although <code>brighter</code> and
|
* of this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a
|
* <code>darker</code> are inverse operations, the results of a
|
||||||
* series of invocations of these two methods might be inconsistent
|
* series of invocations of these two methods might be inconsistent
|
||||||
* because of rounding errors.
|
* because of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a brighter version of this <code>Color</code>.
|
* a brighter version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#darker
|
* @see java.awt.Color#darker
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
int r = getRed();
|
int r = getRed();
|
||||||
int g = getGreen();
|
int g = getGreen();
|
||||||
int b = getBlue();
|
int b = getBlue();
|
||||||
|
int alpha = getAlpha();
|
||||||
|
|
||||||
/* From 2D group:
|
/* From 2D group:
|
||||||
* 1. black.brighter() should return grey
|
* 1. black.brighter() should return grey
|
||||||
@ -632,7 +636,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
*/
|
*/
|
||||||
int i = (int)(1.0/(1.0-FACTOR));
|
int i = (int)(1.0/(1.0-FACTOR));
|
||||||
if ( r == 0 && g == 0 && b == 0) {
|
if ( r == 0 && g == 0 && b == 0) {
|
||||||
return new Color(i, i, i);
|
return new Color(i, i, i, alpha);
|
||||||
}
|
}
|
||||||
if ( r > 0 && r < i ) r = i;
|
if ( r > 0 && r < i ) r = i;
|
||||||
if ( g > 0 && g < i ) g = i;
|
if ( g > 0 && g < i ) g = i;
|
||||||
@ -640,7 +644,8 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
|
|
||||||
return new Color(Math.min((int)(r/FACTOR), 255),
|
return new Color(Math.min((int)(r/FACTOR), 255),
|
||||||
Math.min((int)(g/FACTOR), 255),
|
Math.min((int)(g/FACTOR), 255),
|
||||||
Math.min((int)(b/FACTOR), 255));
|
Math.min((int)(b/FACTOR), 255),
|
||||||
|
alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -649,19 +654,23 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a darker version of
|
* components of this <code>Color</code> to create a darker version of
|
||||||
* this <code>Color</code>. Although <code>brighter</code> and
|
* this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a series
|
* <code>darker</code> are inverse operations, the results of a series
|
||||||
* of invocations of these two methods might be inconsistent because
|
* of invocations of these two methods might be inconsistent because
|
||||||
* of rounding errors.
|
* of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a darker version of this <code>Color</code>.
|
* a darker version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#brighter
|
* @see java.awt.Color#brighter
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
public Color darker() {
|
public Color darker() {
|
||||||
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
||||||
Math.max((int)(getGreen()*FACTOR), 0),
|
Math.max((int)(getGreen()*FACTOR), 0),
|
||||||
Math.max((int)(getBlue() *FACTOR), 0));
|
Math.max((int)(getBlue() *FACTOR), 0),
|
||||||
|
getAlpha());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,6 +51,7 @@ import javax.accessibility.*;
|
|||||||
import sun.util.logging.PlatformLogger;
|
import sun.util.logging.PlatformLogger;
|
||||||
|
|
||||||
import sun.awt.AppContext;
|
import sun.awt.AppContext;
|
||||||
|
import sun.awt.AWTAccessor;
|
||||||
import sun.awt.CausedFocusEvent;
|
import sun.awt.CausedFocusEvent;
|
||||||
import sun.awt.PeerEvent;
|
import sun.awt.PeerEvent;
|
||||||
import sun.awt.SunToolkit;
|
import sun.awt.SunToolkit;
|
||||||
@ -247,6 +248,13 @@ public class Container extends Component {
|
|||||||
if (!GraphicsEnvironment.isHeadless()) {
|
if (!GraphicsEnvironment.isHeadless()) {
|
||||||
initIDs();
|
initIDs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AWTAccessor.setContainerAccessor(new AWTAccessor.ContainerAccessor() {
|
||||||
|
@Override
|
||||||
|
public void validateUnconditionally(Container cont) {
|
||||||
|
cont.validateUnconditionally();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1248,14 +1248,31 @@ public class Dialog extends Window {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Disables or enables decorations for this dialog.
|
* Disables or enables decorations for this dialog.
|
||||||
* This method can only be called while the dialog is not displayable.
|
* <p>
|
||||||
* @param undecorated <code>true</code> if no dialog decorations are
|
* This method can only be called while the dialog is not displayable. To
|
||||||
* to be enabled;
|
* make this dialog decorated, it must be opaque and have the default shape,
|
||||||
* <code>false</code> if dialog decorations are to be enabled.
|
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||||
* @throws <code>IllegalComponentStateException</code> if the dialog
|
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||||
* is displayable.
|
* Window#setBackground} for details
|
||||||
|
*
|
||||||
|
* @param undecorated {@code true} if no dialog decorations are to be
|
||||||
|
* enabled; {@code false} if dialog decorations are to be enabled
|
||||||
|
*
|
||||||
|
* @throws IllegalComponentStateException if the dialog is displayable
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this dialog does not have the default shape
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this dialog opacity is less than {@code 1.0f}
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and the alpha value of this dialog background
|
||||||
|
* color is less than {@code 1.0f}
|
||||||
|
*
|
||||||
* @see #isUndecorated
|
* @see #isUndecorated
|
||||||
* @see Component#isDisplayable
|
* @see Component#isDisplayable
|
||||||
|
* @see Window#getShape
|
||||||
|
* @see Window#getOpacity
|
||||||
|
* @see Window#getBackground
|
||||||
|
*
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public void setUndecorated(boolean undecorated) {
|
public void setUndecorated(boolean undecorated) {
|
||||||
@ -1264,6 +1281,18 @@ public class Dialog extends Window {
|
|||||||
if (isDisplayable()) {
|
if (isDisplayable()) {
|
||||||
throw new IllegalComponentStateException("The dialog is displayable.");
|
throw new IllegalComponentStateException("The dialog is displayable.");
|
||||||
}
|
}
|
||||||
|
if (!undecorated) {
|
||||||
|
if (getOpacity() < 1.0f) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is not opaque");
|
||||||
|
}
|
||||||
|
if (getShape() != null) {
|
||||||
|
throw new IllegalComponentStateException("The dialog does not have a default shape");
|
||||||
|
}
|
||||||
|
Color bg = getBackground();
|
||||||
|
if ((bg != null) && (bg.getAlpha() < 255)) {
|
||||||
|
throw new IllegalComponentStateException("The dialog background color is not opaque");
|
||||||
|
}
|
||||||
|
}
|
||||||
this.undecorated = undecorated;
|
this.undecorated = undecorated;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1280,6 +1309,45 @@ public class Dialog extends Window {
|
|||||||
return undecorated;
|
return undecorated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setOpacity(float opacity) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((opacity < 1.0f) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setOpacity(opacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setShape(Shape shape) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((shape != null) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setShape(shape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setBackground(Color bgColor) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The dialog is decorated");
|
||||||
|
}
|
||||||
|
super.setBackground(bgColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string representing the state of this dialog. This
|
* Returns a string representing the state of this dialog. This
|
||||||
* method is intended to be used only for debugging purposes, and the
|
* method is intended to be used only for debugging purposes, and the
|
||||||
|
@ -99,7 +99,7 @@ public class FileDialog extends Dialog {
|
|||||||
* Contains the File instances for all the files that the user selects.
|
* Contains the File instances for all the files that the user selects.
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
* @see getFiles
|
* @see #getFiles
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
private File[] files;
|
private File[] files;
|
||||||
|
@ -828,6 +828,11 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
return frame.state;
|
return frame.state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public Rectangle getMaximizedBounds(Frame frame) {
|
||||||
|
synchronized(frame.getObjectLock()) {
|
||||||
|
return frame.maximizedBounds;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -855,8 +860,10 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
* @see #getMaximizedBounds()
|
* @see #getMaximizedBounds()
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public synchronized void setMaximizedBounds(Rectangle bounds) {
|
public void setMaximizedBounds(Rectangle bounds) {
|
||||||
this.maximizedBounds = bounds;
|
synchronized(getObjectLock()) {
|
||||||
|
this.maximizedBounds = bounds;
|
||||||
|
}
|
||||||
FramePeer peer = (FramePeer)this.peer;
|
FramePeer peer = (FramePeer)this.peer;
|
||||||
if (peer != null) {
|
if (peer != null) {
|
||||||
peer.setMaximizedBounds(bounds);
|
peer.setMaximizedBounds(bounds);
|
||||||
@ -873,21 +880,40 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public Rectangle getMaximizedBounds() {
|
public Rectangle getMaximizedBounds() {
|
||||||
return maximizedBounds;
|
synchronized(getObjectLock()) {
|
||||||
|
return maximizedBounds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disables or enables decorations for this frame.
|
* Disables or enables decorations for this frame.
|
||||||
* This method can only be called while the frame is not displayable.
|
* <p>
|
||||||
* @param undecorated <code>true</code> if no frame decorations are
|
* This method can only be called while the frame is not displayable. To
|
||||||
* to be enabled;
|
* make this frame decorated, it must be opaque and have the default shape,
|
||||||
* <code>false</code> if frame decorations are to be enabled.
|
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||||
* @throws <code>IllegalComponentStateException</code> if the frame
|
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||||
* is displayable.
|
* Window#setBackground} for details
|
||||||
|
*
|
||||||
|
* @param undecorated {@code true} if no frame decorations are to be
|
||||||
|
* enabled; {@code false} if frame decorations are to be enabled
|
||||||
|
*
|
||||||
|
* @throws IllegalComponentStateException if the frame is displayable
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this frame does not have the default shape
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and this frame opacity is less than {@code 1.0f}
|
||||||
|
* @throws IllegalComponentStateException if {@code undecorated} is
|
||||||
|
* {@code false}, and the alpha value of this frame background
|
||||||
|
* color is less than {@code 1.0f}
|
||||||
|
*
|
||||||
* @see #isUndecorated
|
* @see #isUndecorated
|
||||||
* @see Component#isDisplayable
|
* @see Component#isDisplayable
|
||||||
|
* @see Window#getShape
|
||||||
|
* @see Window#getOpacity
|
||||||
|
* @see Window#getBackground
|
||||||
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
|
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
|
||||||
|
*
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public void setUndecorated(boolean undecorated) {
|
public void setUndecorated(boolean undecorated) {
|
||||||
@ -896,6 +922,18 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
if (isDisplayable()) {
|
if (isDisplayable()) {
|
||||||
throw new IllegalComponentStateException("The frame is displayable.");
|
throw new IllegalComponentStateException("The frame is displayable.");
|
||||||
}
|
}
|
||||||
|
if (!undecorated) {
|
||||||
|
if (getOpacity() < 1.0f) {
|
||||||
|
throw new IllegalComponentStateException("The frame is not opaque");
|
||||||
|
}
|
||||||
|
if (getShape() != null) {
|
||||||
|
throw new IllegalComponentStateException("The frame does not have a default shape");
|
||||||
|
}
|
||||||
|
Color bg = getBackground();
|
||||||
|
if ((bg != null) && (bg.getAlpha() < 255)) {
|
||||||
|
throw new IllegalComponentStateException("The frame background color is not opaque");
|
||||||
|
}
|
||||||
|
}
|
||||||
this.undecorated = undecorated;
|
this.undecorated = undecorated;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -912,6 +950,45 @@ public class Frame extends Window implements MenuContainer {
|
|||||||
return undecorated;
|
return undecorated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setOpacity(float opacity) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((opacity < 1.0f) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setOpacity(opacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setShape(Shape shape) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((shape != null) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setShape(shape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setBackground(Color bgColor) {
|
||||||
|
synchronized (getTreeLock()) {
|
||||||
|
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
|
||||||
|
throw new IllegalComponentStateException("The frame is decorated");
|
||||||
|
}
|
||||||
|
super.setBackground(bgColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the specified menu bar from this frame.
|
* Removes the specified menu bar from this frame.
|
||||||
* @param m the menu component to remove.
|
* @param m the menu component to remove.
|
||||||
|
@ -3474,14 +3474,20 @@ public class Window extends Container implements Accessible {
|
|||||||
* level of 0 may or may not disable the mouse event handling on this
|
* level of 0 may or may not disable the mouse event handling on this
|
||||||
* window. This is a platform-dependent behavior.
|
* window. This is a platform-dependent behavior.
|
||||||
* <p>
|
* <p>
|
||||||
* In order for this method to enable the translucency effect, the {@link
|
* The following conditions must be met in order to set the opacity value
|
||||||
* GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)} method must indicate that
|
* less than {@code 1.0f}:
|
||||||
* the {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
* <ul>
|
||||||
* translucency is supported.
|
* <li>The {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
||||||
|
* translucency must be supported by the underlying system
|
||||||
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
|
* and {@link Dialog#setUndecorated})
|
||||||
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
|
* </ul>
|
||||||
* <p>
|
* <p>
|
||||||
* Also note that the window must not be in the full-screen mode when
|
* If the requested opacity value is less than {@code 1.0f}, and any of the
|
||||||
* setting the opacity value < 1.0f. Otherwise the {@code
|
* above conditions are not met, the window opacity will not change,
|
||||||
* IllegalComponentStateException} is thrown.
|
* and the {@code IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* The translucency levels of individual pixels may also be effected by the
|
* The translucency levels of individual pixels may also be effected by the
|
||||||
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
||||||
@ -3491,15 +3497,20 @@ public class Window extends Container implements Accessible {
|
|||||||
*
|
*
|
||||||
* @throws IllegalArgumentException if the opacity is out of the range
|
* @throws IllegalArgumentException if the opacity is out of the range
|
||||||
* [0..1]
|
* [0..1]
|
||||||
|
* @throws IllegalComponentStateException if the window is decorated and
|
||||||
|
* the opacity is less than {@code 1.0f}
|
||||||
* @throws IllegalComponentStateException if the window is in full screen
|
* @throws IllegalComponentStateException if the window is in full screen
|
||||||
* mode, and the opacity is less than 1.0f
|
* mode, and the opacity is less than {@code 1.0f}
|
||||||
* @throws UnsupportedOperationException if the {@code
|
* @throws UnsupportedOperationException if the {@code
|
||||||
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
||||||
* translucency kind is not supported and the opacity is less than 1.0f
|
* translucency is not supported and the opacity is less than
|
||||||
|
* {@code 1.0f}
|
||||||
*
|
*
|
||||||
* @see Window#getOpacity
|
* @see Window#getOpacity
|
||||||
* @see Window#setBackground(Color)
|
* @see Window#setBackground(Color)
|
||||||
* @see Window#setShape(Shape)
|
* @see Window#setShape(Shape)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
*
|
*
|
||||||
@ -3557,24 +3568,26 @@ public class Window extends Container implements Accessible {
|
|||||||
/**
|
/**
|
||||||
* Sets the shape of the window.
|
* Sets the shape of the window.
|
||||||
* <p>
|
* <p>
|
||||||
* Setting a shape enables cutting off some parts of the window, leaving
|
* Setting a shape cuts off some parts of the window. Only the parts that
|
||||||
* visible and clickable only those parts belonging to the given shape
|
* belong to the given {@link Shape} remain visible and clickable. If
|
||||||
* (see {@link Shape}). If the shape argument is null, this methods
|
* the shape argument is {@code null}, this method restores the default
|
||||||
* restores the default shape (making the window rectangular on most
|
* shape, making the window rectangular on most platforms.
|
||||||
* platforms.)
|
|
||||||
* <p>
|
* <p>
|
||||||
* The following conditions must be met in order to set a non-null shape:
|
* The following conditions must be met to set a non-null shape:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
||||||
* PERPIXEL_TRANSPARENT} translucency kind must be supported by the
|
* PERPIXEL_TRANSPARENT} translucency must be supported by the
|
||||||
* underlying system
|
* underlying system
|
||||||
* <i>and</i>
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
* <li>The window must not be in the full-screen mode (see
|
* and {@link Dialog#setUndecorated})
|
||||||
* {@link GraphicsDevice#setFullScreenWindow(Window)})
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
* </ul>
|
* </ul>
|
||||||
* If a certain condition is not met, either the {@code
|
* <p>
|
||||||
* UnsupportedOperationException} or {@code IllegalComponentStateException}
|
* If the requested shape is not {@code null}, and any of the above
|
||||||
* is thrown.
|
* conditions are not met, the shape of this window will not change,
|
||||||
|
* and either the {@code UnsupportedOperationException} or {@code
|
||||||
|
* IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* The tranlucency levels of individual pixels may also be effected by the
|
* The tranlucency levels of individual pixels may also be effected by the
|
||||||
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
* alpha component of their color (see {@link Window#setBackground(Color)}) and the
|
||||||
@ -3584,6 +3597,8 @@ public class Window extends Container implements Accessible {
|
|||||||
* @param shape the shape to set to the window
|
* @param shape the shape to set to the window
|
||||||
*
|
*
|
||||||
* @throws IllegalComponentStateException if the shape is not {@code
|
* @throws IllegalComponentStateException if the shape is not {@code
|
||||||
|
* null} and the window is decorated
|
||||||
|
* @throws IllegalComponentStateException if the shape is not {@code
|
||||||
* null} and the window is in full-screen mode
|
* null} and the window is in full-screen mode
|
||||||
* @throws UnsupportedOperationException if the shape is not {@code
|
* @throws UnsupportedOperationException if the shape is not {@code
|
||||||
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
||||||
@ -3592,6 +3607,8 @@ public class Window extends Container implements Accessible {
|
|||||||
* @see Window#getShape()
|
* @see Window#getShape()
|
||||||
* @see Window#setBackground(Color)
|
* @see Window#setBackground(Color)
|
||||||
* @see Window#setOpacity(float)
|
* @see Window#setOpacity(float)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
*
|
*
|
||||||
@ -3645,37 +3662,46 @@ public class Window extends Container implements Accessible {
|
|||||||
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
|
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
|
||||||
* tranclucency, the alpha component of the given background color
|
* tranclucency, the alpha component of the given background color
|
||||||
* may effect the mode of operation for this window: it indicates whether
|
* may effect the mode of operation for this window: it indicates whether
|
||||||
* this window must be opaque (alpha == 1.0f) or per-pixel translucent
|
* this window must be opaque (alpha equals {@code 1.0f}) or per-pixel translucent
|
||||||
* (alpha < 1.0f). All the following conditions must be met in order
|
* (alpha is less than {@code 1.0f}). If the given background color is
|
||||||
* to be able to enable the per-pixel transparency mode for this window:
|
* {@code null}, the window is considered completely opaque.
|
||||||
|
* <p>
|
||||||
|
* All the following conditions must be met to enable the per-pixel
|
||||||
|
* transparency mode for this window:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||||
* PERPIXEL_TRANSLUCENT} translucency must be supported
|
* PERPIXEL_TRANSLUCENT} translucency must be supported by the graphics
|
||||||
* by the graphics device where this window is located <i>and</i>
|
* device where this window is located
|
||||||
* <li>The window must not be in the full-screen mode (see {@link
|
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
|
||||||
|
* and {@link Dialog#setUndecorated})
|
||||||
|
* <li>The window must not be in full-screen mode (see {@link
|
||||||
* GraphicsDevice#setFullScreenWindow(Window)})
|
* GraphicsDevice#setFullScreenWindow(Window)})
|
||||||
* </ul>
|
* </ul>
|
||||||
* If a certain condition is not met at the time of calling this method,
|
* <p>
|
||||||
* the alpha component of the given background color will not effect the
|
* If the alpha component of the requested background color is less than
|
||||||
* mode of operation for this window.
|
* {@code 1.0f}, and any of the above conditions are not met, the background
|
||||||
|
* color of this window will not change, the alpha component of the given
|
||||||
|
* background color will not affect the mode of operation for this window,
|
||||||
|
* and either the {@code UnsupportedOperationException} or {@code
|
||||||
|
* IllegalComponentStateException} will be thrown.
|
||||||
* <p>
|
* <p>
|
||||||
* When the window is per-pixel translucent, the drawing sub-system
|
* When the window is per-pixel translucent, the drawing sub-system
|
||||||
* respects the alpha value of each individual pixel. If a pixel gets
|
* respects the alpha value of each individual pixel. If a pixel gets
|
||||||
* painted with the alpha color component equal to zero, it becomes
|
* painted with the alpha color component equal to zero, it becomes
|
||||||
* visually transparent, if the alpha of the pixel is equal to 1.0f, the
|
* visually transparent. If the alpha of the pixel is equal to 1.0f, the
|
||||||
* pixel is fully opaque. Interim values of the alpha color component make
|
* pixel is fully opaque. Interim values of the alpha color component make
|
||||||
* the pixel semi-transparent. In this mode the background of the window
|
* the pixel semi-transparent. In this mode, the background of the window
|
||||||
* gets painted with the alpha value of the given background color (meaning
|
* gets painted with the alpha value of the given background color. If the
|
||||||
* that it is not painted at all if the alpha value of the argument of this
|
* alpha value of the argument of this method is equal to {@code 0}, the
|
||||||
* method is equal to zero.)
|
* background is not painted at all.
|
||||||
* <p>
|
* <p>
|
||||||
* The actual level of translucency of a given pixel also depends on window
|
* The actual level of translucency of a given pixel also depends on window
|
||||||
* opacity (see {@link #setOpacity(float)}), as well as the current shape of
|
* opacity (see {@link #setOpacity(float)}), as well as the current shape of
|
||||||
* this window (see {@link #setShape(Shape)}).
|
* this window (see {@link #setShape(Shape)}).
|
||||||
* <p>
|
* <p>
|
||||||
* Note that painting a pixel with the alpha value of 0 may or may not
|
* Note that painting a pixel with the alpha value of {@code 0} may or may
|
||||||
* disable the mouse event handling on this pixel. This is a
|
* not disable the mouse event handling on this pixel. This is a
|
||||||
* platform-dependent behavior. To make sure the mouse clicks do not get
|
* platform-dependent behavior. To make sure the mouse events do not get
|
||||||
* dispatched to a particular pixel, the pixel must be excluded from the
|
* dispatched to a particular pixel, the pixel must be excluded from the
|
||||||
* shape of the window.
|
* shape of the window.
|
||||||
* <p>
|
* <p>
|
||||||
@ -3685,17 +3711,21 @@ public class Window extends Container implements Accessible {
|
|||||||
* @param bgColor the color to become this window's background color.
|
* @param bgColor the color to become this window's background color.
|
||||||
*
|
*
|
||||||
* @throws IllegalComponentStateException if the alpha value of the given
|
* @throws IllegalComponentStateException if the alpha value of the given
|
||||||
* background color is less than 1.0f and the window is in
|
* background color is less than {@code 1.0f} and the window is decorated
|
||||||
|
* @throws IllegalComponentStateException if the alpha value of the given
|
||||||
|
* background color is less than {@code 1.0f} and the window is in
|
||||||
* full-screen mode
|
* full-screen mode
|
||||||
* @throws UnsupportedOperationException if the alpha value of the given
|
* @throws UnsupportedOperationException if the alpha value of the given
|
||||||
* background color is less than 1.0f and
|
* background color is less than {@code 1.0f} and {@link
|
||||||
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||||
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
||||||
*
|
*
|
||||||
* @see Window#getBackground
|
* @see Window#getBackground
|
||||||
* @see Window#isOpaque
|
* @see Window#isOpaque
|
||||||
* @see Window#setOpacity(float)
|
* @see Window#setOpacity(float)
|
||||||
* @see Window#setShape(Shape)
|
* @see Window#setShape(Shape)
|
||||||
|
* @see Frame#isUndecorated
|
||||||
|
* @see Dialog#isUndecorated
|
||||||
* @see GraphicsDevice.WindowTranslucency
|
* @see GraphicsDevice.WindowTranslucency
|
||||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||||
* @see GraphicsConfiguration#isTranslucencyCapable()
|
* @see GraphicsConfiguration#isTranslucencyCapable()
|
||||||
@ -3739,7 +3769,7 @@ public class Window extends Container implements Accessible {
|
|||||||
* <p>
|
* <p>
|
||||||
* The method returns {@code false} if the background color of the window
|
* The method returns {@code false} if the background color of the window
|
||||||
* is not {@code null} and the alpha component of the color is less than
|
* is not {@code null} and the alpha component of the color is less than
|
||||||
* 1.0f. The method returns {@code true} otherwise.
|
* {@code 1.0f}. The method returns {@code true} otherwise.
|
||||||
*
|
*
|
||||||
* @return {@code true} if the window is opaque, {@code false} otherwise
|
* @return {@code true} if the window is opaque, {@code false} otherwise
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -262,7 +262,23 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
/**
|
/**
|
||||||
* The Cham range with the Cham digits.
|
* The Cham range with the Cham digits.
|
||||||
*/
|
*/
|
||||||
CHAM ('\uaa50', '\uaa00', '\uaa60');
|
CHAM ('\uaa50', '\uaa00', '\uaa60'),
|
||||||
|
/**
|
||||||
|
* The Tai Tham Hora range with the Tai Tham Hora digits.
|
||||||
|
*/
|
||||||
|
TAI_THAM_HORA ('\u1a80', '\u1a20', '\u1ab0'),
|
||||||
|
/**
|
||||||
|
* The Tai Tham Tham range with the Tai Tham Tham digits.
|
||||||
|
*/
|
||||||
|
TAI_THAM_THAM ('\u1a90', '\u1a20', '\u1ab0'),
|
||||||
|
/**
|
||||||
|
* The Javanese range with the Javanese digits.
|
||||||
|
*/
|
||||||
|
JAVANESE ('\ua9d0', '\ua980', '\ua9e0'),
|
||||||
|
/**
|
||||||
|
* The Meetei Mayek range with the Meetei Mayek digits.
|
||||||
|
*/
|
||||||
|
MEETEI_MAYEK ('\uabf0', '\uabc0', '\uac00');
|
||||||
|
|
||||||
private static int toRangeIndex(Range script) {
|
private static int toRangeIndex(Range script) {
|
||||||
int index = script.ordinal();
|
int index = script.ordinal();
|
||||||
@ -592,10 +608,16 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x07a6, 0x07b1,
|
0x07a6, 0x07b1,
|
||||||
0x07eb, 0x07f4,
|
0x07eb, 0x07f4,
|
||||||
0x07f6, 0x07fa,
|
0x07f6, 0x07fa,
|
||||||
0x0901, 0x0903,
|
0x0816, 0x081a,
|
||||||
|
0x081b, 0x0824,
|
||||||
|
0x0825, 0x0828,
|
||||||
|
0x0829, 0x0830,
|
||||||
|
0x0859, 0x085e,
|
||||||
|
0x0900, 0x0903,
|
||||||
|
0x093a, 0x093b,
|
||||||
0x093c, 0x093d,
|
0x093c, 0x093d,
|
||||||
0x0941, 0x0949,
|
0x0941, 0x0949,
|
||||||
0x094d, 0x0950,
|
0x094d, 0x094e,
|
||||||
0x0951, 0x0958,
|
0x0951, 0x0958,
|
||||||
0x0962, 0x0964,
|
0x0962, 0x0964,
|
||||||
0x0981, 0x0982,
|
0x0981, 0x0982,
|
||||||
@ -604,7 +626,7 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x09cd, 0x09ce,
|
0x09cd, 0x09ce,
|
||||||
0x09e2, 0x09e6,
|
0x09e2, 0x09e6,
|
||||||
0x09f2, 0x09f4,
|
0x09f2, 0x09f4,
|
||||||
0x0a01, 0x0a03,
|
0x09fb, 0x0a03,
|
||||||
0x0a3c, 0x0a3e,
|
0x0a3c, 0x0a3e,
|
||||||
0x0a41, 0x0a59,
|
0x0a41, 0x0a59,
|
||||||
0x0a70, 0x0a72,
|
0x0a70, 0x0a72,
|
||||||
@ -630,9 +652,8 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x0cbc, 0x0cbd,
|
0x0cbc, 0x0cbd,
|
||||||
0x0ccc, 0x0cd5,
|
0x0ccc, 0x0cd5,
|
||||||
0x0ce2, 0x0ce6,
|
0x0ce2, 0x0ce6,
|
||||||
0x0cf1, 0x0d02,
|
|
||||||
0x0d41, 0x0d46,
|
0x0d41, 0x0d46,
|
||||||
0x0d4d, 0x0d57,
|
0x0d4d, 0x0d4e,
|
||||||
0x0d62, 0x0d66,
|
0x0d62, 0x0d66,
|
||||||
0x0dca, 0x0dcf,
|
0x0dca, 0x0dcf,
|
||||||
0x0dd2, 0x0dd8,
|
0x0dd2, 0x0dd8,
|
||||||
@ -649,7 +670,7 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x0f71, 0x0f7f,
|
0x0f71, 0x0f7f,
|
||||||
0x0f80, 0x0f85,
|
0x0f80, 0x0f85,
|
||||||
0x0f86, 0x0f88,
|
0x0f86, 0x0f88,
|
||||||
0x0f90, 0x0fbe,
|
0x0f8d, 0x0fbe,
|
||||||
0x0fc6, 0x0fc7,
|
0x0fc6, 0x0fc7,
|
||||||
0x102d, 0x1031,
|
0x102d, 0x1031,
|
||||||
0x1032, 0x1038,
|
0x1032, 0x1038,
|
||||||
@ -661,8 +682,10 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x1082, 0x1083,
|
0x1082, 0x1083,
|
||||||
0x1085, 0x1087,
|
0x1085, 0x1087,
|
||||||
0x108d, 0x108e,
|
0x108d, 0x108e,
|
||||||
0x135f, 0x1360,
|
0x109d, 0x109e,
|
||||||
|
0x135d, 0x1360,
|
||||||
0x1390, 0x13a0,
|
0x1390, 0x13a0,
|
||||||
|
0x1400, 0x1401,
|
||||||
0x1680, 0x1681,
|
0x1680, 0x1681,
|
||||||
0x169b, 0x16a0,
|
0x169b, 0x16a0,
|
||||||
0x1712, 0x1720,
|
0x1712, 0x1720,
|
||||||
@ -682,6 +705,11 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x1939, 0x1946,
|
0x1939, 0x1946,
|
||||||
0x19de, 0x1a00,
|
0x19de, 0x1a00,
|
||||||
0x1a17, 0x1a19,
|
0x1a17, 0x1a19,
|
||||||
|
0x1a56, 0x1a57,
|
||||||
|
0x1a58, 0x1a61,
|
||||||
|
0x1a62, 0x1a63,
|
||||||
|
0x1a65, 0x1a6d,
|
||||||
|
0x1a73, 0x1a80,
|
||||||
0x1b00, 0x1b04,
|
0x1b00, 0x1b04,
|
||||||
0x1b34, 0x1b35,
|
0x1b34, 0x1b35,
|
||||||
0x1b36, 0x1b3b,
|
0x1b36, 0x1b3b,
|
||||||
@ -691,8 +719,16 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x1b80, 0x1b82,
|
0x1b80, 0x1b82,
|
||||||
0x1ba2, 0x1ba6,
|
0x1ba2, 0x1ba6,
|
||||||
0x1ba8, 0x1baa,
|
0x1ba8, 0x1baa,
|
||||||
|
0x1be6, 0x1be7,
|
||||||
|
0x1be8, 0x1bea,
|
||||||
|
0x1bed, 0x1bee,
|
||||||
|
0x1bef, 0x1bf2,
|
||||||
0x1c2c, 0x1c34,
|
0x1c2c, 0x1c34,
|
||||||
0x1c36, 0x1c3b,
|
0x1c36, 0x1c3b,
|
||||||
|
0x1cd0, 0x1cd3,
|
||||||
|
0x1cd4, 0x1ce1,
|
||||||
|
0x1ce2, 0x1ce9,
|
||||||
|
0x1ced, 0x1cee,
|
||||||
0x1dc0, 0x1e00,
|
0x1dc0, 0x1e00,
|
||||||
0x1fbd, 0x1fbe,
|
0x1fbd, 0x1fbe,
|
||||||
0x1fbf, 0x1fc2,
|
0x1fbf, 0x1fc2,
|
||||||
@ -716,14 +752,16 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x213a, 0x213c,
|
0x213a, 0x213c,
|
||||||
0x2140, 0x2145,
|
0x2140, 0x2145,
|
||||||
0x214a, 0x214e,
|
0x214a, 0x214e,
|
||||||
0x2153, 0x2160,
|
0x2150, 0x2160,
|
||||||
0x2190, 0x2336,
|
0x2189, 0x2336,
|
||||||
0x237b, 0x2395,
|
0x237b, 0x2395,
|
||||||
0x2396, 0x249c,
|
0x2396, 0x249c,
|
||||||
0x24ea, 0x26ac,
|
0x24ea, 0x26ac,
|
||||||
0x26ad, 0x2800,
|
0x26ad, 0x2800,
|
||||||
0x2900, 0x2c00,
|
0x2900, 0x2c00,
|
||||||
0x2ce5, 0x2d00,
|
0x2ce5, 0x2ceb,
|
||||||
|
0x2cef, 0x2d00,
|
||||||
|
0x2d7f, 0x2d80,
|
||||||
0x2de0, 0x3005,
|
0x2de0, 0x3005,
|
||||||
0x3008, 0x3021,
|
0x3008, 0x3021,
|
||||||
0x302a, 0x3031,
|
0x302a, 0x3031,
|
||||||
@ -742,25 +780,40 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x33de, 0x33e0,
|
0x33de, 0x33e0,
|
||||||
0x33ff, 0x3400,
|
0x33ff, 0x3400,
|
||||||
0x4dc0, 0x4e00,
|
0x4dc0, 0x4e00,
|
||||||
0xa490, 0xa500,
|
0xa490, 0xa4d0,
|
||||||
0xa60d, 0xa610,
|
0xa60d, 0xa610,
|
||||||
0xa66f, 0xa680,
|
0xa66f, 0xa680,
|
||||||
|
0xa6f0, 0xa6f2,
|
||||||
0xa700, 0xa722,
|
0xa700, 0xa722,
|
||||||
0xa788, 0xa789,
|
0xa788, 0xa789,
|
||||||
0xa802, 0xa803,
|
0xa802, 0xa803,
|
||||||
0xa806, 0xa807,
|
0xa806, 0xa807,
|
||||||
0xa80b, 0xa80c,
|
0xa80b, 0xa80c,
|
||||||
0xa825, 0xa827,
|
0xa825, 0xa827,
|
||||||
0xa828, 0xa840,
|
0xa828, 0xa830,
|
||||||
|
0xa838, 0xa840,
|
||||||
0xa874, 0xa880,
|
0xa874, 0xa880,
|
||||||
0xa8c4, 0xa8ce,
|
0xa8c4, 0xa8ce,
|
||||||
|
0xa8e0, 0xa8f2,
|
||||||
0xa926, 0xa92e,
|
0xa926, 0xa92e,
|
||||||
0xa947, 0xa952,
|
0xa947, 0xa952,
|
||||||
|
0xa980, 0xa983,
|
||||||
|
0xa9b3, 0xa9b4,
|
||||||
|
0xa9b6, 0xa9ba,
|
||||||
|
0xa9bc, 0xa9bd,
|
||||||
0xaa29, 0xaa2f,
|
0xaa29, 0xaa2f,
|
||||||
0xaa31, 0xaa33,
|
0xaa31, 0xaa33,
|
||||||
0xaa35, 0xaa40,
|
0xaa35, 0xaa40,
|
||||||
0xaa43, 0xaa44,
|
0xaa43, 0xaa44,
|
||||||
0xaa4c, 0xaa4d,
|
0xaa4c, 0xaa4d,
|
||||||
|
0xaab0, 0xaab1,
|
||||||
|
0xaab2, 0xaab5,
|
||||||
|
0xaab7, 0xaab9,
|
||||||
|
0xaabe, 0xaac0,
|
||||||
|
0xaac1, 0xaac2,
|
||||||
|
0xabe5, 0xabe6,
|
||||||
|
0xabe8, 0xabe9,
|
||||||
|
0xabed, 0xabf0,
|
||||||
0xfb1e, 0xfb1f,
|
0xfb1e, 0xfb1f,
|
||||||
0xfb29, 0xfb2a,
|
0xfb29, 0xfb2a,
|
||||||
0xfd3e, 0xfd50,
|
0xfd3e, 0xfd50,
|
||||||
@ -775,12 +828,28 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
0x1091f, 0x10920,
|
0x1091f, 0x10920,
|
||||||
0x10a01, 0x10a10,
|
0x10a01, 0x10a10,
|
||||||
0x10a38, 0x10a40,
|
0x10a38, 0x10a40,
|
||||||
|
0x10b39, 0x10b40,
|
||||||
|
0x10e60, 0x11000,
|
||||||
|
0x11001, 0x11002,
|
||||||
|
0x11038, 0x11047,
|
||||||
|
0x11052, 0x11066,
|
||||||
|
0x11080, 0x11082,
|
||||||
|
0x110b3, 0x110b7,
|
||||||
|
0x110b9, 0x110bb,
|
||||||
0x1d167, 0x1d16a,
|
0x1d167, 0x1d16a,
|
||||||
0x1d173, 0x1d183,
|
0x1d173, 0x1d183,
|
||||||
0x1d185, 0x1d18c,
|
0x1d185, 0x1d18c,
|
||||||
0x1d1aa, 0x1d1ae,
|
0x1d1aa, 0x1d1ae,
|
||||||
0x1d200, 0x1d360,
|
0x1d200, 0x1d360,
|
||||||
0x1d7ce, 0x20000,
|
0x1d6db, 0x1d6dc,
|
||||||
|
0x1d715, 0x1d716,
|
||||||
|
0x1d74f, 0x1d750,
|
||||||
|
0x1d789, 0x1d78a,
|
||||||
|
0x1d7c3, 0x1d7c4,
|
||||||
|
0x1d7ce, 0x1f110,
|
||||||
|
0x1f300, 0x1f48c,
|
||||||
|
0x1f48d, 0x1f524,
|
||||||
|
0x1f525, 0x20000,
|
||||||
0xe0001, 0xf0000,
|
0xe0001, 0xf0000,
|
||||||
0x10fffe, 0x10ffff // sentinel
|
0x10fffe, 0x10ffff // sentinel
|
||||||
};
|
};
|
||||||
@ -947,6 +1016,14 @@ public final class NumericShaper implements java.io.Serializable {
|
|||||||
&& rangeSet.contains(Range.ARABIC)) {
|
&& rangeSet.contains(Range.ARABIC)) {
|
||||||
rangeSet.remove(Range.ARABIC);
|
rangeSet.remove(Range.ARABIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As well as the above case, give precedance to TAI_THAM_THAM if both
|
||||||
|
// TAI_THAM_HORA and TAI_THAM_THAM are specified.
|
||||||
|
if (rangeSet.contains(Range.TAI_THAM_THAM)
|
||||||
|
&& rangeSet.contains(Range.TAI_THAM_HORA)) {
|
||||||
|
rangeSet.remove(Range.TAI_THAM_HORA);
|
||||||
|
}
|
||||||
|
|
||||||
rangeArray = rangeSet.toArray(new Range[rangeSet.size()]);
|
rangeArray = rangeSet.toArray(new Range[rangeSet.size()]);
|
||||||
if (rangeArray.length > BSEARCH_THRESHOLD) {
|
if (rangeArray.length > BSEARCH_THRESHOLD) {
|
||||||
// sort rangeArray for binary search
|
// sort rangeArray for binary search
|
||||||
|
@ -29,6 +29,8 @@ import com.sun.beans.WeakCache;
|
|||||||
import com.sun.beans.finder.BeanInfoFinder;
|
import com.sun.beans.finder.BeanInfoFinder;
|
||||||
import com.sun.beans.finder.ClassFinder;
|
import com.sun.beans.finder.ClassFinder;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
import java.lang.ref.SoftReference;
|
import java.lang.ref.SoftReference;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -39,6 +41,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.EventListener;
|
import java.util.EventListener;
|
||||||
|
import java.util.EventObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
@ -1234,7 +1237,23 @@ public class Introspector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// OK, fabricate a default BeanDescriptor.
|
// OK, fabricate a default BeanDescriptor.
|
||||||
return (new BeanDescriptor(beanClass));
|
return new BeanDescriptor(this.beanClass, findCustomizerClass(this.beanClass));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Class<?> findCustomizerClass(Class<?> type) {
|
||||||
|
String name = type.getName() + "Customizer";
|
||||||
|
try {
|
||||||
|
type = ClassFinder.findClass(name, type.getClassLoader());
|
||||||
|
// Each customizer should inherit java.awt.Component and implement java.beans.Customizer
|
||||||
|
// according to the section 9.3 of JavaBeans specification
|
||||||
|
if (Component.class.isAssignableFrom(type) && Customizer.class.isAssignableFrom(type)) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception) {
|
||||||
|
// ignore any exceptions
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEventHandler(Method m) {
|
private boolean isEventHandler(Method m) {
|
||||||
@ -1244,10 +1263,7 @@ public class Introspector {
|
|||||||
if (argTypes.length != 1) {
|
if (argTypes.length != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isSubclass(argTypes[0], java.util.EventObject.class)) {
|
return isSubclass(argTypes[0], EventObject.class);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
|
|||||||
* or an I/O error occurs.
|
* or an I/O error occurs.
|
||||||
*/
|
*/
|
||||||
public synchronized int available() throws IOException {
|
public synchronized int available() throws IOException {
|
||||||
return getInIfOpen().available() + (count - pos);
|
int n = count - pos;
|
||||||
|
int avail = getInIfOpen().available();
|
||||||
|
return n > (Integer.MAX_VALUE - avail)
|
||||||
|
? Integer.MAX_VALUE
|
||||||
|
: n + avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
|
|||||||
*/
|
*/
|
||||||
public int available() throws IOException {
|
public int available() throws IOException {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
return (buf.length - pos) + super.available();
|
int n = buf.length - pos;
|
||||||
|
int avail = super.available();
|
||||||
|
return n > (Integer.MAX_VALUE - avail)
|
||||||
|
? Integer.MAX_VALUE
|
||||||
|
: n + avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -44,11 +44,11 @@ public interface Readable {
|
|||||||
* rewinding of the buffer is performed.
|
* rewinding of the buffer is performed.
|
||||||
*
|
*
|
||||||
* @param cb the buffer to read characters into
|
* @param cb the buffer to read characters into
|
||||||
* @return @return The number of <tt>char</tt> values added to the buffer,
|
* @return The number of {@code char} values added to the buffer,
|
||||||
* or -1 if this source of characters is at its end
|
* or -1 if this source of characters is at its end
|
||||||
* @throws IOException if an I/O error occurs
|
* @throws IOException if an I/O error occurs
|
||||||
* @throws NullPointerException if cb is null
|
* @throws NullPointerException if cb is null
|
||||||
* @throws ReadOnlyBufferException if cb is a read only buffer
|
* @throws java.nio.ReadOnlyBufferException if cb is a read only buffer
|
||||||
*/
|
*/
|
||||||
public int read(java.nio.CharBuffer cb) throws IOException;
|
public int read(java.nio.CharBuffer cb) throws IOException;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class StringCharBuffer // package-private
|
|||||||
0,
|
0,
|
||||||
this.remaining(),
|
this.remaining(),
|
||||||
this.remaining(),
|
this.remaining(),
|
||||||
this.position());
|
offset + this.position());
|
||||||
}
|
}
|
||||||
|
|
||||||
private StringCharBuffer(CharSequence s,
|
private StringCharBuffer(CharSequence s,
|
||||||
|
@ -110,7 +110,8 @@ import java.nio.ByteBuffer;
|
|||||||
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
|
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
|
||||||
* operation is not defined. Buffers should be discarded or at least care must
|
* operation is not defined. Buffers should be discarded or at least care must
|
||||||
* be taken to ensure that the buffers are not accessed while the channel remains
|
* be taken to ensure that the buffers are not accessed while the channel remains
|
||||||
* open.
|
* open. All methods that accept timeout parameters treat values less than or
|
||||||
|
* equal to zero to mean that the I/O operation does not timeout.
|
||||||
*
|
*
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
@ -367,7 +368,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param dst
|
* @param dst
|
||||||
* The buffer into which bytes are to be transferred
|
* The buffer into which bytes are to be transferred
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -376,8 +377,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The handler for consuming the result
|
* The handler for consuming the result
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
* If the {@code timeout} parameter is negative or the buffer is
|
* If the buffer is read-only
|
||||||
* read-only
|
|
||||||
* @throws ReadPendingException
|
* @throws ReadPendingException
|
||||||
* If a read operation is already in progress on this channel
|
* If a read operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -471,7 +471,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The maximum number of buffers to be accessed; must be non-negative
|
* The maximum number of buffers to be accessed; must be non-negative
|
||||||
* and no larger than {@code dsts.length - offset}
|
* and no larger than {@code dsts.length - offset}
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -483,8 +483,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* If the pre-conditions for the {@code offset} and {@code length}
|
* If the pre-conditions for the {@code offset} and {@code length}
|
||||||
* parameter aren't met
|
* parameter aren't met
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
* If the {@code timeout} parameter is negative, or a buffer is
|
* If the buffer is read-only
|
||||||
* read-only
|
|
||||||
* @throws ReadPendingException
|
* @throws ReadPendingException
|
||||||
* If a read operation is already in progress on this channel
|
* If a read operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -524,7 +523,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param src
|
* @param src
|
||||||
* The buffer from which bytes are to be retrieved
|
* The buffer from which bytes are to be retrieved
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -532,8 +531,6 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @param handler
|
* @param handler
|
||||||
* The handler for consuming the result
|
* The handler for consuming the result
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* If the {@code timeout} parameter is negative
|
|
||||||
* @throws WritePendingException
|
* @throws WritePendingException
|
||||||
* If a write operation is already in progress on this channel
|
* If a write operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
@ -623,7 +620,7 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* The maximum number of buffers to be accessed; must be non-negative
|
* The maximum number of buffers to be accessed; must be non-negative
|
||||||
* and no larger than {@code srcs.length - offset}
|
* and no larger than {@code srcs.length - offset}
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* The timeout, or {@code 0L} for no timeout
|
* The maximum time for the I/O operation to complete
|
||||||
* @param unit
|
* @param unit
|
||||||
* The time unit of the {@code timeout} argument
|
* The time unit of the {@code timeout} argument
|
||||||
* @param attachment
|
* @param attachment
|
||||||
@ -634,8 +631,6 @@ public abstract class AsynchronousSocketChannel
|
|||||||
* @throws IndexOutOfBoundsException
|
* @throws IndexOutOfBoundsException
|
||||||
* If the pre-conditions for the {@code offset} and {@code length}
|
* If the pre-conditions for the {@code offset} and {@code length}
|
||||||
* parameter aren't met
|
* parameter aren't met
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* If the {@code timeout} parameter is negative
|
|
||||||
* @throws WritePendingException
|
* @throws WritePendingException
|
||||||
* If a write operation is already in progress on this channel
|
* If a write operation is already in progress on this channel
|
||||||
* @throws NotYetConnectedException
|
* @throws NotYetConnectedException
|
||||||
|
@ -84,7 +84,7 @@ import java.security.*;
|
|||||||
* {@code setJNDIContext} and {@code setLogger}</td>
|
* {@code setJNDIContext} and {@code setLogger}</td>
|
||||||
* <td>Permits an application to specify the JNDI context from which the
|
* <td>Permits an application to specify the JNDI context from which the
|
||||||
* {@code SyncProvider} implementations can be retrieved from and the logging
|
* {@code SyncProvider} implementations can be retrieved from and the logging
|
||||||
* object to be used by the{@codeSyncProvider} implementation.</td>
|
* object to be used by the {@code SyncProvider} implementation.</td>
|
||||||
* </tr>
|
* </tr>
|
||||||
*
|
*
|
||||||
* <tr>
|
* <tr>
|
||||||
|
@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
|
|||||||
* instance of the Java virtual machine.
|
* instance of the Java virtual machine.
|
||||||
*
|
*
|
||||||
* <tr><td valign="top">{@code 'Z'}
|
* <tr><td valign="top">{@code 'Z'}
|
||||||
|
* <td valign="top"> <tt>'\u005a'</tt>
|
||||||
* <td> A string representing the abbreviation for the time zone. This
|
* <td> A string representing the abbreviation for the time zone. This
|
||||||
* value will be adjusted as necessary for Daylight Saving Time. For
|
* value will be adjusted as necessary for Daylight Saving Time. For
|
||||||
* {@code long}, {@link Long}, and {@link Date} the time zone used is
|
* {@code long}, {@link Long}, and {@link Date} the time zone used is
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
|
|
||||||
package java.util.spi;
|
package java.util.spi;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Currency;
|
import java.util.Currency;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,6 +97,23 @@ public abstract class CurrencyNameProvider extends LocaleServiceProvider {
|
|||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether the currencyCode is valid
|
||||||
|
char[] charray = currencyCode.toCharArray();
|
||||||
|
if (charray.length != 3) {
|
||||||
|
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
|
||||||
|
}
|
||||||
|
for (char c : charray) {
|
||||||
|
if (c < 'A' || c > 'Z') {
|
||||||
|
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check whether the locale is valid
|
||||||
|
List<Locale> avail = Arrays.asList(getAvailableLocales());
|
||||||
|
if (!avail.contains(locale)) {
|
||||||
|
throw new IllegalArgumentException("The locale is not available");
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,9 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider {
|
|||||||
* @see java.util.Locale#getDisplayScript(java.util.Locale)
|
* @see java.util.Locale#getDisplayScript(java.util.Locale)
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
public abstract String getDisplayScript(String scriptCode, Locale locale);
|
public String getDisplayScript(String scriptCode, Locale locale) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
|
* Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
package javax.security.auth;
|
package javax.security.auth;
|
||||||
|
|
||||||
|
import java.security.Security;
|
||||||
|
import sun.security.util.Debug;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p> This is an abstract class for representing the system policy for
|
* <p> This is an abstract class for representing the system policy for
|
||||||
* Subject-based authorization. A subclass implementation
|
* Subject-based authorization. A subclass implementation
|
||||||
@ -159,6 +162,10 @@ public abstract class Policy {
|
|||||||
private static Policy policy;
|
private static Policy policy;
|
||||||
private static ClassLoader contextClassLoader;
|
private static ClassLoader contextClassLoader;
|
||||||
|
|
||||||
|
// true if a custom (not com.sun.security.auth.PolicyFile) system-wide
|
||||||
|
// policy object is set
|
||||||
|
private static boolean isCustomPolicy;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
contextClassLoader = java.security.AccessController.doPrivileged
|
contextClassLoader = java.security.AccessController.doPrivileged
|
||||||
(new java.security.PrivilegedAction<ClassLoader>() {
|
(new java.security.PrivilegedAction<ClassLoader>() {
|
||||||
@ -234,6 +241,8 @@ public abstract class Policy {
|
|||||||
contextClassLoader).newInstance();
|
contextClassLoader).newInstance();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
isCustomPolicy =
|
||||||
|
!finalClass.equals("com.sun.security.auth.PolicyFile");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new SecurityException
|
throw new SecurityException
|
||||||
(sun.security.util.ResourcesMgr.getString
|
(sun.security.util.ResourcesMgr.getString
|
||||||
@ -265,6 +274,46 @@ public abstract class Policy {
|
|||||||
java.lang.SecurityManager sm = System.getSecurityManager();
|
java.lang.SecurityManager sm = System.getSecurityManager();
|
||||||
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
|
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
|
||||||
Policy.policy = policy;
|
Policy.policy = policy;
|
||||||
|
// all non-null policy objects are assumed to be custom
|
||||||
|
isCustomPolicy = policy != null ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if a custom (not com.sun.security.auth.PolicyFile)
|
||||||
|
* system-wide policy object has been set or installed. This method is
|
||||||
|
* called by SubjectDomainCombiner to provide backwards compatibility for
|
||||||
|
* developers that provide their own javax.security.auth.Policy
|
||||||
|
* implementations.
|
||||||
|
*
|
||||||
|
* @return true if a custom (not com.sun.security.auth.PolicyFile)
|
||||||
|
* system-wide policy object has been set; false otherwise
|
||||||
|
*/
|
||||||
|
static boolean isCustomPolicySet(Debug debug) {
|
||||||
|
if (policy != null) {
|
||||||
|
if (debug != null && isCustomPolicy) {
|
||||||
|
debug.println("Providing backwards compatibility for " +
|
||||||
|
"javax.security.auth.policy implementation: " +
|
||||||
|
policy.toString());
|
||||||
|
}
|
||||||
|
return isCustomPolicy;
|
||||||
|
}
|
||||||
|
// check if custom policy has been set using auth.policy.provider prop
|
||||||
|
String policyClass = java.security.AccessController.doPrivileged
|
||||||
|
(new java.security.PrivilegedAction<String>() {
|
||||||
|
public String run() {
|
||||||
|
return Security.getProperty("auth.policy.provider");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (policyClass != null
|
||||||
|
&& !policyClass.equals("com.sun.security.auth.PolicyFile")) {
|
||||||
|
if (debug != null) {
|
||||||
|
debug.println("Providing backwards compatibility for " +
|
||||||
|
"javax.security.auth.policy implementation: " +
|
||||||
|
policyClass);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -26,8 +26,6 @@
|
|||||||
package javax.security.auth;
|
package javax.security.auth;
|
||||||
|
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.AccessControlContext;
|
|
||||||
import java.security.AllPermission;
|
|
||||||
import java.security.Permission;
|
import java.security.Permission;
|
||||||
import java.security.Permissions;
|
import java.security.Permissions;
|
||||||
import java.security.PermissionCollection;
|
import java.security.PermissionCollection;
|
||||||
@ -35,10 +33,8 @@ import java.security.Policy;
|
|||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
import java.security.ProtectionDomain;
|
import java.security.ProtectionDomain;
|
||||||
import java.lang.ClassLoader;
|
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
@ -61,7 +57,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
"\t[SubjectDomainCombiner]");
|
"\t[SubjectDomainCombiner]");
|
||||||
|
|
||||||
// Note: check only at classloading time, not dynamically during combine()
|
// Note: check only at classloading time, not dynamically during combine()
|
||||||
private static final boolean useJavaxPolicy = compatPolicy();
|
private static final boolean useJavaxPolicy =
|
||||||
|
javax.security.auth.Policy.isCustomPolicySet(debug);
|
||||||
|
|
||||||
// Relevant only when useJavaxPolicy is true
|
// Relevant only when useJavaxPolicy is true
|
||||||
private static final boolean allowCaching =
|
private static final boolean allowCaching =
|
||||||
@ -202,8 +199,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maintain backwards compatibility for people who provide
|
// maintain backwards compatibility for developers who provide
|
||||||
// their own javax.security.auth.Policy implementations
|
// their own custom javax.security.auth.Policy implementations
|
||||||
if (useJavaxPolicy) {
|
if (useJavaxPolicy) {
|
||||||
return combineJavaxPolicy(currentDomains, assignedDomains);
|
return combineJavaxPolicy(currentDomains, assignedDomains);
|
||||||
}
|
}
|
||||||
@ -476,8 +473,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
String s = AccessController.doPrivileged
|
String s = AccessController.doPrivileged
|
||||||
(new PrivilegedAction<String>() {
|
(new PrivilegedAction<String>() {
|
||||||
public String run() {
|
public String run() {
|
||||||
return java.security.Security.getProperty
|
return Security.getProperty("cache.auth.policy");
|
||||||
("cache.auth.policy");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
@ -488,29 +484,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// maintain backwards compatibility for people who provide
|
|
||||||
// their own javax.security.auth.Policy implementations
|
|
||||||
private static boolean compatPolicy() {
|
|
||||||
javax.security.auth.Policy javaxPolicy = AccessController.doPrivileged
|
|
||||||
(new PrivilegedAction<javax.security.auth.Policy>() {
|
|
||||||
public javax.security.auth.Policy run() {
|
|
||||||
return javax.security.auth.Policy.getPolicy();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!(javaxPolicy instanceof com.sun.security.auth.PolicyFile)) {
|
|
||||||
if (debug != null) {
|
|
||||||
debug.println("Providing backwards compatibility for " +
|
|
||||||
"javax.security.auth.policy implementation: " +
|
|
||||||
javaxPolicy.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void printInputDomains(ProtectionDomain[] currentDomains,
|
private static void printInputDomains(ProtectionDomain[] currentDomains,
|
||||||
ProtectionDomain[] assignedDomains) {
|
ProtectionDomain[] assignedDomains) {
|
||||||
if (currentDomains == null || currentDomains.length == 0) {
|
if (currentDomains == null || currentDomains.length == 0) {
|
||||||
|
@ -1379,6 +1379,10 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
|
|||||||
* If <code>true</code> and the button has a border,
|
* If <code>true</code> and the button has a border,
|
||||||
* the border is painted. The default value for the
|
* the border is painted. The default value for the
|
||||||
* <code>borderPainted</code> property is <code>true</code>.
|
* <code>borderPainted</code> property is <code>true</code>.
|
||||||
|
* <p/>
|
||||||
|
* Some look and feels might not support
|
||||||
|
* the <code>borderPainted</code> property,
|
||||||
|
* in which case they ignore this.
|
||||||
*
|
*
|
||||||
* @param b if true and border property is not <code>null</code>,
|
* @param b if true and border property is not <code>null</code>,
|
||||||
* the border is painted
|
* the border is painted
|
||||||
|
@ -273,7 +273,7 @@ public class BorderFactory
|
|||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) {
|
public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) {
|
||||||
return new BevelBorder(type, highlight, shadow);
|
return new SoftBevelBorder(type, highlight, shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -295,7 +295,7 @@ public class BorderFactory
|
|||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) {
|
public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) {
|
||||||
return new BevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
|
return new SoftBevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
|
||||||
}
|
}
|
||||||
|
|
||||||
//// EtchedBorder ///////////////////////////////////////////////////////////
|
//// EtchedBorder ///////////////////////////////////////////////////////////
|
||||||
|
@ -322,7 +322,7 @@ public final class JLayer<V extends Component>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A non-{@code null] border, or non-zero insets, isn't supported, to prevent the geometry
|
* A non-{@code null} border, or non-zero insets, isn't supported, to prevent the geometry
|
||||||
* of this component from becoming complex enough to inhibit
|
* of this component from becoming complex enough to inhibit
|
||||||
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
|
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
|
||||||
* add it to a {@code JPanel} that has a border.
|
* add it to a {@code JPanel} that has a border.
|
||||||
@ -373,8 +373,12 @@ public final class JLayer<V extends Component>
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public void removeAll() {
|
public void removeAll() {
|
||||||
setView(null);
|
if (view != null) {
|
||||||
setGlassPane(null);
|
setView(null);
|
||||||
|
}
|
||||||
|
if (glassPane != null) {
|
||||||
|
setGlassPane(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1443,6 +1443,10 @@ public class JTabbedPane extends JComponent
|
|||||||
* which can be <code>null</code>, in which case the tab's background color
|
* which can be <code>null</code>, in which case the tab's background color
|
||||||
* will default to the background color of the <code>tabbedpane</code>.
|
* will default to the background color of the <code>tabbedpane</code>.
|
||||||
* An internal exception is raised if there is no tab at that index.
|
* An internal exception is raised if there is no tab at that index.
|
||||||
|
* <p/>
|
||||||
|
* It is up to the look and feel to honor this property, some may
|
||||||
|
* choose to ignore it.
|
||||||
|
*
|
||||||
* @param index the tab index where the background should be set
|
* @param index the tab index where the background should be set
|
||||||
* @param background the color to be displayed in the tab's background
|
* @param background the color to be displayed in the tab's background
|
||||||
* @exception IndexOutOfBoundsException if index is out of range
|
* @exception IndexOutOfBoundsException if index is out of range
|
||||||
@ -1472,6 +1476,9 @@ public class JTabbedPane extends JComponent
|
|||||||
* <code>null</code>, in which case the tab's foreground color
|
* <code>null</code>, in which case the tab's foreground color
|
||||||
* will default to the foreground color of this <code>tabbedpane</code>.
|
* will default to the foreground color of this <code>tabbedpane</code>.
|
||||||
* An internal exception is raised if there is no tab at that index.
|
* An internal exception is raised if there is no tab at that index.
|
||||||
|
* <p/>
|
||||||
|
* It is up to the look and feel to honor this property, some may
|
||||||
|
* choose to ignore it.
|
||||||
*
|
*
|
||||||
* @param index the tab index where the foreground should be set
|
* @param index the tab index where the foreground should be set
|
||||||
* @param foreground the color to be displayed as the tab's foreground
|
* @param foreground the color to be displayed as the tab's foreground
|
||||||
|
@ -165,11 +165,11 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* @param titlePosition the position for the title
|
* @param titlePosition the position for the title
|
||||||
*/
|
*/
|
||||||
public TitledBorder(Border border,
|
public TitledBorder(Border border,
|
||||||
String title,
|
String title,
|
||||||
int titleJustification,
|
int titleJustification,
|
||||||
int titlePosition) {
|
int titlePosition) {
|
||||||
this(border, title, titleJustification,
|
this(border, title, titleJustification,
|
||||||
titlePosition, null, null);
|
titlePosition, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -183,12 +183,12 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* @param titleFont the font for rendering the title
|
* @param titleFont the font for rendering the title
|
||||||
*/
|
*/
|
||||||
public TitledBorder(Border border,
|
public TitledBorder(Border border,
|
||||||
String title,
|
String title,
|
||||||
int titleJustification,
|
int titleJustification,
|
||||||
int titlePosition,
|
int titlePosition,
|
||||||
Font titleFont) {
|
Font titleFont) {
|
||||||
this(border, title, titleJustification,
|
this(border, title, titleJustification,
|
||||||
titlePosition, titleFont, null);
|
titlePosition, titleFont, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -205,11 +205,11 @@ public class TitledBorder extends AbstractBorder
|
|||||||
*/
|
*/
|
||||||
@ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
|
@ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
|
||||||
public TitledBorder(Border border,
|
public TitledBorder(Border border,
|
||||||
String title,
|
String title,
|
||||||
int titleJustification,
|
int titleJustification,
|
||||||
int titlePosition,
|
int titlePosition,
|
||||||
Font titleFont,
|
Font titleFont,
|
||||||
Color titleColor) {
|
Color titleColor) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.border = border;
|
this.border = border;
|
||||||
this.titleFont = titleFont;
|
this.titleFont = titleFont;
|
||||||
@ -234,7 +234,7 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* @param height the height of the painted border
|
* @param height the height of the painted border
|
||||||
*/
|
*/
|
||||||
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
||||||
Border border = getBorderUI();
|
Border border = getBorder();
|
||||||
String title = getTitle();
|
String title = getTitle();
|
||||||
if ((title != null) && !title.isEmpty()) {
|
if ((title != null) && !title.isEmpty()) {
|
||||||
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
||||||
@ -347,7 +347,7 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* @param insets the object to be reinitialized
|
* @param insets the object to be reinitialized
|
||||||
*/
|
*/
|
||||||
public Insets getBorderInsets(Component c, Insets insets) {
|
public Insets getBorderInsets(Component c, Insets insets) {
|
||||||
Border border = getBorderUI();
|
Border border = getBorder();
|
||||||
if (border == null) {
|
if (border == null) {
|
||||||
insets.set(0, 0, 0, 0);
|
insets.set(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
@ -402,22 +402,34 @@ public class TitledBorder extends AbstractBorder
|
|||||||
/**
|
/**
|
||||||
* Returns whether or not the border is opaque.
|
* Returns whether or not the border is opaque.
|
||||||
*/
|
*/
|
||||||
public boolean isBorderOpaque() { return false; }
|
public boolean isBorderOpaque() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the title of the titled border.
|
* Returns the title of the titled border.
|
||||||
|
*
|
||||||
|
* @return the title of the titled border
|
||||||
*/
|
*/
|
||||||
public String getTitle() { return title; }
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the border of the titled border.
|
* Returns the border of the titled border.
|
||||||
|
*
|
||||||
|
* @return the border of the titled border
|
||||||
*/
|
*/
|
||||||
public Border getBorder() {
|
public Border getBorder() {
|
||||||
return border;
|
return border != null
|
||||||
|
? border
|
||||||
|
: UIManager.getBorder("TitledBorder.border");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the title-position of the titled border.
|
* Returns the title-position of the titled border.
|
||||||
|
*
|
||||||
|
* @return the title-position of the titled border
|
||||||
*/
|
*/
|
||||||
public int getTitlePosition() {
|
public int getTitlePosition() {
|
||||||
return titlePosition;
|
return titlePosition;
|
||||||
@ -425,20 +437,28 @@ public class TitledBorder extends AbstractBorder
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the title-justification of the titled border.
|
* Returns the title-justification of the titled border.
|
||||||
|
*
|
||||||
|
* @return the title-justification of the titled border
|
||||||
*/
|
*/
|
||||||
public int getTitleJustification() { return titleJustification; }
|
public int getTitleJustification() {
|
||||||
|
return titleJustification;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the title-font of the titled border.
|
* Returns the title-font of the titled border.
|
||||||
|
*
|
||||||
|
* @return the title-font of the titled border
|
||||||
*/
|
*/
|
||||||
public Font getTitleFont() {
|
public Font getTitleFont() {
|
||||||
return titleFont;
|
return titleFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the title-color of the titled border.
|
* Returns the title-color of the titled border.
|
||||||
|
*
|
||||||
|
* @return the title-color of the titled border
|
||||||
*/
|
*/
|
||||||
public Color getTitleColor() {
|
public Color getTitleColor() {
|
||||||
return titleColor;
|
return titleColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,15 +467,19 @@ public class TitledBorder extends AbstractBorder
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the title of the titled border.
|
* Sets the title of the titled border.
|
||||||
* param title the title for the border
|
* @param title the title for the border
|
||||||
*/
|
*/
|
||||||
public void setTitle(String title) { this.title = title; }
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the border of the titled border.
|
* Sets the border of the titled border.
|
||||||
* @param border the border
|
* @param border the border
|
||||||
*/
|
*/
|
||||||
public void setBorder(Border border) { this.border = border; }
|
public void setBorder(Border border) {
|
||||||
|
this.border = border;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the title-position of the titled border.
|
* Sets the title-position of the titled border.
|
||||||
@ -482,19 +506,19 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* Sets the title-justification of the titled border.
|
* Sets the title-justification of the titled border.
|
||||||
* @param titleJustification the justification for the border
|
* @param titleJustification the justification for the border
|
||||||
*/
|
*/
|
||||||
public void setTitleJustification(int titleJustification) {
|
public void setTitleJustification(int titleJustification) {
|
||||||
switch (titleJustification) {
|
switch (titleJustification) {
|
||||||
case DEFAULT_JUSTIFICATION:
|
case DEFAULT_JUSTIFICATION:
|
||||||
case LEFT:
|
case LEFT:
|
||||||
case CENTER:
|
case CENTER:
|
||||||
case RIGHT:
|
case RIGHT:
|
||||||
case LEADING:
|
case LEADING:
|
||||||
case TRAILING:
|
case TRAILING:
|
||||||
this.titleJustification = titleJustification;
|
this.titleJustification = titleJustification;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(titleJustification +
|
throw new IllegalArgumentException(titleJustification +
|
||||||
" is not a valid title justification.");
|
" is not a valid title justification.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,6 +542,7 @@ public class TitledBorder extends AbstractBorder
|
|||||||
* Returns the minimum dimensions this border requires
|
* Returns the minimum dimensions this border requires
|
||||||
* in order to fully display the border and title.
|
* in order to fully display the border and title.
|
||||||
* @param c the component where this border will be drawn
|
* @param c the component where this border will be drawn
|
||||||
|
* @return the {@code Dimension} object
|
||||||
*/
|
*/
|
||||||
public Dimension getMinimumSize(Component c) {
|
public Dimension getMinimumSize(Component c) {
|
||||||
Insets insets = getBorderInsets(c);
|
Insets insets = getBorderInsets(c);
|
||||||
@ -557,7 +582,7 @@ public class TitledBorder extends AbstractBorder
|
|||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
throw new IllegalArgumentException("Height must be >= 0");
|
throw new IllegalArgumentException("Height must be >= 0");
|
||||||
}
|
}
|
||||||
Border border = getBorderUI();
|
Border border = getBorder();
|
||||||
String title = getTitle();
|
String title = getTitle();
|
||||||
if ((title != null) && !title.isEmpty()) {
|
if ((title != null) && !title.isEmpty()) {
|
||||||
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
||||||
@ -616,13 +641,6 @@ public class TitledBorder extends AbstractBorder
|
|||||||
return Component.BaselineResizeBehavior.OTHER;
|
return Component.BaselineResizeBehavior.OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Border getBorderUI() {
|
|
||||||
Border border = getBorder();
|
|
||||||
return border != null
|
|
||||||
? border
|
|
||||||
: UIManager.getBorder("TitledBorder.border");
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getPosition() {
|
private int getPosition() {
|
||||||
int position = getTitlePosition();
|
int position = getTitlePosition();
|
||||||
if (position != DEFAULT_POSITION) {
|
if (position != DEFAULT_POSITION) {
|
||||||
|
@ -449,8 +449,8 @@ public class LayerUI<V extends Component>
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the {@code JLayer} this {@code LayerUI} is set to.
|
* Configures the {@code JLayer} this {@code LayerUI} is set to.
|
||||||
* The default implementation registers the {@code LayerUI}
|
* The default implementation registers the passed {@code JLayer} component
|
||||||
* as a property change listener for the passed {@code JLayer} component.
|
* as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
|
||||||
*
|
*
|
||||||
* @param c the {@code JLayer} component where this UI delegate is being installed
|
* @param c the {@code JLayer} component where this UI delegate is being installed
|
||||||
*/
|
*/
|
||||||
@ -461,8 +461,8 @@ public class LayerUI<V extends Component>
|
|||||||
/**
|
/**
|
||||||
* Reverses the configuration which was previously set
|
* Reverses the configuration which was previously set
|
||||||
* in the {@link #installUI(JComponent)} method.
|
* in the {@link #installUI(JComponent)} method.
|
||||||
* The default implementation unregisters the property change listener
|
* The default implementation unregisters the passed {@code JLayer} component
|
||||||
* for the passed JLayer component.
|
* as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
|
||||||
*
|
*
|
||||||
* @param c the component from which this UI delegate is being removed.
|
* @param c the component from which this UI delegate is being removed.
|
||||||
*/
|
*/
|
||||||
|
@ -196,6 +196,10 @@ public class BasicMenuUI extends BasicMenuItemUI
|
|||||||
return getHandler();
|
return getHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected MenuKeyListener createMenuKeyListener(JComponent c) {
|
||||||
|
return (MenuKeyListener)getHandler();
|
||||||
|
}
|
||||||
|
|
||||||
public Dimension getMaximumSize(JComponent c) {
|
public Dimension getMaximumSize(JComponent c) {
|
||||||
if (((JMenu)menuItem).isTopLevelMenu() == true) {
|
if (((JMenu)menuItem).isTopLevelMenu() == true) {
|
||||||
Dimension d = c.getPreferredSize();
|
Dimension d = c.getPreferredSize();
|
||||||
@ -397,7 +401,7 @@ public class BasicMenuUI extends BasicMenuItemUI
|
|||||||
public void stateChanged(ChangeEvent e) { }
|
public void stateChanged(ChangeEvent e) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Handler extends BasicMenuItemUI.Handler {
|
private class Handler extends BasicMenuItemUI.Handler implements MenuKeyListener {
|
||||||
//
|
//
|
||||||
// PropertyChangeListener
|
// PropertyChangeListener
|
||||||
//
|
//
|
||||||
@ -580,5 +584,48 @@ public class BasicMenuUI extends BasicMenuItemUI
|
|||||||
}
|
}
|
||||||
public void menuDragMouseExited(MenuDragMouseEvent e) {}
|
public void menuDragMouseExited(MenuDragMouseEvent e) {}
|
||||||
public void menuDragMouseReleased(MenuDragMouseEvent e) {}
|
public void menuDragMouseReleased(MenuDragMouseEvent e) {}
|
||||||
|
|
||||||
|
//
|
||||||
|
// MenuKeyListener
|
||||||
|
//
|
||||||
|
/**
|
||||||
|
* Open the Menu
|
||||||
|
*/
|
||||||
|
public void menuKeyTyped(MenuKeyEvent e) {
|
||||||
|
if (!crossMenuMnemonic && BasicPopupMenuUI.getLastPopup() != null) {
|
||||||
|
// when crossMenuMnemonic is not set, we don't open a toplevel
|
||||||
|
// menu if another toplevel menu is already open
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BasicPopupMenuUI.getPopups().size() != 0) {
|
||||||
|
//Fix 6939261: to return in case not on the main menu
|
||||||
|
//and has a pop-up.
|
||||||
|
//after return code will be handled in BasicPopupMenuUI.java
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char key = Character.toLowerCase((char)menuItem.getMnemonic());
|
||||||
|
MenuElement path[] = e.getPath();
|
||||||
|
if (key == Character.toLowerCase(e.getKeyChar())) {
|
||||||
|
JPopupMenu popupMenu = ((JMenu)menuItem).getPopupMenu();
|
||||||
|
ArrayList newList = new ArrayList(Arrays.asList(path));
|
||||||
|
newList.add(popupMenu);
|
||||||
|
MenuElement subs[] = popupMenu.getSubElements();
|
||||||
|
MenuElement sub =
|
||||||
|
BasicPopupMenuUI.findEnabledChild(subs, -1, true);
|
||||||
|
if(sub != null) {
|
||||||
|
newList.add(sub);
|
||||||
|
}
|
||||||
|
MenuSelectionManager manager = e.getMenuSelectionManager();
|
||||||
|
MenuElement newPath[] = new MenuElement[0];;
|
||||||
|
newPath = (MenuElement[]) newList.toArray(newPath);
|
||||||
|
manager.setSelectedPath(newPath);
|
||||||
|
e.consume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void menuKeyPressed(MenuKeyEvent e) {}
|
||||||
|
public void menuKeyReleased(MenuKeyEvent e) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,17 +81,26 @@ public class MetalScrollPaneUI extends BasicScrollPaneUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void installListeners(JScrollPane scrollPane) {
|
public void installListeners(JScrollPane scrollPane) {
|
||||||
super.installListeners(scrollPane);
|
super.installListeners(scrollPane);
|
||||||
scrollBarSwapListener = createScrollBarSwapListener();
|
scrollBarSwapListener = createScrollBarSwapListener();
|
||||||
scrollPane.addPropertyChangeListener(scrollBarSwapListener);
|
scrollPane.addPropertyChangeListener(scrollBarSwapListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected void uninstallListeners(JComponent c) {
|
||||||
|
super.uninstallListeners(c);
|
||||||
|
c.removePropertyChangeListener(scrollBarSwapListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated - Replaced by {@link #uninstallListeners(JComponent)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void uninstallListeners(JScrollPane scrollPane) {
|
public void uninstallListeners(JScrollPane scrollPane) {
|
||||||
super.uninstallListeners(scrollPane);
|
super.uninstallListeners(scrollPane);
|
||||||
|
|
||||||
scrollPane.removePropertyChangeListener(scrollBarSwapListener);
|
scrollPane.removePropertyChangeListener(scrollBarSwapListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,6 +223,16 @@ public final class AWTAccessor {
|
|||||||
void processEvent(Component comp, AWTEvent e);
|
void processEvent(Component comp, AWTEvent e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An interface of accessor for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public interface ContainerAccessor {
|
||||||
|
/**
|
||||||
|
* Validates the container unconditionally.
|
||||||
|
*/
|
||||||
|
void validateUnconditionally(Container cont);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An interface of accessor for java.awt.Window class.
|
* An interface of accessor for java.awt.Window class.
|
||||||
*/
|
*/
|
||||||
@ -334,6 +344,10 @@ public final class AWTAccessor {
|
|||||||
* Gets the state of this frame.
|
* Gets the state of this frame.
|
||||||
*/
|
*/
|
||||||
int getExtendedState(Frame frame);
|
int getExtendedState(Frame frame);
|
||||||
|
/*
|
||||||
|
* Gets the maximized bounds of this frame.
|
||||||
|
*/
|
||||||
|
Rectangle getMaximizedBounds(Frame frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -440,53 +454,19 @@ public final class AWTAccessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The java.awt.Component class accessor object.
|
* Accessor instances are initialized in the static initializers of
|
||||||
|
* corresponding AWT classes by using setters defined below.
|
||||||
*/
|
*/
|
||||||
private static ComponentAccessor componentAccessor;
|
private static ComponentAccessor componentAccessor;
|
||||||
|
private static ContainerAccessor containerAccessor;
|
||||||
/*
|
|
||||||
* The java.awt.Window class accessor object.
|
|
||||||
*/
|
|
||||||
private static WindowAccessor windowAccessor;
|
private static WindowAccessor windowAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.AWTEvent class accessor object.
|
|
||||||
*/
|
|
||||||
private static AWTEventAccessor awtEventAccessor;
|
private static AWTEventAccessor awtEventAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.event.InputEvent class accessor object.
|
|
||||||
*/
|
|
||||||
private static InputEventAccessor inputEventAccessor;
|
private static InputEventAccessor inputEventAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.Frame class accessor object.
|
|
||||||
*/
|
|
||||||
private static FrameAccessor frameAccessor;
|
private static FrameAccessor frameAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.KeyboardFocusManager class accessor object.
|
|
||||||
*/
|
|
||||||
private static KeyboardFocusManagerAccessor kfmAccessor;
|
private static KeyboardFocusManagerAccessor kfmAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.MenuComponent class accessor object.
|
|
||||||
*/
|
|
||||||
private static MenuComponentAccessor menuComponentAccessor;
|
private static MenuComponentAccessor menuComponentAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.EventQueue class accessor object.
|
|
||||||
*/
|
|
||||||
private static EventQueueAccessor eventQueueAccessor;
|
private static EventQueueAccessor eventQueueAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.PopupMenu class accessor object.
|
|
||||||
*/
|
|
||||||
private static PopupMenuAccessor popupMenuAccessor;
|
private static PopupMenuAccessor popupMenuAccessor;
|
||||||
|
|
||||||
/*
|
|
||||||
* The java.awt.FileDialog class accessor object.
|
|
||||||
*/
|
|
||||||
private static FileDialogAccessor fileDialogAccessor;
|
private static FileDialogAccessor fileDialogAccessor;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -497,7 +477,7 @@ public final class AWTAccessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Retrieve the accessor object for the java.awt.Window class.
|
* Retrieve the accessor object for the java.awt.Component class.
|
||||||
*/
|
*/
|
||||||
public static ComponentAccessor getComponentAccessor() {
|
public static ComponentAccessor getComponentAccessor() {
|
||||||
if (componentAccessor == null) {
|
if (componentAccessor == null) {
|
||||||
@ -507,6 +487,24 @@ public final class AWTAccessor {
|
|||||||
return componentAccessor;
|
return componentAccessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set an accessor object for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public static void setContainerAccessor(ContainerAccessor ca) {
|
||||||
|
containerAccessor = ca;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve the accessor object for the java.awt.Container class.
|
||||||
|
*/
|
||||||
|
public static ContainerAccessor getContainerAccessor() {
|
||||||
|
if (containerAccessor == null) {
|
||||||
|
unsafe.ensureClassInitialized(Container.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
return containerAccessor;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set an accessor object for the java.awt.Window class.
|
* Set an accessor object for the java.awt.Window class.
|
||||||
*/
|
*/
|
||||||
|
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal file
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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
|
||||||
|
* 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 sun.io;
|
||||||
|
|
||||||
|
import sun.nio.cs.ext.IBM833;
|
||||||
|
|
||||||
|
public class ByteToCharCp833 extends ByteToCharSingleByte {
|
||||||
|
|
||||||
|
private final static IBM833 nioCoder = new IBM833();
|
||||||
|
|
||||||
|
public String getCharacterEncoding() {
|
||||||
|
return "Cp833";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ByteToCharCp833() {
|
||||||
|
super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal file
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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
|
||||||
|
* 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 sun.io;
|
||||||
|
|
||||||
|
import sun.nio.cs.ext.IBM833;
|
||||||
|
|
||||||
|
public class CharToByteCp833 extends CharToByteSingleByte {
|
||||||
|
|
||||||
|
private final static IBM833 nioCoder = new IBM833();
|
||||||
|
|
||||||
|
public String getCharacterEncoding() {
|
||||||
|
return "Cp833";
|
||||||
|
}
|
||||||
|
|
||||||
|
public CharToByteCp833() {
|
||||||
|
super.mask1 = 0xFF00;
|
||||||
|
super.mask2 = 0x00FF;
|
||||||
|
super.shift = 8;
|
||||||
|
super.index1 = nioCoder.getEncoderIndex1();
|
||||||
|
super.index2 = nioCoder.getEncoderIndex2();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -406,6 +406,11 @@ public class CharacterEncoding {
|
|||||||
aliasTable.put("cp775", "Cp775");
|
aliasTable.put("cp775", "Cp775");
|
||||||
aliasTable.put("775", "Cp775");
|
aliasTable.put("775", "Cp775");
|
||||||
|
|
||||||
|
aliasTable.put("ibm833", "Cp833");
|
||||||
|
aliasTable.put("ibm-833", "Cp833");
|
||||||
|
aliasTable.put("cp833", "Cp833");
|
||||||
|
aliasTable.put("833", "Cp833");
|
||||||
|
|
||||||
aliasTable.put("ibm834", "Cp834");
|
aliasTable.put("ibm834", "Cp834");
|
||||||
aliasTable.put("ibm-834", "Cp834");
|
aliasTable.put("ibm-834", "Cp834");
|
||||||
aliasTable.put("cp834", "Cp834");
|
aliasTable.put("cp834", "Cp834");
|
||||||
|
@ -44,8 +44,16 @@ import java.io.IOException;
|
|||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.MathContext;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.jar.Attributes;
|
import java.util.jar.Attributes;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.jar.Manifest;
|
import java.util.jar.Manifest;
|
||||||
@ -59,6 +67,17 @@ public enum LauncherHelper {
|
|||||||
private static StringBuilder outBuf = new StringBuilder();
|
private static StringBuilder outBuf = new StringBuilder();
|
||||||
|
|
||||||
private static ResourceBundle javarb = null;
|
private static ResourceBundle javarb = null;
|
||||||
|
|
||||||
|
private static final String INDENT = " ";
|
||||||
|
private static final String VM_SETTINGS = "VM settings:";
|
||||||
|
private static final String PROP_SETTINGS = "Property settings:";
|
||||||
|
private static final String LOCALE_SETTINGS = "Locale settings:";
|
||||||
|
|
||||||
|
private static final long K = 1024;
|
||||||
|
private static final long M = K * K;
|
||||||
|
private static final long G = M * K;
|
||||||
|
private static final long T = G * K;
|
||||||
|
|
||||||
private static synchronized ResourceBundle getLauncherResourceBundle() {
|
private static synchronized ResourceBundle getLauncherResourceBundle() {
|
||||||
if (javarb == null) {
|
if (javarb == null) {
|
||||||
javarb = ResourceBundle.getBundle(defaultBundleName);
|
javarb = ResourceBundle.getBundle(defaultBundleName);
|
||||||
@ -66,6 +85,184 @@ public enum LauncherHelper {
|
|||||||
return javarb;
|
return javarb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A method called by the launcher to print out the standard settings,
|
||||||
|
* by default -XshowSettings is equivalent to -XshowSettings:all,
|
||||||
|
* Specific information may be gotten by using suboptions with possible
|
||||||
|
* values vm, properties and locale.
|
||||||
|
*
|
||||||
|
* printToStderr: choose between stdout and stderr
|
||||||
|
*
|
||||||
|
* optionFlag: specifies which options to print default is all other
|
||||||
|
* possible values are vm, properties, locale.
|
||||||
|
*
|
||||||
|
* maxHeapSize: in bytes, as set by the launcher, a zero-value indicates
|
||||||
|
* this code should determine this value, using a suitable method.
|
||||||
|
*
|
||||||
|
* stackSize: in bytes, as set by the launcher, a zero-value indicates
|
||||||
|
* this code determine this value, using a suitable method.
|
||||||
|
*/
|
||||||
|
static void showSettings(boolean printToStderr, String optionFlag,
|
||||||
|
long maxHeapSize, long stackSize, boolean isServer) {
|
||||||
|
|
||||||
|
PrintStream ostream = (printToStderr) ? System.err : System.out;
|
||||||
|
String opts[] = optionFlag.split(":");
|
||||||
|
String optStr = (opts.length > 1 && opts[1] != null)
|
||||||
|
? opts[1].trim()
|
||||||
|
: "all";
|
||||||
|
switch (optStr) {
|
||||||
|
case "vm":
|
||||||
|
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
|
||||||
|
break;
|
||||||
|
case "properties":
|
||||||
|
printProperties(ostream);
|
||||||
|
break;
|
||||||
|
case "locale":
|
||||||
|
printLocale(ostream);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
|
||||||
|
printProperties(ostream);
|
||||||
|
printLocale(ostream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the main vm settings subopt/section
|
||||||
|
*/
|
||||||
|
private static void printVmSettings(PrintStream ostream, long maxHeapSize,
|
||||||
|
long stackSize, boolean isServer) {
|
||||||
|
|
||||||
|
ostream.println(VM_SETTINGS);
|
||||||
|
if (stackSize != 0L) {
|
||||||
|
ostream.println(INDENT + "Stack Size: " + scaleValue(stackSize));
|
||||||
|
}
|
||||||
|
if (maxHeapSize != 0L) {
|
||||||
|
ostream.println(INDENT + "Max. Heap Size: " + scaleValue(maxHeapSize));
|
||||||
|
} else {
|
||||||
|
ostream.println(INDENT + "Max. Heap Size (Estimated): "
|
||||||
|
+ scaleValue(Runtime.getRuntime().maxMemory()));
|
||||||
|
}
|
||||||
|
ostream.println(INDENT + "Ergonomics Machine Class: "
|
||||||
|
+ ((isServer) ? "server" : "client"));
|
||||||
|
ostream.println(INDENT + "Using VM: "
|
||||||
|
+ System.getProperty("java.vm.name"));
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* scale the incoming values to a human readable form, represented as
|
||||||
|
* K, M, G and T, see java.c parse_size for the scaled values and
|
||||||
|
* suffixes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static String scaleValue(double v) {
|
||||||
|
MathContext mc2 = new MathContext(3, RoundingMode.HALF_EVEN);
|
||||||
|
|
||||||
|
if (v >= K && v < M) {
|
||||||
|
return (new BigDecimal(v / K, mc2)).toPlainString() + "K";
|
||||||
|
} else if (v >= M && v < G) {
|
||||||
|
return (new BigDecimal(v / M, mc2)).toPlainString() + "M";
|
||||||
|
} else if (v >= G && v < T) {
|
||||||
|
return (new BigDecimal(v / G, mc2)).toPlainString() + "G";
|
||||||
|
} else if (v >= T) {
|
||||||
|
return (new BigDecimal(v / T, mc2)).toPlainString() + "T";
|
||||||
|
} else {
|
||||||
|
return String.format("%.0f", v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the properties subopt/section
|
||||||
|
*/
|
||||||
|
private static void printProperties(PrintStream ostream) {
|
||||||
|
Properties p = System.getProperties();
|
||||||
|
ostream.println(PROP_SETTINGS);
|
||||||
|
List<String> sortedPropertyKeys = new ArrayList<>();
|
||||||
|
sortedPropertyKeys.addAll(p.stringPropertyNames());
|
||||||
|
Collections.sort(sortedPropertyKeys);
|
||||||
|
for (String x : sortedPropertyKeys) {
|
||||||
|
printPropertyValue(ostream, x, p.getProperty(x));
|
||||||
|
}
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isPath(String key) {
|
||||||
|
return key.endsWith(".dirs") || key.endsWith(".path");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printPropertyValue(PrintStream ostream,
|
||||||
|
String key, String value) {
|
||||||
|
ostream.print(INDENT + key + " = ");
|
||||||
|
if (key.equals("line.separator")) {
|
||||||
|
byte[] bytes = value.getBytes();
|
||||||
|
for (byte b : bytes) {
|
||||||
|
switch (b) {
|
||||||
|
case 0xd:
|
||||||
|
ostream.print("CR ");
|
||||||
|
break;
|
||||||
|
case 0xa:
|
||||||
|
ostream.print("LF ");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ostream.printf("0x%02X", b & 0xff);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ostream.println();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!isPath(key)) {
|
||||||
|
ostream.println(value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// pretty print the path values as a list
|
||||||
|
String[] values = value.split(System.getProperty("path.separator"));
|
||||||
|
int len = values.length;
|
||||||
|
for (int i = 0 ; i < len ; i++) {
|
||||||
|
if (i == 0) { // first line treated specially
|
||||||
|
ostream.println(values[i]);
|
||||||
|
} else { // following lines prefix with indents
|
||||||
|
ostream.print(INDENT + INDENT);
|
||||||
|
ostream.println(values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prints the locale subopt/section
|
||||||
|
*/
|
||||||
|
private static void printLocale(PrintStream ostream) {
|
||||||
|
Locale locale = Locale.getDefault();
|
||||||
|
ostream.println(LOCALE_SETTINGS);
|
||||||
|
ostream.println(INDENT + "default locale = " + locale.getDisplayLanguage());
|
||||||
|
printLocales(ostream);
|
||||||
|
ostream.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printLocales(PrintStream ostream) {
|
||||||
|
Locale[] locales = Locale.getAvailableLocales();
|
||||||
|
final int len = locales == null ? 0 : locales.length;
|
||||||
|
if (len < 1 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ostream.print(INDENT + "available locales = ");
|
||||||
|
final int last = len - 1 ;
|
||||||
|
for (int i = 0; i < last ; i++) {
|
||||||
|
ostream.print(locales[i]);
|
||||||
|
if (i != last) {
|
||||||
|
ostream.print(", ");
|
||||||
|
}
|
||||||
|
// print columns of 8
|
||||||
|
if ((i + 1) % 8 == 0) {
|
||||||
|
ostream.println();
|
||||||
|
ostream.print(INDENT + INDENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ostream.println(locales[last]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A private helper method to get a localized message and also
|
* A private helper method to get a localized message and also
|
||||||
* apply any arguments that we might pass.
|
* apply any arguments that we might pass.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -97,7 +97,15 @@ java.launcher.X.usage=\
|
|||||||
\ -Xcheck:jni perform additional checks for JNI functions\n\
|
\ -Xcheck:jni perform additional checks for JNI functions\n\
|
||||||
\ -Xshare:off do not attempt to use shared class data\n\
|
\ -Xshare:off do not attempt to use shared class data\n\
|
||||||
\ -Xshare:auto use shared class data if possible (default)\n\
|
\ -Xshare:auto use shared class data if possible (default)\n\
|
||||||
\ -Xshare:on require using shared class data, otherwise fail.\n\n\
|
\ -Xshare:on require using shared class data, otherwise fail.\n\
|
||||||
|
\ -XshowSettings show all settings and continue\n\
|
||||||
|
\ -XshowSettings:all\n\
|
||||||
|
\ show all settings and continue\n\
|
||||||
|
\ -XshowSettings:vm show all vm related settings and continue\n\
|
||||||
|
\ -XshowSettings:properties\n\
|
||||||
|
\ show all property settings and continue\n\
|
||||||
|
\ -XshowSettings:locale\n\
|
||||||
|
\ show all locale related settings and continue\n\n\
|
||||||
The -X options are non-standard and subject to change without notice.\n
|
The -X options are non-standard and subject to change without notice.\n
|
||||||
|
|
||||||
java.launcher.cls.error1=\
|
java.launcher.cls.error1=\
|
||||||
|
@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
|
|||||||
if (remaining == 0) {
|
if (remaining == 0) {
|
||||||
eof = true;
|
eof = true;
|
||||||
consumeCRLF();
|
consumeCRLF();
|
||||||
|
t.getServerImpl().requestCompleted (t.getConnection());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
needToReadHeader = false;
|
needToReadHeader = false;
|
||||||
|
@ -40,5 +40,7 @@ class Event {
|
|||||||
class WriteFinishedEvent extends Event {
|
class WriteFinishedEvent extends Event {
|
||||||
WriteFinishedEvent (ExchangeImpl t) {
|
WriteFinishedEvent (ExchangeImpl t) {
|
||||||
super (t);
|
super (t);
|
||||||
|
assert !t.writefinished;
|
||||||
|
t.writefinished = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ class ExchangeImpl {
|
|||||||
Headers reqHdrs, rspHdrs;
|
Headers reqHdrs, rspHdrs;
|
||||||
Request req;
|
Request req;
|
||||||
String method;
|
String method;
|
||||||
|
boolean writefinished;
|
||||||
URI uri;
|
URI uri;
|
||||||
HttpConnection connection;
|
HttpConnection connection;
|
||||||
long reqContentLen;
|
long reqContentLen;
|
||||||
|
@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
|
|||||||
int n = in.read(b, off, len);
|
int n = in.read(b, off, len);
|
||||||
if (n > -1) {
|
if (n > -1) {
|
||||||
remaining -= n;
|
remaining -= n;
|
||||||
|
if (remaining == 0) {
|
||||||
|
t.getServerImpl().requestCompleted (t.getConnection());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
@ -55,10 +55,15 @@ class HttpConnection {
|
|||||||
SelectionKey selectionKey;
|
SelectionKey selectionKey;
|
||||||
String protocol;
|
String protocol;
|
||||||
long time;
|
long time;
|
||||||
|
volatile long creationTime; // time this connection was created
|
||||||
|
volatile long rspStartedTime; // time we started writing the response
|
||||||
int remaining;
|
int remaining;
|
||||||
boolean closed = false;
|
boolean closed = false;
|
||||||
Logger logger;
|
Logger logger;
|
||||||
|
|
||||||
|
public enum State {IDLE, REQUEST, RESPONSE};
|
||||||
|
volatile State state;
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String s = null;
|
String s = null;
|
||||||
if (chan != null) {
|
if (chan != null) {
|
||||||
@ -78,6 +83,14 @@ class HttpConnection {
|
|||||||
context = ctx;
|
context = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setState (State s) {
|
||||||
|
state = s;
|
||||||
|
}
|
||||||
|
|
||||||
void setParameters (
|
void setParameters (
|
||||||
InputStream in, OutputStream rawout, SocketChannel chan,
|
InputStream in, OutputStream rawout, SocketChannel chan,
|
||||||
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
|
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
|
||||||
|
@ -201,32 +201,22 @@ class Request {
|
|||||||
|
|
||||||
static class ReadStream extends InputStream {
|
static class ReadStream extends InputStream {
|
||||||
SocketChannel channel;
|
SocketChannel channel;
|
||||||
SelectorCache sc;
|
|
||||||
Selector selector;
|
|
||||||
ByteBuffer chanbuf;
|
ByteBuffer chanbuf;
|
||||||
SelectionKey key;
|
|
||||||
int available;
|
|
||||||
byte[] one;
|
byte[] one;
|
||||||
boolean closed = false, eof = false;
|
private boolean closed = false, eof = false;
|
||||||
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
|
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
|
||||||
boolean marked;
|
boolean marked;
|
||||||
boolean reset;
|
boolean reset;
|
||||||
int readlimit;
|
int readlimit;
|
||||||
static long readTimeout;
|
static long readTimeout;
|
||||||
ServerImpl server;
|
ServerImpl server;
|
||||||
|
final static int BUFSIZE = 8 * 1024;
|
||||||
static {
|
|
||||||
readTimeout = ServerConfig.getReadTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
|
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
|
||||||
this.channel = chan;
|
this.channel = chan;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
sc = SelectorCache.getSelectorCache();
|
chanbuf = ByteBuffer.allocate (BUFSIZE);
|
||||||
selector = sc.getSelector();
|
chanbuf.clear();
|
||||||
chanbuf = ByteBuffer.allocate (8* 1024);
|
|
||||||
key = chan.register (selector, SelectionKey.OP_READ);
|
|
||||||
available = 0;
|
|
||||||
one = new byte[1];
|
one = new byte[1];
|
||||||
closed = marked = reset = false;
|
closed = marked = reset = false;
|
||||||
}
|
}
|
||||||
@ -255,6 +245,12 @@ class Request {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert channel.isBlocking();
|
||||||
|
|
||||||
|
if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
|
||||||
|
throw new IndexOutOfBoundsException ();
|
||||||
|
}
|
||||||
|
|
||||||
if (reset) { /* satisfy from markBuf */
|
if (reset) { /* satisfy from markBuf */
|
||||||
canreturn = markBuf.remaining ();
|
canreturn = markBuf.remaining ();
|
||||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
willreturn = canreturn>srclen ? srclen : canreturn;
|
||||||
@ -263,17 +259,19 @@ class Request {
|
|||||||
reset = false;
|
reset = false;
|
||||||
}
|
}
|
||||||
} else { /* satisfy from channel */
|
} else { /* satisfy from channel */
|
||||||
canreturn = available();
|
chanbuf.clear ();
|
||||||
while (canreturn == 0 && !eof) {
|
if (srclen < BUFSIZE) {
|
||||||
block ();
|
chanbuf.limit (srclen);
|
||||||
canreturn = available();
|
|
||||||
}
|
}
|
||||||
if (eof) {
|
do {
|
||||||
|
willreturn = channel.read (chanbuf);
|
||||||
|
} while (willreturn == 0);
|
||||||
|
if (willreturn == -1) {
|
||||||
|
eof = true;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
chanbuf.flip ();
|
||||||
chanbuf.get(b, off, willreturn);
|
chanbuf.get(b, off, willreturn);
|
||||||
available -= willreturn;
|
|
||||||
|
|
||||||
if (marked) { /* copy into markBuf */
|
if (marked) { /* copy into markBuf */
|
||||||
try {
|
try {
|
||||||
@ -286,6 +284,11 @@ class Request {
|
|||||||
return willreturn;
|
return willreturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean markSupported () {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does not query the OS socket */
|
||||||
public synchronized int available () throws IOException {
|
public synchronized int available () throws IOException {
|
||||||
if (closed)
|
if (closed)
|
||||||
throw new IOException ("Stream is closed");
|
throw new IOException ("Stream is closed");
|
||||||
@ -296,36 +299,7 @@ class Request {
|
|||||||
if (reset)
|
if (reset)
|
||||||
return markBuf.remaining();
|
return markBuf.remaining();
|
||||||
|
|
||||||
if (available > 0)
|
return chanbuf.remaining();
|
||||||
return available;
|
|
||||||
|
|
||||||
chanbuf.clear ();
|
|
||||||
available = channel.read (chanbuf);
|
|
||||||
if (available > 0) {
|
|
||||||
chanbuf.flip();
|
|
||||||
} else if (available == -1) {
|
|
||||||
eof = true;
|
|
||||||
available = 0;
|
|
||||||
}
|
|
||||||
return available;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* block() only called when available==0 and buf is empty
|
|
||||||
*/
|
|
||||||
private synchronized void block () throws IOException {
|
|
||||||
long currtime = server.getTime();
|
|
||||||
long maxtime = currtime + readTimeout;
|
|
||||||
|
|
||||||
while (currtime < maxtime) {
|
|
||||||
if (selector.select (readTimeout) == 1) {
|
|
||||||
selector.selectedKeys().clear();
|
|
||||||
available ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currtime = server.getTime();
|
|
||||||
}
|
|
||||||
throw new SocketTimeoutException ("no data received");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close () throws IOException {
|
public void close () throws IOException {
|
||||||
@ -333,8 +307,6 @@ class Request {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
channel.close ();
|
channel.close ();
|
||||||
selector.selectNow();
|
|
||||||
sc.freeSelector(selector);
|
|
||||||
closed = true;
|
closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,23 +334,14 @@ class Request {
|
|||||||
SocketChannel channel;
|
SocketChannel channel;
|
||||||
ByteBuffer buf;
|
ByteBuffer buf;
|
||||||
SelectionKey key;
|
SelectionKey key;
|
||||||
SelectorCache sc;
|
|
||||||
Selector selector;
|
|
||||||
boolean closed;
|
boolean closed;
|
||||||
byte[] one;
|
byte[] one;
|
||||||
ServerImpl server;
|
ServerImpl server;
|
||||||
static long writeTimeout;
|
|
||||||
|
|
||||||
static {
|
|
||||||
writeTimeout = ServerConfig.getWriteTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
|
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
sc = SelectorCache.getSelectorCache();
|
assert channel.isBlocking();
|
||||||
selector = sc.getSelector();
|
|
||||||
key = channel.register (selector, SelectionKey.OP_WRITE);
|
|
||||||
closed = false;
|
closed = false;
|
||||||
one = new byte [1];
|
one = new byte [1];
|
||||||
buf = ByteBuffer.allocate (4096);
|
buf = ByteBuffer.allocate (4096);
|
||||||
@ -411,31 +374,14 @@ class Request {
|
|||||||
l -= n;
|
l -= n;
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
return;
|
return;
|
||||||
block();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void block () throws IOException {
|
|
||||||
long currtime = server.getTime();
|
|
||||||
long maxtime = currtime + writeTimeout;
|
|
||||||
|
|
||||||
while (currtime < maxtime) {
|
|
||||||
if (selector.select (writeTimeout) == 1) {
|
|
||||||
selector.selectedKeys().clear ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currtime = server.getTime();
|
|
||||||
}
|
|
||||||
throw new SocketTimeoutException ("write blocked too long");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void close () throws IOException {
|
public void close () throws IOException {
|
||||||
if (closed)
|
if (closed)
|
||||||
return;
|
return;
|
||||||
|
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
|
||||||
channel.close ();
|
channel.close ();
|
||||||
selector.selectNow();
|
|
||||||
sc.freeSelector(selector);
|
|
||||||
closed = true;
|
closed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,6 @@ class SSLStreams {
|
|||||||
EngineWrapper wrapper;
|
EngineWrapper wrapper;
|
||||||
OutputStream os;
|
OutputStream os;
|
||||||
InputStream is;
|
InputStream is;
|
||||||
static long readTimeout = ServerConfig.getReadTimeout();
|
|
||||||
static long writeTimeout = ServerConfig.getWriteTimeout();
|
|
||||||
|
|
||||||
/* held by thread doing the hand-shake on this connection */
|
/* held by thread doing the hand-shake on this connection */
|
||||||
Lock handshaking = new ReentrantLock();
|
Lock handshaking = new ReentrantLock();
|
||||||
@ -77,10 +75,13 @@ class SSLStreams {
|
|||||||
if (cfg != null) {
|
if (cfg != null) {
|
||||||
Parameters params = new Parameters (cfg, addr);
|
Parameters params = new Parameters (cfg, addr);
|
||||||
cfg.configure (params);
|
cfg.configure (params);
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
SSLParameters sslParams = params.getSSLParameters();
|
SSLParameters sslParams = params.getSSLParameters();
|
||||||
if (sslParams != null) {
|
if (sslParams != null) {
|
||||||
engine.setSSLParameters (sslParams);
|
engine.setSSLParameters (sslParams);
|
||||||
} else {
|
} else
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
|
{
|
||||||
/* tiger compatibility */
|
/* tiger compatibility */
|
||||||
if (params.getCipherSuites() != null) {
|
if (params.getCipherSuites() != null) {
|
||||||
try {
|
try {
|
||||||
@ -104,7 +105,6 @@ class SSLStreams {
|
|||||||
|
|
||||||
class Parameters extends HttpsParameters {
|
class Parameters extends HttpsParameters {
|
||||||
InetSocketAddress addr;
|
InetSocketAddress addr;
|
||||||
SSLParameters params;
|
|
||||||
HttpsConfigurator cfg;
|
HttpsConfigurator cfg;
|
||||||
|
|
||||||
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
|
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
|
||||||
@ -117,12 +117,15 @@ class SSLStreams {
|
|||||||
public HttpsConfigurator getHttpsConfigurator() {
|
public HttpsConfigurator getHttpsConfigurator() {
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
//BEGIN_TIGER_EXCLUDE
|
||||||
|
SSLParameters params;
|
||||||
public void setSSLParameters (SSLParameters p) {
|
public void setSSLParameters (SSLParameters p) {
|
||||||
params = p;
|
params = p;
|
||||||
}
|
}
|
||||||
SSLParameters getSSLParameters () {
|
SSLParameters getSSLParameters () {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
//END_TIGER_EXCLUDE
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -245,9 +248,6 @@ class SSLStreams {
|
|||||||
|
|
||||||
SocketChannel chan;
|
SocketChannel chan;
|
||||||
SSLEngine engine;
|
SSLEngine engine;
|
||||||
SelectorCache sc;
|
|
||||||
Selector write_selector, read_selector;
|
|
||||||
SelectionKey wkey, rkey;
|
|
||||||
Object wrapLock, unwrapLock;
|
Object wrapLock, unwrapLock;
|
||||||
ByteBuffer unwrap_src, wrap_dst;
|
ByteBuffer unwrap_src, wrap_dst;
|
||||||
boolean closed = false;
|
boolean closed = false;
|
||||||
@ -260,16 +260,9 @@ class SSLStreams {
|
|||||||
unwrapLock = new Object();
|
unwrapLock = new Object();
|
||||||
unwrap_src = allocate(BufType.PACKET);
|
unwrap_src = allocate(BufType.PACKET);
|
||||||
wrap_dst = allocate(BufType.PACKET);
|
wrap_dst = allocate(BufType.PACKET);
|
||||||
sc = SelectorCache.getSelectorCache();
|
|
||||||
write_selector = sc.getSelector();
|
|
||||||
wkey = chan.register (write_selector, SelectionKey.OP_WRITE);
|
|
||||||
read_selector = sc.getSelector();
|
|
||||||
wkey = chan.register (read_selector, SelectionKey.OP_READ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void close () throws IOException {
|
void close () throws IOException {
|
||||||
sc.freeSelector (write_selector);
|
|
||||||
sc.freeSelector (read_selector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to wrap and send the data in src. Handles OVERFLOW.
|
/* try to wrap and send the data in src. Handles OVERFLOW.
|
||||||
@ -304,15 +297,7 @@ class SSLStreams {
|
|||||||
wrap_dst.flip();
|
wrap_dst.flip();
|
||||||
int l = wrap_dst.remaining();
|
int l = wrap_dst.remaining();
|
||||||
assert l == r.result.bytesProduced();
|
assert l == r.result.bytesProduced();
|
||||||
long currtime = time.getTime();
|
|
||||||
long maxtime = currtime + writeTimeout;
|
|
||||||
while (l>0) {
|
while (l>0) {
|
||||||
write_selector.select(writeTimeout); // timeout
|
|
||||||
currtime = time.getTime();
|
|
||||||
if (currtime > maxtime) {
|
|
||||||
throw new SocketTimeoutException ("write timed out");
|
|
||||||
}
|
|
||||||
write_selector.selectedKeys().clear();
|
|
||||||
l -= chan.write (wrap_dst);
|
l -= chan.write (wrap_dst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -342,20 +327,12 @@ class SSLStreams {
|
|||||||
needData = true;
|
needData = true;
|
||||||
}
|
}
|
||||||
synchronized (unwrapLock) {
|
synchronized (unwrapLock) {
|
||||||
int x,y;
|
int x;
|
||||||
do {
|
do {
|
||||||
if (needData) {
|
if (needData) {
|
||||||
long currTime = time.getTime();
|
|
||||||
long maxtime = currTime + readTimeout;
|
|
||||||
do {
|
do {
|
||||||
if (currTime > maxtime) {
|
|
||||||
throw new SocketTimeoutException ("read timedout");
|
|
||||||
}
|
|
||||||
y = read_selector.select (readTimeout);
|
|
||||||
currTime = time.getTime();
|
|
||||||
} while (y != 1);
|
|
||||||
read_selector.selectedKeys().clear();
|
|
||||||
x = chan.read (unwrap_src);
|
x = chan.read (unwrap_src);
|
||||||
|
} while (x == 0);
|
||||||
if (x == -1) {
|
if (x == -1) {
|
||||||
throw new IOException ("connection closed for reading");
|
throw new IOException ("connection closed for reading");
|
||||||
}
|
}
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2006, 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 sun.net.httpserver;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.nio.*;
|
|
||||||
import java.net.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.security.*;
|
|
||||||
import java.nio.channels.*;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Implements a cache of java.nio.channels.Selector
|
|
||||||
* where Selectors are allocated on demand and placed
|
|
||||||
* in a temporary cache for a period of time, so they
|
|
||||||
* can be reused. If a period of between 2 and 4 minutes
|
|
||||||
* elapses without being used, then they are closed.
|
|
||||||
*/
|
|
||||||
public class SelectorCache {
|
|
||||||
|
|
||||||
static SelectorCache cache = null;
|
|
||||||
|
|
||||||
private SelectorCache () {
|
|
||||||
freeSelectors = new LinkedList<SelectorWrapper>();
|
|
||||||
CacheCleaner c = AccessController.doPrivileged(
|
|
||||||
new PrivilegedAction<CacheCleaner>() {
|
|
||||||
public CacheCleaner run() {
|
|
||||||
CacheCleaner cleaner = new CacheCleaner();
|
|
||||||
cleaner.setDaemon (true);
|
|
||||||
return cleaner;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
c.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* factory method for creating single instance
|
|
||||||
*/
|
|
||||||
public static SelectorCache getSelectorCache () {
|
|
||||||
synchronized (SelectorCache.class) {
|
|
||||||
if (cache == null) {
|
|
||||||
cache = new SelectorCache ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SelectorWrapper {
|
|
||||||
private Selector sel;
|
|
||||||
private boolean deleteFlag;
|
|
||||||
private SelectorWrapper (Selector sel) {
|
|
||||||
this.sel = sel;
|
|
||||||
this.deleteFlag = false;
|
|
||||||
}
|
|
||||||
public Selector getSelector() { return sel;}
|
|
||||||
public boolean getDeleteFlag () {return deleteFlag;}
|
|
||||||
public void setDeleteFlag (boolean b) {deleteFlag = b;}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* list of free selectors. Can be re-allocated for a period
|
|
||||||
* of time, after which if not allocated will be closed
|
|
||||||
* and removed from the list (by CacheCleaner thread)
|
|
||||||
*/
|
|
||||||
LinkedList<SelectorWrapper> freeSelectors;
|
|
||||||
|
|
||||||
synchronized Selector getSelector () throws IOException {
|
|
||||||
SelectorWrapper wrapper = null;
|
|
||||||
Selector selector;
|
|
||||||
|
|
||||||
if (freeSelectors.size() > 0) {
|
|
||||||
wrapper = freeSelectors.remove();
|
|
||||||
selector = wrapper.getSelector();
|
|
||||||
} else {
|
|
||||||
selector = Selector.open();
|
|
||||||
}
|
|
||||||
return selector;
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void freeSelector (Selector selector) {
|
|
||||||
freeSelectors.add (new SelectorWrapper (selector));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thread ensures that entries on freeSelector list
|
|
||||||
* remain there for at least 2 minutes and no longer
|
|
||||||
* than 4 minutes.
|
|
||||||
*/
|
|
||||||
class CacheCleaner extends Thread {
|
|
||||||
public void run () {
|
|
||||||
long timeout = ServerConfig.getSelCacheTimeout() * 1000;
|
|
||||||
while (true) {
|
|
||||||
try {Thread.sleep (timeout); } catch (Exception e) {}
|
|
||||||
synchronized (freeSelectors) {
|
|
||||||
ListIterator<SelectorWrapper> l = freeSelectors.listIterator();
|
|
||||||
while (l.hasNext()) {
|
|
||||||
SelectorWrapper w = l.next();
|
|
||||||
if (w.getDeleteFlag()) {
|
|
||||||
/* 2nd pass. Close the selector */
|
|
||||||
try {
|
|
||||||
w.getSelector().close();
|
|
||||||
} catch (IOException e) {}
|
|
||||||
l.remove();
|
|
||||||
} else {
|
|
||||||
/* 1st pass. Set the flag */
|
|
||||||
w.setDeleteFlag (true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,6 +27,8 @@ package sun.net.httpserver;
|
|||||||
|
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
import com.sun.net.httpserver.spi.*;
|
import com.sun.net.httpserver.spi.*;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.security.PrivilegedAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parameters that users will not likely need to set
|
* Parameters that users will not likely need to set
|
||||||
@ -37,23 +39,26 @@ class ServerConfig {
|
|||||||
|
|
||||||
static int clockTick;
|
static int clockTick;
|
||||||
|
|
||||||
static int defaultClockTick = 10000 ; // 10 sec.
|
static final int DEFAULT_CLOCK_TICK = 10000 ; // 10 sec.
|
||||||
|
|
||||||
/* These values must be a reasonable multiple of clockTick */
|
/* These values must be a reasonable multiple of clockTick */
|
||||||
static long defaultReadTimeout = 20 ; // 20 sec.
|
static final long DEFAULT_IDLE_INTERVAL = 300 ; // 5 min
|
||||||
static long defaultWriteTimeout = 60 ; // 60 sec.
|
static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200 ;
|
||||||
static long defaultIdleInterval = 300 ; // 5 min
|
|
||||||
static long defaultSelCacheTimeout = 120 ; // seconds
|
|
||||||
static int defaultMaxIdleConnections = 200 ;
|
|
||||||
|
|
||||||
static long defaultDrainAmount = 64 * 1024;
|
static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
|
||||||
|
static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
|
||||||
|
static final long DEFAULT_TIMER_MILLIS = 1000;
|
||||||
|
|
||||||
|
static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
|
||||||
|
|
||||||
static long readTimeout;
|
|
||||||
static long writeTimeout;
|
|
||||||
static long idleInterval;
|
static long idleInterval;
|
||||||
static long selCacheTimeout;
|
|
||||||
static long drainAmount; // max # of bytes to drain from an inputstream
|
static long drainAmount; // max # of bytes to drain from an inputstream
|
||||||
static int maxIdleConnections;
|
static int maxIdleConnections;
|
||||||
|
|
||||||
|
// max time a request or response is allowed to take
|
||||||
|
static long maxReqTime;
|
||||||
|
static long maxRspTime;
|
||||||
|
static long timerMillis;
|
||||||
static boolean debug = false;
|
static boolean debug = false;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -61,49 +66,79 @@ class ServerConfig {
|
|||||||
idleInterval = ((Long)java.security.AccessController.doPrivileged(
|
idleInterval = ((Long)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetLongAction(
|
new sun.security.action.GetLongAction(
|
||||||
"sun.net.httpserver.idleInterval",
|
"sun.net.httpserver.idleInterval",
|
||||||
defaultIdleInterval))).longValue() * 1000;
|
DEFAULT_IDLE_INTERVAL))).longValue() * 1000;
|
||||||
|
|
||||||
clockTick = ((Integer)java.security.AccessController.doPrivileged(
|
clockTick = ((Integer)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetIntegerAction(
|
new sun.security.action.GetIntegerAction(
|
||||||
"sun.net.httpserver.clockTick",
|
"sun.net.httpserver.clockTick",
|
||||||
defaultClockTick))).intValue();
|
DEFAULT_CLOCK_TICK))).intValue();
|
||||||
|
|
||||||
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
|
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetIntegerAction(
|
new sun.security.action.GetIntegerAction(
|
||||||
"sun.net.httpserver.maxIdleConnections",
|
"sun.net.httpserver.maxIdleConnections",
|
||||||
defaultMaxIdleConnections))).intValue();
|
DEFAULT_MAX_IDLE_CONNECTIONS))).intValue();
|
||||||
|
|
||||||
readTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.readTimeout",
|
|
||||||
defaultReadTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
selCacheTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.selCacheTimeout",
|
|
||||||
defaultSelCacheTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
writeTimeout = ((Long)java.security.AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetLongAction(
|
|
||||||
"sun.net.httpserver.writeTimeout",
|
|
||||||
defaultWriteTimeout))).longValue()* 1000;
|
|
||||||
|
|
||||||
drainAmount = ((Long)java.security.AccessController.doPrivileged(
|
drainAmount = ((Long)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetLongAction(
|
new sun.security.action.GetLongAction(
|
||||||
"sun.net.httpserver.drainAmount",
|
"sun.net.httpserver.drainAmount",
|
||||||
defaultDrainAmount))).longValue();
|
DEFAULT_DRAIN_AMOUNT))).longValue();
|
||||||
|
|
||||||
|
maxReqTime = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.maxReqTime",
|
||||||
|
DEFAULT_MAX_REQ_TIME))).longValue();
|
||||||
|
|
||||||
|
maxRspTime = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.maxRspTime",
|
||||||
|
DEFAULT_MAX_RSP_TIME))).longValue();
|
||||||
|
|
||||||
|
timerMillis = ((Long)java.security.AccessController.doPrivileged(
|
||||||
|
new sun.security.action.GetLongAction(
|
||||||
|
"sun.net.httpserver.timerMillis",
|
||||||
|
DEFAULT_TIMER_MILLIS))).longValue();
|
||||||
|
|
||||||
debug = ((Boolean)java.security.AccessController.doPrivileged(
|
debug = ((Boolean)java.security.AccessController.doPrivileged(
|
||||||
new sun.security.action.GetBooleanAction(
|
new sun.security.action.GetBooleanAction(
|
||||||
"sun.net.httpserver.debug"))).booleanValue();
|
"sun.net.httpserver.debug"))).booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
static long getReadTimeout () {
|
|
||||||
return readTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long getSelCacheTimeout () {
|
static void checkLegacyProperties (final Logger logger) {
|
||||||
return selCacheTimeout;
|
|
||||||
|
// legacy properties that are no longer used
|
||||||
|
// print a warning to logger if they are set.
|
||||||
|
|
||||||
|
java.security.AccessController.doPrivileged(
|
||||||
|
new PrivilegedAction<Void>() {
|
||||||
|
public Void run () {
|
||||||
|
if (System.getProperty("sun.net.httpserver.readTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.readTimeout "+
|
||||||
|
"property is no longer used. "+
|
||||||
|
"Use sun.net.httpserver.maxReqTime instead."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (System.getProperty("sun.net.httpserver.writeTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.writeTimeout "+
|
||||||
|
"property is no longer used. Use "+
|
||||||
|
"sun.net.httpserver.maxRspTime instead."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (System.getProperty("sun.net.httpserver.selCacheTimeout")
|
||||||
|
!=null)
|
||||||
|
{
|
||||||
|
logger.warning ("sun.net.httpserver.selCacheTimeout "+
|
||||||
|
"property is no longer used."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean debugEnabled () {
|
static boolean debugEnabled () {
|
||||||
@ -122,11 +157,19 @@ class ServerConfig {
|
|||||||
return maxIdleConnections;
|
return maxIdleConnections;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long getWriteTimeout () {
|
|
||||||
return writeTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long getDrainAmount () {
|
static long getDrainAmount () {
|
||||||
return drainAmount;
|
return drainAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long getMaxReqTime () {
|
||||||
|
return maxReqTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getMaxRspTime () {
|
||||||
|
return maxRspTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getTimerMillis () {
|
||||||
|
return timerMillis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ import java.util.logging.Level;
|
|||||||
import javax.net.ssl.*;
|
import javax.net.ssl.*;
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
import com.sun.net.httpserver.spi.*;
|
import com.sun.net.httpserver.spi.*;
|
||||||
|
import sun.net.httpserver.HttpConnection.State;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides implementation for both HTTP and HTTPS
|
* Provides implementation for both HTTP and HTTPS
|
||||||
@ -55,6 +56,12 @@ class ServerImpl implements TimeSource {
|
|||||||
private SelectionKey listenerKey;
|
private SelectionKey listenerKey;
|
||||||
private Set<HttpConnection> idleConnections;
|
private Set<HttpConnection> idleConnections;
|
||||||
private Set<HttpConnection> allConnections;
|
private Set<HttpConnection> allConnections;
|
||||||
|
/* following two are used to keep track of the times
|
||||||
|
* when a connection/request is first received
|
||||||
|
* and when we start to send the response
|
||||||
|
*/
|
||||||
|
private Set<HttpConnection> reqConnections;
|
||||||
|
private Set<HttpConnection> rspConnections;
|
||||||
private List<Event> events;
|
private List<Event> events;
|
||||||
private Object lolock = new Object();
|
private Object lolock = new Object();
|
||||||
private volatile boolean finished = false;
|
private volatile boolean finished = false;
|
||||||
@ -62,14 +69,19 @@ class ServerImpl implements TimeSource {
|
|||||||
private boolean bound = false;
|
private boolean bound = false;
|
||||||
private boolean started = false;
|
private boolean started = false;
|
||||||
private volatile long time; /* current time */
|
private volatile long time; /* current time */
|
||||||
|
private volatile long subticks = 0;
|
||||||
private volatile long ticks; /* number of clock ticks since server started */
|
private volatile long ticks; /* number of clock ticks since server started */
|
||||||
private HttpServer wrapper;
|
private HttpServer wrapper;
|
||||||
|
|
||||||
final static int CLOCK_TICK = ServerConfig.getClockTick();
|
final static int CLOCK_TICK = ServerConfig.getClockTick();
|
||||||
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
|
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
|
||||||
final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
|
final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
|
||||||
|
final static long TIMER_MILLIS = ServerConfig.getTimerMillis ();
|
||||||
|
final static long MAX_REQ_TIME=getTimeMillis(ServerConfig.getMaxReqTime());
|
||||||
|
final static long MAX_RSP_TIME=getTimeMillis(ServerConfig.getMaxRspTime());
|
||||||
|
final static boolean timer1Enabled = MAX_REQ_TIME != -1 || MAX_RSP_TIME != -1;
|
||||||
|
|
||||||
private Timer timer;
|
private Timer timer, timer1;
|
||||||
private Logger logger;
|
private Logger logger;
|
||||||
|
|
||||||
ServerImpl (
|
ServerImpl (
|
||||||
@ -79,6 +91,7 @@ class ServerImpl implements TimeSource {
|
|||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
this.wrapper = wrapper;
|
this.wrapper = wrapper;
|
||||||
this.logger = Logger.getLogger ("com.sun.net.httpserver");
|
this.logger = Logger.getLogger ("com.sun.net.httpserver");
|
||||||
|
ServerConfig.checkLegacyProperties (logger);
|
||||||
https = protocol.equalsIgnoreCase ("https");
|
https = protocol.equalsIgnoreCase ("https");
|
||||||
this.address = addr;
|
this.address = addr;
|
||||||
contexts = new ContextList();
|
contexts = new ContextList();
|
||||||
@ -94,9 +107,18 @@ class ServerImpl implements TimeSource {
|
|||||||
dispatcher = new Dispatcher();
|
dispatcher = new Dispatcher();
|
||||||
idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
|
reqConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
|
rspConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
|
||||||
time = System.currentTimeMillis();
|
time = System.currentTimeMillis();
|
||||||
timer = new Timer ("server-timer", true);
|
timer = new Timer ("server-timer", true);
|
||||||
timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
|
timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
|
||||||
|
if (timer1Enabled) {
|
||||||
|
timer1 = new Timer ("server-timer1", true);
|
||||||
|
timer1.schedule (new ServerTimerTask1(),TIMER_MILLIS,TIMER_MILLIS);
|
||||||
|
logger.config ("HttpServer timer1 enabled period in ms: "+TIMER_MILLIS);
|
||||||
|
logger.config ("MAX_REQ_TIME: "+MAX_REQ_TIME);
|
||||||
|
logger.config ("MAX_RSP_TIME: "+MAX_RSP_TIME);
|
||||||
|
}
|
||||||
events = new LinkedList<Event>();
|
events = new LinkedList<Event>();
|
||||||
logger.config ("HttpServer created "+protocol+" "+ addr);
|
logger.config ("HttpServer created "+protocol+" "+ addr);
|
||||||
}
|
}
|
||||||
@ -181,6 +203,9 @@ class ServerImpl implements TimeSource {
|
|||||||
allConnections.clear();
|
allConnections.clear();
|
||||||
idleConnections.clear();
|
idleConnections.clear();
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
|
if (timer1Enabled) {
|
||||||
|
timer1.cancel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dispatcher dispatcher;
|
Dispatcher dispatcher;
|
||||||
@ -236,13 +261,6 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int resultSize () {
|
|
||||||
synchronized (lolock) {
|
|
||||||
return events.size ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* main server listener task */
|
/* main server listener task */
|
||||||
|
|
||||||
class Dispatcher implements Runnable {
|
class Dispatcher implements Runnable {
|
||||||
@ -257,7 +275,7 @@ class ServerImpl implements TimeSource {
|
|||||||
if (terminating && exchanges == 0) {
|
if (terminating && exchanges == 0) {
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
SocketChannel chan = c.getChannel();
|
responseCompleted (c);
|
||||||
LeftOverInputStream is = t.getOriginalInputStream();
|
LeftOverInputStream is = t.getOriginalInputStream();
|
||||||
if (!is.isEOF()) {
|
if (!is.isEOF()) {
|
||||||
t.close = true;
|
t.close = true;
|
||||||
@ -268,17 +286,10 @@ class ServerImpl implements TimeSource {
|
|||||||
} else {
|
} else {
|
||||||
if (is.isDataBuffered()) {
|
if (is.isDataBuffered()) {
|
||||||
/* don't re-enable the interestops, just handle it */
|
/* don't re-enable the interestops, just handle it */
|
||||||
|
requestStarted (c);
|
||||||
handle (c.getChannel(), c);
|
handle (c.getChannel(), c);
|
||||||
} else {
|
} else {
|
||||||
/* re-enable interestops */
|
connsToRegister.add (c);
|
||||||
SelectionKey key = c.getSelectionKey();
|
|
||||||
if (key.isValid()) {
|
|
||||||
key.interestOps (
|
|
||||||
key.interestOps()|SelectionKey.OP_READ
|
|
||||||
);
|
|
||||||
}
|
|
||||||
c.time = getTime() + IDLE_INTERVAL;
|
|
||||||
idleConnections.add (c);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,21 +301,50 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final LinkedList<HttpConnection> connsToRegister =
|
||||||
|
new LinkedList<HttpConnection>();
|
||||||
|
|
||||||
|
void reRegister (HttpConnection c) {
|
||||||
|
/* re-register with selector */
|
||||||
|
try {
|
||||||
|
SocketChannel chan = c.getChannel();
|
||||||
|
chan.configureBlocking (false);
|
||||||
|
SelectionKey key = chan.register (selector, SelectionKey.OP_READ);
|
||||||
|
key.attach (c);
|
||||||
|
c.selectionKey = key;
|
||||||
|
c.time = getTime() + IDLE_INTERVAL;
|
||||||
|
idleConnections.add (c);
|
||||||
|
} catch (IOException e) {
|
||||||
|
dprint(e);
|
||||||
|
logger.log(Level.FINER, "Dispatcher(8)", e);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
while (!finished) {
|
while (!finished) {
|
||||||
try {
|
try {
|
||||||
|
ListIterator<HttpConnection> li =
|
||||||
|
connsToRegister.listIterator();
|
||||||
|
for (HttpConnection c : connsToRegister) {
|
||||||
|
reRegister(c);
|
||||||
|
}
|
||||||
|
connsToRegister.clear();
|
||||||
|
|
||||||
/* process the events list first */
|
List<Event> list = null;
|
||||||
|
selector.select(1000);
|
||||||
while (resultSize() > 0) {
|
synchronized (lolock) {
|
||||||
Event r;
|
if (events.size() > 0) {
|
||||||
synchronized (lolock) {
|
list = events;
|
||||||
r = events.remove(0);
|
events = new LinkedList<Event>();
|
||||||
handleEvent (r);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selector.select(1000);
|
if (list != null) {
|
||||||
|
for (Event r: list) {
|
||||||
|
handleEvent (r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* process the selected list now */
|
/* process the selected list now */
|
||||||
|
|
||||||
@ -327,6 +367,7 @@ class ServerImpl implements TimeSource {
|
|||||||
c.selectionKey = newkey;
|
c.selectionKey = newkey;
|
||||||
c.setChannel (chan);
|
c.setChannel (chan);
|
||||||
newkey.attach (c);
|
newkey.attach (c);
|
||||||
|
requestStarted (c);
|
||||||
allConnections.add (c);
|
allConnections.add (c);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
@ -334,27 +375,44 @@ class ServerImpl implements TimeSource {
|
|||||||
boolean closed;
|
boolean closed;
|
||||||
SocketChannel chan = (SocketChannel)key.channel();
|
SocketChannel chan = (SocketChannel)key.channel();
|
||||||
HttpConnection conn = (HttpConnection)key.attachment();
|
HttpConnection conn = (HttpConnection)key.attachment();
|
||||||
// interestOps will be restored at end of read
|
|
||||||
key.interestOps (0);
|
key.cancel();
|
||||||
|
chan.configureBlocking (true);
|
||||||
|
if (idleConnections.remove(conn)) {
|
||||||
|
// was an idle connection so add it
|
||||||
|
// to reqConnections set.
|
||||||
|
requestStarted (conn);
|
||||||
|
}
|
||||||
handle (chan, conn);
|
handle (chan, conn);
|
||||||
} else {
|
} else {
|
||||||
assert false;
|
assert false;
|
||||||
}
|
}
|
||||||
|
} catch (CancelledKeyException e) {
|
||||||
|
handleException(key, null);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
HttpConnection conn = (HttpConnection)key.attachment();
|
handleException(key, e);
|
||||||
logger.log (
|
|
||||||
Level.FINER, "Dispatcher (2)", e
|
|
||||||
);
|
|
||||||
conn.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// call the selector just to process the cancelled keys
|
||||||
|
selector.selectNow();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log (Level.FINER, "Dispatcher (4)", e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log (Level.FINER, "Dispatcher (3)", e);
|
e.printStackTrace();
|
||||||
|
logger.log (Level.FINER, "Dispatcher (7)", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleException (SelectionKey key, Exception e) {
|
||||||
|
HttpConnection conn = (HttpConnection)key.attachment();
|
||||||
|
if (e != null) {
|
||||||
|
logger.log (Level.FINER, "Dispatcher (2)", e);
|
||||||
|
}
|
||||||
|
closeConnection(conn);
|
||||||
|
}
|
||||||
|
|
||||||
public void handle (SocketChannel chan, HttpConnection conn)
|
public void handle (SocketChannel chan, HttpConnection conn)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
@ -363,10 +421,10 @@ class ServerImpl implements TimeSource {
|
|||||||
executor.execute (t);
|
executor.execute (t);
|
||||||
} catch (HttpError e1) {
|
} catch (HttpError e1) {
|
||||||
logger.log (Level.FINER, "Dispatcher (4)", e1);
|
logger.log (Level.FINER, "Dispatcher (4)", e1);
|
||||||
conn.close();
|
closeConnection(conn);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log (Level.FINER, "Dispatcher (5)", e);
|
logger.log (Level.FINER, "Dispatcher (5)", e);
|
||||||
conn.close();
|
closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,7 +448,26 @@ class ServerImpl implements TimeSource {
|
|||||||
return logger;
|
return logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* per exchange task */
|
private void closeConnection(HttpConnection conn) {
|
||||||
|
conn.close();
|
||||||
|
allConnections.remove(conn);
|
||||||
|
switch (conn.getState()) {
|
||||||
|
case REQUEST:
|
||||||
|
reqConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
case RESPONSE:
|
||||||
|
rspConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
case IDLE:
|
||||||
|
idleConnections.remove(conn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert !reqConnections.remove(conn);
|
||||||
|
assert !rspConnections.remove(conn);
|
||||||
|
assert !idleConnections.remove(conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* per exchange task */
|
||||||
|
|
||||||
class Exchange implements Runnable {
|
class Exchange implements Runnable {
|
||||||
SocketChannel chan;
|
SocketChannel chan;
|
||||||
@ -450,8 +527,7 @@ class ServerImpl implements TimeSource {
|
|||||||
requestLine = req.requestLine();
|
requestLine = req.requestLine();
|
||||||
if (requestLine == null) {
|
if (requestLine == null) {
|
||||||
/* connection closed */
|
/* connection closed */
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
allConnections.remove(connection);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int space = requestLine.indexOf (' ');
|
int space = requestLine.indexOf (' ');
|
||||||
@ -482,6 +558,9 @@ class ServerImpl implements TimeSource {
|
|||||||
if (s != null) {
|
if (s != null) {
|
||||||
clen = Long.parseLong(s);
|
clen = Long.parseLong(s);
|
||||||
}
|
}
|
||||||
|
if (clen == 0) {
|
||||||
|
requestCompleted (connection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx = contexts.findContext (protocol, uri.getPath());
|
ctx = contexts.findContext (protocol, uri.getPath());
|
||||||
if (ctx == null) {
|
if (ctx == null) {
|
||||||
@ -560,7 +639,7 @@ class ServerImpl implements TimeSource {
|
|||||||
|
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
|
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
} catch (NumberFormatException e3) {
|
} catch (NumberFormatException e3) {
|
||||||
reject (Code.HTTP_BAD_REQUEST,
|
reject (Code.HTTP_BAD_REQUEST,
|
||||||
requestLine, "NumberFormatException thrown");
|
requestLine, "NumberFormatException thrown");
|
||||||
@ -569,7 +648,7 @@ class ServerImpl implements TimeSource {
|
|||||||
requestLine, "URISyntaxException thrown");
|
requestLine, "URISyntaxException thrown");
|
||||||
} catch (Exception e4) {
|
} catch (Exception e4) {
|
||||||
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
|
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,47 +670,60 @@ class ServerImpl implements TimeSource {
|
|||||||
rejected = true;
|
rejected = true;
|
||||||
logReply (code, requestStr, message);
|
logReply (code, requestStr, message);
|
||||||
sendReply (
|
sendReply (
|
||||||
code, true, "<h1>"+code+Code.msg(code)+"</h1>"+message
|
code, false, "<h1>"+code+Code.msg(code)+"</h1>"+message
|
||||||
);
|
);
|
||||||
/* connection is already closed by sendReply, now remove it */
|
closeConnection(connection);
|
||||||
allConnections.remove(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendReply (
|
void sendReply (
|
||||||
int code, boolean closeNow, String text)
|
int code, boolean closeNow, String text)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
String s = "HTTP/1.1 " + code + Code.msg(code) + "\r\n";
|
StringBuilder builder = new StringBuilder (512);
|
||||||
|
builder.append ("HTTP/1.1 ")
|
||||||
|
.append (code).append (Code.msg(code)).append ("\r\n");
|
||||||
|
|
||||||
if (text != null && text.length() != 0) {
|
if (text != null && text.length() != 0) {
|
||||||
s = s + "Content-Length: "+text.length()+"\r\n";
|
builder.append ("Content-Length: ")
|
||||||
s = s + "Content-Type: text/html\r\n";
|
.append (text.length()).append ("\r\n")
|
||||||
|
.append ("Content-Type: text/html\r\n");
|
||||||
} else {
|
} else {
|
||||||
s = s + "Content-Length: 0\r\n";
|
builder.append ("Content-Length: 0\r\n");
|
||||||
text = "";
|
text = "";
|
||||||
}
|
}
|
||||||
if (closeNow) {
|
if (closeNow) {
|
||||||
s = s + "Connection: close\r\n";
|
builder.append ("Connection: close\r\n");
|
||||||
}
|
}
|
||||||
s = s + "\r\n" + text;
|
builder.append ("\r\n").append (text);
|
||||||
|
String s = builder.toString();
|
||||||
byte[] b = s.getBytes("ISO8859_1");
|
byte[] b = s.getBytes("ISO8859_1");
|
||||||
rawout.write (b);
|
rawout.write (b);
|
||||||
rawout.flush();
|
rawout.flush();
|
||||||
if (closeNow) {
|
if (closeNow) {
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log (Level.FINER, "ServerImpl.sendReply", e);
|
logger.log (Level.FINER, "ServerImpl.sendReply", e);
|
||||||
connection.close();
|
closeConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void logReply (int code, String requestStr, String text) {
|
void logReply (int code, String requestStr, String text) {
|
||||||
|
if (!logger.isLoggable(Level.FINE)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
text = "";
|
text = "";
|
||||||
}
|
}
|
||||||
String message = requestStr + " [" + code + " " +
|
String r;
|
||||||
|
if (requestStr.length() > 80) {
|
||||||
|
r = requestStr.substring (0, 80) + "<TRUNCATED>";
|
||||||
|
} else {
|
||||||
|
r = requestStr;
|
||||||
|
}
|
||||||
|
String message = r + " [" + code + " " +
|
||||||
Code.msg(code) + "] ("+text+")";
|
Code.msg(code) + "] ("+text+")";
|
||||||
logger.fine (message);
|
logger.fine (message);
|
||||||
}
|
}
|
||||||
@ -667,6 +759,34 @@ class ServerImpl implements TimeSource {
|
|||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void requestStarted (HttpConnection c) {
|
||||||
|
c.creationTime = getTime();
|
||||||
|
c.setState (State.REQUEST);
|
||||||
|
reqConnections.add (c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// called after a request has been completely read
|
||||||
|
// by the server. This stops the timer which would
|
||||||
|
// close the connection if the request doesn't arrive
|
||||||
|
// quickly enough. It then starts the timer
|
||||||
|
// that ensures the client reads the response in a timely
|
||||||
|
// fashion.
|
||||||
|
|
||||||
|
void requestCompleted (HttpConnection c) {
|
||||||
|
assert c.getState() == State.REQUEST;
|
||||||
|
reqConnections.remove (c);
|
||||||
|
c.rspStartedTime = getTime();
|
||||||
|
rspConnections.add (c);
|
||||||
|
c.setState (State.RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// called after response has been sent
|
||||||
|
void responseCompleted (HttpConnection c) {
|
||||||
|
assert c.getState() == State.RESPONSE;
|
||||||
|
rspConnections.remove (c);
|
||||||
|
c.setState (State.IDLE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TimerTask run every CLOCK_TICK ms
|
* TimerTask run every CLOCK_TICK ms
|
||||||
*/
|
*/
|
||||||
@ -689,4 +809,62 @@ class ServerImpl implements TimeSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ServerTimerTask1 extends TimerTask {
|
||||||
|
|
||||||
|
// runs every TIMER_MILLIS
|
||||||
|
public void run () {
|
||||||
|
LinkedList<HttpConnection> toClose = new LinkedList<HttpConnection>();
|
||||||
|
time = System.currentTimeMillis();
|
||||||
|
synchronized (reqConnections) {
|
||||||
|
if (MAX_REQ_TIME != -1) {
|
||||||
|
for (HttpConnection c : reqConnections) {
|
||||||
|
if (c.creationTime + TIMER_MILLIS + MAX_REQ_TIME <= time) {
|
||||||
|
toClose.add (c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (HttpConnection c : toClose) {
|
||||||
|
logger.log (Level.FINE, "closing: no request: " + c);
|
||||||
|
reqConnections.remove (c);
|
||||||
|
allConnections.remove (c);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toClose = new LinkedList<HttpConnection>();
|
||||||
|
synchronized (rspConnections) {
|
||||||
|
if (MAX_RSP_TIME != -1) {
|
||||||
|
for (HttpConnection c : rspConnections) {
|
||||||
|
if (c.rspStartedTime + TIMER_MILLIS +MAX_RSP_TIME <= time) {
|
||||||
|
toClose.add (c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (HttpConnection c : toClose) {
|
||||||
|
logger.log (Level.FINE, "closing: no response: " + c);
|
||||||
|
rspConnections.remove (c);
|
||||||
|
allConnections.remove (c);
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void logStackTrace (String s) {
|
||||||
|
logger.finest (s);
|
||||||
|
StringBuilder b = new StringBuilder ();
|
||||||
|
StackTraceElement[] e = Thread.currentThread().getStackTrace();
|
||||||
|
for (int i=0; i<e.length; i++) {
|
||||||
|
b.append (e[i].toString()).append("\n");
|
||||||
|
}
|
||||||
|
logger.finest (b.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
static long getTimeMillis(long secs) {
|
||||||
|
if (secs == -1) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return secs * 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,8 +235,6 @@ abstract class AsynchronousSocketChannelImpl
|
|||||||
|
|
||||||
if (remoteAddress == null)
|
if (remoteAddress == null)
|
||||||
throw new NotYetConnectedException();
|
throw new NotYetConnectedException();
|
||||||
if (timeout < 0L)
|
|
||||||
throw new IllegalArgumentException("Negative timeout");
|
|
||||||
|
|
||||||
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
|
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
|
||||||
boolean shutdown = false;
|
boolean shutdown = false;
|
||||||
@ -342,8 +340,6 @@ abstract class AsynchronousSocketChannelImpl
|
|||||||
if (isOpen()) {
|
if (isOpen()) {
|
||||||
if (remoteAddress == null)
|
if (remoteAddress == null)
|
||||||
throw new NotYetConnectedException();
|
throw new NotYetConnectedException();
|
||||||
if (timeout < 0L)
|
|
||||||
throw new IllegalArgumentException("Negative timeout");
|
|
||||||
// check and update state
|
// check and update state
|
||||||
synchronized (writeLock) {
|
synchronized (writeLock) {
|
||||||
if (writeKilled)
|
if (writeKilled)
|
||||||
|
@ -358,7 +358,7 @@ class UTF_8 extends Unicode
|
|||||||
private static class Encoder extends CharsetEncoder {
|
private static class Encoder extends CharsetEncoder {
|
||||||
|
|
||||||
private Encoder(Charset cs) {
|
private Encoder(Charset cs) {
|
||||||
super(cs, 1.1f, 4.0f);
|
super(cs, 1.1f, 3.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canEncode(char c) {
|
public boolean canEncode(char c) {
|
||||||
|
@ -778,6 +778,13 @@ public class ExtendedCharsets
|
|||||||
"csIBM500"
|
"csIBM500"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
charset("x-IBM833", "IBM833",
|
||||||
|
new String[] {
|
||||||
|
"cp833",
|
||||||
|
"ibm833",
|
||||||
|
"ibm-833"
|
||||||
|
});
|
||||||
|
|
||||||
//EBCDIC DBCS-only Korean
|
//EBCDIC DBCS-only Korean
|
||||||
charset("x-IBM834", "IBM834",
|
charset("x-IBM834", "IBM834",
|
||||||
new String[] {
|
new String[] {
|
||||||
|
@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ticket readData() throws IOException, RealmException, KrbApErrException, Asn1Exception {
|
byte[] readData() throws IOException {
|
||||||
int length;
|
int length;
|
||||||
length = read(4);
|
length = read(4);
|
||||||
if (length > 0) {
|
if (length == 0) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
byte[] bytes = new byte[length];
|
byte[] bytes = new byte[length];
|
||||||
read(bytes, 0, length);
|
read(bytes, 0, length);
|
||||||
Ticket ticket = new Ticket(bytes);
|
return bytes;
|
||||||
return ticket;
|
|
||||||
}
|
}
|
||||||
else return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean[] readFlags() throws IOException {
|
boolean[] readFlags() throws IOException {
|
||||||
@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
}
|
}
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the next cred in stream.
|
||||||
|
* @return the next cred, null if ticket or second_ticket unparseable.
|
||||||
|
*
|
||||||
|
* Note: MIT krb5 1.8.1 might generate a config entry with server principal
|
||||||
|
* X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/REALM@REALM. The
|
||||||
|
* entry is used by KDC to inform the client that it support certain
|
||||||
|
* features. Its ticket is not a valid krb5 ticket and thus this method
|
||||||
|
* returns null.
|
||||||
|
*/
|
||||||
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
|
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
|
||||||
PrincipalName cpname = readPrincipal(version);
|
PrincipalName cpname = readPrincipal(version);
|
||||||
if (DEBUG)
|
if (DEBUG)
|
||||||
@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
|||||||
if (auData != null) {
|
if (auData != null) {
|
||||||
auData = new AuthorizationData(auDataEntry);
|
auData = new AuthorizationData(auDataEntry);
|
||||||
}
|
}
|
||||||
Ticket ticket = readData();
|
byte[] ticketData = readData();
|
||||||
if (DEBUG) {
|
byte[] ticketData2 = readData();
|
||||||
System.out.println(">>>DEBUG <CCacheInputStream>");
|
|
||||||
if (ticket == null) {
|
try {
|
||||||
System.out.println("///ticket is null");
|
return new Credentials(cpname, spname, key, authtime, starttime,
|
||||||
}
|
endtime, renewTill, skey, tFlags,
|
||||||
|
addrs, auData,
|
||||||
|
ticketData != null ? new Ticket(ticketData) : null,
|
||||||
|
ticketData2 != null ? new Ticket(ticketData2) : null);
|
||||||
|
} catch (Exception e) { // If any of new Ticket(*) fails.
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
Ticket secTicket = readData();
|
|
||||||
Credentials cred = new Credentials(cpname, spname, key, authtime, starttime,
|
|
||||||
endtime, renewTill, skey, tFlags,
|
|
||||||
addrs, auData, ticket, secTicket);
|
|
||||||
return cred;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -186,7 +186,10 @@ public class FileCredentialsCache extends CredentialsCache
|
|||||||
primaryRealm = primaryPrincipal.getRealm();
|
primaryRealm = primaryPrincipal.getRealm();
|
||||||
credentialsList = new Vector<Credentials> ();
|
credentialsList = new Vector<Credentials> ();
|
||||||
while (cis.available() > 0) {
|
while (cis.available() > 0) {
|
||||||
credentialsList.addElement(cis.readCred(version));
|
Credentials cred = cis.readCred(version);
|
||||||
|
if (cred != null) {
|
||||||
|
credentialsList.addElement(cred);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cis.close();
|
cis.close();
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ final class P11Cipher extends CipherSpi {
|
|||||||
// DEC: return the length of trailing padding bytes given the specified
|
// DEC: return the length of trailing padding bytes given the specified
|
||||||
// padded data
|
// padded data
|
||||||
int unpad(byte[] paddedData, int len)
|
int unpad(byte[] paddedData, int len)
|
||||||
throws BadPaddingException;
|
throws BadPaddingException, IllegalBlockSizeException;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class PKCS5Padding implements Padding {
|
private static class PKCS5Padding implements Padding {
|
||||||
@ -96,9 +96,10 @@ final class P11Cipher extends CipherSpi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int unpad(byte[] paddedData, int len)
|
public int unpad(byte[] paddedData, int len)
|
||||||
throws BadPaddingException {
|
throws BadPaddingException, IllegalBlockSizeException {
|
||||||
if (len < 1 || len > paddedData.length) {
|
if ((len < 1) || (len % blockSize != 0)) {
|
||||||
throw new BadPaddingException("Invalid pad array length!");
|
throw new IllegalBlockSizeException
|
||||||
|
("Input length must be multiples of " + blockSize);
|
||||||
}
|
}
|
||||||
byte padValue = paddedData[len - 1];
|
byte padValue = paddedData[len - 1];
|
||||||
if (padValue < 1 || padValue > blockSize) {
|
if (padValue < 1 || padValue > blockSize) {
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -1472,19 +1472,9 @@ public final class NormalizerImpl {
|
|||||||
}
|
}
|
||||||
--remove;
|
--remove;
|
||||||
}
|
}
|
||||||
} else if(value2!=0) {
|
} else if(value2!=0) { // for U+1109A, U+1109C, and U+110AB
|
||||||
/* the composition is longer than the starter,
|
|
||||||
* move the intermediate characters back one */
|
|
||||||
starterIsSupplementary=true;
|
starterIsSupplementary=true;
|
||||||
/* temporarily increment for the loop boundary */
|
args.source[starter+1]=(char)value2;
|
||||||
++starter;
|
|
||||||
q=remove;
|
|
||||||
r=++remove;
|
|
||||||
while(starter<q) {
|
|
||||||
args.source[--r]=args.source[--q];
|
|
||||||
}
|
|
||||||
args.source[starter]=(char)value2;
|
|
||||||
--starter; /* undo the temporary increment */
|
|
||||||
/* } else { both are on the BMP, nothing more to do */
|
/* } else { both are on the BMP, nothing more to do */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<title>Nervous Text 1.1</title>
|
<title>Nervous Text 1.1</title>
|
||||||
<hr>
|
<hr>
|
||||||
<applet code="NervousText.class" width=534 height=50>
|
<applet code="NervousText.class" width=534 height=50>
|
||||||
<param name=text value="Java^T^M 2 SDK, Standard Edition 6.0">
|
<param name=text value="Java SE Development Kit (JDK) 7.0">
|
||||||
</applet>
|
</applet>
|
||||||
<hr>
|
<hr>
|
||||||
<a href="NervousText.java">The source.</a>
|
<a href="NervousText.java">The source.</a>
|
||||||
|
@ -75,7 +75,8 @@ public class J2DBench {
|
|||||||
|
|
||||||
static JFrame guiFrame;
|
static JFrame guiFrame;
|
||||||
|
|
||||||
static final SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z");
|
static final SimpleDateFormat sdf =
|
||||||
|
new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z");
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
progoptroot = new Group("prog", "Program Options");
|
progoptroot = new Group("prog", "Program Options");
|
||||||
@ -176,6 +177,8 @@ public class J2DBench {
|
|||||||
public static void main(String argv[]) {
|
public static void main(String argv[]) {
|
||||||
init();
|
init();
|
||||||
TestEnvironment.init();
|
TestEnvironment.init();
|
||||||
|
Result.init();
|
||||||
|
|
||||||
Destinations.init();
|
Destinations.init();
|
||||||
GraphicsTests.init();
|
GraphicsTests.init();
|
||||||
RenderTests.init();
|
RenderTests.init();
|
||||||
@ -323,7 +326,7 @@ public class J2DBench {
|
|||||||
} else if (type.equalsIgnoreCase("m")) {
|
} else if (type.equalsIgnoreCase("m")) {
|
||||||
multiplyWith = 60;
|
multiplyWith = 60;
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Invalid \"-loop\" option specified.");
|
System.err.println("Invalid \"-loop\" option specified.");
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,32 +334,20 @@ public class J2DBench {
|
|||||||
try {
|
try {
|
||||||
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
|
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
System.out.println("Invalid \"-loop\" option specified.");
|
System.err.println("Invalid \"-loop\" option specified.");
|
||||||
usage(1);
|
usage(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
requiredLoopTime = val * multiplyWith * 1000;
|
requiredLoopTime = val * multiplyWith * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (arg.length() > 7 &&
|
} else if (arg.length() > 8 &&
|
||||||
arg.substring(0, 7).equalsIgnoreCase("-report"))
|
arg.substring(0, 8).equalsIgnoreCase("-report:"))
|
||||||
{
|
{
|
||||||
for (int j = 7; j < arg.length(); j++) {
|
String error = Result.parseRateOpt(arg.substring(8));
|
||||||
char c = arg.charAt(j);
|
if (error != null) {
|
||||||
switch (c) {
|
System.err.println("Invalid rate: "+error);
|
||||||
case 'N': Result.unitScale = Result.UNITS_WHOLE; break;
|
usage(1);
|
||||||
case 'M': Result.unitScale = Result.UNITS_MILLIONS; break;
|
|
||||||
case 'K': Result.unitScale = Result.UNITS_THOUSANDS; break;
|
|
||||||
case 'A': Result.unitScale = Result.UNITS_AUTO; break;
|
|
||||||
case 'U': Result.useUnits = true; break;
|
|
||||||
case 'O': Result.useUnits = false; break;
|
|
||||||
case 's': Result.timeScale = Result.SECONDS_WHOLE; break;
|
|
||||||
case 'm': Result.timeScale = Result.SECONDS_MILLIS; break;
|
|
||||||
case 'u': Result.timeScale = Result.SECONDS_MICROS; break;
|
|
||||||
case 'n': Result.timeScale = Result.SECONDS_NANOS; break;
|
|
||||||
case 'a': Result.timeScale = Result.SECONDS_AUTO; break;
|
|
||||||
case '/': Result.invertRate = !Result.invertRate; break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String reason = Group.root.setOption(arg);
|
String reason = Group.root.setOption(arg);
|
||||||
@ -411,7 +402,7 @@ public class J2DBench {
|
|||||||
writer.flush();
|
writer.flush();
|
||||||
} catch(IOException ioe) {
|
} catch(IOException ioe) {
|
||||||
ioe.printStackTrace();
|
ioe.printStackTrace();
|
||||||
System.out.println("\nERROR : Could not create Loop-Report. Exit");
|
System.err.println("\nERROR : Could not create Loop-Report. Exit");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -466,7 +457,7 @@ public class J2DBench {
|
|||||||
|
|
||||||
} while(J2DBench.looping);
|
} while(J2DBench.looping);
|
||||||
|
|
||||||
if(J2DBench.looping) {
|
if (J2DBench.looping) {
|
||||||
writer.println("</html>");
|
writer.println("</html>");
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
@ -170,7 +170,7 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
updateGUI();
|
updateGUI();
|
||||||
jcb.addItemListener(new ItemListener() {
|
jcb.addItemListener(new ItemListener() {
|
||||||
public void itemStateChanged(ItemEvent e) {
|
public void itemStateChanged(ItemEvent e) {
|
||||||
if (e.getStateChange() == e.SELECTED) {
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||||
JComboBox jcb = (JComboBox) e.getItemSelectable();
|
JComboBox jcb = (JComboBox) e.getItemSelectable();
|
||||||
value = jcb.getSelectedIndex();
|
value = jcb.getSelectedIndex();
|
||||||
if (J2DBench.verbose.isEnabled()) {
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
@ -261,7 +261,7 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
updateGUI();
|
updateGUI();
|
||||||
jcb.addItemListener(new ItemListener() {
|
jcb.addItemListener(new ItemListener() {
|
||||||
public void itemStateChanged(ItemEvent e) {
|
public void itemStateChanged(ItemEvent e) {
|
||||||
value = (e.getStateChange() == e.SELECTED);
|
value = (e.getStateChange() == ItemEvent.SELECTED);
|
||||||
if (J2DBench.verbose.isEnabled()) {
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
System.out.println(getOptionString());
|
System.out.println(getOptionString());
|
||||||
}
|
}
|
||||||
@ -569,8 +569,6 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String setValueFromString(String value) {
|
public String setValueFromString(String value) {
|
||||||
int prev = 0;
|
|
||||||
int next = 0;
|
|
||||||
int enabled = 0;
|
int enabled = 0;
|
||||||
StringTokenizer st = new StringTokenizer(value, ",");
|
StringTokenizer st = new StringTokenizer(value, ",");
|
||||||
while (st.hasMoreTokens()) {
|
while (st.hasMoreTokens()) {
|
||||||
@ -588,7 +586,6 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
if (s != null) {
|
if (s != null) {
|
||||||
return "Bad value in list ("+s+")";
|
return "Bad value in list ("+s+")";
|
||||||
}
|
}
|
||||||
prev = next+1;
|
|
||||||
}
|
}
|
||||||
this.enabled = enabled;
|
this.enabled = enabled;
|
||||||
updateGUI();
|
updateGUI();
|
||||||
@ -623,6 +620,175 @@ public abstract class Option extends Node implements Modifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ObjectChoice extends Option {
|
||||||
|
int size;
|
||||||
|
String optionnames[];
|
||||||
|
Object optionvalues[];
|
||||||
|
String abbrevnames[];
|
||||||
|
String descnames[];
|
||||||
|
int defaultselected;
|
||||||
|
int selected;
|
||||||
|
JPanel jp;
|
||||||
|
JComboBox jcombo;
|
||||||
|
|
||||||
|
public ObjectChoice(Group parent, String nodeName, String description,
|
||||||
|
String optionnames[],
|
||||||
|
Object optionvalues[],
|
||||||
|
String abbrevnames[],
|
||||||
|
String descnames[],
|
||||||
|
int defaultselected)
|
||||||
|
{
|
||||||
|
this(parent, nodeName, description,
|
||||||
|
Math.min(Math.min(optionnames.length,
|
||||||
|
optionvalues.length),
|
||||||
|
Math.min(abbrevnames.length,
|
||||||
|
descnames.length)),
|
||||||
|
optionnames, optionvalues,
|
||||||
|
abbrevnames, descnames, defaultselected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectChoice(Group parent, String nodeName, String description,
|
||||||
|
int size,
|
||||||
|
String optionnames[],
|
||||||
|
Object optionvalues[],
|
||||||
|
String abbrevnames[],
|
||||||
|
String descnames[],
|
||||||
|
int defaultselected)
|
||||||
|
{
|
||||||
|
super(parent, nodeName, description);
|
||||||
|
this.size = size;
|
||||||
|
this.optionnames = trim(optionnames, size);
|
||||||
|
this.optionvalues = trim(optionvalues, size);
|
||||||
|
this.abbrevnames = trim(abbrevnames, size);
|
||||||
|
this.descnames = trim(descnames, size);
|
||||||
|
this.selected = this.defaultselected = defaultselected;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] trim(String list[], int size) {
|
||||||
|
if (list.length == size) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
String newlist[] = new String[size];
|
||||||
|
System.arraycopy(list, 0, newlist, 0, size);
|
||||||
|
return newlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Object[] trim(Object list[], int size) {
|
||||||
|
if (list.length == size) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
Object newlist[] = new Object[size];
|
||||||
|
System.arraycopy(list, 0, newlist, 0, size);
|
||||||
|
return newlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void restoreDefault() {
|
||||||
|
if (selected != defaultselected) {
|
||||||
|
selected = defaultselected;
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateGUI() {
|
||||||
|
if (jcombo != null) {
|
||||||
|
jcombo.setSelectedIndex(this.selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDefault() {
|
||||||
|
return (selected == defaultselected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Modifier.Iterator getIterator(TestEnvironment env) {
|
||||||
|
return new SwitchIterator(optionvalues, 1 << selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JComponent getJComponent() {
|
||||||
|
if (jp == null) {
|
||||||
|
jp = new JPanel();
|
||||||
|
jp.setLayout(new BorderLayout());
|
||||||
|
jp.add(new JLabel(getDescription()), BorderLayout.WEST);
|
||||||
|
jcombo = new JComboBox(descnames);
|
||||||
|
updateGUI();
|
||||||
|
jcombo.addItemListener(new ItemListener() {
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||||
|
selected = jcombo.getSelectedIndex();
|
||||||
|
if (J2DBench.verbose.isEnabled()) {
|
||||||
|
System.out.println(getOptionString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jp.add(jcombo, BorderLayout.EAST);
|
||||||
|
}
|
||||||
|
return jp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return optionvalues[selected];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIntValue() {
|
||||||
|
return ((Integer) optionvalues[selected]).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBooleanValue() {
|
||||||
|
return ((Boolean) optionvalues[selected]).booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValString() {
|
||||||
|
return optionnames[selected];
|
||||||
|
}
|
||||||
|
|
||||||
|
int findValueIndex(Object value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionvalues[i] == value) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValString(Object value) {
|
||||||
|
return optionnames[findValueIndex(value)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAbbreviatedModifierDescription(Object value) {
|
||||||
|
return abbrevnames[findValueIndex(value)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(int v) {
|
||||||
|
return setValue(new Integer(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(boolean v) {
|
||||||
|
return setValue(new Boolean(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValue(Object value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionvalues[i].equals(value)) {
|
||||||
|
this.selected = i;
|
||||||
|
updateGUI();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Bad value";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String setValueFromString(String value) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (optionnames[i].equals(value)) {
|
||||||
|
this.selected = i;
|
||||||
|
updateGUI();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Bad value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class BooleanIterator implements Modifier.Iterator {
|
public static class BooleanIterator implements Modifier.Iterator {
|
||||||
private Boolean list[];
|
private Boolean list[];
|
||||||
private int index;
|
private int index;
|
||||||
|
@ -35,23 +35,199 @@ import java.util.Vector;
|
|||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class Result {
|
public class Result {
|
||||||
public static final int UNITS_WHOLE = 0;
|
public static final int RATE_UNKNOWN = 0;
|
||||||
public static final int UNITS_THOUSANDS = 1;
|
|
||||||
public static final int UNITS_MILLIONS = 2;
|
|
||||||
public static final int UNITS_AUTO = 3;
|
|
||||||
|
|
||||||
public static final int SECONDS_WHOLE = 0;
|
public static final int WORK_OPS = 1;
|
||||||
public static final int SECONDS_MILLIS = 1;
|
public static final int WORK_UNITS = 2;
|
||||||
public static final int SECONDS_MICROS = 2;
|
public static final int WORK_THOUSANDS = 4;
|
||||||
public static final int SECONDS_NANOS = 3;
|
public static final int WORK_MILLIONS = 6;
|
||||||
public static final int SECONDS_AUTO = 4;
|
public static final int WORK_AUTO = 8;
|
||||||
|
|
||||||
public static int unitScale = UNITS_WHOLE;
|
public static final int TIME_SECONDS = 10;
|
||||||
public static int timeScale = SECONDS_WHOLE;
|
public static final int TIME_MILLIS = 11;
|
||||||
public static boolean useUnits = true;
|
public static final int TIME_MICROS = 12;
|
||||||
public static boolean invertRate = false;
|
public static final int TIME_NANOS = 13;
|
||||||
|
public static final int TIME_AUTO = 14;
|
||||||
|
|
||||||
|
static Group resultoptroot;
|
||||||
|
static Option.ObjectChoice timeOpt;
|
||||||
|
static Option.ObjectChoice workOpt;
|
||||||
|
static Option.ObjectChoice rateOpt;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
resultoptroot = new Group(TestEnvironment.globaloptroot,
|
||||||
|
"results", "Result Options");
|
||||||
|
|
||||||
|
String workStrings[] = {
|
||||||
|
"units",
|
||||||
|
"kilounits",
|
||||||
|
"megaunits",
|
||||||
|
"autounits",
|
||||||
|
"ops",
|
||||||
|
"kiloops",
|
||||||
|
"megaops",
|
||||||
|
"autoops",
|
||||||
|
};
|
||||||
|
String workDescriptions[] = {
|
||||||
|
"Test Units",
|
||||||
|
"Thousands of Test Units",
|
||||||
|
"Millions of Test Units",
|
||||||
|
"Auto-scaled Test Units",
|
||||||
|
"Operations",
|
||||||
|
"Thousands of Operations",
|
||||||
|
"Millions of Operations",
|
||||||
|
"Auto-scaled Operations",
|
||||||
|
};
|
||||||
|
Integer workObjects[] = {
|
||||||
|
new Integer(WORK_UNITS),
|
||||||
|
new Integer(WORK_THOUSANDS),
|
||||||
|
new Integer(WORK_MILLIONS),
|
||||||
|
new Integer(WORK_AUTO),
|
||||||
|
new Integer(WORK_OPS | WORK_UNITS),
|
||||||
|
new Integer(WORK_OPS | WORK_THOUSANDS),
|
||||||
|
new Integer(WORK_OPS | WORK_MILLIONS),
|
||||||
|
new Integer(WORK_OPS | WORK_AUTO),
|
||||||
|
};
|
||||||
|
workOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"workunits", "Work Units",
|
||||||
|
workStrings, workObjects,
|
||||||
|
workStrings, workDescriptions,
|
||||||
|
0);
|
||||||
|
String timeStrings[] = {
|
||||||
|
"sec",
|
||||||
|
"msec",
|
||||||
|
"usec",
|
||||||
|
"nsec",
|
||||||
|
"autosec",
|
||||||
|
};
|
||||||
|
String timeDescriptions[] = {
|
||||||
|
"Seconds",
|
||||||
|
"Milliseconds",
|
||||||
|
"Microseconds",
|
||||||
|
"Nanoseconds",
|
||||||
|
"Auto-scaled seconds",
|
||||||
|
};
|
||||||
|
Integer timeObjects[] = {
|
||||||
|
new Integer(TIME_SECONDS),
|
||||||
|
new Integer(TIME_MILLIS),
|
||||||
|
new Integer(TIME_MICROS),
|
||||||
|
new Integer(TIME_NANOS),
|
||||||
|
new Integer(TIME_AUTO),
|
||||||
|
};
|
||||||
|
timeOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"timeunits", "Time Units",
|
||||||
|
timeStrings, timeObjects,
|
||||||
|
timeStrings, timeDescriptions,
|
||||||
|
0);
|
||||||
|
String rateStrings[] = {
|
||||||
|
"unitspersec",
|
||||||
|
"secsperunit",
|
||||||
|
};
|
||||||
|
String rateDescriptions[] = {
|
||||||
|
"Work units per Time",
|
||||||
|
"Time units per Work",
|
||||||
|
};
|
||||||
|
Boolean rateObjects[] = {
|
||||||
|
Boolean.FALSE,
|
||||||
|
Boolean.TRUE,
|
||||||
|
};
|
||||||
|
rateOpt = new Option.ObjectChoice(resultoptroot,
|
||||||
|
"ratio", "Rate Ratio",
|
||||||
|
rateStrings, rateObjects,
|
||||||
|
rateStrings, rateDescriptions,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTimeUnit(int unit) {
|
||||||
|
return (unit >= TIME_SECONDS && unit <= TIME_AUTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isWorkUnit(int unit) {
|
||||||
|
return (unit >= WORK_OPS && unit <= (WORK_AUTO | WORK_OPS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String parseRateOpt(String opt) {
|
||||||
|
int timeScale = timeOpt.getIntValue();
|
||||||
|
int workScale = workOpt.getIntValue();
|
||||||
|
boolean invertRate = rateOpt.getBooleanValue();
|
||||||
|
int divindex = opt.indexOf('/');
|
||||||
|
if (divindex < 0) {
|
||||||
|
int unit = parseUnit(opt);
|
||||||
|
if (isTimeUnit(unit)) {
|
||||||
|
timeScale = unit;
|
||||||
|
} else if (isWorkUnit(unit)) {
|
||||||
|
workScale = unit;
|
||||||
|
} else {
|
||||||
|
return "Bad unit: "+opt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int unit1 = parseUnit(opt.substring(0,divindex));
|
||||||
|
int unit2 = parseUnit(opt.substring(divindex+1));
|
||||||
|
if (isTimeUnit(unit1)) {
|
||||||
|
if (isWorkUnit(unit2)) {
|
||||||
|
timeScale = unit1;
|
||||||
|
workScale = unit2;
|
||||||
|
invertRate = true;
|
||||||
|
} else if (isTimeUnit(unit2)) {
|
||||||
|
return "Both time units: "+opt;
|
||||||
|
} else {
|
||||||
|
return "Bad denominator: "+opt;
|
||||||
|
}
|
||||||
|
} else if (isWorkUnit(unit1)) {
|
||||||
|
if (isWorkUnit(unit2)) {
|
||||||
|
return "Both work units: "+opt;
|
||||||
|
} else if (isTimeUnit(unit2)) {
|
||||||
|
timeScale = unit2;
|
||||||
|
workScale = unit1;
|
||||||
|
invertRate = false;
|
||||||
|
} else {
|
||||||
|
return "Bad denominator: "+opt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "Bad numerator: "+opt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
timeOpt.setValue(timeScale);
|
||||||
|
workOpt.setValue(workScale);
|
||||||
|
rateOpt.setValue(invertRate);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HashMap unitMap;
|
||||||
|
|
||||||
|
static {
|
||||||
|
unitMap = new HashMap();
|
||||||
|
unitMap.put("U", new Integer(WORK_UNITS));
|
||||||
|
unitMap.put("M", new Integer(WORK_MILLIONS));
|
||||||
|
unitMap.put("K", new Integer(WORK_THOUSANDS));
|
||||||
|
unitMap.put("A", new Integer(WORK_AUTO));
|
||||||
|
unitMap.put("MU", new Integer(WORK_MILLIONS));
|
||||||
|
unitMap.put("KU", new Integer(WORK_THOUSANDS));
|
||||||
|
unitMap.put("AU", new Integer(WORK_AUTO));
|
||||||
|
|
||||||
|
unitMap.put("O", new Integer(WORK_UNITS | WORK_OPS));
|
||||||
|
unitMap.put("NO", new Integer(WORK_UNITS | WORK_OPS));
|
||||||
|
unitMap.put("MO", new Integer(WORK_MILLIONS | WORK_OPS));
|
||||||
|
unitMap.put("KO", new Integer(WORK_THOUSANDS | WORK_OPS));
|
||||||
|
unitMap.put("AO", new Integer(WORK_AUTO | WORK_OPS));
|
||||||
|
|
||||||
|
unitMap.put("s", new Integer(TIME_SECONDS));
|
||||||
|
unitMap.put("m", new Integer(TIME_MILLIS));
|
||||||
|
unitMap.put("u", new Integer(TIME_MICROS));
|
||||||
|
unitMap.put("n", new Integer(TIME_NANOS));
|
||||||
|
unitMap.put("a", new Integer(TIME_AUTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int parseUnit(String c) {
|
||||||
|
Integer u = (Integer) unitMap.get(c);
|
||||||
|
if (u != null) {
|
||||||
|
return u.intValue();
|
||||||
|
}
|
||||||
|
return RATE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
String unitname = "unit";
|
String unitname = "unit";
|
||||||
Test test;
|
Test test;
|
||||||
@ -157,69 +333,76 @@ public class Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getAverageString() {
|
public String getAverageString() {
|
||||||
double units = (useUnits ? getTotalUnits() : getTotalReps());
|
int timeScale = timeOpt.getIntValue();
|
||||||
|
int workScale = workOpt.getIntValue();
|
||||||
|
boolean invertRate = rateOpt.getBooleanValue();
|
||||||
double time = getTotalTime();
|
double time = getTotalTime();
|
||||||
|
String timeprefix = "";
|
||||||
|
switch (timeScale) {
|
||||||
|
case TIME_AUTO:
|
||||||
|
case TIME_SECONDS:
|
||||||
|
time /= 1000;
|
||||||
|
break;
|
||||||
|
case TIME_MILLIS:
|
||||||
|
timeprefix = "m";
|
||||||
|
break;
|
||||||
|
case TIME_MICROS:
|
||||||
|
time *= 1000.0;
|
||||||
|
timeprefix = "u";
|
||||||
|
break;
|
||||||
|
case TIME_NANOS:
|
||||||
|
time *= 1000000.0;
|
||||||
|
timeprefix = "n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
String workprefix = "";
|
||||||
|
boolean isOps = (workScale & WORK_OPS) != 0;
|
||||||
|
String workname = isOps ? "op" : unitname;
|
||||||
|
double work = isOps ? getTotalReps() : getTotalUnits();
|
||||||
|
switch (workScale & (~WORK_OPS)) {
|
||||||
|
case WORK_AUTO:
|
||||||
|
case WORK_UNITS:
|
||||||
|
break;
|
||||||
|
case WORK_THOUSANDS:
|
||||||
|
work /= 1000.0;
|
||||||
|
workprefix = "K";
|
||||||
|
break;
|
||||||
|
case WORK_MILLIONS:
|
||||||
|
work /= 1000000.0;
|
||||||
|
workprefix = "M";
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (invertRate) {
|
if (invertRate) {
|
||||||
double rate = time / units;
|
double rate = time / work;
|
||||||
String prefix = "";
|
if (timeScale == TIME_AUTO) {
|
||||||
switch (timeScale) {
|
|
||||||
case SECONDS_WHOLE:
|
|
||||||
rate /= 1000;
|
|
||||||
break;
|
|
||||||
case SECONDS_MILLIS:
|
|
||||||
prefix = "m";
|
|
||||||
break;
|
|
||||||
case SECONDS_MICROS:
|
|
||||||
rate *= 1000.0;
|
|
||||||
prefix = "u";
|
|
||||||
break;
|
|
||||||
case SECONDS_NANOS:
|
|
||||||
rate *= 1000000.0;
|
|
||||||
prefix = "n";
|
|
||||||
break;
|
|
||||||
case SECONDS_AUTO:
|
|
||||||
rate /= 1000.0;
|
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "m";
|
timeprefix = "m";
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "u";
|
timeprefix = "u";
|
||||||
if (rate < 1.0) {
|
if (rate < 1.0) {
|
||||||
rate *= 1000.0;
|
rate *= 1000.0;
|
||||||
prefix = "n";
|
timeprefix = "n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return rate+" "+prefix+"secs/"+(useUnits ? unitname : "op");
|
return rate+" "+timeprefix+"secs/"+workprefix+workname;
|
||||||
} else {
|
} else {
|
||||||
double rate = units / (time / 1000.0);
|
double rate = work / time;
|
||||||
String prefix = "";
|
if (workScale == WORK_AUTO) {
|
||||||
switch (unitScale) {
|
|
||||||
case UNITS_WHOLE:
|
|
||||||
break;
|
|
||||||
case UNITS_THOUSANDS:
|
|
||||||
rate /= 1000.0;
|
|
||||||
prefix = "K";
|
|
||||||
break;
|
|
||||||
case UNITS_MILLIONS:
|
|
||||||
rate /= 1000000.0;
|
|
||||||
prefix = "M";
|
|
||||||
break;
|
|
||||||
case UNITS_AUTO:
|
|
||||||
if (rate > 1000.0) {
|
if (rate > 1000.0) {
|
||||||
rate /= 1000.0;
|
rate /= 1000.0;
|
||||||
prefix = "K";
|
workprefix = "K";
|
||||||
if (rate > 1000.0) {
|
if (rate > 1000.0) {
|
||||||
rate /= 1000.0;
|
rate /= 1000.0;
|
||||||
prefix = "M";
|
workprefix = "M";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return rate+" "+prefix+(useUnits ? unitname : "op")+"s/sec";
|
return rate+" "+workprefix+workname+"s/"+timeprefix+"sec";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ public class J2DAnalyzer {
|
|||||||
"the following result sets are combined into a group");
|
"the following result sets are combined into a group");
|
||||||
out.println(" -NoGroup "+
|
out.println(" -NoGroup "+
|
||||||
"the following result sets stand on their own");
|
"the following result sets stand on their own");
|
||||||
|
out.println(" -ShowUncontested "+
|
||||||
|
"show results even when only result set has a result");
|
||||||
out.println(" -Graph "+
|
out.println(" -Graph "+
|
||||||
"graph the results visually (using lines of *'s)");
|
"graph the results visually (using lines of *'s)");
|
||||||
out.println(" -Best "+
|
out.println(" -Best "+
|
||||||
@ -83,6 +85,7 @@ public class J2DAnalyzer {
|
|||||||
public static void main(String argv[]) {
|
public static void main(String argv[]) {
|
||||||
boolean gavehelp = false;
|
boolean gavehelp = false;
|
||||||
boolean graph = false;
|
boolean graph = false;
|
||||||
|
boolean ignoreuncontested = true;
|
||||||
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
|
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
|
||||||
String newargs[] = new String[argv.length-1];
|
String newargs[] = new String[argv.length-1];
|
||||||
System.arraycopy(argv, 1, newargs, 0, newargs.length);
|
System.arraycopy(argv, 1, newargs, 0, newargs.length);
|
||||||
@ -97,6 +100,8 @@ public class J2DAnalyzer {
|
|||||||
results.add(groupHolder);
|
results.add(groupHolder);
|
||||||
} else if (arg.equalsIgnoreCase("-NoGroup")) {
|
} else if (arg.equalsIgnoreCase("-NoGroup")) {
|
||||||
groupHolder = null;
|
groupHolder = null;
|
||||||
|
} else if (arg.equalsIgnoreCase("-ShowUncontested")) {
|
||||||
|
ignoreuncontested = false;
|
||||||
} else if (arg.equalsIgnoreCase("-Graph")) {
|
} else if (arg.equalsIgnoreCase("-Graph")) {
|
||||||
graph = true;
|
graph = true;
|
||||||
} else if (arg.equalsIgnoreCase("-Best")) {
|
} else if (arg.equalsIgnoreCase("-Best")) {
|
||||||
@ -171,18 +176,23 @@ public class J2DAnalyzer {
|
|||||||
String key = keys[k];
|
String key = keys[k];
|
||||||
ResultHolder rh = base.getResultByKey(key);
|
ResultHolder rh = base.getResultByKey(key);
|
||||||
double score = rh.getScore();
|
double score = rh.getScore();
|
||||||
System.out.println(rh.getShortKey()+":");
|
|
||||||
double maxscore = score;
|
double maxscore = score;
|
||||||
if (graph) {
|
int numcontesting = 0;
|
||||||
for (int i = 0; i < numsets; i++) {
|
for (int i = 0; i < numsets; i++) {
|
||||||
ResultSetHolder rsh =
|
ResultSetHolder rsh =
|
||||||
(ResultSetHolder) results.elementAt(i);
|
(ResultSetHolder) results.elementAt(i);
|
||||||
ResultHolder rh2 = rsh.getResultByKey(key);
|
ResultHolder rh2 = rsh.getResultByKey(key);
|
||||||
if (rh2 != null) {
|
if (rh2 != null) {
|
||||||
|
if (graph) {
|
||||||
maxscore = Math.max(maxscore, rh2.getBestScore());
|
maxscore = Math.max(maxscore, rh2.getBestScore());
|
||||||
}
|
}
|
||||||
|
numcontesting++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ignoreuncontested && numcontesting < 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
System.out.println(rh.getShortKey()+":");
|
||||||
for (int i = 0; i < numsets; i++) {
|
for (int i = 0; i < numsets; i++) {
|
||||||
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
|
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
|
||||||
System.out.print(rsh.getTitle()+": ");
|
System.out.print(rsh.getTitle()+": ");
|
||||||
|
@ -38,6 +38,8 @@ import java.awt.RenderingHints;
|
|||||||
import java.awt.Polygon;
|
import java.awt.Polygon;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.geom.Point2D;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
import j2dbench.Destinations;
|
import j2dbench.Destinations;
|
||||||
@ -74,6 +76,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
static Option animList;
|
static Option animList;
|
||||||
static Option sizeList;
|
static Option sizeList;
|
||||||
static Option compRules;
|
static Option compRules;
|
||||||
|
static Option transforms;
|
||||||
static Option doExtraAlpha;
|
static Option doExtraAlpha;
|
||||||
static Option doXor;
|
static Option doXor;
|
||||||
static Option doClipping;
|
static Option doClipping;
|
||||||
@ -167,6 +170,29 @@ public abstract class GraphicsTests extends Test {
|
|||||||
j, rulenames, rules, rulenames,
|
j, rulenames, rules, rulenames,
|
||||||
ruledescs, (1 << defrule));
|
ruledescs, (1 << defrule));
|
||||||
((Option.ObjectList) compRules).setNumRows(4);
|
((Option.ObjectList) compRules).setNumRows(4);
|
||||||
|
|
||||||
|
Transform xforms[] = {
|
||||||
|
Identity.instance,
|
||||||
|
FTranslate.instance,
|
||||||
|
Scale2x2.instance,
|
||||||
|
Rotate15.instance,
|
||||||
|
ShearX.instance,
|
||||||
|
ShearY.instance,
|
||||||
|
};
|
||||||
|
String xformnames[] = new String[xforms.length];
|
||||||
|
String xformdescs[] = new String[xforms.length];
|
||||||
|
for (int i = 0; i < xforms.length; i++) {
|
||||||
|
xformnames[i] = xforms[i].getShortName();
|
||||||
|
xformdescs[i] = xforms[i].getDescription();
|
||||||
|
}
|
||||||
|
transforms =
|
||||||
|
new Option.ObjectList(groptroot, "transform",
|
||||||
|
"Affine Transform",
|
||||||
|
xforms.length,
|
||||||
|
xformnames, xforms, xformnames,
|
||||||
|
xformdescs, 0x1);
|
||||||
|
((Option.ObjectList) transforms).setNumRows(3);
|
||||||
|
|
||||||
doExtraAlpha =
|
doExtraAlpha =
|
||||||
new Option.Toggle(groptroot, "extraalpha",
|
new Option.Toggle(groptroot, "extraalpha",
|
||||||
"Render with an \"extra alpha\" of 0.125",
|
"Render with an \"extra alpha\" of 0.125",
|
||||||
@ -200,6 +226,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
int orgX, orgY;
|
int orgX, orgY;
|
||||||
int initX, initY;
|
int initX, initY;
|
||||||
int maxX, maxY;
|
int maxX, maxY;
|
||||||
|
double pixscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GraphicsTests(Group parent, String nodeName, String description) {
|
public GraphicsTests(Group parent, String nodeName, String description) {
|
||||||
@ -211,7 +238,7 @@ public abstract class GraphicsTests extends Test {
|
|||||||
public Object initTest(TestEnvironment env, Result result) {
|
public Object initTest(TestEnvironment env, Result result) {
|
||||||
Context ctx = createContext();
|
Context ctx = createContext();
|
||||||
initContext(env, ctx);
|
initContext(env, ctx);
|
||||||
result.setUnits(pixelsTouched(ctx));
|
result.setUnits((int) (ctx.pixscale * pixelsTouched(ctx)));
|
||||||
result.setUnitName("pixel");
|
result.setUnitName("pixel");
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
@ -232,6 +259,9 @@ public abstract class GraphicsTests extends Test {
|
|||||||
ctx.graphics = env.getGraphics();
|
ctx.graphics = env.getGraphics();
|
||||||
int w = env.getWidth();
|
int w = env.getWidth();
|
||||||
int h = env.getHeight();
|
int h = env.getHeight();
|
||||||
|
ctx.size = env.getIntValue(sizeList);
|
||||||
|
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
||||||
|
ctx.pixscale = 1.0;
|
||||||
if (hasGraphics2D) {
|
if (hasGraphics2D) {
|
||||||
Graphics2D g2d = (Graphics2D) ctx.graphics;
|
Graphics2D g2d = (Graphics2D) ctx.graphics;
|
||||||
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
|
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
|
||||||
@ -251,11 +281,14 @@ public abstract class GraphicsTests extends Test {
|
|||||||
p.addPoint(0, 0);
|
p.addPoint(0, 0);
|
||||||
g2d.clip(p);
|
g2d.clip(p);
|
||||||
}
|
}
|
||||||
|
Transform tx = (Transform) env.getModifier(transforms);
|
||||||
|
Dimension envdim = new Dimension(w, h);
|
||||||
|
tx.init(g2d, ctx, envdim);
|
||||||
|
w = envdim.width;
|
||||||
|
h = envdim.height;
|
||||||
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
|
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
|
||||||
env.getModifier(renderHint));
|
env.getModifier(renderHint));
|
||||||
}
|
}
|
||||||
ctx.size = env.getIntValue(sizeList);
|
|
||||||
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
|
||||||
switch (env.getIntValue(animList)) {
|
switch (env.getIntValue(animList)) {
|
||||||
case 0:
|
case 0:
|
||||||
ctx.animate = false;
|
ctx.animate = false;
|
||||||
@ -290,4 +323,201 @@ public abstract class GraphicsTests extends Test {
|
|||||||
graphics.dispose();
|
graphics.dispose();
|
||||||
((Context) ctx).graphics = null;
|
((Context) ctx).graphics = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract static class Transform {
|
||||||
|
public abstract String getShortName();
|
||||||
|
public abstract String getDescription();
|
||||||
|
public abstract void init(Graphics2D g2d, Context ctx, Dimension dim);
|
||||||
|
|
||||||
|
public static double scaleForPoint(AffineTransform at,
|
||||||
|
double xorig, double yorig,
|
||||||
|
double x, double y,
|
||||||
|
int w, int h)
|
||||||
|
{
|
||||||
|
Point2D.Double ptd = new Point2D.Double(x, y);
|
||||||
|
at.transform(ptd, ptd);
|
||||||
|
x = ptd.getX();
|
||||||
|
y = ptd.getY();
|
||||||
|
double scale = 1.0;
|
||||||
|
if (x < 0) {
|
||||||
|
scale = Math.min(scale, xorig / (xorig - x));
|
||||||
|
} else if (x > w) {
|
||||||
|
scale = Math.min(scale, (w - xorig) / (x - xorig));
|
||||||
|
}
|
||||||
|
if (y < 0) {
|
||||||
|
scale = Math.min(scale, yorig / (yorig - y));
|
||||||
|
} else if (y > h) {
|
||||||
|
scale = Math.min(scale, (h - yorig) / (y - yorig));
|
||||||
|
}
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Dimension scaleForTransform(AffineTransform at,
|
||||||
|
Dimension dim)
|
||||||
|
{
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
Point2D.Double ptd = new Point2D.Double(0, 0);
|
||||||
|
at.transform(ptd, ptd);
|
||||||
|
double ox = ptd.getX();
|
||||||
|
double oy = ptd.getY();
|
||||||
|
if (ox < 0 || ox > w || oy < 0 || oy > h) {
|
||||||
|
throw new InternalError("origin outside destination");
|
||||||
|
}
|
||||||
|
double scalex = scaleForPoint(at, ox, oy, w, h, w, h);
|
||||||
|
double scaley = scalex;
|
||||||
|
scalex = Math.min(scaleForPoint(at, ox, oy, w, 0, w, h), scalex);
|
||||||
|
scaley = Math.min(scaleForPoint(at, ox, oy, 0, h, w, h), scaley);
|
||||||
|
if (scalex < 0 || scaley < 0) {
|
||||||
|
throw new InternalError("could not fit dims to transform");
|
||||||
|
}
|
||||||
|
return new Dimension((int) Math.floor(w * scalex),
|
||||||
|
(int) Math.floor(h * scaley));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Identity extends Transform {
|
||||||
|
public static final Identity instance = new Identity();
|
||||||
|
|
||||||
|
private Identity() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "ident";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Identity";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class FTranslate extends Transform {
|
||||||
|
public static final FTranslate instance = new FTranslate();
|
||||||
|
|
||||||
|
private FTranslate() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "ftrans";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "FTranslate 1.5";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate(1.5, 1.5);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(w-3, h-3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Scale2x2 extends Transform {
|
||||||
|
public static final Scale2x2 instance = new Scale2x2();
|
||||||
|
|
||||||
|
private Scale2x2() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "scale2x2";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Scale 2x by 2x";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.scale(2.0, 2.0);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(w/2, h/2);
|
||||||
|
ctx.pixscale = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Rotate15 extends Transform {
|
||||||
|
public static final Rotate15 instance = new Rotate15();
|
||||||
|
|
||||||
|
private Rotate15() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "rot15";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Rotate 15 degrees";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
double theta = Math.toRadians(15);
|
||||||
|
double cos = Math.cos(theta);
|
||||||
|
double sin = Math.sin(theta);
|
||||||
|
double xsize = sin * h + cos * w;
|
||||||
|
double ysize = sin * w + cos * h;
|
||||||
|
double scale = Math.min(w / xsize, h / ysize);
|
||||||
|
xsize *= scale;
|
||||||
|
ysize *= scale;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate((w - xsize) / 2.0, (h - ysize) / 2.0);
|
||||||
|
at.translate(sin * h * scale, 0.0);
|
||||||
|
at.rotate(theta);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ShearX extends Transform {
|
||||||
|
public static final ShearX instance = new ShearX();
|
||||||
|
|
||||||
|
private ShearX() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "shearx";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Shear X to the right";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate(0.0, (h - (w*h)/(w + h*0.1)) / 2);
|
||||||
|
at.shear(0.1, 0.0);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ShearY extends Transform {
|
||||||
|
public static final ShearY instance = new ShearY();
|
||||||
|
|
||||||
|
private ShearY() {}
|
||||||
|
|
||||||
|
public String getShortName() {
|
||||||
|
return "sheary";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return "Shear Y down";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
|
||||||
|
int w = dim.width;
|
||||||
|
int h = dim.height;
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.translate((w - (w*h)/(h + w*0.1)) / 2, 0.0);
|
||||||
|
at.shear(0.0, 0.1);
|
||||||
|
g2d.transform(at);
|
||||||
|
dim.setSize(scaleForTransform(at, dim));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ public abstract class TextTests extends Test {
|
|||||||
taaNames, taaHints,
|
taaNames, taaHints,
|
||||||
taaNames, taaNames,
|
taaNames, taaNames,
|
||||||
0x1);
|
0x1);
|
||||||
((Option.ObjectList) taaList).setNumRows(2);
|
((Option.ObjectList) taaList).setNumRows(6);
|
||||||
// add special TextAAOpt for backwards compatibility with
|
// add special TextAAOpt for backwards compatibility with
|
||||||
// older options files
|
// older options files
|
||||||
new TextAAOpt();
|
new TextAAOpt();
|
||||||
@ -707,3 +707,4 @@ public abstract class TextTests extends Test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,5 +31,9 @@ disabledMechanisms = {
|
|||||||
CKM_SHA256_RSA_PKCS
|
CKM_SHA256_RSA_PKCS
|
||||||
CKM_SHA384_RSA_PKCS
|
CKM_SHA384_RSA_PKCS
|
||||||
CKM_SHA512_RSA_PKCS
|
CKM_SHA512_RSA_PKCS
|
||||||
|
# the following mechanisms are disabled to ensure backward compatibility (Solaris bug 6545046)
|
||||||
|
CKM_DES_CBC_PAD
|
||||||
|
CKM_DES3_CBC_PAD
|
||||||
|
CKM_AES_CBC_PAD
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,14 +132,17 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
|
|||||||
|
|
||||||
in_buf = (jbyte *) malloc(this_len);
|
in_buf = (jbyte *) malloc(this_len);
|
||||||
if (in_buf == 0) {
|
if (in_buf == 0) {
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
// Throw OOME only when length is not zero
|
||||||
|
if (this_len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
|
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
|
||||||
out_buf = (jbyte *) malloc(len);
|
out_buf = (jbyte *) malloc(len);
|
||||||
if (out_buf == 0) {
|
if (out_buf == 0) {
|
||||||
free(in_buf);
|
free(in_buf);
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
if (len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +176,8 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
|
|||||||
jboolean finish = (*env)->GetBooleanField(env, this, finishID);
|
jboolean finish = (*env)->GetBooleanField(env, this, finishID);
|
||||||
in_buf = (jbyte *) malloc(this_len);
|
in_buf = (jbyte *) malloc(this_len);
|
||||||
if (in_buf == 0) {
|
if (in_buf == 0) {
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
if (this_len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
|
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
|
||||||
@ -181,7 +185,8 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
|
|||||||
out_buf = (jbyte *) malloc(len);
|
out_buf = (jbyte *) malloc(len);
|
||||||
if (out_buf == 0) {
|
if (out_buf == 0) {
|
||||||
free(in_buf);
|
free(in_buf);
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
if (len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,8 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr,
|
|||||||
|
|
||||||
in_buf = (jbyte *) malloc(in_len);
|
in_buf = (jbyte *) malloc(in_len);
|
||||||
if (in_buf == 0) {
|
if (in_buf == 0) {
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
if (in_len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
(*env)->GetByteArrayRegion(env, this_buf, this_off, in_len, in_buf);
|
(*env)->GetByteArrayRegion(env, this_buf, this_off, in_len, in_buf);
|
||||||
@ -143,7 +144,8 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr,
|
|||||||
out_buf = (jbyte *) malloc(len);
|
out_buf = (jbyte *) malloc(len);
|
||||||
if (out_buf == 0) {
|
if (out_buf == 0) {
|
||||||
free(in_buf);
|
free(in_buf);
|
||||||
JNU_ThrowOutOfMemoryError(env, 0);
|
if (len != 0)
|
||||||
|
JNU_ThrowOutOfMemoryError(env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ findEND(jzfile *zip, void *endbuf)
|
|||||||
if (pos < 0) {
|
if (pos < 0) {
|
||||||
/* Pretend there are some NUL bytes before start of file */
|
/* Pretend there are some NUL bytes before start of file */
|
||||||
off = -pos;
|
off = -pos;
|
||||||
memset(buf, '\0', off);
|
memset(buf, '\0', (size_t)off);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readFullyAt(zfd, buf + off, sizeof(buf) - off,
|
if (readFullyAt(zfd, buf + off, sizeof(buf) - off,
|
||||||
@ -426,7 +426,7 @@ static int
|
|||||||
isMetaName(const char *name, int length)
|
isMetaName(const char *name, int length)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
if (length < sizeof("META-INF/") - 1)
|
if (length < (int)sizeof("META-INF/") - 1)
|
||||||
return 0;
|
return 0;
|
||||||
for (s = "META-INF/"; *s != '\0'; s++) {
|
for (s = "META-INF/"; *s != '\0'; s++) {
|
||||||
char c = *name++;
|
char c = *name++;
|
||||||
@ -912,7 +912,7 @@ readCENHeader(jzfile *zip, jlong cenpos, jint bufsize)
|
|||||||
ZFILE zfd = zip->zfd;
|
ZFILE zfd = zip->zfd;
|
||||||
char *cen;
|
char *cen;
|
||||||
if (bufsize > zip->len - cenpos)
|
if (bufsize > zip->len - cenpos)
|
||||||
bufsize = zip->len - cenpos;
|
bufsize = (jint)(zip->len - cenpos);
|
||||||
if ((cen = malloc(bufsize)) == NULL) goto Catch;
|
if ((cen = malloc(bufsize)) == NULL) goto Catch;
|
||||||
if (readFullyAt(zfd, cen, bufsize, cenpos) == -1) goto Catch;
|
if (readFullyAt(zfd, cen, bufsize, cenpos) == -1) goto Catch;
|
||||||
censize = CENSIZE(cen);
|
censize = CENSIZE(cen);
|
||||||
@ -1256,6 +1256,9 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
|
|||||||
* file had been previously locked with ZIP_Lock(). Returns the
|
* file had been previously locked with ZIP_Lock(). Returns the
|
||||||
* number of bytes read, or -1 if an error occurred. If zip->msg != 0
|
* number of bytes read, or -1 if an error occurred. If zip->msg != 0
|
||||||
* then a zip error occurred and zip->msg contains the error text.
|
* then a zip error occurred and zip->msg contains the error text.
|
||||||
|
*
|
||||||
|
* The current implementation does not support reading an entry that
|
||||||
|
* has the size bigger than 2**32 bytes in ONE invocation.
|
||||||
*/
|
*/
|
||||||
jint
|
jint
|
||||||
ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
|
ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
|
||||||
@ -1276,7 +1279,7 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
|
|||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (len > entry_size - pos)
|
if (len > entry_size - pos)
|
||||||
len = entry_size - pos;
|
len = (jint)(entry_size - pos);
|
||||||
|
|
||||||
/* Get file offset to start reading data */
|
/* Get file offset to start reading data */
|
||||||
start = ZIP_GetEntryDataOffset(zip, entry);
|
start = ZIP_GetEntryDataOffset(zip, entry);
|
||||||
@ -1306,6 +1309,9 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
|
|||||||
* from ZIP/JAR files specified in the class path. It is defined here
|
* from ZIP/JAR files specified in the class path. It is defined here
|
||||||
* so that it can be dynamically loaded by the runtime if the zip library
|
* so that it can be dynamically loaded by the runtime if the zip library
|
||||||
* is found.
|
* is found.
|
||||||
|
*
|
||||||
|
* The current implementation does not support reading an entry that
|
||||||
|
* has the size bigger than 2**32 bytes in ONE invocation.
|
||||||
*/
|
*/
|
||||||
jboolean
|
jboolean
|
||||||
InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
||||||
@ -1314,7 +1320,6 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
|||||||
char tmp[BUF_SIZE];
|
char tmp[BUF_SIZE];
|
||||||
jlong pos = 0;
|
jlong pos = 0;
|
||||||
jlong count = entry->csize;
|
jlong count = entry->csize;
|
||||||
jboolean status;
|
|
||||||
|
|
||||||
*msg = 0; /* Reset error message */
|
*msg = 0; /* Reset error message */
|
||||||
|
|
||||||
@ -1330,10 +1335,10 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
strm.next_out = buf;
|
strm.next_out = buf;
|
||||||
strm.avail_out = entry->size;
|
strm.avail_out = (uInt)entry->size;
|
||||||
|
|
||||||
while (count > 0) {
|
while (count > 0) {
|
||||||
jint n = count > (jlong)sizeof(tmp) ? (jint)sizeof(tmp) : count;
|
jint n = count > (jlong)sizeof(tmp) ? (jint)sizeof(tmp) : (jint)count;
|
||||||
ZIP_Lock(zip);
|
ZIP_Lock(zip);
|
||||||
n = ZIP_Read(zip, entry, pos, tmp, n);
|
n = ZIP_Read(zip, entry, pos, tmp, n);
|
||||||
ZIP_Unlock(zip);
|
ZIP_Unlock(zip);
|
||||||
@ -1368,12 +1373,16 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
|||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The current implementation does not support reading an entry that
|
||||||
|
* has the size bigger than 2**32 bytes in ONE invocation.
|
||||||
|
*/
|
||||||
jzentry * JNICALL
|
jzentry * JNICALL
|
||||||
ZIP_FindEntry(jzfile *zip, char *name, jint *sizeP, jint *nameLenP)
|
ZIP_FindEntry(jzfile *zip, char *name, jint *sizeP, jint *nameLenP)
|
||||||
{
|
{
|
||||||
jzentry *entry = ZIP_GetEntry(zip, name, 0);
|
jzentry *entry = ZIP_GetEntry(zip, name, 0);
|
||||||
if (entry) {
|
if (entry) {
|
||||||
*sizeP = entry->size;
|
*sizeP = (jint)entry->size;
|
||||||
*nameLenP = strlen(entry->name);
|
*nameLenP = strlen(entry->name);
|
||||||
}
|
}
|
||||||
return entry;
|
return entry;
|
||||||
|
@ -75,7 +75,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
|
|||||||
deflateEnd(&stream);
|
deflateEnd(&stream);
|
||||||
return err == Z_OK ? Z_BUF_ERROR : err;
|
return err == Z_OK ? Z_BUF_ERROR : err;
|
||||||
}
|
}
|
||||||
*destLen = stream.total_out;
|
*destLen = (uLong)stream.total_out;
|
||||||
|
|
||||||
err = deflateEnd(&stream);
|
err = deflateEnd(&stream);
|
||||||
return err;
|
return err;
|
||||||
|
@ -78,7 +78,7 @@ int ZEXPORT uncompress (dest, destLen, source, sourceLen)
|
|||||||
return Z_DATA_ERROR;
|
return Z_DATA_ERROR;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
*destLen = stream.total_out;
|
*destLen = (uLong)stream.total_out;
|
||||||
|
|
||||||
err = inflateEnd(&stream);
|
err = inflateEnd(&stream);
|
||||||
return err;
|
return err;
|
||||||
|
@ -57,9 +57,12 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer {
|
|||||||
|
|
||||||
private native void run(String title, int mode, String dir, String file,
|
private native void run(String title, int mode, String dir, String file,
|
||||||
FilenameFilter filter, boolean isMultipleMode);
|
FilenameFilter filter, boolean isMultipleMode);
|
||||||
|
|
||||||
private native void quit();
|
private native void quit();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public native void toFront();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called exclusively by the native C code.
|
* Called exclusively by the native C code.
|
||||||
*/
|
*/
|
||||||
|
@ -150,6 +150,8 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
|
|||||||
|
|
||||||
void updateChildrenSizes() {
|
void updateChildrenSizes() {
|
||||||
super.updateChildrenSizes();
|
super.updateChildrenSizes();
|
||||||
|
int height = getMenuBarHeight();
|
||||||
|
|
||||||
// XWindow.reshape calls XBaseWindow.xSetBounds, which acquires
|
// XWindow.reshape calls XBaseWindow.xSetBounds, which acquires
|
||||||
// the AWT lock, so we have to acquire the AWT lock here
|
// the AWT lock, so we have to acquire the AWT lock here
|
||||||
// before getStateLock() to avoid a deadlock with the Toolkit thread
|
// before getStateLock() to avoid a deadlock with the Toolkit thread
|
||||||
@ -159,7 +161,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
|
|||||||
synchronized(getStateLock()) {
|
synchronized(getStateLock()) {
|
||||||
int width = dimensions.getClientSize().width;
|
int width = dimensions.getClientSize().width;
|
||||||
if (menubarPeer != null) {
|
if (menubarPeer != null) {
|
||||||
menubarPeer.reshape(0, 0, width, getMenuBarHeight());
|
menubarPeer.reshape(0, 0, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -217,15 +217,18 @@ static int ParseLocale(int cat, char ** std_language, char ** std_script,
|
|||||||
/* Normalize the language name */
|
/* Normalize the language name */
|
||||||
if (std_language != NULL) {
|
if (std_language != NULL) {
|
||||||
*std_language = "en";
|
*std_language = "en";
|
||||||
if (language != NULL) {
|
if (language != NULL && mapLookup(language_names, language, std_language) == 0) {
|
||||||
mapLookup(language_names, language, std_language);
|
*std_language = malloc(strlen(language)+1);
|
||||||
|
strcpy(*std_language, language);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Normalize the country name */
|
/* Normalize the country name */
|
||||||
if (std_country != NULL && country != NULL) {
|
if (std_country != NULL && country != NULL) {
|
||||||
*std_country = country;
|
if (mapLookup(country_names, country, std_country) == 0) {
|
||||||
mapLookup(country_names, country, std_country);
|
*std_country = malloc(strlen(country)+1);
|
||||||
|
strcpy(*std_country, country);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Normalize the script and variant name. Note that we only use
|
/* Normalize the script and variant name. Note that we only use
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
"zh", "zh_CN",
|
"zh", "zh_CN",
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
"bokmal", "nb_NO",
|
"bokmal", "nb_NO",
|
||||||
"bokm\u00e5l", "nb_NO",
|
"bokm\xE5l", "nb_NO",
|
||||||
"catalan", "ca_ES",
|
"catalan", "ca_ES",
|
||||||
"croatian", "hr_HR",
|
"croatian", "hr_HR",
|
||||||
"czech", "cs_CZ",
|
"czech", "cs_CZ",
|
||||||
@ -144,203 +144,16 @@
|
|||||||
static char *language_names[] = {
|
static char *language_names[] = {
|
||||||
"C", "en",
|
"C", "en",
|
||||||
"POSIX", "en",
|
"POSIX", "en",
|
||||||
"aa", "aa",
|
|
||||||
"ab", "ab",
|
|
||||||
"ae", "ae",
|
|
||||||
"af", "af",
|
|
||||||
"ak", "ak",
|
|
||||||
"am", "am",
|
|
||||||
"an", "an",
|
|
||||||
"ar", "ar",
|
|
||||||
"as", "as",
|
|
||||||
"av", "av",
|
|
||||||
"ay", "ay",
|
|
||||||
"az", "az",
|
|
||||||
"ba", "ba",
|
|
||||||
"be", "be",
|
|
||||||
"bg", "bg",
|
|
||||||
"bh", "bh",
|
|
||||||
"bi", "bi",
|
|
||||||
"bm", "bm",
|
|
||||||
"bn", "bn",
|
|
||||||
"bo", "bo",
|
|
||||||
"br", "br",
|
|
||||||
"bs", "bs",
|
|
||||||
"ca", "ca",
|
|
||||||
"ce", "ce",
|
|
||||||
"ch", "ch",
|
|
||||||
"co", "co",
|
|
||||||
"cr", "cr",
|
|
||||||
"cs", "cs",
|
|
||||||
"cz", "cs",
|
"cz", "cs",
|
||||||
"cu", "cu",
|
|
||||||
"cv", "cv",
|
|
||||||
"cy", "cy",
|
|
||||||
"da", "da",
|
|
||||||
"de", "de",
|
|
||||||
"dv", "dv",
|
|
||||||
"dz", "dz",
|
|
||||||
"ee", "ee",
|
|
||||||
"el", "el",
|
|
||||||
"en", "en",
|
|
||||||
"eo", "eo",
|
|
||||||
"es", "es",
|
|
||||||
"et", "et",
|
|
||||||
"eu", "eu",
|
|
||||||
"fa", "fa",
|
|
||||||
"ff", "ff",
|
|
||||||
"fi", "fi",
|
|
||||||
"fj", "fj",
|
|
||||||
"fo", "fo",
|
|
||||||
"fr", "fr",
|
|
||||||
"fy", "fy",
|
|
||||||
"ga", "ga",
|
|
||||||
"gd", "gd",
|
|
||||||
"gl", "gl",
|
|
||||||
"gn", "gn",
|
|
||||||
"gu", "gu",
|
|
||||||
"gv", "gv",
|
|
||||||
"ha", "ha",
|
|
||||||
"he", "iw",
|
"he", "iw",
|
||||||
"hi", "hi",
|
|
||||||
"ho", "ho",
|
|
||||||
"hr", "hr",
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
"hs", "en", // used on Linux, not clear what it stands for
|
"hs", "en", // used on Linux, not clear what it stands for
|
||||||
#endif
|
#endif
|
||||||
"ht", "ht",
|
|
||||||
"hu", "hu",
|
|
||||||
"hy", "hy",
|
|
||||||
"hz", "hz",
|
|
||||||
"ia", "ia",
|
|
||||||
"id", "in",
|
"id", "in",
|
||||||
"ie", "ie",
|
|
||||||
"ig", "ig",
|
|
||||||
"ii", "ii",
|
|
||||||
"ik", "ik",
|
|
||||||
"in", "in",
|
|
||||||
"io", "io",
|
|
||||||
"is", "is",
|
|
||||||
"it", "it",
|
|
||||||
"iu", "iu",
|
|
||||||
"iw", "iw",
|
|
||||||
"ja", "ja",
|
|
||||||
"ji", "yi",
|
|
||||||
"jv", "jv",
|
|
||||||
"ka", "ka",
|
|
||||||
"kg", "kg",
|
|
||||||
"ki", "ki",
|
|
||||||
"kj", "kj",
|
|
||||||
"kk", "kk",
|
|
||||||
"kl", "kl",
|
|
||||||
"km", "km",
|
|
||||||
"kn", "kn",
|
|
||||||
"ko", "ko",
|
|
||||||
"kr", "kr",
|
|
||||||
"ks", "ks",
|
|
||||||
"ku", "ku",
|
|
||||||
"kv", "kv",
|
|
||||||
"kw", "kw",
|
|
||||||
"ky", "ky",
|
|
||||||
"la", "la",
|
|
||||||
"lb", "lb",
|
|
||||||
"lg", "lg",
|
|
||||||
"li", "li",
|
|
||||||
"ln", "ln",
|
|
||||||
"lo", "lo",
|
|
||||||
"lt", "lt",
|
|
||||||
"lu", "lu",
|
|
||||||
"lv", "lv",
|
|
||||||
"mg", "mg",
|
|
||||||
"mh", "mh",
|
|
||||||
"mi", "mi",
|
|
||||||
"mk", "mk",
|
|
||||||
"ml", "ml",
|
|
||||||
"mn", "mn",
|
|
||||||
"mo", "mo",
|
|
||||||
"mr", "mr",
|
|
||||||
"ms", "ms",
|
|
||||||
"mt", "mt",
|
|
||||||
"my", "my",
|
|
||||||
"na", "na",
|
|
||||||
"nb", "nb",
|
|
||||||
"nd", "nd",
|
|
||||||
"ne", "ne",
|
|
||||||
"ng", "ng",
|
|
||||||
"nl", "nl",
|
|
||||||
"nn", "nn",
|
|
||||||
"no", "no",
|
|
||||||
"nr", "nr",
|
|
||||||
"nv", "nv",
|
|
||||||
"ny", "ny",
|
|
||||||
"oc", "oc",
|
|
||||||
"oj", "oj",
|
|
||||||
"om", "om",
|
|
||||||
"or", "or",
|
|
||||||
"os", "os",
|
|
||||||
"pa", "pa",
|
|
||||||
"pi", "pi",
|
|
||||||
"pl", "pl",
|
|
||||||
"ps", "ps",
|
|
||||||
"pt", "pt",
|
|
||||||
"qu", "qu",
|
|
||||||
"rm", "rm",
|
|
||||||
"rn", "rn",
|
|
||||||
"ro", "ro",
|
|
||||||
"ru", "ru",
|
|
||||||
"rw", "rw",
|
|
||||||
"sa", "sa",
|
|
||||||
"sc", "sc",
|
|
||||||
"sd", "sd",
|
|
||||||
"se", "se",
|
|
||||||
"sg", "sg",
|
|
||||||
"sh", "sr", // sh is deprecated
|
"sh", "sr", // sh is deprecated
|
||||||
"si", "si",
|
|
||||||
"sk", "sk",
|
|
||||||
"sl", "sl",
|
|
||||||
"sm", "sm",
|
|
||||||
"sn", "sn",
|
|
||||||
"so", "so",
|
|
||||||
"sq", "sq",
|
|
||||||
"sr", "sr",
|
|
||||||
"ss", "ss",
|
|
||||||
"st", "st",
|
|
||||||
"su", "fi",
|
"su", "fi",
|
||||||
"sv", "sv",
|
|
||||||
"sw", "sw",
|
|
||||||
"ta", "ta",
|
|
||||||
"te", "te",
|
|
||||||
"tg", "tg",
|
|
||||||
"th", "th",
|
|
||||||
"ti", "ti",
|
|
||||||
"tk", "tk",
|
|
||||||
"tl", "tl",
|
|
||||||
"tn", "tn",
|
|
||||||
"to", "to",
|
|
||||||
"tr", "tr",
|
|
||||||
"ts", "ts",
|
|
||||||
"tt", "tt",
|
|
||||||
"tw", "tw",
|
|
||||||
"ty", "ty",
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
"ua", "en", // used on Linux, not clear what it stands for
|
"ua", "en", // used on Linux, not clear what it stands for
|
||||||
#endif
|
|
||||||
"ug", "ug",
|
|
||||||
"uk", "uk",
|
|
||||||
"ur", "ur",
|
|
||||||
"uz", "uz",
|
|
||||||
"ve", "ve",
|
|
||||||
"vi", "vi",
|
|
||||||
"vo", "vo",
|
|
||||||
"wa", "wa",
|
|
||||||
"wo", "wo",
|
|
||||||
"xh", "xh",
|
|
||||||
"yi", "yi",
|
|
||||||
"yo", "yo",
|
|
||||||
"za", "za",
|
|
||||||
"zh", "zh",
|
|
||||||
"zu", "zu",
|
|
||||||
#ifdef __linux__
|
|
||||||
"catalan", "ca",
|
"catalan", "ca",
|
||||||
"croatian", "hr",
|
"croatian", "hr",
|
||||||
"czech", "cs",
|
"czech", "cs",
|
||||||
@ -375,493 +188,6 @@ static char *language_names[] = {
|
|||||||
"japanese", "ja",
|
"japanese", "ja",
|
||||||
"korean", "ko",
|
"korean", "ko",
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ISO 639.2 codes */
|
|
||||||
"aar", "aar",
|
|
||||||
"abk", "abk",
|
|
||||||
"ace", "ace",
|
|
||||||
"ach", "ach",
|
|
||||||
"ada", "ada",
|
|
||||||
"ady", "ady",
|
|
||||||
"afa", "afa",
|
|
||||||
"afh", "afh",
|
|
||||||
"afr", "afr",
|
|
||||||
"ain", "ain",
|
|
||||||
"aka", "aka",
|
|
||||||
"akk", "akk",
|
|
||||||
"alb", "alb",
|
|
||||||
"ale", "ale",
|
|
||||||
"alg", "alg",
|
|
||||||
"alt", "alt",
|
|
||||||
"amh", "amh",
|
|
||||||
"ang", "ang",
|
|
||||||
"anp", "anp",
|
|
||||||
"apa", "apa",
|
|
||||||
"ara", "ara",
|
|
||||||
"arc", "arc",
|
|
||||||
"arg", "arg",
|
|
||||||
"arm", "arm",
|
|
||||||
"arn", "arn",
|
|
||||||
"arp", "arp",
|
|
||||||
"art", "art",
|
|
||||||
"arw", "arw",
|
|
||||||
"asm", "asm",
|
|
||||||
"ast", "ast",
|
|
||||||
"ath", "ath",
|
|
||||||
"aus", "aus",
|
|
||||||
"ava", "ava",
|
|
||||||
"ave", "ave",
|
|
||||||
"awa", "awa",
|
|
||||||
"aym", "aym",
|
|
||||||
"aze", "aze",
|
|
||||||
"bad", "bad",
|
|
||||||
"bai", "bai",
|
|
||||||
"bak", "bak",
|
|
||||||
"bal", "bal",
|
|
||||||
"bam", "bam",
|
|
||||||
"ban", "ban",
|
|
||||||
"baq", "baq",
|
|
||||||
"bas", "bas",
|
|
||||||
"bat", "bat",
|
|
||||||
"bej", "bej",
|
|
||||||
"bel", "bel",
|
|
||||||
"bem", "bem",
|
|
||||||
"ben", "ben",
|
|
||||||
"ber", "ber",
|
|
||||||
"bho", "bho",
|
|
||||||
"bih", "bih",
|
|
||||||
"bik", "bik",
|
|
||||||
"bin", "bin",
|
|
||||||
"bis", "bis",
|
|
||||||
"bla", "bla",
|
|
||||||
"bnt", "bnt",
|
|
||||||
"bos", "bos",
|
|
||||||
"bra", "bra",
|
|
||||||
"bre", "bre",
|
|
||||||
"btk", "btk",
|
|
||||||
"bua", "bua",
|
|
||||||
"bug", "bug",
|
|
||||||
"bul", "bul",
|
|
||||||
"bur", "bur",
|
|
||||||
"byn", "byn",
|
|
||||||
"cad", "cad",
|
|
||||||
"cai", "cai",
|
|
||||||
"car", "car",
|
|
||||||
"cat", "cat",
|
|
||||||
"cau", "cau",
|
|
||||||
"ceb", "ceb",
|
|
||||||
"cel", "cel",
|
|
||||||
"cha", "cha",
|
|
||||||
"chb", "chb",
|
|
||||||
"che", "che",
|
|
||||||
"chg", "chg",
|
|
||||||
"chi", "chi",
|
|
||||||
"chk", "chk",
|
|
||||||
"chm", "chm",
|
|
||||||
"chn", "chn",
|
|
||||||
"cho", "cho",
|
|
||||||
"chp", "chp",
|
|
||||||
"chr", "chr",
|
|
||||||
"chu", "chu",
|
|
||||||
"chv", "chv",
|
|
||||||
"chy", "chy",
|
|
||||||
"cmc", "cmc",
|
|
||||||
"cop", "cop",
|
|
||||||
"cor", "cor",
|
|
||||||
"cos", "cos",
|
|
||||||
"cpe", "cpe",
|
|
||||||
"cpf", "cpf",
|
|
||||||
"cpp", "cpp",
|
|
||||||
"cre", "cre",
|
|
||||||
"crh", "crh",
|
|
||||||
"crp", "crp",
|
|
||||||
"csb", "csb",
|
|
||||||
"cus", "cus",
|
|
||||||
"cze", "cze",
|
|
||||||
"dak", "dak",
|
|
||||||
"dan", "dan",
|
|
||||||
"dar", "dar",
|
|
||||||
"day", "day",
|
|
||||||
"del", "del",
|
|
||||||
"den", "den",
|
|
||||||
"dgr", "dgr",
|
|
||||||
"din", "din",
|
|
||||||
"div", "div",
|
|
||||||
"doi", "doi",
|
|
||||||
"dra", "dra",
|
|
||||||
"dsb", "dsb",
|
|
||||||
"dua", "dua",
|
|
||||||
"dum", "dum",
|
|
||||||
"dut", "dut",
|
|
||||||
"dyu", "dyu",
|
|
||||||
"dzo", "dzo",
|
|
||||||
"efi", "efi",
|
|
||||||
"egy", "egy",
|
|
||||||
"eka", "eka",
|
|
||||||
"elx", "elx",
|
|
||||||
"eng", "eng",
|
|
||||||
"enm", "enm",
|
|
||||||
"epo", "epo",
|
|
||||||
"est", "est",
|
|
||||||
"ewe", "ewe",
|
|
||||||
"ewo", "ewo",
|
|
||||||
"fan", "fan",
|
|
||||||
"fao", "fao",
|
|
||||||
"fat", "fat",
|
|
||||||
"fij", "fij",
|
|
||||||
"fil", "fil",
|
|
||||||
"fin", "fin",
|
|
||||||
"fiu", "fiu",
|
|
||||||
"fon", "fon",
|
|
||||||
"fre", "fre",
|
|
||||||
"frm", "frm",
|
|
||||||
"fro", "fro",
|
|
||||||
"frr", "frr",
|
|
||||||
"frs", "frs",
|
|
||||||
"fry", "fry",
|
|
||||||
"ful", "ful",
|
|
||||||
"fur", "fur",
|
|
||||||
"gaa", "gaa",
|
|
||||||
"gay", "gay",
|
|
||||||
"gba", "gba",
|
|
||||||
"gem", "gem",
|
|
||||||
"geo", "geo",
|
|
||||||
"ger", "ger",
|
|
||||||
"gez", "gez",
|
|
||||||
"gil", "gil",
|
|
||||||
"gla", "gla",
|
|
||||||
"gle", "gle",
|
|
||||||
"glg", "glg",
|
|
||||||
"glv", "glv",
|
|
||||||
"gmh", "gmh",
|
|
||||||
"goh", "goh",
|
|
||||||
"gon", "gon",
|
|
||||||
"gor", "gor",
|
|
||||||
"got", "got",
|
|
||||||
"grb", "grb",
|
|
||||||
"grc", "grc",
|
|
||||||
"gre", "gre",
|
|
||||||
"grn", "grn",
|
|
||||||
"gsw", "gsw",
|
|
||||||
"guj", "guj",
|
|
||||||
"gwi", "gwi",
|
|
||||||
"hai", "hai",
|
|
||||||
"hat", "hat",
|
|
||||||
"hau", "hau",
|
|
||||||
"haw", "haw",
|
|
||||||
"heb", "heb",
|
|
||||||
"her", "her",
|
|
||||||
"hil", "hil",
|
|
||||||
"him", "him",
|
|
||||||
"hin", "hin",
|
|
||||||
"hit", "hit",
|
|
||||||
"hmn", "hmn",
|
|
||||||
"hmo", "hmo",
|
|
||||||
"hrv", "hrv",
|
|
||||||
"hsb", "hsb",
|
|
||||||
"hun", "hun",
|
|
||||||
"hup", "hup",
|
|
||||||
"iba", "iba",
|
|
||||||
"ibo", "ibo",
|
|
||||||
"ice", "ice",
|
|
||||||
"ido", "ido",
|
|
||||||
"iii", "iii",
|
|
||||||
"ijo", "ijo",
|
|
||||||
"iku", "iku",
|
|
||||||
"ile", "ile",
|
|
||||||
"ilo", "ilo",
|
|
||||||
"ina", "ina",
|
|
||||||
"inc", "inc",
|
|
||||||
"ind", "ind",
|
|
||||||
"ine", "ine",
|
|
||||||
"inh", "inh",
|
|
||||||
"ipk", "ipk",
|
|
||||||
"ira", "ira",
|
|
||||||
"iro", "iro",
|
|
||||||
"ita", "ita",
|
|
||||||
"jav", "jav",
|
|
||||||
"jbo", "jbo",
|
|
||||||
"jpn", "jpn",
|
|
||||||
"jpr", "jpr",
|
|
||||||
"jrb", "jrb",
|
|
||||||
"kaa", "kaa",
|
|
||||||
"kab", "kab",
|
|
||||||
"kac", "kac",
|
|
||||||
"kal", "kal",
|
|
||||||
"kam", "kam",
|
|
||||||
"kan", "kan",
|
|
||||||
"kar", "kar",
|
|
||||||
"kas", "kas",
|
|
||||||
"kau", "kau",
|
|
||||||
"kaw", "kaw",
|
|
||||||
"kaz", "kaz",
|
|
||||||
"kbd", "kbd",
|
|
||||||
"kha", "kha",
|
|
||||||
"khi", "khi",
|
|
||||||
"khm", "khm",
|
|
||||||
"kho", "kho",
|
|
||||||
"kik", "kik",
|
|
||||||
"kin", "kin",
|
|
||||||
"kir", "kir",
|
|
||||||
"kmb", "kmb",
|
|
||||||
"kok", "kok",
|
|
||||||
"kom", "kom",
|
|
||||||
"kon", "kon",
|
|
||||||
"kor", "kor",
|
|
||||||
"kos", "kos",
|
|
||||||
"kpe", "kpe",
|
|
||||||
"krc", "krc",
|
|
||||||
"krl", "krl",
|
|
||||||
"kro", "kro",
|
|
||||||
"kru", "kru",
|
|
||||||
"kua", "kua",
|
|
||||||
"kum", "kum",
|
|
||||||
"kur", "kur",
|
|
||||||
"kut", "kut",
|
|
||||||
"lad", "lad",
|
|
||||||
"lah", "lah",
|
|
||||||
"lam", "lam",
|
|
||||||
"lao", "lao",
|
|
||||||
"lat", "lat",
|
|
||||||
"lav", "lav",
|
|
||||||
"lez", "lez",
|
|
||||||
"lim", "lim",
|
|
||||||
"lin", "lin",
|
|
||||||
"lit", "lit",
|
|
||||||
"lol", "lol",
|
|
||||||
"loz", "loz",
|
|
||||||
"ltz", "ltz",
|
|
||||||
"lua", "lua",
|
|
||||||
"lub", "lub",
|
|
||||||
"lug", "lug",
|
|
||||||
"lui", "lui",
|
|
||||||
"lun", "lun",
|
|
||||||
"luo", "luo",
|
|
||||||
"lus", "lus",
|
|
||||||
"mac", "mac",
|
|
||||||
"mad", "mad",
|
|
||||||
"mag", "mag",
|
|
||||||
"mah", "mah",
|
|
||||||
"mai", "mai",
|
|
||||||
"mak", "mak",
|
|
||||||
"mal", "mal",
|
|
||||||
"man", "man",
|
|
||||||
"mao", "mao",
|
|
||||||
"map", "map",
|
|
||||||
"mar", "mar",
|
|
||||||
"mas", "mas",
|
|
||||||
"may", "may",
|
|
||||||
"mdf", "mdf",
|
|
||||||
"mdr", "mdr",
|
|
||||||
"men", "men",
|
|
||||||
"mga", "mga",
|
|
||||||
"mic", "mic",
|
|
||||||
"min", "min",
|
|
||||||
"mis", "mis",
|
|
||||||
"mkh", "mkh",
|
|
||||||
"mlg", "mlg",
|
|
||||||
"mlt", "mlt",
|
|
||||||
"mnc", "mnc",
|
|
||||||
"mni", "mni",
|
|
||||||
"mno", "mno",
|
|
||||||
"moh", "moh",
|
|
||||||
"mon", "mon",
|
|
||||||
"mos", "mos",
|
|
||||||
"mul", "mul",
|
|
||||||
"mun", "mun",
|
|
||||||
"mus", "mus",
|
|
||||||
"mwl", "mwl",
|
|
||||||
"mwr", "mwr",
|
|
||||||
"myn", "myn",
|
|
||||||
"myv", "myv",
|
|
||||||
"nah", "nah",
|
|
||||||
"nai", "nai",
|
|
||||||
"nap", "nap",
|
|
||||||
"nau", "nau",
|
|
||||||
"nav", "nav",
|
|
||||||
"nbl", "nbl",
|
|
||||||
"nde", "nde",
|
|
||||||
"ndo", "ndo",
|
|
||||||
"nds", "nds",
|
|
||||||
"nep", "nep",
|
|
||||||
"new", "new",
|
|
||||||
"nia", "nia",
|
|
||||||
"nic", "nic",
|
|
||||||
"niu", "niu",
|
|
||||||
"nno", "nno",
|
|
||||||
"nob", "nob",
|
|
||||||
"nog", "nog",
|
|
||||||
"non", "non",
|
|
||||||
"nor", "nor",
|
|
||||||
"nqo", "nqo",
|
|
||||||
"nso", "nso",
|
|
||||||
"nub", "nub",
|
|
||||||
"nwc", "nwc",
|
|
||||||
"nya", "nya",
|
|
||||||
"nym", "nym",
|
|
||||||
"nyn", "nyn",
|
|
||||||
"nyo", "nyo",
|
|
||||||
"nzi", "nzi",
|
|
||||||
"oci", "oci",
|
|
||||||
"oji", "oji",
|
|
||||||
"ori", "ori",
|
|
||||||
"orm", "orm",
|
|
||||||
"osa", "osa",
|
|
||||||
"oss", "oss",
|
|
||||||
"ota", "ota",
|
|
||||||
"oto", "oto",
|
|
||||||
"paa", "paa",
|
|
||||||
"pag", "pag",
|
|
||||||
"pal", "pal",
|
|
||||||
"pam", "pam",
|
|
||||||
"pan", "pan",
|
|
||||||
"pap", "pap",
|
|
||||||
"pau", "pau",
|
|
||||||
"peo", "peo",
|
|
||||||
"per", "per",
|
|
||||||
"phi", "phi",
|
|
||||||
"phn", "phn",
|
|
||||||
"pli", "pli",
|
|
||||||
"pol", "pol",
|
|
||||||
"pon", "pon",
|
|
||||||
"por", "por",
|
|
||||||
"pra", "pra",
|
|
||||||
"pro", "pro",
|
|
||||||
"pus", "pus",
|
|
||||||
"que", "que",
|
|
||||||
"raj", "raj",
|
|
||||||
"rap", "rap",
|
|
||||||
"rar", "rar",
|
|
||||||
"roa", "roa",
|
|
||||||
"roh", "roh",
|
|
||||||
"rom", "rom",
|
|
||||||
"rum", "rum",
|
|
||||||
"run", "run",
|
|
||||||
"rup", "rup",
|
|
||||||
"rus", "rus",
|
|
||||||
"sad", "sad",
|
|
||||||
"sag", "sag",
|
|
||||||
"sah", "sah",
|
|
||||||
"sai", "sai",
|
|
||||||
"sal", "sal",
|
|
||||||
"sam", "sam",
|
|
||||||
"san", "san",
|
|
||||||
"sas", "sas",
|
|
||||||
"sat", "sat",
|
|
||||||
"scn", "scn",
|
|
||||||
"sco", "sco",
|
|
||||||
"sel", "sel",
|
|
||||||
"sem", "sem",
|
|
||||||
"sga", "sga",
|
|
||||||
"sgn", "sgn",
|
|
||||||
"shn", "shn",
|
|
||||||
"sid", "sid",
|
|
||||||
"sin", "sin",
|
|
||||||
"sio", "sio",
|
|
||||||
"sit", "sit",
|
|
||||||
"sla", "sla",
|
|
||||||
"slo", "slo",
|
|
||||||
"slv", "slv",
|
|
||||||
"sma", "sma",
|
|
||||||
"sme", "sme",
|
|
||||||
"smi", "smi",
|
|
||||||
"smj", "smj",
|
|
||||||
"smn", "smn",
|
|
||||||
"smo", "smo",
|
|
||||||
"sms", "sms",
|
|
||||||
"sna", "sna",
|
|
||||||
"snd", "snd",
|
|
||||||
"snk", "snk",
|
|
||||||
"sog", "sog",
|
|
||||||
"som", "som",
|
|
||||||
"son", "son",
|
|
||||||
"sot", "sot",
|
|
||||||
"spa", "spa",
|
|
||||||
"srd", "srd",
|
|
||||||
"srn", "srn",
|
|
||||||
"srp", "srp",
|
|
||||||
"srr", "srr",
|
|
||||||
"ssa", "ssa",
|
|
||||||
"ssw", "ssw",
|
|
||||||
"suk", "suk",
|
|
||||||
"sun", "sun",
|
|
||||||
"sus", "sus",
|
|
||||||
"sux", "sux",
|
|
||||||
"swa", "swa",
|
|
||||||
"swe", "swe",
|
|
||||||
"syc", "syc",
|
|
||||||
"syr", "syr",
|
|
||||||
"tah", "tah",
|
|
||||||
"tai", "tai",
|
|
||||||
"tam", "tam",
|
|
||||||
"tat", "tat",
|
|
||||||
"tel", "tel",
|
|
||||||
"tem", "tem",
|
|
||||||
"ter", "ter",
|
|
||||||
"tet", "tet",
|
|
||||||
"tgk", "tgk",
|
|
||||||
"tgl", "tgl",
|
|
||||||
"tha", "tha",
|
|
||||||
"tib", "tib",
|
|
||||||
"tig", "tig",
|
|
||||||
"tir", "tir",
|
|
||||||
"tiv", "tiv",
|
|
||||||
"tkl", "tkl",
|
|
||||||
"tlh", "tlh",
|
|
||||||
"tli", "tli",
|
|
||||||
"tmh", "tmh",
|
|
||||||
"tog", "tog",
|
|
||||||
"ton", "ton",
|
|
||||||
"tpi", "tpi",
|
|
||||||
"tsi", "tsi",
|
|
||||||
"tsn", "tsn",
|
|
||||||
"tso", "tso",
|
|
||||||
"tuk", "tuk",
|
|
||||||
"tum", "tum",
|
|
||||||
"tup", "tup",
|
|
||||||
"tur", "tur",
|
|
||||||
"tut", "tut",
|
|
||||||
"tvl", "tvl",
|
|
||||||
"twi", "twi",
|
|
||||||
"tyv", "tyv",
|
|
||||||
"udm", "udm",
|
|
||||||
"uga", "uga",
|
|
||||||
"uig", "uig",
|
|
||||||
"ukr", "ukr",
|
|
||||||
"umb", "umb",
|
|
||||||
"und", "und",
|
|
||||||
"urd", "urd",
|
|
||||||
"uzb", "uzb",
|
|
||||||
"vai", "vai",
|
|
||||||
"ven", "ven",
|
|
||||||
"vie", "vie",
|
|
||||||
"vol", "vol",
|
|
||||||
"vot", "vot",
|
|
||||||
"wak", "wak",
|
|
||||||
"wal", "wal",
|
|
||||||
"war", "war",
|
|
||||||
"was", "was",
|
|
||||||
"wel", "wel",
|
|
||||||
"wen", "wen",
|
|
||||||
"wln", "wln",
|
|
||||||
"wol", "wol",
|
|
||||||
"xal", "xal",
|
|
||||||
"xho", "xho",
|
|
||||||
"yao", "yao",
|
|
||||||
"yap", "yap",
|
|
||||||
"yid", "yid",
|
|
||||||
"yor", "yor",
|
|
||||||
"ypk", "ypk",
|
|
||||||
"zap", "zap",
|
|
||||||
"zbl", "zbl",
|
|
||||||
"zen", "zen",
|
|
||||||
"zha", "zha",
|
|
||||||
"znd", "znd",
|
|
||||||
"zul", "zul",
|
|
||||||
"zun", "zun",
|
|
||||||
"zxx", "zxx",
|
|
||||||
"zza", "zza",
|
|
||||||
|
|
||||||
"",
|
"",
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -882,253 +208,10 @@ static char *script_names[] = {
|
|||||||
* Linux/Solaris country string to ISO3166 string mapping table.
|
* Linux/Solaris country string to ISO3166 string mapping table.
|
||||||
*/
|
*/
|
||||||
static char *country_names[] = {
|
static char *country_names[] = {
|
||||||
"AD", "AD",
|
|
||||||
"AE", "AE",
|
|
||||||
"AF", "AF",
|
|
||||||
"AG", "AG",
|
|
||||||
"AI", "AI",
|
|
||||||
"AL", "AL",
|
|
||||||
"AM", "AM",
|
|
||||||
"AN", "AN",
|
|
||||||
"AO", "AO",
|
|
||||||
"AQ", "AQ",
|
|
||||||
"AR", "AR",
|
|
||||||
"AS", "AS",
|
|
||||||
"AT", "AT",
|
|
||||||
"AU", "AU",
|
|
||||||
"AW", "AW",
|
|
||||||
"AX", "AX",
|
|
||||||
"AZ", "AZ",
|
|
||||||
"BA", "BA",
|
|
||||||
"BB", "BB",
|
|
||||||
"BD", "BD",
|
|
||||||
"BE", "BE",
|
|
||||||
"BF", "BF",
|
|
||||||
"BG", "BG",
|
|
||||||
"BH", "BH",
|
|
||||||
"BI", "BI",
|
|
||||||
"BJ", "BJ",
|
|
||||||
"BM", "BM",
|
|
||||||
"BN", "BN",
|
|
||||||
"BO", "BO",
|
|
||||||
"BR", "BR",
|
|
||||||
"BS", "BS",
|
|
||||||
"BT", "BT",
|
|
||||||
"BV", "BV",
|
|
||||||
"BW", "BW",
|
|
||||||
"BY", "BY",
|
|
||||||
"BZ", "BZ",
|
|
||||||
"CA", "CA",
|
|
||||||
"CC", "CC",
|
|
||||||
"CD", "CD",
|
|
||||||
"CF", "CF",
|
|
||||||
"CG", "CG",
|
|
||||||
"CH", "CH",
|
|
||||||
"CI", "CI",
|
|
||||||
"CK", "CK",
|
|
||||||
"CL", "CL",
|
|
||||||
"CM", "CM",
|
|
||||||
"CN", "CN",
|
|
||||||
"CO", "CO",
|
|
||||||
"CR", "CR",
|
|
||||||
"CS", "CS",
|
|
||||||
"CU", "CU",
|
|
||||||
"CV", "CV",
|
|
||||||
"CX", "CX",
|
|
||||||
"CY", "CY",
|
|
||||||
"CZ", "CZ",
|
|
||||||
"DE", "DE",
|
|
||||||
"DJ", "DJ",
|
|
||||||
"DK", "DK",
|
|
||||||
"DM", "DM",
|
|
||||||
"DO", "DO",
|
|
||||||
"DZ", "DZ",
|
|
||||||
"EC", "EC",
|
|
||||||
"EE", "EE",
|
|
||||||
"EG", "EG",
|
|
||||||
"EH", "EH",
|
|
||||||
"ER", "ER",
|
|
||||||
"ES", "ES",
|
|
||||||
"ET", "ET",
|
|
||||||
"FI", "FI",
|
|
||||||
"FJ", "FJ",
|
|
||||||
"FK", "FK",
|
|
||||||
"FM", "FM",
|
|
||||||
"FO", "FO",
|
|
||||||
"FR", "FR",
|
|
||||||
"GA", "GA",
|
|
||||||
"GB", "GB",
|
|
||||||
"GD", "GD",
|
|
||||||
"GE", "GE",
|
|
||||||
"GF", "GF",
|
|
||||||
"GH", "GH",
|
|
||||||
"GI", "GI",
|
|
||||||
"GL", "GL",
|
|
||||||
"GM", "GM",
|
|
||||||
"GN", "GN",
|
|
||||||
"GP", "GP",
|
|
||||||
"GQ", "GQ",
|
|
||||||
"GR", "GR",
|
|
||||||
"GS", "GS",
|
|
||||||
"GT", "GT",
|
|
||||||
"GU", "GU",
|
|
||||||
"GW", "GW",
|
|
||||||
"GY", "GY",
|
|
||||||
"HK", "HK",
|
|
||||||
"HM", "HM",
|
|
||||||
"HN", "HN",
|
|
||||||
"HR", "HR",
|
|
||||||
"HT", "HT",
|
|
||||||
"HU", "HU",
|
|
||||||
"ID", "ID",
|
|
||||||
"IE", "IE",
|
|
||||||
"IL", "IL",
|
|
||||||
"IN", "IN",
|
|
||||||
"IO", "IO",
|
|
||||||
"IQ", "IQ",
|
|
||||||
"IR", "IR",
|
|
||||||
"IS", "IS",
|
|
||||||
"IT", "IT",
|
|
||||||
"JM", "JM",
|
|
||||||
"JO", "JO",
|
|
||||||
"JP", "JP",
|
|
||||||
"KE", "KE",
|
|
||||||
"KG", "KG",
|
|
||||||
"KH", "KH",
|
|
||||||
"KI", "KI",
|
|
||||||
"KM", "KM",
|
|
||||||
"KN", "KN",
|
|
||||||
"KP", "KP",
|
|
||||||
"KR", "KR",
|
|
||||||
"KW", "KW",
|
|
||||||
"KY", "KY",
|
|
||||||
"KZ", "KZ",
|
|
||||||
"LA", "LA",
|
|
||||||
"LB", "LB",
|
|
||||||
"LC", "LC",
|
|
||||||
"LI", "LI",
|
|
||||||
"LK", "LK",
|
|
||||||
"LR", "LR",
|
|
||||||
"LS", "LS",
|
|
||||||
"LT", "LT",
|
|
||||||
"LU", "LU",
|
|
||||||
"LV", "LV",
|
|
||||||
"LY", "LY",
|
|
||||||
"MA", "MA",
|
|
||||||
"MC", "MC",
|
|
||||||
"MD", "MD",
|
|
||||||
"ME", "ME",
|
|
||||||
"MG", "MG",
|
|
||||||
"MH", "MH",
|
|
||||||
"MK", "MK",
|
|
||||||
"ML", "ML",
|
|
||||||
"MM", "MM",
|
|
||||||
"MN", "MN",
|
|
||||||
"MO", "MO",
|
|
||||||
"MP", "MP",
|
|
||||||
"MQ", "MQ",
|
|
||||||
"MR", "MR",
|
|
||||||
"MS", "MS",
|
|
||||||
"MT", "MT",
|
|
||||||
"MU", "MU",
|
|
||||||
"MV", "MV",
|
|
||||||
"MW", "MW",
|
|
||||||
"MX", "MX",
|
|
||||||
"MY", "MY",
|
|
||||||
"MZ", "MZ",
|
|
||||||
"NA", "NA",
|
|
||||||
"NC", "NC",
|
|
||||||
"NE", "NE",
|
|
||||||
"NF", "NF",
|
|
||||||
"NG", "NG",
|
|
||||||
"NI", "NI",
|
|
||||||
"NL", "NL",
|
|
||||||
"NO", "NO",
|
|
||||||
"NP", "NP",
|
|
||||||
"NR", "NR",
|
|
||||||
"NU", "NU",
|
|
||||||
"NZ", "NZ",
|
|
||||||
"OM", "OM",
|
|
||||||
"PA", "PA",
|
|
||||||
"PE", "PE",
|
|
||||||
"PF", "PF",
|
|
||||||
"PG", "PG",
|
|
||||||
"PH", "PH",
|
|
||||||
"PK", "PK",
|
|
||||||
"PL", "PL",
|
|
||||||
"PM", "PM",
|
|
||||||
"PN", "PN",
|
|
||||||
"PR", "PR",
|
|
||||||
"PS", "PS",
|
|
||||||
"PT", "PT",
|
|
||||||
"PW", "PW",
|
|
||||||
"PY", "PY",
|
|
||||||
"QA", "QA",
|
|
||||||
"RE", "RE",
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
"RN", "US", // used on Linux, not clear what it stands for
|
"RN", "US", // used on Linux, not clear what it stands for
|
||||||
#endif
|
#endif
|
||||||
"RO", "RO",
|
|
||||||
"RS", "RS",
|
|
||||||
"RU", "RU",
|
|
||||||
"RW", "RW",
|
|
||||||
"SA", "SA",
|
|
||||||
"SB", "SB",
|
|
||||||
"SC", "SC",
|
|
||||||
"SD", "SD",
|
|
||||||
"SE", "SE",
|
|
||||||
"SG", "SG",
|
|
||||||
"SH", "SH",
|
|
||||||
"SI", "SI",
|
|
||||||
"SJ", "SJ",
|
|
||||||
"SK", "SK",
|
|
||||||
"SL", "SL",
|
|
||||||
"SM", "SM",
|
|
||||||
"SN", "SN",
|
|
||||||
"SO", "SO",
|
|
||||||
"SR", "SR",
|
|
||||||
"ST", "ST",
|
|
||||||
"SV", "SV",
|
|
||||||
"SY", "SY",
|
|
||||||
"SZ", "SZ",
|
|
||||||
"TC", "TC",
|
|
||||||
"TD", "TD",
|
|
||||||
"TF", "TF",
|
|
||||||
"TG", "TG",
|
|
||||||
"TH", "TH",
|
|
||||||
"TJ", "TJ",
|
|
||||||
"TK", "TK",
|
|
||||||
"TL", "TL",
|
|
||||||
"TM", "TM",
|
|
||||||
"TN", "TN",
|
|
||||||
"TO", "TO",
|
|
||||||
"TR", "TR",
|
|
||||||
"TT", "TT",
|
|
||||||
"TV", "TV",
|
|
||||||
"TW", "TW",
|
|
||||||
"TZ", "TZ",
|
|
||||||
"UA", "UA",
|
|
||||||
"UG", "UG",
|
|
||||||
"UK", "GB",
|
|
||||||
"UM", "UM",
|
|
||||||
"US", "US",
|
|
||||||
"UY", "UY",
|
|
||||||
"UZ", "UZ",
|
|
||||||
"VA", "VA",
|
|
||||||
"VC", "VC",
|
|
||||||
"VE", "VE",
|
|
||||||
"VG", "VG",
|
|
||||||
"VI", "VI",
|
|
||||||
"VN", "VN",
|
|
||||||
"VU", "VU",
|
|
||||||
"WF", "WF",
|
|
||||||
"WS", "WS",
|
|
||||||
"YE", "YE",
|
|
||||||
"YT", "YT",
|
|
||||||
"YU", "CS", // YU has been removed from ISO 3166
|
"YU", "CS", // YU has been removed from ISO 3166
|
||||||
"ZA", "ZA",
|
|
||||||
"ZM", "ZM",
|
|
||||||
"ZW", "ZW",
|
|
||||||
"",
|
"",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include <values.h>
|
||||||
|
|
||||||
#ifdef __solaris__
|
#ifdef __solaris__
|
||||||
#include <sys/sockio.h>
|
#include <sys/sockio.h>
|
||||||
@ -75,17 +76,17 @@ getnameinfo_f getnameinfo_ptr = NULL;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __solaris__
|
#ifdef __solaris__
|
||||||
static int init_max_buf;
|
static int init_tcp_max_buf, init_udp_max_buf;
|
||||||
static int tcp_max_buf;
|
static int tcp_max_buf;
|
||||||
static int udp_max_buf;
|
static int udp_max_buf;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the specified parameter from the specified driver. The value
|
* Get the specified parameter from the specified driver. The value
|
||||||
* of the parameter is assumed to be an 'int'. If the parameter
|
* of the parameter is assumed to be an 'int'. If the parameter
|
||||||
* cannot be obtained return the specified default value.
|
* cannot be obtained return -1
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
getParam(char *driver, char *param, int dflt)
|
getParam(char *driver, char *param)
|
||||||
{
|
{
|
||||||
struct strioctl stri;
|
struct strioctl stri;
|
||||||
char buf [64];
|
char buf [64];
|
||||||
@ -94,7 +95,7 @@ getParam(char *driver, char *param, int dflt)
|
|||||||
|
|
||||||
s = open (driver, O_RDWR);
|
s = open (driver, O_RDWR);
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
return dflt;
|
return -1;
|
||||||
}
|
}
|
||||||
strncpy (buf, param, sizeof(buf));
|
strncpy (buf, param, sizeof(buf));
|
||||||
stri.ic_cmd = ND_GET;
|
stri.ic_cmd = ND_GET;
|
||||||
@ -102,13 +103,64 @@ getParam(char *driver, char *param, int dflt)
|
|||||||
stri.ic_dp = buf;
|
stri.ic_dp = buf;
|
||||||
stri.ic_len = sizeof(buf);
|
stri.ic_len = sizeof(buf);
|
||||||
if (ioctl (s, I_STR, &stri) < 0) {
|
if (ioctl (s, I_STR, &stri) < 0) {
|
||||||
value = dflt;
|
value = -1;
|
||||||
} else {
|
} else {
|
||||||
value = atoi(buf);
|
value = atoi(buf);
|
||||||
}
|
}
|
||||||
close (s);
|
close (s);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iterative way to find the max value that SO_SNDBUF or SO_RCVBUF
|
||||||
|
* for Solaris versions that do not support the ioctl() in getParam().
|
||||||
|
* Ugly, but only called once (for each sotype).
|
||||||
|
*
|
||||||
|
* As an optimisation, we make a guess using the default values for Solaris
|
||||||
|
* assuming they haven't been modified with ndd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MAX_TCP_GUESS 1024 * 1024
|
||||||
|
#define MAX_UDP_GUESS 2 * 1024 * 1024
|
||||||
|
|
||||||
|
#define FAIL_IF_NOT_ENOBUFS if (errno != ENOBUFS) return -1
|
||||||
|
|
||||||
|
static int findMaxBuf(int fd, int opt, int sotype) {
|
||||||
|
int a = 0;
|
||||||
|
int b = MAXINT;
|
||||||
|
int initial_guess;
|
||||||
|
int limit = -1;
|
||||||
|
|
||||||
|
if (sotype == SOCK_DGRAM) {
|
||||||
|
initial_guess = MAX_UDP_GUESS;
|
||||||
|
} else {
|
||||||
|
initial_guess = MAX_TCP_GUESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setsockopt(fd, SOL_SOCKET, opt, &initial_guess, sizeof(int)) == 0) {
|
||||||
|
initial_guess++;
|
||||||
|
if (setsockopt(fd, SOL_SOCKET, opt, &initial_guess,sizeof(int)) < 0) {
|
||||||
|
FAIL_IF_NOT_ENOBUFS;
|
||||||
|
return initial_guess - 1;
|
||||||
|
}
|
||||||
|
a = initial_guess;
|
||||||
|
} else {
|
||||||
|
FAIL_IF_NOT_ENOBUFS;
|
||||||
|
b = initial_guess - 1;
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
int mid = a + (b-a)/2;
|
||||||
|
if (setsockopt(fd, SOL_SOCKET, opt, &mid, sizeof(int)) == 0) {
|
||||||
|
limit = mid;
|
||||||
|
a = mid + 1;
|
||||||
|
} else {
|
||||||
|
FAIL_IF_NOT_ENOBUFS;
|
||||||
|
b = mid - 1;
|
||||||
|
}
|
||||||
|
} while (b >= a);
|
||||||
|
|
||||||
|
return limit;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -1148,7 +1200,6 @@ NET_GetSockOpt(int fd, int level, int opt, void *result,
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrapper for setsockopt system routine - performs any
|
* Wrapper for setsockopt system routine - performs any
|
||||||
* necessary pre/post processing to deal with OS specific
|
* necessary pre/post processing to deal with OS specific
|
||||||
@ -1212,7 +1263,7 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
|
|||||||
#ifdef __solaris__
|
#ifdef __solaris__
|
||||||
if (level == SOL_SOCKET) {
|
if (level == SOL_SOCKET) {
|
||||||
if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
|
if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
|
||||||
int sotype, arglen;
|
int sotype=0, arglen;
|
||||||
int *bufsize, maxbuf;
|
int *bufsize, maxbuf;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -1223,18 +1274,37 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
|
|||||||
|
|
||||||
/* Exceeded system limit so clamp and retry */
|
/* Exceeded system limit so clamp and retry */
|
||||||
|
|
||||||
if (!init_max_buf) {
|
|
||||||
tcp_max_buf = getParam("/dev/tcp", "tcp_max_buf", 1024*1024);
|
|
||||||
udp_max_buf = getParam("/dev/udp", "udp_max_buf", 2048*1024);
|
|
||||||
init_max_buf = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
arglen = sizeof(sotype);
|
arglen = sizeof(sotype);
|
||||||
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype,
|
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype,
|
||||||
&arglen) < 0) {
|
&arglen) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We try to get tcp_maxbuf (and udp_max_buf) using
|
||||||
|
* an ioctl() that isn't available on all versions of Solaris.
|
||||||
|
* If that fails, we use the search algorithm in findMaxBuf()
|
||||||
|
*/
|
||||||
|
if (!init_tcp_max_buf && sotype == SOCK_STREAM) {
|
||||||
|
tcp_max_buf = getParam("/dev/tcp", "tcp_max_buf");
|
||||||
|
if (tcp_max_buf == -1) {
|
||||||
|
tcp_max_buf = findMaxBuf(fd, opt, SOCK_STREAM);
|
||||||
|
if (tcp_max_buf == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
init_tcp_max_buf = 1;
|
||||||
|
} else if (!init_udp_max_buf && sotype == SOCK_DGRAM) {
|
||||||
|
udp_max_buf = getParam("/dev/udp", "udp_max_buf");
|
||||||
|
if (udp_max_buf == -1) {
|
||||||
|
udp_max_buf = findMaxBuf(fd, opt, SOCK_DGRAM);
|
||||||
|
if (udp_max_buf == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
init_udp_max_buf = 1;
|
||||||
|
}
|
||||||
|
|
||||||
maxbuf = (sotype == SOCK_STREAM) ? tcp_max_buf : udp_max_buf;
|
maxbuf = (sotype == SOCK_STREAM) ? tcp_max_buf : udp_max_buf;
|
||||||
bufsize = (int *)arg;
|
bufsize = (int *)arg;
|
||||||
if (*bufsize > maxbuf) {
|
if (*bufsize > maxbuf) {
|
||||||
|
@ -607,6 +607,7 @@ gboolean gtk2_load()
|
|||||||
fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new");
|
fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new");
|
||||||
fp_gtk_viewport_new = dl_symbol("gtk_viewport_new");
|
fp_gtk_viewport_new = dl_symbol("gtk_viewport_new");
|
||||||
fp_gtk_window_new = dl_symbol("gtk_window_new");
|
fp_gtk_window_new = dl_symbol("gtk_window_new");
|
||||||
|
fp_gtk_window_present = dl_symbol("gtk_window_present");
|
||||||
fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
|
fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
|
||||||
fp_gtk_frame_new = dl_symbol("gtk_frame_new");
|
fp_gtk_frame_new = dl_symbol("gtk_frame_new");
|
||||||
|
|
||||||
|
@ -749,6 +749,7 @@ int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
|
|||||||
int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
|
int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
|
||||||
GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
|
GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
|
||||||
void (*fp_gtk_widget_destroy)(GtkWidget *widget);
|
void (*fp_gtk_widget_destroy)(GtkWidget *widget);
|
||||||
|
void (*fp_gtk_window_present)(GtkWindow *window);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -80,6 +80,28 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
|
|||||||
quit(env, jpeer, FALSE);
|
quit(env, jpeer, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_awt_X11_GtkFileDialogPeer
|
||||||
|
* Method: toFront
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
|
||||||
|
(JNIEnv * env, jobject jpeer)
|
||||||
|
{
|
||||||
|
GtkWidget * dialog;
|
||||||
|
|
||||||
|
fp_gdk_threads_enter();
|
||||||
|
|
||||||
|
dialog = (GtkWidget*)jlong_to_ptr(
|
||||||
|
(*env)->GetLongField(env, jpeer, widgetFieldID));
|
||||||
|
|
||||||
|
if (dialog != NULL) {
|
||||||
|
fp_gtk_window_present((GtkWindow*)dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
fp_gdk_threads_leave();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a GSList to an array of filenames (without the parent folder)
|
* Convert a GSList to an array of filenames (without the parent folder)
|
||||||
*/
|
*/
|
||||||
|
@ -33,6 +33,14 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run
|
|||||||
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
|
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
|
||||||
(JNIEnv *, jobject);
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_awt_X11_GtkFileDialogPeer
|
||||||
|
* Method: toFront
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user