ebcdic.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. // Copyright 2015 Garrett D'Amore
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use 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 encoding
  15. import (
  16. "golang.org/x/text/encoding"
  17. )
  18. // EBCDIC represents the 8-bit EBCDIC scheme, found in some mainframe
  19. // environments. If you don't know what this is, consider yourself lucky.
  20. var EBCDIC encoding.Encoding
  21. func init() {
  22. cm := &Charmap{
  23. ReplacementChar: '\x3f',
  24. Map: map[byte]rune{
  25. // 0x00-0x03 match
  26. 0x04: RuneError,
  27. 0x05: '\t',
  28. 0x06: RuneError,
  29. 0x07: '\x7f',
  30. 0x08: RuneError,
  31. 0x09: RuneError,
  32. 0x0a: RuneError,
  33. // 0x0b-0x13 match
  34. 0x14: RuneError,
  35. 0x15: '\x85', // Not in any ISO code
  36. 0x16: '\x08',
  37. 0x17: RuneError,
  38. // 0x18-0x19 match
  39. 0x1a: RuneError,
  40. 0x1b: RuneError,
  41. // 0x1c-0x1f match
  42. 0x20: RuneError,
  43. 0x21: RuneError,
  44. 0x22: RuneError,
  45. 0x23: RuneError,
  46. 0x24: RuneError,
  47. 0x25: '\n',
  48. 0x26: '\x17',
  49. 0x27: '\x1b',
  50. 0x28: RuneError,
  51. 0x29: RuneError,
  52. 0x2a: RuneError,
  53. 0x2b: RuneError,
  54. 0x2c: RuneError,
  55. 0x2d: '\x05',
  56. 0x2e: '\x06',
  57. 0x2f: '\x07',
  58. 0x30: RuneError,
  59. 0x31: RuneError,
  60. 0x32: '\x16',
  61. 0x33: RuneError,
  62. 0x34: RuneError,
  63. 0x35: RuneError,
  64. 0x36: RuneError,
  65. 0x37: '\x04',
  66. 0x38: RuneError,
  67. 0x39: RuneError,
  68. 0x3a: RuneError,
  69. 0x3b: RuneError,
  70. 0x3c: '\x14',
  71. 0x3d: '\x15',
  72. 0x3e: RuneError,
  73. 0x3f: '\x1a', // also replacement char
  74. 0x40: ' ',
  75. 0x41: '\xa0',
  76. 0x42: RuneError,
  77. 0x43: RuneError,
  78. 0x44: RuneError,
  79. 0x45: RuneError,
  80. 0x46: RuneError,
  81. 0x47: RuneError,
  82. 0x48: RuneError,
  83. 0x49: RuneError,
  84. 0x4a: RuneError,
  85. 0x4b: '.',
  86. 0x4c: '<',
  87. 0x4d: '(',
  88. 0x4e: '+',
  89. 0x4f: '|',
  90. 0x50: '&',
  91. 0x51: RuneError,
  92. 0x52: RuneError,
  93. 0x53: RuneError,
  94. 0x54: RuneError,
  95. 0x55: RuneError,
  96. 0x56: RuneError,
  97. 0x57: RuneError,
  98. 0x58: RuneError,
  99. 0x59: RuneError,
  100. 0x5a: '!',
  101. 0x5b: '$',
  102. 0x5c: '*',
  103. 0x5d: ')',
  104. 0x5e: ';',
  105. 0x5f: '¬',
  106. 0x60: '-',
  107. 0x61: '/',
  108. 0x62: RuneError,
  109. 0x63: RuneError,
  110. 0x64: RuneError,
  111. 0x65: RuneError,
  112. 0x66: RuneError,
  113. 0x67: RuneError,
  114. 0x68: RuneError,
  115. 0x69: RuneError,
  116. 0x6a: '¦',
  117. 0x6b: ',',
  118. 0x6c: '%',
  119. 0x6d: '_',
  120. 0x6e: '>',
  121. 0x6f: '?',
  122. 0x70: RuneError,
  123. 0x71: RuneError,
  124. 0x72: RuneError,
  125. 0x73: RuneError,
  126. 0x74: RuneError,
  127. 0x75: RuneError,
  128. 0x76: RuneError,
  129. 0x77: RuneError,
  130. 0x78: RuneError,
  131. 0x79: '`',
  132. 0x7a: ':',
  133. 0x7b: '#',
  134. 0x7c: '@',
  135. 0x7d: '\'',
  136. 0x7e: '=',
  137. 0x7f: '"',
  138. 0x80: RuneError,
  139. 0x81: 'a',
  140. 0x82: 'b',
  141. 0x83: 'c',
  142. 0x84: 'd',
  143. 0x85: 'e',
  144. 0x86: 'f',
  145. 0x87: 'g',
  146. 0x88: 'h',
  147. 0x89: 'i',
  148. 0x8a: RuneError,
  149. 0x8b: RuneError,
  150. 0x8c: RuneError,
  151. 0x8d: RuneError,
  152. 0x8e: RuneError,
  153. 0x8f: '±',
  154. 0x90: RuneError,
  155. 0x91: 'j',
  156. 0x92: 'k',
  157. 0x93: 'l',
  158. 0x94: 'm',
  159. 0x95: 'n',
  160. 0x96: 'o',
  161. 0x97: 'p',
  162. 0x98: 'q',
  163. 0x99: 'r',
  164. 0x9a: RuneError,
  165. 0x9b: RuneError,
  166. 0x9c: RuneError,
  167. 0x9d: RuneError,
  168. 0x9e: RuneError,
  169. 0x9f: RuneError,
  170. 0xa0: RuneError,
  171. 0xa1: '~',
  172. 0xa2: 's',
  173. 0xa3: 't',
  174. 0xa4: 'u',
  175. 0xa5: 'v',
  176. 0xa6: 'w',
  177. 0xa7: 'x',
  178. 0xa8: 'y',
  179. 0xa9: 'z',
  180. 0xaa: RuneError,
  181. 0xab: RuneError,
  182. 0xac: RuneError,
  183. 0xad: RuneError,
  184. 0xae: RuneError,
  185. 0xaf: RuneError,
  186. 0xb0: '^',
  187. 0xb1: RuneError,
  188. 0xb2: RuneError,
  189. 0xb3: RuneError,
  190. 0xb4: RuneError,
  191. 0xb5: RuneError,
  192. 0xb6: RuneError,
  193. 0xb7: RuneError,
  194. 0xb8: RuneError,
  195. 0xb9: RuneError,
  196. 0xba: '[',
  197. 0xbb: ']',
  198. 0xbc: RuneError,
  199. 0xbd: RuneError,
  200. 0xbe: RuneError,
  201. 0xbf: RuneError,
  202. 0xc0: '{',
  203. 0xc1: 'A',
  204. 0xc2: 'B',
  205. 0xc3: 'C',
  206. 0xc4: 'D',
  207. 0xc5: 'E',
  208. 0xc6: 'F',
  209. 0xc7: 'G',
  210. 0xc8: 'H',
  211. 0xc9: 'I',
  212. 0xca: '\xad', // NB: soft hyphen
  213. 0xcb: RuneError,
  214. 0xcc: RuneError,
  215. 0xcd: RuneError,
  216. 0xce: RuneError,
  217. 0xcf: RuneError,
  218. 0xd0: '}',
  219. 0xd1: 'J',
  220. 0xd2: 'K',
  221. 0xd3: 'L',
  222. 0xd4: 'M',
  223. 0xd5: 'N',
  224. 0xd6: 'O',
  225. 0xd7: 'P',
  226. 0xd8: 'Q',
  227. 0xd9: 'R',
  228. 0xda: RuneError,
  229. 0xdb: RuneError,
  230. 0xdc: RuneError,
  231. 0xdd: RuneError,
  232. 0xde: RuneError,
  233. 0xdf: RuneError,
  234. 0xe0: '\\',
  235. 0xe1: '\u2007', // Non-breaking space
  236. 0xe2: 'S',
  237. 0xe3: 'T',
  238. 0xe4: 'U',
  239. 0xe5: 'V',
  240. 0xe6: 'W',
  241. 0xe7: 'X',
  242. 0xe8: 'Y',
  243. 0xe9: 'Z',
  244. 0xea: RuneError,
  245. 0xeb: RuneError,
  246. 0xec: RuneError,
  247. 0xed: RuneError,
  248. 0xee: RuneError,
  249. 0xef: RuneError,
  250. 0xf0: '0',
  251. 0xf1: '1',
  252. 0xf2: '2',
  253. 0xf3: '3',
  254. 0xf4: '4',
  255. 0xf5: '5',
  256. 0xf6: '6',
  257. 0xf7: '7',
  258. 0xf8: '8',
  259. 0xf9: '9',
  260. 0xfa: RuneError,
  261. 0xfb: RuneError,
  262. 0xfc: RuneError,
  263. 0xfd: RuneError,
  264. 0xfe: RuneError,
  265. 0xff: RuneError,
  266. }}
  267. cm.Init()
  268. EBCDIC = cm
  269. }