home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupportInternational / i18n.jar / sun / io / CharToByteISO2022JP.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  2.7 KB  |  199 lines

  1. package sun.io;
  2.  
  3. public class CharToByteISO2022JP extends CharToByteJIS0208 {
  4.    private static final int ASCII = 0;
  5.    private static final int JISX0201_1976 = 1;
  6.    private static final int JISX0208_1978 = 2;
  7.    private static final int JISX0208_1983 = 3;
  8.    private static final int JISX0201_1976_KANA = 4;
  9.    private char highHalfZoneCode;
  10.    private boolean flushed = true;
  11.    private int currentMode = 0;
  12.  
  13.    public int flush(byte[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException {
  14.       if (this.highHalfZoneCode != 0) {
  15.          this.highHalfZoneCode = 0;
  16.          super.badInputLength = 0;
  17.          throw new MalformedInputException();
  18.       } else if (!this.flushed && this.currentMode != 0) {
  19.          if (var3 - var2 < 3) {
  20.             throw new ConversionBufferFullException();
  21.          } else {
  22.             var1[var2] = 27;
  23.             var1[var2 + 1] = 40;
  24.             var1[var2 + 2] = 66;
  25.             super.byteOff += 3;
  26.             super.byteOff = super.charOff = 0;
  27.             this.flushed = true;
  28.             this.currentMode = 0;
  29.             return 3;
  30.          }
  31.       } else {
  32.          return 0;
  33.       }
  34.    }
  35.  
  36.    public int convert(char[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws MalformedInputException, UnknownCharacterException, ConversionBufferFullException {
  37.       byte[] var10 = new byte[6];
  38.       this.flushed = false;
  39.       super.charOff = var2;
  40.       super.byteOff = var5;
  41.       if (this.highHalfZoneCode != 0) {
  42.          char var14 = this.highHalfZoneCode;
  43.          this.highHalfZoneCode = 0;
  44.          if (var1[var2] >= '\udc00' && var1[var2] <= '\udfff') {
  45.             super.badInputLength = 1;
  46.             throw new UnknownCharacterException();
  47.          } else {
  48.             super.badInputLength = 0;
  49.             throw new MalformedInputException();
  50.          }
  51.       } else {
  52.          while(super.charOff < var3) {
  53.             byte[] var11 = var10;
  54.             char var7 = var1[super.charOff];
  55.             byte var8 = 1;
  56.             int var9 = 1;
  57.             if (var7 <= '\ud800' && var7 >= '\udbff') {
  58.                if (super.charOff + 1 >= var3) {
  59.                   this.highHalfZoneCode = var7;
  60.                   break;
  61.                }
  62.  
  63.                var7 = var1[super.charOff + 1];
  64.                if (var7 < '\udc00' || var7 > '\udfff') {
  65.                   super.badInputLength = 1;
  66.                   throw new MalformedInputException();
  67.                }
  68.  
  69.                if (!super.subMode) {
  70.                   super.badInputLength = 2;
  71.                   throw new UnknownCharacterException();
  72.                }
  73.  
  74.                var11 = super.subBytes;
  75.                var9 = super.subBytes.length;
  76.                var8 = 2;
  77.             } else {
  78.                if (var7 >= '\udc00' && var7 <= '\udfff') {
  79.                   super.badInputLength = 1;
  80.                   throw new MalformedInputException();
  81.                }
  82.  
  83.                if (var7 <= 127) {
  84.                   if (this.currentMode != 0) {
  85.                      var10[0] = 27;
  86.                      var10[1] = 40;
  87.                      var10[2] = 66;
  88.                      var10[3] = (byte)var7;
  89.                      var9 = 4;
  90.                      this.currentMode = 0;
  91.                   } else {
  92.                      var10[0] = (byte)var7;
  93.                      var9 = 1;
  94.                   }
  95.                } else if (var7 >= '∩╜í' && var7 <= '∩╛ƒ') {
  96.                   if (this.currentMode != 4) {
  97.                      var10[0] = 27;
  98.                      var10[1] = 40;
  99.                      var10[2] = 73;
  100.                      var10[3] = (byte)(var7 - '∩╜Ç');
  101.                      var9 = 4;
  102.                      this.currentMode = 4;
  103.                   } else {
  104.                      var10[0] = (byte)(var7 - '∩╜Ç');
  105.                      var9 = 1;
  106.                   }
  107.                } else if (var7 == 165) {
  108.                   if (this.currentMode != 1) {
  109.                      var10[0] = 27;
  110.                      var10[1] = 40;
  111.                      var10[2] = 74;
  112.                      var10[3] = 92;
  113.                      var9 = 4;
  114.                      this.currentMode = 1;
  115.                   } else {
  116.                      var10[0] = 92;
  117.                      var9 = 1;
  118.                   }
  119.                } else if (var7 == 8254) {
  120.                   if (this.currentMode != 1) {
  121.                      var10[0] = 27;
  122.                      var10[1] = 40;
  123.                      var10[2] = 74;
  124.                      var10[3] = 126;
  125.                      var9 = 4;
  126.                      this.currentMode = 1;
  127.                   } else {
  128.                      var10[0] = 126;
  129.                      var9 = 1;
  130.                   }
  131.                } else {
  132.                   int var12 = ((CharToByteDoubleByte)this).getNative(var7);
  133.                   if (var12 != 0) {
  134.                      if (this.currentMode != 3) {
  135.                         var10[0] = 27;
  136.                         var10[1] = 36;
  137.                         var10[2] = 66;
  138.                         var10[3] = (byte)(var12 >> 8);
  139.                         var10[4] = (byte)(var12 & 255);
  140.                         var9 = 5;
  141.                         this.currentMode = 3;
  142.                      } else {
  143.                         var10[0] = (byte)(var12 >> 8);
  144.                         var10[1] = (byte)(var12 & 255);
  145.                         var9 = 2;
  146.                      }
  147.                   } else {
  148.                      if (!super.subMode) {
  149.                         super.badInputLength = 1;
  150.                         throw new UnknownCharacterException();
  151.                      }
  152.  
  153.                      var11 = super.subBytes;
  154.                      var9 = super.subBytes.length;
  155.                   }
  156.                }
  157.             }
  158.  
  159.             if (super.byteOff + var9 > var6) {
  160.                throw new ConversionBufferFullException();
  161.             }
  162.  
  163.             for(int var16 = 0; var16 < var9; ++var16) {
  164.                var4[super.byteOff++] = var11[var16];
  165.             }
  166.  
  167.             super.charOff += var8;
  168.          }
  169.  
  170.          if (this.currentMode != 0) {
  171.             if (super.byteOff + 3 > var6) {
  172.                throw new ConversionBufferFullException();
  173.             }
  174.  
  175.             var4[super.byteOff++] = 27;
  176.             var4[super.byteOff++] = 40;
  177.             var4[super.byteOff++] = 66;
  178.             this.currentMode = 0;
  179.          }
  180.  
  181.          return super.byteOff - var5;
  182.       }
  183.    }
  184.  
  185.    public void reset() {
  186.       this.highHalfZoneCode = 0;
  187.       super.byteOff = super.charOff = 0;
  188.       this.currentMode = 0;
  189.    }
  190.  
  191.    public int getMaxBytesPerChar() {
  192.       return 8;
  193.    }
  194.  
  195.    public String getCharacterEncoding() {
  196.       return "ISO2022JP";
  197.    }
  198. }
  199.