jdk/src/solaris/classes/sun/awt/motif/X11KSC5601.java
changeset 3052 5c9886498f31
parent 2 90ce3da70b43
child 5506 202f599c92aa
--- 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)