public class ISO2022CNSMModel extends SMModel { // ////////////////////////////////////////////////////////////// // constants // ////////////////////////////////////////////////////////////// public static final int ISO2022CN_CLASS_FACTOR = 9; // ////////////////////////////////////////////////////////////// // methods // ////////////////////////////////////////////////////////////// public ISO2022CNSMModel() { super( new PkgInt( INDEX_SHIFT_4BITS, SHIFT_MASK_4BITS, BIT_SHIFT_4BITS, UNIT_MASK_4BITS, iso2022cnClassTable), ISO2022CN_CLASS_FACTOR, new PkgInt( INDEX_SHIFT_4BITS, SHIFT_MASK_4BITS, BIT_SHIFT_4BITS, UNIT_MASK_4BITS, iso2022cnStateTable), iso2022cnCharLenTable, Constants.CHARSET_ISO_2022_CN); } // ////////////////////////////////////////////////////////////// // constants continued // ////////////////////////////////////////////////////////////// private static int[] iso2022cnClassTable = new int[] { PkgInt.pack4bits(2, 0, 0, 0, 0, 0, 0, 0), // 00 - 07 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 08 - 0f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 10 - 17 PkgInt.pack4bits(0, 0, 0, 1, 0, 0, 0, 0), // 18 - 1f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 20 - 27 PkgInt.pack4bits(0, 3, 0, 0, 0, 0, 0, 0), // 28 - 2f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 30 - 37 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 38 - 3f PkgInt.pack4bits(0, 0, 0, 4, 0, 0, 0, 0), // 40 - 47 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 48 - 4f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 50 - 57 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 58 - 5f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 60 - 67 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 68 - 6f PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 70 - 77 PkgInt.pack4bits(0, 0, 0, 0, 0, 0, 0, 0), // 78 - 7f PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // 80 - 87 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // 88 - 8f PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // 90 - 97 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // 98 - 9f PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // a0 - a7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // a8 - af PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // b0 - b7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // b8 - bf PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // c0 - c7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // c8 - cf PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // d0 - d7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // d8 - df PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // e0 - e7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // e8 - ef PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2), // f0 - f7 PkgInt.pack4bits(2, 2, 2, 2, 2, 2, 2, 2) // f8 - ff }; private static int[] iso2022cnStateTable = new int[] { PkgInt.pack4bits(START, 3, ERROR, START, START, START, START, START), // 00-07 PkgInt.pack4bits(START, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 08-0f PkgInt.pack4bits(ERROR, ERROR, ITSME, ITSME, ITSME, ITSME, ITSME, ITSME), // 10-17 PkgInt.pack4bits(ITSME, ITSME, ITSME, ERROR, ERROR, ERROR, 4, ERROR), // 18-1f PkgInt.pack4bits(ERROR, ERROR, ERROR, ITSME, ERROR, ERROR, ERROR, ERROR), // 20-27 PkgInt.pack4bits(5, 6, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 28-2f PkgInt.pack4bits(ERROR, ERROR, ERROR, ITSME, ERROR, ERROR, ERROR, ERROR), // 30-37 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ITSME, ERROR, START) // 38-3f }; private static int[] iso2022cnCharLenTable = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0}; }
public class UTF8SMModel extends SMModel { //////////////////////////////////////////////////////////////// // constants //////////////////////////////////////////////////////////////// public static final int UTF8_CLASS_FACTOR = 16; //////////////////////////////////////////////////////////////// // methods //////////////////////////////////////////////////////////////// public UTF8SMModel() { super( new PkgInt( INDEX_SHIFT_4BITS, SHIFT_MASK_4BITS, BIT_SHIFT_4BITS, UNIT_MASK_4BITS, utf8ClassTable), UTF8_CLASS_FACTOR, new PkgInt( INDEX_SHIFT_4BITS, SHIFT_MASK_4BITS, BIT_SHIFT_4BITS, UNIT_MASK_4BITS, utf8StateTable), utf8CharLenTable, Constants.CHARSET_UTF_8); } //////////////////////////////////////////////////////////////// // constants continued //////////////////////////////////////////////////////////////// private static int[] utf8ClassTable = new int[] { // PkgInt.pack4bits(0,1,1,1,1,1,1,1), // 00 - 07 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 00 - 07 //allow 0x00 as a legal value PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 0, 0), // 08 - 0f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 10 - 17 PkgInt.pack4bits(1, 1, 1, 0, 1, 1, 1, 1), // 18 - 1f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 20 - 27 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 28 - 2f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 30 - 37 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 38 - 3f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 40 - 47 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 48 - 4f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 50 - 57 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 58 - 5f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 60 - 67 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 68 - 6f PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 70 - 77 PkgInt.pack4bits(1, 1, 1, 1, 1, 1, 1, 1), // 78 - 7f PkgInt.pack4bits(2, 2, 2, 2, 3, 3, 3, 3), // 80 - 87 PkgInt.pack4bits(4, 4, 4, 4, 4, 4, 4, 4), // 88 - 8f PkgInt.pack4bits(4, 4, 4, 4, 4, 4, 4, 4), // 90 - 97 PkgInt.pack4bits(4, 4, 4, 4, 4, 4, 4, 4), // 98 - 9f PkgInt.pack4bits(5, 5, 5, 5, 5, 5, 5, 5), // a0 - a7 PkgInt.pack4bits(5, 5, 5, 5, 5, 5, 5, 5), // a8 - af PkgInt.pack4bits(5, 5, 5, 5, 5, 5, 5, 5), // b0 - b7 PkgInt.pack4bits(5, 5, 5, 5, 5, 5, 5, 5), // b8 - bf PkgInt.pack4bits(0, 0, 6, 6, 6, 6, 6, 6), // c0 - c7 PkgInt.pack4bits(6, 6, 6, 6, 6, 6, 6, 6), // c8 - cf PkgInt.pack4bits(6, 6, 6, 6, 6, 6, 6, 6), // d0 - d7 PkgInt.pack4bits(6, 6, 6, 6, 6, 6, 6, 6), // d8 - df PkgInt.pack4bits(7, 8, 8, 8, 8, 8, 8, 8), // e0 - e7 PkgInt.pack4bits(8, 8, 8, 8, 8, 9, 8, 8), // e8 - ef PkgInt.pack4bits(10, 11, 11, 11, 11, 11, 11, 11), // f0 - f7 PkgInt.pack4bits(12, 13, 13, 13, 14, 15, 0, 0) // f8 - ff }; private static int[] utf8StateTable = new int[] { PkgInt.pack4bits(ERROR, START, ERROR, ERROR, ERROR, ERROR, 12, 10), // 00-07 PkgInt.pack4bits(9, 11, 8, 7, 6, 5, 4, 3), // 08-0f PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 10-17 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 18-1f PkgInt.pack4bits(ITSME, ITSME, ITSME, ITSME, ITSME, ITSME, ITSME, ITSME), // 20-27 PkgInt.pack4bits(ITSME, ITSME, ITSME, ITSME, ITSME, ITSME, ITSME, ITSME), // 28-2f PkgInt.pack4bits(ERROR, ERROR, 5, 5, 5, 5, ERROR, ERROR), // 30-37 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 38-3f PkgInt.pack4bits(ERROR, ERROR, ERROR, 5, 5, 5, ERROR, ERROR), // 40-47 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 48-4f PkgInt.pack4bits(ERROR, ERROR, 7, 7, 7, 7, ERROR, ERROR), // 50-57 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 58-5f PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, 7, 7, ERROR, ERROR), // 60-67 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 68-6f PkgInt.pack4bits(ERROR, ERROR, 9, 9, 9, 9, ERROR, ERROR), // 70-77 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 78-7f // PkgInt.pack4bits(ERROR,ERROR,ERROR,ERROR,ERROR, 9,ERROR,ERROR),//80-87 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, 9, 9, ERROR, ERROR), // 80-87 // Allow emoji PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 88-8f PkgInt.pack4bits(ERROR, ERROR, 12, 12, 12, 12, ERROR, ERROR), // 90-97 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // 98-9f PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, 12, ERROR, ERROR), // a0-a7 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // a8-af PkgInt.pack4bits(ERROR, ERROR, 12, 12, 12, ERROR, ERROR, ERROR), // b0-b7 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR), // b8-bf PkgInt.pack4bits(ERROR, ERROR, START, START, START, START, ERROR, ERROR), // c0-c7 PkgInt.pack4bits(ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR) // c8-cf }; private static int[] utf8CharLenTable = new int[] { 0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6 }; }