You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

table.go 28 kB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989
  1. // generated by "go run gen.go". DO NOT EDIT.
  2. package ccitt
  3. // Each decodeTable is represented by an array of [2]int16's: a binary tree.
  4. // Each array element (other than element 0, which means invalid) is a branch
  5. // node in that tree. The root node is always element 1 (the second element).
  6. //
  7. // To walk the tree, look at the next bit in the bit stream, using it to select
  8. // the first or second element of the [2]int16. If that int16 is 0, we have an
  9. // invalid code. If it is positive, go to that branch node. If it is negative,
  10. // then we have a leaf node, whose value is the bitwise complement (the ^
  11. // operator) of that int16.
  12. //
  13. // Comments above each decodeTable also show the same structure visually. The
  14. // "b123" lines show the 123'rd branch node. The "=XXXXX" lines show an invalid
  15. // code. The "=v1234" lines show a leaf node with value 1234. When reading the
  16. // bit stream, a 0 or 1 bit means to go up or down, as you move left to right.
  17. //
  18. // For example, in modeDecodeTable, branch node b005 is three steps up from the
  19. // root node, meaning that we have already seen "000". If the next bit is "0"
  20. // then we move to branch node b006. Otherwise, the next bit is "1", and we
  21. // move to the leaf node v0000 (also known as the modePass constant). Indeed,
  22. // the bits that encode modePass are "0001".
  23. //
  24. // Tables 1, 2 and 3 come from the "ITU-T Recommendation T.6: FACSIMILE CODING
  25. // SCHEMES AND CODING CONTROL FUNCTIONS FOR GROUP 4 FACSIMILE APPARATUS"
  26. // specification:
  27. //
  28. // https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-T.6-198811-I!!PDF-E&type=items
  29. // modeDecodeTable represents Table 1 and the End-of-Line code.
  30. //
  31. // +=XXXXX
  32. // b015 +-+
  33. // | +=v0010
  34. // b014 +-+
  35. // | +=XXXXX
  36. // b013 +-+
  37. // | +=XXXXX
  38. // b012 +-+
  39. // | +=XXXXX
  40. // b011 +-+
  41. // | +=XXXXX
  42. // b009 +-+
  43. // | +=v0009
  44. // b007 +-+
  45. // | | +=v0008
  46. // b010 | +-+
  47. // | +=v0005
  48. // b006 +-+
  49. // | | +=v0007
  50. // b008 | +-+
  51. // | +=v0004
  52. // b005 +-+
  53. // | +=v0000
  54. // b003 +-+
  55. // | +=v0001
  56. // b002 +-+
  57. // | | +=v0006
  58. // b004 | +-+
  59. // | +=v0003
  60. // b001 +-+
  61. // +=v0002
  62. var modeDecodeTable = [...][2]int16{
  63. 0: {0, 0},
  64. 1: {2, ^2},
  65. 2: {3, 4},
  66. 3: {5, ^1},
  67. 4: {^6, ^3},
  68. 5: {6, ^0},
  69. 6: {7, 8},
  70. 7: {9, 10},
  71. 8: {^7, ^4},
  72. 9: {11, ^9},
  73. 10: {^8, ^5},
  74. 11: {12, 0},
  75. 12: {13, 0},
  76. 13: {14, 0},
  77. 14: {15, 0},
  78. 15: {0, ^10},
  79. }
  80. // whiteDecodeTable represents Tables 2 and 3 for a white run.
  81. //
  82. // +=XXXXX
  83. // b059 +-+
  84. // | | +=v1792
  85. // b096 | | +-+
  86. // | | | | +=v1984
  87. // b100 | | | +-+
  88. // | | | +=v2048
  89. // b094 | | +-+
  90. // | | | | +=v2112
  91. // b101 | | | | +-+
  92. // | | | | | +=v2176
  93. // b097 | | | +-+
  94. // | | | | +=v2240
  95. // b102 | | | +-+
  96. // | | | +=v2304
  97. // b085 | +-+
  98. // | | +=v1856
  99. // b098 | | +-+
  100. // | | | +=v1920
  101. // b095 | +-+
  102. // | | +=v2368
  103. // b103 | | +-+
  104. // | | | +=v2432
  105. // b099 | +-+
  106. // | | +=v2496
  107. // b104 | +-+
  108. // | +=v2560
  109. // b040 +-+
  110. // | | +=v0029
  111. // b060 | +-+
  112. // | +=v0030
  113. // b026 +-+
  114. // | | +=v0045
  115. // b061 | | +-+
  116. // | | | +=v0046
  117. // b041 | +-+
  118. // | +=v0022
  119. // b016 +-+
  120. // | | +=v0023
  121. // b042 | | +-+
  122. // | | | | +=v0047
  123. // b062 | | | +-+
  124. // | | | +=v0048
  125. // b027 | +-+
  126. // | +=v0013
  127. // b008 +-+
  128. // | | +=v0020
  129. // b043 | | +-+
  130. // | | | | +=v0033
  131. // b063 | | | +-+
  132. // | | | +=v0034
  133. // b028 | | +-+
  134. // | | | | +=v0035
  135. // b064 | | | | +-+
  136. // | | | | | +=v0036
  137. // b044 | | | +-+
  138. // | | | | +=v0037
  139. // b065 | | | +-+
  140. // | | | +=v0038
  141. // b017 | +-+
  142. // | | +=v0019
  143. // b045 | | +-+
  144. // | | | | +=v0031
  145. // b066 | | | +-+
  146. // | | | +=v0032
  147. // b029 | +-+
  148. // | +=v0001
  149. // b004 +-+
  150. // | | +=v0012
  151. // b030 | | +-+
  152. // | | | | +=v0053
  153. // b067 | | | | +-+
  154. // | | | | | +=v0054
  155. // b046 | | | +-+
  156. // | | | +=v0026
  157. // b018 | | +-+
  158. // | | | | +=v0039
  159. // b068 | | | | +-+
  160. // | | | | | +=v0040
  161. // b047 | | | | +-+
  162. // | | | | | | +=v0041
  163. // b069 | | | | | +-+
  164. // | | | | | +=v0042
  165. // b031 | | | +-+
  166. // | | | | +=v0043
  167. // b070 | | | | +-+
  168. // | | | | | +=v0044
  169. // b048 | | | +-+
  170. // | | | +=v0021
  171. // b009 | +-+
  172. // | | +=v0028
  173. // b049 | | +-+
  174. // | | | | +=v0061
  175. // b071 | | | +-+
  176. // | | | +=v0062
  177. // b032 | | +-+
  178. // | | | | +=v0063
  179. // b072 | | | | +-+
  180. // | | | | | +=v0000
  181. // b050 | | | +-+
  182. // | | | | +=v0320
  183. // b073 | | | +-+
  184. // | | | +=v0384
  185. // b019 | +-+
  186. // | +=v0010
  187. // b002 +-+
  188. // | | +=v0011
  189. // b020 | | +-+
  190. // | | | | +=v0027
  191. // b051 | | | | +-+
  192. // | | | | | | +=v0059
  193. // b074 | | | | | +-+
  194. // | | | | | +=v0060
  195. // b033 | | | +-+
  196. // | | | | +=v1472
  197. // b086 | | | | +-+
  198. // | | | | | +=v1536
  199. // b075 | | | | +-+
  200. // | | | | | | +=v1600
  201. // b087 | | | | | +-+
  202. // | | | | | +=v1728
  203. // b052 | | | +-+
  204. // | | | +=v0018
  205. // b010 | | +-+
  206. // | | | | +=v0024
  207. // b053 | | | | +-+
  208. // | | | | | | +=v0049
  209. // b076 | | | | | +-+
  210. // | | | | | +=v0050
  211. // b034 | | | | +-+
  212. // | | | | | | +=v0051
  213. // b077 | | | | | | +-+
  214. // | | | | | | | +=v0052
  215. // b054 | | | | | +-+
  216. // | | | | | +=v0025
  217. // b021 | | | +-+
  218. // | | | | +=v0055
  219. // b078 | | | | +-+
  220. // | | | | | +=v0056
  221. // b055 | | | | +-+
  222. // | | | | | | +=v0057
  223. // b079 | | | | | +-+
  224. // | | | | | +=v0058
  225. // b035 | | | +-+
  226. // | | | +=v0192
  227. // b005 | +-+
  228. // | | +=v1664
  229. // b036 | | +-+
  230. // | | | | +=v0448
  231. // b080 | | | | +-+
  232. // | | | | | +=v0512
  233. // b056 | | | +-+
  234. // | | | | +=v0704
  235. // b088 | | | | +-+
  236. // | | | | | +=v0768
  237. // b081 | | | +-+
  238. // | | | +=v0640
  239. // b022 | | +-+
  240. // | | | | +=v0576
  241. // b082 | | | | +-+
  242. // | | | | | | +=v0832
  243. // b089 | | | | | +-+
  244. // | | | | | +=v0896
  245. // b057 | | | | +-+
  246. // | | | | | | +=v0960
  247. // b090 | | | | | | +-+
  248. // | | | | | | | +=v1024
  249. // b083 | | | | | +-+
  250. // | | | | | | +=v1088
  251. // b091 | | | | | +-+
  252. // | | | | | +=v1152
  253. // b037 | | | +-+
  254. // | | | | +=v1216
  255. // b092 | | | | +-+
  256. // | | | | | +=v1280
  257. // b084 | | | | +-+
  258. // | | | | | | +=v1344
  259. // b093 | | | | | +-+
  260. // | | | | | +=v1408
  261. // b058 | | | +-+
  262. // | | | +=v0256
  263. // b011 | +-+
  264. // | +=v0002
  265. // b001 +-+
  266. // | +=v0003
  267. // b012 | +-+
  268. // | | | +=v0128
  269. // b023 | | +-+
  270. // | | +=v0008
  271. // b006 | +-+
  272. // | | | +=v0009
  273. // b024 | | | +-+
  274. // | | | | | +=v0016
  275. // b038 | | | | +-+
  276. // | | | | +=v0017
  277. // b013 | | +-+
  278. // | | +=v0004
  279. // b003 +-+
  280. // | +=v0005
  281. // b014 | +-+
  282. // | | | +=v0014
  283. // b039 | | | +-+
  284. // | | | | +=v0015
  285. // b025 | | +-+
  286. // | | +=v0064
  287. // b007 +-+
  288. // | +=v0006
  289. // b015 +-+
  290. // +=v0007
  291. var whiteDecodeTable = [...][2]int16{
  292. 0: {0, 0},
  293. 1: {2, 3},
  294. 2: {4, 5},
  295. 3: {6, 7},
  296. 4: {8, 9},
  297. 5: {10, 11},
  298. 6: {12, 13},
  299. 7: {14, 15},
  300. 8: {16, 17},
  301. 9: {18, 19},
  302. 10: {20, 21},
  303. 11: {22, ^2},
  304. 12: {^3, 23},
  305. 13: {24, ^4},
  306. 14: {^5, 25},
  307. 15: {^6, ^7},
  308. 16: {26, 27},
  309. 17: {28, 29},
  310. 18: {30, 31},
  311. 19: {32, ^10},
  312. 20: {^11, 33},
  313. 21: {34, 35},
  314. 22: {36, 37},
  315. 23: {^128, ^8},
  316. 24: {^9, 38},
  317. 25: {39, ^64},
  318. 26: {40, 41},
  319. 27: {42, ^13},
  320. 28: {43, 44},
  321. 29: {45, ^1},
  322. 30: {^12, 46},
  323. 31: {47, 48},
  324. 32: {49, 50},
  325. 33: {51, 52},
  326. 34: {53, 54},
  327. 35: {55, ^192},
  328. 36: {^1664, 56},
  329. 37: {57, 58},
  330. 38: {^16, ^17},
  331. 39: {^14, ^15},
  332. 40: {59, 60},
  333. 41: {61, ^22},
  334. 42: {^23, 62},
  335. 43: {^20, 63},
  336. 44: {64, 65},
  337. 45: {^19, 66},
  338. 46: {67, ^26},
  339. 47: {68, 69},
  340. 48: {70, ^21},
  341. 49: {^28, 71},
  342. 50: {72, 73},
  343. 51: {^27, 74},
  344. 52: {75, ^18},
  345. 53: {^24, 76},
  346. 54: {77, ^25},
  347. 55: {78, 79},
  348. 56: {80, 81},
  349. 57: {82, 83},
  350. 58: {84, ^256},
  351. 59: {0, 85},
  352. 60: {^29, ^30},
  353. 61: {^45, ^46},
  354. 62: {^47, ^48},
  355. 63: {^33, ^34},
  356. 64: {^35, ^36},
  357. 65: {^37, ^38},
  358. 66: {^31, ^32},
  359. 67: {^53, ^54},
  360. 68: {^39, ^40},
  361. 69: {^41, ^42},
  362. 70: {^43, ^44},
  363. 71: {^61, ^62},
  364. 72: {^63, ^0},
  365. 73: {^320, ^384},
  366. 74: {^59, ^60},
  367. 75: {86, 87},
  368. 76: {^49, ^50},
  369. 77: {^51, ^52},
  370. 78: {^55, ^56},
  371. 79: {^57, ^58},
  372. 80: {^448, ^512},
  373. 81: {88, ^640},
  374. 82: {^576, 89},
  375. 83: {90, 91},
  376. 84: {92, 93},
  377. 85: {94, 95},
  378. 86: {^1472, ^1536},
  379. 87: {^1600, ^1728},
  380. 88: {^704, ^768},
  381. 89: {^832, ^896},
  382. 90: {^960, ^1024},
  383. 91: {^1088, ^1152},
  384. 92: {^1216, ^1280},
  385. 93: {^1344, ^1408},
  386. 94: {96, 97},
  387. 95: {98, 99},
  388. 96: {^1792, 100},
  389. 97: {101, 102},
  390. 98: {^1856, ^1920},
  391. 99: {103, 104},
  392. 100: {^1984, ^2048},
  393. 101: {^2112, ^2176},
  394. 102: {^2240, ^2304},
  395. 103: {^2368, ^2432},
  396. 104: {^2496, ^2560},
  397. }
  398. // blackDecodeTable represents Tables 2 and 3 for a black run.
  399. //
  400. // +=XXXXX
  401. // b017 +-+
  402. // | | +=v1792
  403. // b042 | | +-+
  404. // | | | | +=v1984
  405. // b063 | | | +-+
  406. // | | | +=v2048
  407. // b029 | | +-+
  408. // | | | | +=v2112
  409. // b064 | | | | +-+
  410. // | | | | | +=v2176
  411. // b043 | | | +-+
  412. // | | | | +=v2240
  413. // b065 | | | +-+
  414. // | | | +=v2304
  415. // b022 | +-+
  416. // | | +=v1856
  417. // b044 | | +-+
  418. // | | | +=v1920
  419. // b030 | +-+
  420. // | | +=v2368
  421. // b066 | | +-+
  422. // | | | +=v2432
  423. // b045 | +-+
  424. // | | +=v2496
  425. // b067 | +-+
  426. // | +=v2560
  427. // b013 +-+
  428. // | | +=v0018
  429. // b031 | | +-+
  430. // | | | | +=v0052
  431. // b068 | | | | +-+
  432. // | | | | | | +=v0640
  433. // b095 | | | | | +-+
  434. // | | | | | +=v0704
  435. // b046 | | | +-+
  436. // | | | | +=v0768
  437. // b096 | | | | +-+
  438. // | | | | | +=v0832
  439. // b069 | | | +-+
  440. // | | | +=v0055
  441. // b023 | | +-+
  442. // | | | | +=v0056
  443. // b070 | | | | +-+
  444. // | | | | | | +=v1280
  445. // b097 | | | | | +-+
  446. // | | | | | +=v1344
  447. // b047 | | | | +-+
  448. // | | | | | | +=v1408
  449. // b098 | | | | | | +-+
  450. // | | | | | | | +=v1472
  451. // b071 | | | | | +-+
  452. // | | | | | +=v0059
  453. // b032 | | | +-+
  454. // | | | | +=v0060
  455. // b072 | | | | +-+
  456. // | | | | | | +=v1536
  457. // b099 | | | | | +-+
  458. // | | | | | +=v1600
  459. // b048 | | | +-+
  460. // | | | +=v0024
  461. // b018 | +-+
  462. // | | +=v0025
  463. // b049 | | +-+
  464. // | | | | +=v1664
  465. // b100 | | | | +-+
  466. // | | | | | +=v1728
  467. // b073 | | | +-+
  468. // | | | +=v0320
  469. // b033 | | +-+
  470. // | | | | +=v0384
  471. // b074 | | | | +-+
  472. // | | | | | +=v0448
  473. // b050 | | | +-+
  474. // | | | | +=v0512
  475. // b101 | | | | +-+
  476. // | | | | | +=v0576
  477. // b075 | | | +-+
  478. // | | | +=v0053
  479. // b024 | +-+
  480. // | | +=v0054
  481. // b076 | | +-+
  482. // | | | | +=v0896
  483. // b102 | | | +-+
  484. // | | | +=v0960
  485. // b051 | | +-+
  486. // | | | | +=v1024
  487. // b103 | | | | +-+
  488. // | | | | | +=v1088
  489. // b077 | | | +-+
  490. // | | | | +=v1152
  491. // b104 | | | +-+
  492. // | | | +=v1216
  493. // b034 | +-+
  494. // | +=v0064
  495. // b010 +-+
  496. // | | +=v0013
  497. // b019 | | +-+
  498. // | | | | +=v0023
  499. // b052 | | | | +-+
  500. // | | | | | | +=v0050
  501. // b078 | | | | | +-+
  502. // | | | | | +=v0051
  503. // b035 | | | | +-+
  504. // | | | | | | +=v0044
  505. // b079 | | | | | | +-+
  506. // | | | | | | | +=v0045
  507. // b053 | | | | | +-+
  508. // | | | | | | +=v0046
  509. // b080 | | | | | +-+
  510. // | | | | | +=v0047
  511. // b025 | | | +-+
  512. // | | | | +=v0057
  513. // b081 | | | | +-+
  514. // | | | | | +=v0058
  515. // b054 | | | | +-+
  516. // | | | | | | +=v0061
  517. // b082 | | | | | +-+
  518. // | | | | | +=v0256
  519. // b036 | | | +-+
  520. // | | | +=v0016
  521. // b014 | +-+
  522. // | | +=v0017
  523. // b037 | | +-+
  524. // | | | | +=v0048
  525. // b083 | | | | +-+
  526. // | | | | | +=v0049
  527. // b055 | | | +-+
  528. // | | | | +=v0062
  529. // b084 | | | +-+
  530. // | | | +=v0063
  531. // b026 | | +-+
  532. // | | | | +=v0030
  533. // b085 | | | | +-+
  534. // | | | | | +=v0031
  535. // b056 | | | | +-+
  536. // | | | | | | +=v0032
  537. // b086 | | | | | +-+
  538. // | | | | | +=v0033
  539. // b038 | | | +-+
  540. // | | | | +=v0040
  541. // b087 | | | | +-+
  542. // | | | | | +=v0041
  543. // b057 | | | +-+
  544. // | | | +=v0022
  545. // b020 | +-+
  546. // | +=v0014
  547. // b008 +-+
  548. // | | +=v0010
  549. // b015 | | +-+
  550. // | | | +=v0011
  551. // b011 | +-+
  552. // | | +=v0015
  553. // b027 | | +-+
  554. // | | | | +=v0128
  555. // b088 | | | | +-+
  556. // | | | | | +=v0192
  557. // b058 | | | | +-+
  558. // | | | | | | +=v0026
  559. // b089 | | | | | +-+
  560. // | | | | | +=v0027
  561. // b039 | | | +-+
  562. // | | | | +=v0028
  563. // b090 | | | | +-+
  564. // | | | | | +=v0029
  565. // b059 | | | +-+
  566. // | | | +=v0019
  567. // b021 | | +-+
  568. // | | | | +=v0020
  569. // b060 | | | | +-+
  570. // | | | | | | +=v0034
  571. // b091 | | | | | +-+
  572. // | | | | | +=v0035
  573. // b040 | | | | +-+
  574. // | | | | | | +=v0036
  575. // b092 | | | | | | +-+
  576. // | | | | | | | +=v0037
  577. // b061 | | | | | +-+
  578. // | | | | | | +=v0038
  579. // b093 | | | | | +-+
  580. // | | | | | +=v0039
  581. // b028 | | | +-+
  582. // | | | | +=v0021
  583. // b062 | | | | +-+
  584. // | | | | | | +=v0042
  585. // b094 | | | | | +-+
  586. // | | | | | +=v0043
  587. // b041 | | | +-+
  588. // | | | +=v0000
  589. // b016 | +-+
  590. // | +=v0012
  591. // b006 +-+
  592. // | | +=v0009
  593. // b012 | | +-+
  594. // | | | +=v0008
  595. // b009 | +-+
  596. // | +=v0007
  597. // b004 +-+
  598. // | | +=v0006
  599. // b007 | +-+
  600. // | +=v0005
  601. // b002 +-+
  602. // | | +=v0001
  603. // b005 | +-+
  604. // | +=v0004
  605. // b001 +-+
  606. // | +=v0003
  607. // b003 +-+
  608. // +=v0002
  609. var blackDecodeTable = [...][2]int16{
  610. 0: {0, 0},
  611. 1: {2, 3},
  612. 2: {4, 5},
  613. 3: {^3, ^2},
  614. 4: {6, 7},
  615. 5: {^1, ^4},
  616. 6: {8, 9},
  617. 7: {^6, ^5},
  618. 8: {10, 11},
  619. 9: {12, ^7},
  620. 10: {13, 14},
  621. 11: {15, 16},
  622. 12: {^9, ^8},
  623. 13: {17, 18},
  624. 14: {19, 20},
  625. 15: {^10, ^11},
  626. 16: {21, ^12},
  627. 17: {0, 22},
  628. 18: {23, 24},
  629. 19: {^13, 25},
  630. 20: {26, ^14},
  631. 21: {27, 28},
  632. 22: {29, 30},
  633. 23: {31, 32},
  634. 24: {33, 34},
  635. 25: {35, 36},
  636. 26: {37, 38},
  637. 27: {^15, 39},
  638. 28: {40, 41},
  639. 29: {42, 43},
  640. 30: {44, 45},
  641. 31: {^18, 46},
  642. 32: {47, 48},
  643. 33: {49, 50},
  644. 34: {51, ^64},
  645. 35: {52, 53},
  646. 36: {54, ^16},
  647. 37: {^17, 55},
  648. 38: {56, 57},
  649. 39: {58, 59},
  650. 40: {60, 61},
  651. 41: {62, ^0},
  652. 42: {^1792, 63},
  653. 43: {64, 65},
  654. 44: {^1856, ^1920},
  655. 45: {66, 67},
  656. 46: {68, 69},
  657. 47: {70, 71},
  658. 48: {72, ^24},
  659. 49: {^25, 73},
  660. 50: {74, 75},
  661. 51: {76, 77},
  662. 52: {^23, 78},
  663. 53: {79, 80},
  664. 54: {81, 82},
  665. 55: {83, 84},
  666. 56: {85, 86},
  667. 57: {87, ^22},
  668. 58: {88, 89},
  669. 59: {90, ^19},
  670. 60: {^20, 91},
  671. 61: {92, 93},
  672. 62: {^21, 94},
  673. 63: {^1984, ^2048},
  674. 64: {^2112, ^2176},
  675. 65: {^2240, ^2304},
  676. 66: {^2368, ^2432},
  677. 67: {^2496, ^2560},
  678. 68: {^52, 95},
  679. 69: {96, ^55},
  680. 70: {^56, 97},
  681. 71: {98, ^59},
  682. 72: {^60, 99},
  683. 73: {100, ^320},
  684. 74: {^384, ^448},
  685. 75: {101, ^53},
  686. 76: {^54, 102},
  687. 77: {103, 104},
  688. 78: {^50, ^51},
  689. 79: {^44, ^45},
  690. 80: {^46, ^47},
  691. 81: {^57, ^58},
  692. 82: {^61, ^256},
  693. 83: {^48, ^49},
  694. 84: {^62, ^63},
  695. 85: {^30, ^31},
  696. 86: {^32, ^33},
  697. 87: {^40, ^41},
  698. 88: {^128, ^192},
  699. 89: {^26, ^27},
  700. 90: {^28, ^29},
  701. 91: {^34, ^35},
  702. 92: {^36, ^37},
  703. 93: {^38, ^39},
  704. 94: {^42, ^43},
  705. 95: {^640, ^704},
  706. 96: {^768, ^832},
  707. 97: {^1280, ^1344},
  708. 98: {^1408, ^1472},
  709. 99: {^1536, ^1600},
  710. 100: {^1664, ^1728},
  711. 101: {^512, ^576},
  712. 102: {^896, ^960},
  713. 103: {^1024, ^1088},
  714. 104: {^1152, ^1216},
  715. }
  716. const maxCodeLength = 13
  717. // Each encodeTable is represented by an array of bitStrings.
  718. // bitString is a pair of uint32 values representing a bit code.
  719. // The nBits low bits of bits make up the actual bit code.
  720. // Eg. bitString{0x0004, 8} represents the bitcode "00000100".
  721. type bitString struct {
  722. bits uint32
  723. nBits uint32
  724. }
  725. // modeEncodeTable represents Table 1 and the End-of-Line code.
  726. var modeEncodeTable = [...]bitString{
  727. 0: {0x0001, 4}, // "0001"
  728. 1: {0x0001, 3}, // "001"
  729. 2: {0x0001, 1}, // "1"
  730. 3: {0x0003, 3}, // "011"
  731. 4: {0x0003, 6}, // "000011"
  732. 5: {0x0003, 7}, // "0000011"
  733. 6: {0x0002, 3}, // "010"
  734. 7: {0x0002, 6}, // "000010"
  735. 8: {0x0002, 7}, // "0000010"
  736. 9: {0x0001, 7}, // "0000001"
  737. 10: {0x0001, 12}, // "000000000001"
  738. }
  739. // whiteEncodeTable2 represents Table 2 for a white run.
  740. var whiteEncodeTable2 = [...]bitString{
  741. 0: {0x0035, 8}, // "00110101"
  742. 1: {0x0007, 6}, // "000111"
  743. 2: {0x0007, 4}, // "0111"
  744. 3: {0x0008, 4}, // "1000"
  745. 4: {0x000b, 4}, // "1011"
  746. 5: {0x000c, 4}, // "1100"
  747. 6: {0x000e, 4}, // "1110"
  748. 7: {0x000f, 4}, // "1111"
  749. 8: {0x0013, 5}, // "10011"
  750. 9: {0x0014, 5}, // "10100"
  751. 10: {0x0007, 5}, // "00111"
  752. 11: {0x0008, 5}, // "01000"
  753. 12: {0x0008, 6}, // "001000"
  754. 13: {0x0003, 6}, // "000011"
  755. 14: {0x0034, 6}, // "110100"
  756. 15: {0x0035, 6}, // "110101"
  757. 16: {0x002a, 6}, // "101010"
  758. 17: {0x002b, 6}, // "101011"
  759. 18: {0x0027, 7}, // "0100111"
  760. 19: {0x000c, 7}, // "0001100"
  761. 20: {0x0008, 7}, // "0001000"
  762. 21: {0x0017, 7}, // "0010111"
  763. 22: {0x0003, 7}, // "0000011"
  764. 23: {0x0004, 7}, // "0000100"
  765. 24: {0x0028, 7}, // "0101000"
  766. 25: {0x002b, 7}, // "0101011"
  767. 26: {0x0013, 7}, // "0010011"
  768. 27: {0x0024, 7}, // "0100100"
  769. 28: {0x0018, 7}, // "0011000"
  770. 29: {0x0002, 8}, // "00000010"
  771. 30: {0x0003, 8}, // "00000011"
  772. 31: {0x001a, 8}, // "00011010"
  773. 32: {0x001b, 8}, // "00011011"
  774. 33: {0x0012, 8}, // "00010010"
  775. 34: {0x0013, 8}, // "00010011"
  776. 35: {0x0014, 8}, // "00010100"
  777. 36: {0x0015, 8}, // "00010101"
  778. 37: {0x0016, 8}, // "00010110"
  779. 38: {0x0017, 8}, // "00010111"
  780. 39: {0x0028, 8}, // "00101000"
  781. 40: {0x0029, 8}, // "00101001"
  782. 41: {0x002a, 8}, // "00101010"
  783. 42: {0x002b, 8}, // "00101011"
  784. 43: {0x002c, 8}, // "00101100"
  785. 44: {0x002d, 8}, // "00101101"
  786. 45: {0x0004, 8}, // "00000100"
  787. 46: {0x0005, 8}, // "00000101"
  788. 47: {0x000a, 8}, // "00001010"
  789. 48: {0x000b, 8}, // "00001011"
  790. 49: {0x0052, 8}, // "01010010"
  791. 50: {0x0053, 8}, // "01010011"
  792. 51: {0x0054, 8}, // "01010100"
  793. 52: {0x0055, 8}, // "01010101"
  794. 53: {0x0024, 8}, // "00100100"
  795. 54: {0x0025, 8}, // "00100101"
  796. 55: {0x0058, 8}, // "01011000"
  797. 56: {0x0059, 8}, // "01011001"
  798. 57: {0x005a, 8}, // "01011010"
  799. 58: {0x005b, 8}, // "01011011"
  800. 59: {0x004a, 8}, // "01001010"
  801. 60: {0x004b, 8}, // "01001011"
  802. 61: {0x0032, 8}, // "00110010"
  803. 62: {0x0033, 8}, // "00110011"
  804. 63: {0x0034, 8}, // "00110100"
  805. }
  806. // whiteEncodeTable3 represents Table 3 for a white run.
  807. var whiteEncodeTable3 = [...]bitString{
  808. 0: {0x001b, 5}, // "11011"
  809. 1: {0x0012, 5}, // "10010"
  810. 2: {0x0017, 6}, // "010111"
  811. 3: {0x0037, 7}, // "0110111"
  812. 4: {0x0036, 8}, // "00110110"
  813. 5: {0x0037, 8}, // "00110111"
  814. 6: {0x0064, 8}, // "01100100"
  815. 7: {0x0065, 8}, // "01100101"
  816. 8: {0x0068, 8}, // "01101000"
  817. 9: {0x0067, 8}, // "01100111"
  818. 10: {0x00cc, 9}, // "011001100"
  819. 11: {0x00cd, 9}, // "011001101"
  820. 12: {0x00d2, 9}, // "011010010"
  821. 13: {0x00d3, 9}, // "011010011"
  822. 14: {0x00d4, 9}, // "011010100"
  823. 15: {0x00d5, 9}, // "011010101"
  824. 16: {0x00d6, 9}, // "011010110"
  825. 17: {0x00d7, 9}, // "011010111"
  826. 18: {0x00d8, 9}, // "011011000"
  827. 19: {0x00d9, 9}, // "011011001"
  828. 20: {0x00da, 9}, // "011011010"
  829. 21: {0x00db, 9}, // "011011011"
  830. 22: {0x0098, 9}, // "010011000"
  831. 23: {0x0099, 9}, // "010011001"
  832. 24: {0x009a, 9}, // "010011010"
  833. 25: {0x0018, 6}, // "011000"
  834. 26: {0x009b, 9}, // "010011011"
  835. 27: {0x0008, 11}, // "00000001000"
  836. 28: {0x000c, 11}, // "00000001100"
  837. 29: {0x000d, 11}, // "00000001101"
  838. 30: {0x0012, 12}, // "000000010010"
  839. 31: {0x0013, 12}, // "000000010011"
  840. 32: {0x0014, 12}, // "000000010100"
  841. 33: {0x0015, 12}, // "000000010101"
  842. 34: {0x0016, 12}, // "000000010110"
  843. 35: {0x0017, 12}, // "000000010111"
  844. 36: {0x001c, 12}, // "000000011100"
  845. 37: {0x001d, 12}, // "000000011101"
  846. 38: {0x001e, 12}, // "000000011110"
  847. 39: {0x001f, 12}, // "000000011111"
  848. }
  849. // blackEncodeTable2 represents Table 2 for a black run.
  850. var blackEncodeTable2 = [...]bitString{
  851. 0: {0x0037, 10}, // "0000110111"
  852. 1: {0x0002, 3}, // "010"
  853. 2: {0x0003, 2}, // "11"
  854. 3: {0x0002, 2}, // "10"
  855. 4: {0x0003, 3}, // "011"
  856. 5: {0x0003, 4}, // "0011"
  857. 6: {0x0002, 4}, // "0010"
  858. 7: {0x0003, 5}, // "00011"
  859. 8: {0x0005, 6}, // "000101"
  860. 9: {0x0004, 6}, // "000100"
  861. 10: {0x0004, 7}, // "0000100"
  862. 11: {0x0005, 7}, // "0000101"
  863. 12: {0x0007, 7}, // "0000111"
  864. 13: {0x0004, 8}, // "00000100"
  865. 14: {0x0007, 8}, // "00000111"
  866. 15: {0x0018, 9}, // "000011000"
  867. 16: {0x0017, 10}, // "0000010111"
  868. 17: {0x0018, 10}, // "0000011000"
  869. 18: {0x0008, 10}, // "0000001000"
  870. 19: {0x0067, 11}, // "00001100111"
  871. 20: {0x0068, 11}, // "00001101000"
  872. 21: {0x006c, 11}, // "00001101100"
  873. 22: {0x0037, 11}, // "00000110111"
  874. 23: {0x0028, 11}, // "00000101000"
  875. 24: {0x0017, 11}, // "00000010111"
  876. 25: {0x0018, 11}, // "00000011000"
  877. 26: {0x00ca, 12}, // "000011001010"
  878. 27: {0x00cb, 12}, // "000011001011"
  879. 28: {0x00cc, 12}, // "000011001100"
  880. 29: {0x00cd, 12}, // "000011001101"
  881. 30: {0x0068, 12}, // "000001101000"
  882. 31: {0x0069, 12}, // "000001101001"
  883. 32: {0x006a, 12}, // "000001101010"
  884. 33: {0x006b, 12}, // "000001101011"
  885. 34: {0x00d2, 12}, // "000011010010"
  886. 35: {0x00d3, 12}, // "000011010011"
  887. 36: {0x00d4, 12}, // "000011010100"
  888. 37: {0x00d5, 12}, // "000011010101"
  889. 38: {0x00d6, 12}, // "000011010110"
  890. 39: {0x00d7, 12}, // "000011010111"
  891. 40: {0x006c, 12}, // "000001101100"
  892. 41: {0x006d, 12}, // "000001101101"
  893. 42: {0x00da, 12}, // "000011011010"
  894. 43: {0x00db, 12}, // "000011011011"
  895. 44: {0x0054, 12}, // "000001010100"
  896. 45: {0x0055, 12}, // "000001010101"
  897. 46: {0x0056, 12}, // "000001010110"
  898. 47: {0x0057, 12}, // "000001010111"
  899. 48: {0x0064, 12}, // "000001100100"
  900. 49: {0x0065, 12}, // "000001100101"
  901. 50: {0x0052, 12}, // "000001010010"
  902. 51: {0x0053, 12}, // "000001010011"
  903. 52: {0x0024, 12}, // "000000100100"
  904. 53: {0x0037, 12}, // "000000110111"
  905. 54: {0x0038, 12}, // "000000111000"
  906. 55: {0x0027, 12}, // "000000100111"
  907. 56: {0x0028, 12}, // "000000101000"
  908. 57: {0x0058, 12}, // "000001011000"
  909. 58: {0x0059, 12}, // "000001011001"
  910. 59: {0x002b, 12}, // "000000101011"
  911. 60: {0x002c, 12}, // "000000101100"
  912. 61: {0x005a, 12}, // "000001011010"
  913. 62: {0x0066, 12}, // "000001100110"
  914. 63: {0x0067, 12}, // "000001100111"
  915. }
  916. // blackEncodeTable3 represents Table 3 for a black run.
  917. var blackEncodeTable3 = [...]bitString{
  918. 0: {0x000f, 10}, // "0000001111"
  919. 1: {0x00c8, 12}, // "000011001000"
  920. 2: {0x00c9, 12}, // "000011001001"
  921. 3: {0x005b, 12}, // "000001011011"
  922. 4: {0x0033, 12}, // "000000110011"
  923. 5: {0x0034, 12}, // "000000110100"
  924. 6: {0x0035, 12}, // "000000110101"
  925. 7: {0x006c, 13}, // "0000001101100"
  926. 8: {0x006d, 13}, // "0000001101101"
  927. 9: {0x004a, 13}, // "0000001001010"
  928. 10: {0x004b, 13}, // "0000001001011"
  929. 11: {0x004c, 13}, // "0000001001100"
  930. 12: {0x004d, 13}, // "0000001001101"
  931. 13: {0x0072, 13}, // "0000001110010"
  932. 14: {0x0073, 13}, // "0000001110011"
  933. 15: {0x0074, 13}, // "0000001110100"
  934. 16: {0x0075, 13}, // "0000001110101"
  935. 17: {0x0076, 13}, // "0000001110110"
  936. 18: {0x0077, 13}, // "0000001110111"
  937. 19: {0x0052, 13}, // "0000001010010"
  938. 20: {0x0053, 13}, // "0000001010011"
  939. 21: {0x0054, 13}, // "0000001010100"
  940. 22: {0x0055, 13}, // "0000001010101"
  941. 23: {0x005a, 13}, // "0000001011010"
  942. 24: {0x005b, 13}, // "0000001011011"
  943. 25: {0x0064, 13}, // "0000001100100"
  944. 26: {0x0065, 13}, // "0000001100101"
  945. 27: {0x0008, 11}, // "00000001000"
  946. 28: {0x000c, 11}, // "00000001100"
  947. 29: {0x000d, 11}, // "00000001101"
  948. 30: {0x0012, 12}, // "000000010010"
  949. 31: {0x0013, 12}, // "000000010011"
  950. 32: {0x0014, 12}, // "000000010100"
  951. 33: {0x0015, 12}, // "000000010101"
  952. 34: {0x0016, 12}, // "000000010110"
  953. 35: {0x0017, 12}, // "000000010111"
  954. 36: {0x001c, 12}, // "000000011100"
  955. 37: {0x001d, 12}, // "000000011101"
  956. 38: {0x001e, 12}, // "000000011110"
  957. 39: {0x001f, 12}, // "000000011111"
  958. }
  959. // COPY PASTE table.go BEGIN
  960. const (
  961. modePass = iota // Pass
  962. modeH // Horizontal
  963. modeV0 // Vertical-0
  964. modeVR1 // Vertical-Right-1
  965. modeVR2 // Vertical-Right-2
  966. modeVR3 // Vertical-Right-3
  967. modeVL1 // Vertical-Left-1
  968. modeVL2 // Vertical-Left-2
  969. modeVL3 // Vertical-Left-3
  970. modeExt // Extension
  971. modeEOL // End-of-Line
  972. )
  973. // COPY PASTE table.go END