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

547 lines
6.4 KiB

  1. // Copyright (c) 2017 Couchbase, Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package vellum
  15. const maxCommon = 1<<6 - 1
  16. func encodeCommon(in byte) byte {
  17. val := byte((int(commonInputs[in]) + 1) % 256)
  18. if val > maxCommon {
  19. return 0
  20. }
  21. return val
  22. }
  23. func decodeCommon(in byte) byte {
  24. return commonInputsInv[in-1]
  25. }
  26. var commonInputs = []byte{
  27. 84, // '\x00'
  28. 85, // '\x01'
  29. 86, // '\x02'
  30. 87, // '\x03'
  31. 88, // '\x04'
  32. 89, // '\x05'
  33. 90, // '\x06'
  34. 91, // '\x07'
  35. 92, // '\x08'
  36. 93, // '\t'
  37. 94, // '\n'
  38. 95, // '\x0b'
  39. 96, // '\x0c'
  40. 97, // '\r'
  41. 98, // '\x0e'
  42. 99, // '\x0f'
  43. 100, // '\x10'
  44. 101, // '\x11'
  45. 102, // '\x12'
  46. 103, // '\x13'
  47. 104, // '\x14'
  48. 105, // '\x15'
  49. 106, // '\x16'
  50. 107, // '\x17'
  51. 108, // '\x18'
  52. 109, // '\x19'
  53. 110, // '\x1a'
  54. 111, // '\x1b'
  55. 112, // '\x1c'
  56. 113, // '\x1d'
  57. 114, // '\x1e'
  58. 115, // '\x1f'
  59. 116, // ' '
  60. 80, // '!'
  61. 117, // '"'
  62. 118, // '#'
  63. 79, // '$'
  64. 39, // '%'
  65. 30, // '&'
  66. 81, // "'"
  67. 75, // '('
  68. 74, // ')'
  69. 82, // '*'
  70. 57, // '+'
  71. 66, // ','
  72. 16, // '-'
  73. 12, // '.'
  74. 2, // '/'
  75. 19, // '0'
  76. 20, // '1'
  77. 21, // '2'
  78. 27, // '3'
  79. 32, // '4'
  80. 29, // '5'
  81. 35, // '6'
  82. 36, // '7'
  83. 37, // '8'
  84. 34, // '9'
  85. 24, // ':'
  86. 73, // ';'
  87. 119, // '<'
  88. 23, // '='
  89. 120, // '>'
  90. 40, // '?'
  91. 83, // '@'
  92. 44, // 'A'
  93. 48, // 'B'
  94. 42, // 'C'
  95. 43, // 'D'
  96. 49, // 'E'
  97. 46, // 'F'
  98. 62, // 'G'
  99. 61, // 'H'
  100. 47, // 'I'
  101. 69, // 'J'
  102. 68, // 'K'
  103. 58, // 'L'
  104. 56, // 'M'
  105. 55, // 'N'
  106. 59, // 'O'
  107. 51, // 'P'
  108. 72, // 'Q'
  109. 54, // 'R'
  110. 45, // 'S'
  111. 52, // 'T'
  112. 64, // 'U'
  113. 65, // 'V'
  114. 63, // 'W'
  115. 71, // 'X'
  116. 67, // 'Y'
  117. 70, // 'Z'
  118. 77, // '['
  119. 121, // '\\'
  120. 78, // ']'
  121. 122, // '^'
  122. 31, // '_'
  123. 123, // '`'
  124. 4, // 'a'
  125. 25, // 'b'
  126. 9, // 'c'
  127. 17, // 'd'
  128. 1, // 'e'
  129. 26, // 'f'
  130. 22, // 'g'
  131. 13, // 'h'
  132. 7, // 'i'
  133. 50, // 'j'
  134. 38, // 'k'
  135. 14, // 'l'
  136. 15, // 'm'
  137. 10, // 'n'
  138. 3, // 'o'
  139. 8, // 'p'
  140. 60, // 'q'
  141. 6, // 'r'
  142. 5, // 's'
  143. 0, // 't'
  144. 18, // 'u'
  145. 33, // 'v'
  146. 11, // 'w'
  147. 41, // 'x'
  148. 28, // 'y'
  149. 53, // 'z'
  150. 124, // '{'
  151. 125, // '|'
  152. 126, // '}'
  153. 76, // '~'
  154. 127, // '\x7f'
  155. 128, // '\x80'
  156. 129, // '\x81'
  157. 130, // '\x82'
  158. 131, // '\x83'
  159. 132, // '\x84'
  160. 133, // '\x85'
  161. 134, // '\x86'
  162. 135, // '\x87'
  163. 136, // '\x88'
  164. 137, // '\x89'
  165. 138, // '\x8a'
  166. 139, // '\x8b'
  167. 140, // '\x8c'
  168. 141, // '\x8d'
  169. 142, // '\x8e'
  170. 143, // '\x8f'
  171. 144, // '\x90'
  172. 145, // '\x91'
  173. 146, // '\x92'
  174. 147, // '\x93'
  175. 148, // '\x94'
  176. 149, // '\x95'
  177. 150, // '\x96'
  178. 151, // '\x97'
  179. 152, // '\x98'
  180. 153, // '\x99'
  181. 154, // '\x9a'
  182. 155, // '\x9b'
  183. 156, // '\x9c'
  184. 157, // '\x9d'
  185. 158, // '\x9e'
  186. 159, // '\x9f'
  187. 160, // '\xa0'
  188. 161, // '¡'
  189. 162, // '¢'
  190. 163, // '£'
  191. 164, // '¤'
  192. 165, // '¥'
  193. 166, // '¦'
  194. 167, // '§'
  195. 168, // '¨'
  196. 169, // '©'
  197. 170, // 'ª'
  198. 171, // '«'
  199. 172, // '¬'
  200. 173, // '\xad'
  201. 174, // '®'
  202. 175, // '¯'
  203. 176, // '°'
  204. 177, // '±'
  205. 178, // '²'
  206. 179, // '³'
  207. 180, // '´'
  208. 181, // 'µ'
  209. 182, // '¶'
  210. 183, // '·'
  211. 184, // '¸'
  212. 185, // '¹'
  213. 186, // 'º'
  214. 187, // '»'
  215. 188, // '¼'
  216. 189, // '½'
  217. 190, // '¾'
  218. 191, // '¿'
  219. 192, // 'À'
  220. 193, // 'Á'
  221. 194, // 'Â'
  222. 195, // 'Ã'
  223. 196, // 'Ä'
  224. 197, // 'Å'
  225. 198, // 'Æ'
  226. 199, // 'Ç'
  227. 200, // 'È'
  228. 201, // 'É'
  229. 202, // 'Ê'
  230. 203, // 'Ë'
  231. 204, // 'Ì'
  232. 205, // 'Í'
  233. 206, // 'Î'
  234. 207, // 'Ï'
  235. 208, // 'Ð'
  236. 209, // 'Ñ'
  237. 210, // 'Ò'
  238. 211, // 'Ó'
  239. 212, // 'Ô'
  240. 213, // 'Õ'
  241. 214, // 'Ö'
  242. 215, // '×'
  243. 216, // 'Ø'
  244. 217, // 'Ù'
  245. 218, // 'Ú'
  246. 219, // 'Û'
  247. 220, // 'Ü'
  248. 221, // 'Ý'
  249. 222, // 'Þ'
  250. 223, // 'ß'
  251. 224, // 'à'
  252. 225, // 'á'
  253. 226, // 'â'
  254. 227, // 'ã'
  255. 228, // 'ä'
  256. 229, // 'å'
  257. 230, // 'æ'
  258. 231, // 'ç'
  259. 232, // 'è'
  260. 233, // 'é'
  261. 234, // 'ê'
  262. 235, // 'ë'
  263. 236, // 'ì'
  264. 237, // 'í'
  265. 238, // 'î'
  266. 239, // 'ï'
  267. 240, // 'ð'
  268. 241, // 'ñ'
  269. 242, // 'ò'
  270. 243, // 'ó'
  271. 244, // 'ô'
  272. 245, // 'õ'
  273. 246, // 'ö'
  274. 247, // '÷'
  275. 248, // 'ø'
  276. 249, // 'ù'
  277. 250, // 'ú'
  278. 251, // 'û'
  279. 252, // 'ü'
  280. 253, // 'ý'
  281. 254, // 'þ'
  282. 255, // 'ÿ'
  283. }
  284. var commonInputsInv = []byte{
  285. 't',
  286. 'e',
  287. '/',
  288. 'o',
  289. 'a',
  290. 's',
  291. 'r',
  292. 'i',
  293. 'p',
  294. 'c',
  295. 'n',
  296. 'w',
  297. '.',
  298. 'h',
  299. 'l',
  300. 'm',
  301. '-',
  302. 'd',
  303. 'u',
  304. '0',
  305. '1',
  306. '2',
  307. 'g',
  308. '=',
  309. ':',
  310. 'b',
  311. 'f',
  312. '3',
  313. 'y',
  314. '5',
  315. '&',
  316. '_',
  317. '4',
  318. 'v',
  319. '9',
  320. '6',
  321. '7',
  322. '8',
  323. 'k',
  324. '%',
  325. '?',
  326. 'x',
  327. 'C',
  328. 'D',
  329. 'A',
  330. 'S',
  331. 'F',
  332. 'I',
  333. 'B',
  334. 'E',
  335. 'j',
  336. 'P',
  337. 'T',
  338. 'z',
  339. 'R',
  340. 'N',
  341. 'M',
  342. '+',
  343. 'L',
  344. 'O',
  345. 'q',
  346. 'H',
  347. 'G',
  348. 'W',
  349. 'U',
  350. 'V',
  351. ',',
  352. 'Y',
  353. 'K',
  354. 'J',
  355. 'Z',
  356. 'X',
  357. 'Q',
  358. ';',
  359. ')',
  360. '(',
  361. '~',
  362. '[',
  363. ']',
  364. '$',
  365. '!',
  366. '\'',
  367. '*',
  368. '@',
  369. '\x00',
  370. '\x01',
  371. '\x02',
  372. '\x03',
  373. '\x04',
  374. '\x05',
  375. '\x06',
  376. '\x07',
  377. '\x08',
  378. '\t',
  379. '\n',
  380. '\x0b',
  381. '\x0c',
  382. '\r',
  383. '\x0e',
  384. '\x0f',
  385. '\x10',
  386. '\x11',
  387. '\x12',
  388. '\x13',
  389. '\x14',
  390. '\x15',
  391. '\x16',
  392. '\x17',
  393. '\x18',
  394. '\x19',
  395. '\x1a',
  396. '\x1b',
  397. '\x1c',
  398. '\x1d',
  399. '\x1e',
  400. '\x1f',
  401. ' ',
  402. '"',
  403. '#',
  404. '<',
  405. '>',
  406. '\\',
  407. '^',
  408. '`',
  409. '{',
  410. '|',
  411. '}',
  412. '\x7f',
  413. '\x80',
  414. '\x81',
  415. '\x82',
  416. '\x83',
  417. '\x84',
  418. '\x85',
  419. '\x86',
  420. '\x87',
  421. '\x88',
  422. '\x89',
  423. '\x8a',
  424. '\x8b',
  425. '\x8c',
  426. '\x8d',
  427. '\x8e',
  428. '\x8f',
  429. '\x90',
  430. '\x91',
  431. '\x92',
  432. '\x93',
  433. '\x94',
  434. '\x95',
  435. '\x96',
  436. '\x97',
  437. '\x98',
  438. '\x99',
  439. '\x9a',
  440. '\x9b',
  441. '\x9c',
  442. '\x9d',
  443. '\x9e',
  444. '\x9f',
  445. '\xa0',
  446. '\xa1',
  447. '\xa2',
  448. '\xa3',
  449. '\xa4',
  450. '\xa5',
  451. '\xa6',
  452. '\xa7',
  453. '\xa8',
  454. '\xa9',
  455. '\xaa',
  456. '\xab',
  457. '\xac',
  458. '\xad',
  459. '\xae',
  460. '\xaf',
  461. '\xb0',
  462. '\xb1',
  463. '\xb2',
  464. '\xb3',
  465. '\xb4',
  466. '\xb5',
  467. '\xb6',
  468. '\xb7',
  469. '\xb8',
  470. '\xb9',
  471. '\xba',
  472. '\xbb',
  473. '\xbc',
  474. '\xbd',
  475. '\xbe',
  476. '\xbf',
  477. '\xc0',
  478. '\xc1',
  479. '\xc2',
  480. '\xc3',
  481. '\xc4',
  482. '\xc5',
  483. '\xc6',
  484. '\xc7',
  485. '\xc8',
  486. '\xc9',
  487. '\xca',
  488. '\xcb',
  489. '\xcc',
  490. '\xcd',
  491. '\xce',
  492. '\xcf',
  493. '\xd0',
  494. '\xd1',
  495. '\xd2',
  496. '\xd3',
  497. '\xd4',
  498. '\xd5',
  499. '\xd6',
  500. '\xd7',
  501. '\xd8',
  502. '\xd9',
  503. '\xda',
  504. '\xdb',
  505. '\xdc',
  506. '\xdd',
  507. '\xde',
  508. '\xdf',
  509. '\xe0',
  510. '\xe1',
  511. '\xe2',
  512. '\xe3',
  513. '\xe4',
  514. '\xe5',
  515. '\xe6',
  516. '\xe7',
  517. '\xe8',
  518. '\xe9',
  519. '\xea',
  520. '\xeb',
  521. '\xec',
  522. '\xed',
  523. '\xee',
  524. '\xef',
  525. '\xf0',
  526. '\xf1',
  527. '\xf2',
  528. '\xf3',
  529. '\xf4',
  530. '\xf5',
  531. '\xf6',
  532. '\xf7',
  533. '\xf8',
  534. '\xf9',
  535. '\xfa',
  536. '\xfb',
  537. '\xfc',
  538. '\xfd',
  539. '\xfe',
  540. '\xff',
  541. }