--- a/jdk/src/solaris/classes/sun/awt/motif/X11KSC5601.java Fri Jun 19 14:12:22 2009 +0200
+++ b/jdk/src/solaris/classes/sun/awt/motif/X11KSC5601.java Fri Jun 19 14:39:06 2009 -0700
@@ -28,7 +28,8 @@
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_KR;
+import sun.nio.cs.ext.*;
+import static sun.nio.cs.CharsetMapping.*;
public class X11KSC5601 extends Charset {
public X11KSC5601 () {
@@ -45,16 +46,22 @@
return cs instanceof X11KSC5601;
}
- private class Encoder extends EUC_KR.Encoder {
+ private class Encoder extends CharsetEncoder {
+ private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
+
public Encoder(Charset cs) {
- super(cs);
+ super(cs, 2.0f, 2.0f);
}
public boolean canEncode(char c) {
if (c <= 0x7F) {
return false;
}
- return super.canEncode(c);
+ return enc.canEncode(c);
+ }
+
+ protected int encodeDouble(char c) {
+ return enc.encodeChar(c);
}
protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
@@ -90,9 +97,15 @@
}
}
- private class Decoder extends EUC_KR.Decoder {
+ private class Decoder extends CharsetDecoder {
+ private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
+
public Decoder(Charset cs) {
- super(cs);
+ super(cs, 0.5f, 1.0f);
+ }
+
+ protected char decodeDouble(int b1, int b2) {
+ return dec.decodeDouble(b1, b2);
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
@@ -116,7 +129,7 @@
int b1 = sa[sp] & 0xFF | 0x80;
int b2 = sa[sp + 1] & 0xFF | 0x80;
char c = decodeDouble(b1, b2);
- if (c == replacement().charAt(0)) {
+ if (c == UNMAPPABLE_DECODING) {
return CoderResult.unmappableForLength(2);
}
if (dl - dp < 1)