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

  1. package sun.io;
  2.  
  3. public class ByteToCharISO2022JP extends ByteToCharJIS0208 {
  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 static final int SHIFTOUT = 5;
  10.    private int currentState = 0;
  11.    private int savedSize = 0;
  12.    private byte[] savedBytes = new byte[2];
  13.  
  14.    public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
  15.       if (this.savedSize != 0) {
  16.          this.savedSize = 0;
  17.          this.currentState = 0;
  18.          super.badInputLength = 0;
  19.          throw new MalformedInputException();
  20.       } else {
  21.          super.byteOff = super.charOff = 0;
  22.          return 0;
  23.       }
  24.    }
  25.  
  26.    public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws UnknownCharacterException, MalformedInputException, ConversionBufferFullException {
  27.       int var7 = 0;
  28.       int var8 = 0;
  29.       char var9 = '∩┐╜';
  30.       int var10 = super.byteOff = var2;
  31.       if (this.savedSize != 0) {
  32.          if (this.savedBytes[0] == 27) {
  33.             if (this.savedSize == 2 && this.savedBytes[1] == 40 && var1[0] != 66 && var1[0] != 74 && var1[0] != 73 && this.savedBytes[1] == 36 && var1[0] != 64 && var1[0] != 66 || this.savedSize == 1 && var1[0] != 40 && var1[0] != 36) {
  34.                super.badInputLength = 0;
  35.                throw new MalformedInputException();
  36.             }
  37.  
  38.             if (var3 - var2 == 1 && this.savedSize == 1 && this.savedBytes[0] == 27) {
  39.                this.savedSize = 2;
  40.                this.savedBytes[1] = var1[0];
  41.                ++super.byteOff;
  42.                return 0;
  43.             }
  44.          }
  45.  
  46.          byte[] var11 = new byte[var3 - var2 + this.savedSize];
  47.  
  48.          for(int var12 = 0; var12 < this.savedSize; ++var12) {
  49.             var11[var12] = this.savedBytes[var12];
  50.          }
  51.  
  52.          System.arraycopy(var1, var2, var11, this.savedSize, var3 - var2);
  53.          super.byteOff -= this.savedSize;
  54.          var1 = var11;
  55.          var2 = 0;
  56.          var3 = var11.length;
  57.          this.savedSize = 0;
  58.       }
  59.  
  60.       super.charOff = var5;
  61.       var10 = var2;
  62.  
  63.       while(var10 < var3) {
  64.          boolean var14 = false;
  65.          if (super.charOff >= var6) {
  66.             throw new ConversionBufferFullException();
  67.          }
  68.  
  69.          int var19 = var1[var10] & 255;
  70.          var8 = 1;
  71.          if ((var19 & -128) != 0) {
  72.             super.badInputLength = 1;
  73.             throw new MalformedInputException();
  74.          }
  75.  
  76.          while(var19 == 27 || var19 == 14 || var19 == 15) {
  77.             if (var19 == 27) {
  78.                if (var10 + var8 + 1 >= var3) {
  79.                   if (var10 + var8 >= var3) {
  80.                      this.savedSize = 1;
  81.                      this.savedBytes[0] = (byte)var19;
  82.                   } else {
  83.                      this.savedSize = 2;
  84.                      this.savedBytes[0] = (byte)var19;
  85.                      this.savedBytes[1] = var1[var10 + var8];
  86.                      ++var8;
  87.                   }
  88.                   break;
  89.                } else {
  90.                   int var20 = var1[var10 + var8] & 255;
  91.                   ++var8;
  92.                   if ((var20 & -128) != 0) {
  93.                      super.badInputLength = 2;
  94.                      throw new MalformedInputException();
  95.                   }
  96.  
  97.                   if (var20 == 40) {
  98.                      int var13 = var1[var10 + var8] & 255;
  99.                      ++var8;
  100.                      if (var13 == 66) {
  101.                         this.currentState = 0;
  102.                      } else if (var13 == 74) {
  103.                         this.currentState = 1;
  104.                      } else {
  105.                         if (var13 != 73) {
  106.                            super.badInputLength = 3;
  107.                            throw new MalformedInputException();
  108.                         }
  109.  
  110.                         this.currentState = 4;
  111.                      }
  112.                   } else {
  113.                      if (var20 != 36) {
  114.                         super.badInputLength = 2;
  115.                         throw new MalformedInputException();
  116.                      }
  117.  
  118.                      int var22 = var1[var10 + var8] & 255;
  119.                      ++var8;
  120.                      if ((var22 & -128) != 0) {
  121.                         super.badInputLength = 3;
  122.                         throw new MalformedInputException();
  123.                      }
  124.  
  125.                      if (var22 == 64) {
  126.                         this.currentState = 2;
  127.                      } else {
  128.                         if (var22 != 66) {
  129.                            super.badInputLength = 3;
  130.                            throw new MalformedInputException();
  131.                         }
  132.  
  133.                         this.currentState = 3;
  134.                      }
  135.                   }
  136.  
  137.                   if (var10 + var8 < var3) {
  138.                      var19 = var1[var10 + var8];
  139.                      ++var8;
  140.                   } else {
  141.                      var14 = true;
  142.                      break;
  143.                   }
  144.                }
  145.             } else if (var19 == 14) {
  146.                var7 = this.currentState;
  147.                this.currentState = 5;
  148.                if (var10 + var8 < var3) {
  149.                   var19 = var1[var10 + var8];
  150.                   ++var8;
  151.                   if ((var19 & -128) != 0) {
  152.                      super.badInputLength = 1;
  153.                      throw new MalformedInputException();
  154.                   }
  155.                } else {
  156.                   var14 = true;
  157.                   break;
  158.                }
  159.             } else if (var19 == 15) {
  160.                this.currentState = var7;
  161.                if (var10 + var8 < var3) {
  162.                   var19 = var1[var10 + var8];
  163.                   ++var8;
  164.                   if ((var19 & -128) != 0) {
  165.                      super.badInputLength = 1;
  166.                      throw new MalformedInputException();
  167.                   }
  168.                } else {
  169.                   var14 = true;
  170.                   break;
  171.                }
  172.             }
  173.          }
  174.  
  175.          if (!var14 && this.savedSize == 0) {
  176.             var14 = false;
  177.             label144:
  178.             switch (this.currentState) {
  179.                case 0:
  180.                   var9 = (char)(var19 & 255);
  181.                   break;
  182.                case 1:
  183.                   switch (var19) {
  184.                      case 92:
  185.                         var9 = 165;
  186.                         break label144;
  187.                      case 126:
  188.                         var9 = 8254;
  189.                         break label144;
  190.                      default:
  191.                         var9 = (char)var19;
  192.                         break label144;
  193.                   }
  194.                case 2:
  195.                case 3:
  196.                   if (var10 + var8 >= var3) {
  197.                      this.savedSize = 1;
  198.                      this.savedBytes[0] = (byte)var19;
  199.                   } else {
  200.                      int var21 = var1[var10 + var8] & 255;
  201.                      ++var8;
  202.                      if ((var21 & -128) != 0) {
  203.                         super.badInputLength = 1;
  204.                         throw new MalformedInputException();
  205.                      }
  206.  
  207.                      if (var19 == 33 && var21 == 64) {
  208.                         var9 = '∩╝╝';
  209.                      } else {
  210.                         try {
  211.                            var9 = ((ByteToCharDoubleByte)this).getUnicode(var19, var21);
  212.                         } catch (ArrayIndexOutOfBoundsException var15) {
  213.                            var9 = '∩┐╜';
  214.                         }
  215.                      }
  216.                   }
  217.                   break;
  218.                case 4:
  219.                case 5:
  220.                   if (var19 > 96) {
  221.                      super.badInputLength = 1;
  222.                      throw new MalformedInputException();
  223.                   }
  224.  
  225.                   var9 = (char)(var19 + '∩╜Ç');
  226.             }
  227.  
  228.             if (this.savedSize == 0) {
  229.                if (var9 == '∩┐╜') {
  230.                   if (!super.subMode) {
  231.                      super.badInputLength = var8;
  232.                      throw new UnknownCharacterException();
  233.                   }
  234.  
  235.                   var9 = super.subChars[0];
  236.                }
  237.  
  238.                var10 += var8;
  239.                super.byteOff += var8;
  240.                var4[super.charOff++] = var9;
  241.                continue;
  242.             }
  243.  
  244.             super.byteOff += var8;
  245.             break;
  246.          }
  247.  
  248.          super.byteOff += var8;
  249.          break;
  250.       }
  251.  
  252.       return super.charOff - var5;
  253.    }
  254.  
  255.    public void reset() {
  256.       super.byteOff = super.charOff = 0;
  257.       this.currentState = 0;
  258.       this.savedSize = 0;
  259.    }
  260.  
  261.    public String getCharacterEncoding() {
  262.       return "ISO2022JP";
  263.    }
  264. }
  265.