home *** CD-ROM | disk | FTP | other *** search
- package sun.io;
-
- public class CharToByteUTF8 extends CharToByteConverter {
- private char highHalfZoneCode;
-
- public int flush(byte[] var1, int var2, int var3) throws MalformedInputException {
- if (this.highHalfZoneCode != 0) {
- this.highHalfZoneCode = 0;
- super.badInputLength = 0;
- throw new MalformedInputException();
- } else {
- super.byteOff = super.charOff = 0;
- return 0;
- }
- }
-
- public int convert(char[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws ConversionBufferFullException, MalformedInputException {
- byte[] var8 = new byte[6];
- super.charOff = var2;
- super.byteOff = var5;
- if (this.highHalfZoneCode != 0) {
- char var7 = this.highHalfZoneCode;
- this.highHalfZoneCode = 0;
- if (var1[var2] < '\udc00' || var1[var2] > '\udfff') {
- super.badInputLength = 0;
- throw new MalformedInputException();
- }
-
- int var11 = (this.highHalfZoneCode - '\ud800') * 1024 + (var1[var2] - '\udc00') + 65536;
- var4[0] = (byte)(240 | var11 >> 18 & 7);
- var4[1] = (byte)(128 | var11 >> 12 & 63);
- var4[2] = (byte)(128 | var11 >> 6 & 63);
- var4[3] = (byte)(128 | var11 & 63);
- ++super.charOff;
- this.highHalfZoneCode = 0;
- }
-
- while(super.charOff < var3) {
- char var13 = var1[super.charOff];
- byte var9;
- byte var10;
- if (var13 < 128) {
- var8[0] = (byte)var13;
- var9 = 1;
- var10 = 1;
- } else if (var13 < 2048) {
- var8[0] = (byte)(192 | var13 >> 6 & 31);
- var8[1] = (byte)(128 | var13 & 63);
- var9 = 1;
- var10 = 2;
- } else if (var13 >= '\ud800' && var13 <= '\udbff') {
- if (super.charOff + 1 >= var3) {
- this.highHalfZoneCode = var13;
- break;
- }
-
- char var14 = var1[super.charOff + 1];
- if (var14 < '\udc00' || var14 > '\udfff') {
- super.badInputLength = 1;
- throw new MalformedInputException();
- }
-
- int var12 = (var13 - '\ud800') * 1024 + (var14 - '\udc00') + 65536;
- var8[0] = (byte)(240 | var12 >> 18 & 7);
- var8[1] = (byte)(128 | var12 >> 12 & 63);
- var8[2] = (byte)(128 | var12 >> 6 & 63);
- var8[3] = (byte)(128 | var12 & 63);
- var10 = 4;
- var9 = 2;
- } else {
- var8[0] = (byte)(224 | var13 >> 12 & 15);
- var8[1] = (byte)(128 | var13 >> 6 & 63);
- var8[2] = (byte)(128 | var13 & 63);
- var9 = 1;
- var10 = 3;
- }
-
- if (super.byteOff + var10 > var6) {
- throw new ConversionBufferFullException();
- }
-
- for(int var15 = 0; var15 < var10; ++var15) {
- var4[super.byteOff++] = var8[var15];
- }
-
- super.charOff += var9;
- }
-
- return super.byteOff - var5;
- }
-
- public boolean canConvert(char var1) {
- return true;
- }
-
- public int getMaxBytesPerChar() {
- return 3;
- }
-
- public void reset() {
- super.byteOff = super.charOff = 0;
- this.highHalfZoneCode = 0;
- }
-
- public String getCharacterEncoding() {
- return "UTF8";
- }
- }
-