encoding_index_singlebyte/
armscii_8.rs

1// AUTOGENERATED FROM index-armscii-8.txt, ORIGINAL COMMENT FOLLOWS:
2//
3// Based on lib/armscii_8.h from libiconv 1.14
4//   URL: https://www.gnu.org/software/libiconv/
5//   Online: http://git.savannah.gnu.org/cgit/libiconv.git/tree/lib/armscii_8.h?h=v1.14
6//
7// Descriptions from the armscii-8(7) man page from Linux man-pages 4.08.
8//   URL: https://www.kernel.org/doc/man-pages/
9//   Online: https://manned.org/armscii-8/87d2922c
10
11#[allow(dead_code)] const X: u16 = 0xffff;
12
13const FORWARD_TABLE: &[u16] = &[
14    X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,
15    160, X, 1415, 1417, 41, 40, 187, 171, 8212, 46, 1373, 44, 45, 1418, 8230, 1372, 1371, 1374,
16    1329, 1377, 1330, 1378, 1331, 1379, 1332, 1380, 1333, 1381, 1334, 1382, 1335, 1383, 1336, 1384,
17    1337, 1385, 1338, 1386, 1339, 1387, 1340, 1388, 1341, 1389, 1342, 1390, 1343, 1391, 1344, 1392,
18    1345, 1393, 1346, 1394, 1347, 1395, 1348, 1396, 1349, 1397, 1350, 1398, 1351, 1399, 1352, 1400,
19    1353, 1401, 1354, 1402, 1355, 1403, 1356, 1404, 1357, 1405, 1358, 1406, 1359, 1407, 1360, 1408,
20    1361, 1409, 1362, 1410, 1363, 1411, 1364, 1412, 1365, 1413, 1366, 1414, 1370, X,
21]; // 128 entries
22
23/// Returns the index code point for pointer `code` in this index.
24#[inline]
25pub fn forward(code: u8) -> u16 {
26    FORWARD_TABLE[(code - 0x80) as usize]
27}
28
29#[cfg(not(feature = "no-optimized-legacy-encoding"))]
30const BACKWARD_TABLE_LOWER: &[u8] = &[
31    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
33    241, 243, 245, 247, 249, 251, 253, 162, 0, 163, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
35    0, 0, 0, 0, 0, 0, 0, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206,
36    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37    0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 164, 0, 0, 171, 172, 169, 0, 0, 0, 0,
39    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0,
40    0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 208,
41    210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246,
42    248, 250, 252, 0, 0, 0, 254, 176, 175, 170, 177, 0, 0, 179, 181, 183, 185, 187, 189, 191, 193,
43    195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231,
44    233, 235, 237, 239,
45]; // 357 entries
46
47#[cfg(not(feature = "no-optimized-legacy-encoding"))]
48const BACKWARD_TABLE_UPPER: &[u16] = &[
49    182, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 293, 64, 0, 0, 0, 0, 0, 0,
50    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53    0, 0, 0, 143,
54]; // 129 entries
55
56/// Returns the index pointer for code point `code` in this index.
57#[inline]
58#[cfg(not(feature = "no-optimized-legacy-encoding"))]
59pub fn backward(code: u32) -> u8 {
60    let offset = (code >> 6) as usize;
61    let offset = if offset < 129 {BACKWARD_TABLE_UPPER[offset] as usize} else {0};
62    BACKWARD_TABLE_LOWER[offset + ((code & 63) as usize)]
63}
64
65/// Returns the index pointer for code point `code` in this index.
66#[cfg(feature = "no-optimized-legacy-encoding")]
67pub fn backward(code: u32) -> u8 {
68    if code > 8230 || ((0x10005u32 >> (code >> 9)) & 1) == 0 { return 0; }
69    let code = code as u16;
70    for i in 0..0x80 {
71        if FORWARD_TABLE[i as usize] == code { return 0x80 + i; }
72    }
73    0
74}
75
76#[cfg(test)]
77encoding_index_tests::single_byte_tests! {
78}