| 1 | /* -*- C++ -*- |
| 2 | SPDX-FileCopyrightText: 1998 Netscape Communications Corporation <developer@mozilla.org> |
| 3 | |
| 4 | SPDX-License-Identifier: MIT |
| 5 | */ |
| 6 | |
| 7 | #include "nsCodingStateMachine.h" |
| 8 | |
| 9 | namespace kencodingprober |
| 10 | { |
| 11 | constexpr std::array<unsigned int, 256 / 8> HZ_cls = PCKXBITS( |
| 12 | // clang-format off |
| 13 | il: 1, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 00 - 07 |
| 14 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 08 - 0f |
| 15 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 10 - 17 |
| 16 | il: 0, il: 0, il: 0, il: 1, il: 0, il: 0, il: 0, il: 0, // 18 - 1f |
| 17 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 20 - 27 |
| 18 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 28 - 2f |
| 19 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 30 - 37 |
| 20 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 38 - 3f |
| 21 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 40 - 47 |
| 22 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 48 - 4f |
| 23 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 50 - 57 |
| 24 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 58 - 5f |
| 25 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 60 - 67 |
| 26 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 68 - 6f |
| 27 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 70 - 77 |
| 28 | il: 0, il: 0, il: 0, il: 4, il: 0, il: 5, il: 2, il: 0, // 78 - 7f |
| 29 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // 80 - 87 |
| 30 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // 88 - 8f |
| 31 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // 90 - 97 |
| 32 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // 98 - 9f |
| 33 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // a0 - a7 |
| 34 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // a8 - af |
| 35 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // b0 - b7 |
| 36 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // b8 - bf |
| 37 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // c0 - c7 |
| 38 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // c8 - cf |
| 39 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // d0 - d7 |
| 40 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // d8 - df |
| 41 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // e0 - e7 |
| 42 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // e8 - ef |
| 43 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, // f0 - f7 |
| 44 | il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1, il: 1 // f8 - ff |
| 45 | // clang-format on |
| 46 | ); |
| 47 | |
| 48 | constexpr std::array<unsigned int, 6> HZ_st = PCKXBITS( |
| 49 | // clang-format off |
| 50 | // <INV> ~ <?> { } |
| 51 | il: eStart, il: eError, il: 3, il: eStart, il: eStart, il: eStart, // eStart |
| 52 | il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, // eError |
| 53 | il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, // eItsMe |
| 54 | il: eError, il: eError, il: eStart, il: eStart, il: 4, il: eError, // 3 '~' |
| 55 | il: 5, il: eError, il: 6, il: eError, il: 5, il: 5, // 4 '~ { [ <Z> <R> ]*' |
| 56 | il: 4, il: eError, il: 4, il: eError, il: 4, il: 4, // 5 '~ { <Z> [ <R> <Z> ]*' |
| 57 | il: 4, il: eError, il: 4, il: eError, il: 4, il: eItsMe, // 6 |
| 58 | il: eStart, il: eStart, il: eStart, il: eStart, il: eStart, il: eStart // Padding |
| 59 | // clang-format on |
| 60 | ); |
| 61 | |
| 62 | static const unsigned int HZCharLenTable[] = {0, 0, 0, 0, 0, 0}; |
| 63 | |
| 64 | const SMModel HZSMModel = { |
| 65 | .classTable: {.idxsft: eIdxSft4bits, .sftmsk: eSftMsk4bits, .bitsft: eBitSft4bits, .unitmsk: eUnitMsk4bits, .data: HZ_cls.data()}, |
| 66 | .classFactor: 6, |
| 67 | .stateTable: {.idxsft: eIdxSft4bits, .sftmsk: eSftMsk4bits, .bitsft: eBitSft4bits, .unitmsk: eUnitMsk4bits, .data: HZ_st.data()}, |
| 68 | .charLenTable: HZCharLenTable, |
| 69 | .name: "HZ-GB-2312" , |
| 70 | }; |
| 71 | |
| 72 | constexpr std::array<unsigned int, 256 / 8> ISO2022JP_cls = PCKXBITS( |
| 73 | // clang-format off |
| 74 | il: 2, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 00 - 07 |
| 75 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 2, il: 2, // 08 - 0f |
| 76 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 10 - 17 |
| 77 | il: 0, il: 0, il: 0, il: 1, il: 0, il: 0, il: 0, il: 0, // 18 - 1f |
| 78 | il: 0, il: 0, il: 0, il: 0, il: 7, il: 0, il: 0, il: 0, // 20 - 27 |
| 79 | il: 3, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 28 - 2f |
| 80 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 30 - 37 |
| 81 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 38 - 3f |
| 82 | il: 6, il: 0, il: 4, il: 0, il: 8, il: 0, il: 0, il: 0, // 40 - 47 |
| 83 | il: 0, il: 9, il: 5, il: 0, il: 0, il: 0, il: 0, il: 0, // 48 - 4f |
| 84 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 50 - 57 |
| 85 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 58 - 5f |
| 86 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 60 - 67 |
| 87 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 68 - 6f |
| 88 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 70 - 77 |
| 89 | il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, il: 0, // 78 - 7f |
| 90 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // 80 - 87 |
| 91 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // 88 - 8f |
| 92 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // 90 - 97 |
| 93 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // 98 - 9f |
| 94 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // a0 - a7 |
| 95 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // a8 - af |
| 96 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // b0 - b7 |
| 97 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // b8 - bf |
| 98 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // c0 - c7 |
| 99 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // c8 - cf |
| 100 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // d0 - d7 |
| 101 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // d8 - df |
| 102 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // e0 - e7 |
| 103 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // e8 - ef |
| 104 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, // f0 - f7 |
| 105 | il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2, il: 2 // f8 - ff |
| 106 | // clang-format on |
| 107 | ); |
| 108 | |
| 109 | // ISO-2022-JP-1 / RFC 2237 |
| 110 | constexpr std::array<unsigned int, 9> ISO2022JP_st = PCKXBITS( |
| 111 | // clang-format off |
| 112 | // <ESC> <INV> ( B J @ $ D I |
| 113 | il: eStart, il: 3, il: eError, il: eStart, il: eStart, il: eStart, il: eStart, il: eStart, il: eStart, il: eStart, // eStart |
| 114 | il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, // eError |
| 115 | il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, il: eItsMe, // eItsMe |
| 116 | il: eError, il: eError, il: eError, il: 5, il: eError, il: eError, il: eError, il: 4, il: eError, il: eError, // 3 'ESC' |
| 117 | il: eError, il: eError, il: eError, il: 6, il: eItsMe, il: eError, il: eItsMe, il: eError, il: eError, il: eError, // 4 'ESC $' |
| 118 | il: eError, il: eError, il: eError, il: eError, il: eItsMe, il: eItsMe, il: eError, il: eError, il: eError, il: eItsMe, // 5 'ESC (' |
| 119 | il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eError, il: eItsMe, il: eError, // 6 'ESC $ (' |
| 120 | il: eStart, il: eStart // Padding |
| 121 | // clang-format on |
| 122 | ); |
| 123 | |
| 124 | static const unsigned int ISO2022JPCharLenTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
| 125 | |
| 126 | const SMModel ISO2022JPSMModel = { |
| 127 | .classTable: {.idxsft: eIdxSft4bits, .sftmsk: eSftMsk4bits, .bitsft: eBitSft4bits, .unitmsk: eUnitMsk4bits, .data: ISO2022JP_cls.data()}, |
| 128 | .classFactor: 10, |
| 129 | .stateTable: {.idxsft: eIdxSft4bits, .sftmsk: eSftMsk4bits, .bitsft: eBitSft4bits, .unitmsk: eUnitMsk4bits, .data: ISO2022JP_st.data()}, |
| 130 | .charLenTable: ISO2022JPCharLenTable, |
| 131 | .name: "ISO-2022-JP" , |
| 132 | }; |
| 133 | } |
| 134 | |