tenc-iso-8859.lisp - clic - Clic is an command line interactive client for gopher written in Common LISP HTML git clone git://bitreich.org/clic/ git://hg6vgqziawt5s4dj.onion/clic/ DIR Log DIR Files DIR Refs DIR Tags DIR LICENSE --- tenc-iso-8859.lisp (46406B) --- 1 ;;;; -*- Mode: lisp; indent-tabs-mode: nil -*- 2 ;;; 3 ;;; enc-iso-8859.lisp --- ISO-8859-* encodings. 4 ;;; 5 ;;; Copyright (C) 2007, Luis Oliveira <loliveira@common-lisp.net> 6 ;;; 7 ;;; Permission is hereby granted, free of charge, to any person 8 ;;; obtaining a copy of this software and associated documentation 9 ;;; files (the "Software"), to deal in the Software without 10 ;;; restriction, including without limitation the rights to use, copy, 11 ;;; modify, merge, publish, distribute, sublicense, and/or sell copies 12 ;;; of the Software, and to permit persons to whom the Software is 13 ;;; furnished to do so, subject to the following conditions: 14 ;;; 15 ;;; The above copyright notice and this permission notice shall be 16 ;;; included in all copies or substantial portions of the Software. 17 ;;; 18 ;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 ;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 ;;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 ;;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 ;;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 ;;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 ;;; DEALINGS IN THE SOFTWARE. 26 27 ;;; This implementation is largely based on OpenMCL's l1-unicode.lisp 28 ;;; Copyright (C) 2006 Clozure Associates and contributors. 29 30 (in-package #:babel-encodings) 31 32 ;;; Typically, ISO-8859-* codes in the range #x00-#x9f map straight 33 ;;; through, while codes #xa0-#xff select arbitrary Unicode characters 34 ;;; that are commonly used in some locale. (Sometimes the break is at 35 ;;; #x80 instead of #xa0). 36 ;;; 37 ;;; (comment from OpenMCL's ccl/level-1/l1-unicode.lisp) 38 39 (define-character-encoding :iso-8859-1 40 "An 8-bit, fixed-width character encoding in which all 41 character codes map to their Unicode equivalents. Intended to 42 support most characters used in most Western European languages." 43 :aliases '(:latin-1 :latin1) 44 :literal-char-code-limit 256) 45 46 (define-unibyte-encoder :iso-8859-1 (code) 47 (if (>= code 256) 48 (handle-error) 49 code)) 50 51 (define-unibyte-decoder :iso-8859-1 (octet) 52 octet) 53 54 (define-character-encoding :iso-8859-2 55 "An 8-bit, fixed-width character encoding in which codes 56 #x00-#x9f map to their Unicode equivalents and other codes map to 57 other Unicode character values. Intended to provide most 58 characters found in most languages used in Central/Eastern 59 Europe." 60 :aliases '(:latin-2 :latin2) 61 :literal-char-code-limit #xa0) 62 63 (define-constant +unicode-00a0-0180-to-iso-8859-2+ 64 #(#xa0 nil nil nil #xa4 nil nil #xa7 ; #xa0-#xa7 65 #xa8 nil nil nil nil #xad nil nil ; #xa8-#xaf 66 #xb0 nil nil nil #xb4 nil nil nil ; #xb0-#xb7 67 #xb8 nil nil nil nil nil nil nil ; #xb8-#xbf 68 nil #xc1 #xc2 nil #xc4 nil nil #xc7 ; #xc0-#xc7 69 nil #xc9 nil #xcb nil #xcd #xce nil ; #xc8-#xcf 70 nil nil nil #xd3 #xd4 nil #xd6 #xd7 ; #xd0-#xd7 71 nil nil #xda nil #xdc #xdd nil #xdf ; #xd8-#xdf 72 nil #xe1 #xe2 nil #xe4 nil nil #xe7 ; #xe0-#xe7 73 nil #xe9 nil #xeb nil #xed #xee nil ; #xe8-#xef 74 nil nil nil #xf3 #xf4 nil #xf6 #xf7 ; #xf0-#xf7 75 nil nil #xfa nil #xfc #xfd nil nil ; #xf8-#xff 76 ;; #x0100 77 nil nil #xc3 #xe3 #xa1 #xb1 #xc6 #xe6 ; #x100-#x107 78 nil nil nil nil #xc8 #xe8 #xcf #xef ; #x108-#x10f 79 #xd0 #xf0 nil nil nil nil nil nil ; #x110-#x117 80 #xca #xea #xcc #xec nil nil nil nil ; #x118-#x11f 81 nil nil nil nil nil nil nil nil ; #x120-#x127 82 nil nil nil nil nil nil nil nil ; #x128-#x12f 83 nil nil nil nil nil nil nil nil ; #x130-#x137 84 nil #xc5 #xe5 nil nil #xa5 #xb5 nil ; #x138-#x13f 85 nil #xa3 #xb3 #xd1 #xf1 nil nil #xd2 ; #x140-#x147 86 #xf2 nil nil nil nil nil nil nil ; #x148-#x14f 87 #xd5 #xf5 nil nil #xc0 #xe0 nil nil ; #x150-#x157 88 #xd8 #xf8 #xa6 #xb6 nil nil #xaa #xba ; #x158-#x15f 89 #xa9 #xb9 #xde #xfe #xab #xbb nil nil ; #x160-#x167 90 nil nil nil nil nil nil #xd9 #xf9 ; #x168-#x16f 91 #xdb #xfb nil nil nil nil nil nil ; #x170-#x177 92 nil #xac #xbc #xaf #xbf #xae #xbe nil) ; #x178-#x17f 93 :test #'equalp) 94 95 (define-constant +unicode-02c0-02e0-to-iso-8859-2+ 96 #(nil nil nil nil nil nil nil #xb7 ; #x2c0-#x2c7 97 nil nil nil nil nil nil nil nil ; #x2c8-#x2cf 98 nil nil nil nil nil nil nil nil ; #x2d0-#x2d7 99 #xa2 #xff nil #xb2 nil #xbd nil nil) ; #x2d8-#x2df 100 :test #'equalp) 101 102 (define-unibyte-encoder :iso-8859-2 (code) 103 (or (cond ((< code #xa0) code) 104 ((< code #x180) 105 (svref +unicode-00a0-0180-to-iso-8859-2+ 106 (the ub8 (- code #xa0)))) 107 ((<= #x2c0 code #x2df) 108 (svref +unicode-02c0-02e0-to-iso-8859-2+ 109 (the ub8 (- code #x2c0))))) 110 (handle-error))) 111 112 (define-constant +iso-8859-2-to-unicode+ 113 #(;; #xa0 114 #x00a0 #x0104 #x02d8 #x0141 #x00a4 #x013d #x015a #x00a7 115 #x00a8 #x0160 #x015e #x0164 #x0179 #x00ad #x017d #x017b 116 ;; #xb0 117 #x00b0 #x0105 #x02db #x0142 #x00b4 #x013e #x015b #x02c7 118 #x00b8 #x0161 #x015f #x0165 #x017a #x02dd #x017e #x017c 119 ;; #xc0 120 #x0154 #x00c1 #x00c2 #x0102 #x00c4 #x0139 #x0106 #x00c7 121 #x010c #x00c9 #x0118 #x00cb #x011a #x00cd #x00ce #x010e 122 ;; #xd0 123 #x0110 #x0143 #x0147 #x00d3 #x00d4 #x0150 #x00d6 #x00d7 124 #x0158 #x016e #x00da #x0170 #x00dc #x00dd #x0162 #x00df 125 ;; #xe0 126 #x0155 #x00e1 #x00e2 #x0103 #x00e4 #x013a #x0107 #x00e7 127 #x010d #x00e9 #x0119 #x00eb #x011b #x00ed #x00ee #x010f 128 ;; #xf0 129 #x0111 #x0144 #x0148 #x00f3 #x00f4 #x0151 #x00f6 #x00f7 130 #x0159 #x016f #x00fa #x0171 #x00fc #x00fd #x0163 #x02d9) 131 :test #'equalp) 132 133 (define-unibyte-decoder :iso-8859-2 (octet) 134 (if (< octet #xa0) 135 octet 136 (svref +iso-8859-2-to-unicode+ (the ub8 (- octet #xa0))))) 137 138 (define-character-encoding :iso-8859-3 139 "An 8-bit, fixed-width character encoding in which codes 140 #x00-#x9f map to their Unicode equivalents and other codes map to 141 other Unicode character values. Intended to provide most 142 characters found in most languages used in Southern Europe." 143 :aliases '(:latin-3 :latin3) 144 :literal-char-code-limit #xa0) 145 146 (define-constant +unicode-a0-100-to-iso-8859-3+ 147 #(#xa0 nil nil #xa3 #xa4 nil nil #xa7 ; #xa0-#xa7 148 #xa8 nil nil nil nil #xad nil nil ; #xa8-#xaf 149 #xb0 nil #xb2 #xb3 #xb4 #xb5 nil #xb7 ; #xb0-#xb7 150 #xb8 nil nil nil nil #xbd nil nil ; #xb8-#xbf 151 #xc0 #xc1 #xc2 nil #xc4 nil nil #xc7 ; #xc0-#xc7 152 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #xc8-#xcf 153 nil #xd1 #xd2 #xd3 #xd4 nil #xd6 #xd7 ; #xd0-#xd7 154 nil #xd9 #xda #xdb #xdc nil nil #xdf ; #xd8-#xdf 155 #xe0 #xe1 #xe2 nil #xe4 nil nil #xe7 ; #xe0-#xe7 156 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #xe8-#xef 157 nil #xf1 #xf2 #xf3 #xf4 nil #xf6 #xf7 ; #xf0-#xf7 158 nil #xf9 #xfa #xfb #xfc nil nil nil) ; #xf8-#xff 159 :test #'equalp) 160 161 (define-constant +unicode-108-180-to-iso-8859-3+ 162 #(#xc6 #xe6 #xc5 #xe5 #x00 #x00 #x00 #x00 ; #x108-#x10f 163 nil nil nil nil nil nil nil nil ; #x110-#x117 164 nil nil nil nil #xd8 #xf8 #xab #xbb ; #x118-#x11f 165 #xd5 #xf5 nil nil #xa6 #xb6 #xa1 #xb1 ; #x120-#x127 166 nil nil nil nil nil nil nil nil ; #x128-#x12f 167 #xa9 #xb9 nil nil #xac #xbc nil nil ; #x130-#x137 168 nil nil nil nil nil nil nil nil ; #x138-#x13f 169 nil nil nil nil nil nil nil nil ; #x140-#x147 170 nil nil nil nil nil nil nil nil ; #x148-#x14f 171 nil nil nil nil nil nil nil nil ; #x150-#x157 172 nil nil nil nil #xde #xfe #xaa #xba ; #x158-#x15f 173 nil nil nil nil nil nil nil nil ; #x160-#x167 174 nil nil nil nil #xdd #xfd nil nil ; #x168-#x16f 175 nil nil nil nil nil nil nil nil ; #x170-#x177 176 nil nil nil #xaf #xbf nil nil nil) ; #x178-#x17f 177 :test #'equalp) 178 179 (define-constant +unicode-2d8-2e0-to-iso-8859-3+ 180 #(#xa2 #xff nil nil nil nil nil nil) ; #x2d8-#x2df 181 :test #'equalp) 182 183 (define-unibyte-encoder :iso-8859-3 (code) 184 (or (cond ((< code #xa0) code) 185 ((< code #x100) 186 (svref +unicode-a0-100-to-iso-8859-3+ 187 (the ub8 (- code #xa0)))) 188 ((<= #x108 code #x17f) 189 (svref +unicode-108-180-to-iso-8859-3+ 190 (the ub8 (- code #x108)))) 191 ((<= #x2d8 code #x2df) 192 (svref +unicode-2d8-2e0-to-iso-8859-3+ 193 (the ub8 (- code #x2d8))))) 194 (handle-error))) 195 196 (define-constant +iso-8859-3-to-unicode+ 197 #(;; #xa0 198 #x00a0 #x0126 #x02d8 #x00a3 #x00a4 #xfffd #x0124 #x00a7 199 #x00a8 #x0130 #x015e #x011e #x0134 #x00ad #xfffd #x017b 200 ;; #xb0 201 #x00b0 #x0127 #x00b2 #x00b3 #x00b4 #x00b5 #x0125 #x00b7 202 #x00b8 #x0131 #x015f #x011f #x0135 #x00bd #xfffd #x017c 203 ;; #xc0 204 #x00c0 #x00c1 #x00c2 #xfffd #x00c4 #x010a #x0108 #x00c7 205 #x00c8 #x00c9 #x00ca #x00cb #x00cc #x00cd #x00ce #x00cf 206 ;; #xd0 207 #xfffd #x00d1 #x00d2 #x00d3 #x00d4 #x0120 #x00d6 #x00d7 208 #x011c #x00d9 #x00da #x00db #x00dc #x016c #x015c #x00df 209 ;; #xe0 210 #x00e0 #x00e1 #x00e2 #xfffd #x00e4 #x010b #x0109 #x00e7 211 #x00e8 #x00e9 #x00ea #x00eb #x00ec #x00ed #x00ee #x00ef 212 ;; #xf0 213 #xfffd #x00f1 #x00f2 #x00f3 #x00f4 #x0121 #x00f6 #x00f7 214 #x011d #x00f9 #x00fa #x00fb #x00fc #x016d #x015d #x02d9) 215 :test #'equalp) 216 217 (define-unibyte-decoder :iso-8859-3 (octet) 218 (if (< octet #xa0) 219 octet 220 (svref +iso-8859-3-to-unicode+ (the ub8 (- octet #xa0))))) 221 222 (define-character-encoding :iso-8859-4 223 "An 8-bit, fixed-width character encoding in which codes 224 #x00-#x9f map to their Unicode equivalents and other codes map to 225 other Unicode character values. Intended to provide most 226 characters found in most languages used in Northern Europe." 227 :aliases '(:latin-4 :latin4) 228 :literal-char-code-limit #xa0) 229 230 (define-constant +unicode-a0-180-to-iso-8859-4+ 231 #(#xa0 nil nil nil #xa4 nil nil #xa7 ; #xa0-#xa7 232 #xa8 nil nil nil nil #xad nil #xaf ; #xa8-#xaf 233 #xb0 nil nil nil #xb4 nil nil nil ; #xb0-#xb7 234 #xb8 nil nil nil nil nil nil nil ; #xb8-#xbf 235 nil #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 nil ; #xc0-#xc7 236 nil #xc9 nil #xcb nil #xcd #xce nil ; #xc8-#xcf 237 nil nil nil nil #xd4 #xd5 #xd6 #xd7 ; #xd0-#xd7 238 #xd8 nil #xda #xdb #xdc nil nil #xdf ; #xd8-#xdf 239 nil #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 nil ; #xe0-#xe7 240 nil #xe9 nil #xeb nil #xed #xee nil ; #xe8-#xef 241 nil nil nil nil #xf4 #xf5 #xf6 #xf7 ; #xf0-#xf7 242 #xf8 nil #xfa #xfb #xfc nil nil nil ; #xf8-#xff 243 #xc0 #xe0 nil nil #xa1 #xb1 nil nil ; #x100-#x107 244 nil nil nil nil #xc8 #xe8 nil nil ; #x108-#x10f 245 #xd0 #xf0 #xaa #xba nil nil #xcc #xec ; #x110-#x117 246 #xca #xea nil nil nil nil nil nil ; #x118-#x11f 247 nil nil #xab #xbb nil nil nil nil ; #x120-#x127 248 #xa5 #xb5 #xcf #xef nil nil #xc7 #xe7 ; #x128-#x12f 249 nil nil nil nil nil nil #xd3 #xf3 ; #x130-#x137 250 #xa2 nil nil #xa6 #xb6 nil nil nil ; #x138-#x13f 251 nil nil nil nil nil #xd1 #xf1 nil ; #x140-#x147 252 nil nil #xbd #xbf #xd2 #xf2 nil nil ; #x148-#x14f 253 nil nil nil nil nil nil #xa3 #xb3 ; #x150-#x157 254 nil nil nil nil nil nil nil nil ; #x158-#x15f 255 #xa9 #xb9 nil nil nil nil #xac #xbc ; #x160-#x167 256 #xdd #xfd #xde #xfe nil nil nil nil ; #x168-#x16f 257 nil nil #xd9 #xf9 nil nil nil nil ; #x170-#x177 258 nil nil nil nil nil #xae #xbe nil) ; #x178-#x17f 259 :test #'equalp) 260 261 (define-constant +unicode-2c0-2e0-to-iso-8859-4+ 262 #(nil nil nil nil nil nil nil #xb7 ; #x2c0-#x2c7 263 nil nil nil nil nil nil nil nil ; #x2c8-#x2cf 264 nil nil nil nil nil nil nil nil ; #x2d0-#x2d7 265 nil #xff nil #xb2 nil nil nil nil) ; #x2d8-#x2df 266 :test #'equalp) 267 268 (define-unibyte-encoder :iso-8859-4 (code) 269 (or (cond ((< code #xa0) code) 270 ((< code #x180) 271 (svref +unicode-a0-180-to-iso-8859-4+ 272 (the ub8 (- code #xa0)))) 273 ((<= #x2c0 code #x2df) 274 (svref +unicode-2c0-2e0-to-iso-8859-4+ 275 (the ub8 (- code #x2c0))))) 276 (handle-error))) 277 278 (define-constant +iso-8859-4-to-unicode+ 279 #(;; #xa0 280 #x00a0 #x0104 #x0138 #x0156 #x00a4 #x0128 #x013b #x00a7 281 #x00a8 #x0160 #x0112 #x0122 #x0166 #x00ad #x017d #x00af 282 ;; #xb0 283 #x00b0 #x0105 #x02db #x0157 #x00b4 #x0129 #x013c #x02c7 284 #x00b8 #x0161 #x0113 #x0123 #x0167 #x014a #x017e #x014b 285 ;; #xc0 286 #x0100 #x00c1 #x00c2 #x00c3 #x00c4 #x00c5 #x00c6 #x012e 287 #x010c #x00c9 #x0118 #x00cb #x0116 #x00cd #x00ce #x012a 288 ;; #xd0 289 #x0110 #x0145 #x014c #x0136 #x00d4 #x00d5 #x00d6 #x00d7 290 #x00d8 #x0172 #x00da #x00db #x00dc #x0168 #x016a #x00df 291 ;; #xe0 292 #x0101 #x00e1 #x00e2 #x00e3 #x00e4 #x00e5 #x00e6 #x012f 293 #x010d #x00e9 #x0119 #x00eb #x0117 #x00ed #x00ee #x012b 294 ;; #xf0 295 #x0111 #x0146 #x014d #x0137 #x00f4 #x00f5 #x00f6 #x00f7 296 #x00f8 #x0173 #x00fa #x00fb #x00fc #x0169 #x016b #x02d9) 297 :test #'equalp) 298 299 (define-unibyte-decoder :iso-8859-4 (octet) 300 (if (< octet #xa0) 301 octet 302 (svref +iso-8859-4-to-unicode+ (the ub8 (- octet #xa0))))) 303 304 (define-character-encoding :iso-8859-5 305 "An 8-bit, fixed-width character encoding in which codes 306 #x00-#x9f map to their Unicode equivalents and other codes map to 307 other Unicode character values. Intended to provide most 308 characters found in the Cyrillic alphabet." 309 :aliases '(:cyrillic) 310 :literal-char-code-limit #xa0) 311 312 (define-constant +unicode-a0-b0-to-iso-8859-5+ 313 #(#xa0 nil nil nil nil nil nil #xfd ; #xa0-#xa7 314 nil nil nil nil nil #xad nil nil) ; #xa8-#xaf 315 :test #'equalp) 316 317 (define-constant +unicode-400-460-to-iso-8859-5+ 318 #(nil #xa1 #xa2 #xa3 #xa4 #xa5 #xa6 #xa7 ; #x400-#x407 319 #xa8 #xa9 #xaa #xab #xac nil #xae #xaf ; #x408-#x40f 320 #xb0 #xb1 #xb2 #xb3 #xb4 #xb5 #xb6 #xb7 ; #x410-#x417 321 #xb8 #xb9 #xba #xbb #xbc #xbd #xbe #xbf ; #x418-#x41f 322 #xc0 #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 #xc7 ; #x420-#x427 323 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #x428-#x42f 324 #xd0 #xd1 #xd2 #xd3 #xd4 #xd5 #xd6 #xd7 ; #x430-#x437 325 #xd8 #xd9 #xda #xdb #xdc #xdd #xde #xdf ; #x438-#x43f 326 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #x440-#x447 327 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #x448-#x44f 328 nil #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 #xf7 ; #x450-#x457 329 #xf8 #xf9 #xfa #xfb #xfc nil #xfe #xff) ; #x458-#x45f 330 :test #'equalp) 331 332 (define-unibyte-encoder :iso-8859-5 (code) 333 (or (cond ((< code #xa0) code) 334 ((< code #xb0) 335 (svref +unicode-a0-b0-to-iso-8859-5+ 336 (the ub8 (- code #xa0)))) 337 ((<= #x400 code #x45f) 338 (svref +unicode-400-460-to-iso-8859-5+ 339 (the ub8 (- code #x400)))) 340 ;; the Numero sign 341 ((= code #x2116) #xf0)) 342 (handle-error))) 343 344 (define-constant +iso-8859-5-to-unicode+ 345 #(;; #xa0 346 #x00a0 #x0401 #x0402 #x0403 #x0404 #x0405 #x0406 #x0407 347 #x0408 #x0409 #x040a #x040b #x040c #x00ad #x040e #x040f 348 ;; #xb0 349 #x0410 #x0411 #x0412 #x0413 #x0414 #x0415 #x0416 #x0417 350 #x0418 #x0419 #x041a #x041b #x041c #x041d #x041e #x041f 351 ;; #xc0 352 #x0420 #x0421 #x0422 #x0423 #x0424 #x0425 #x0426 #x0427 353 #x0428 #x0429 #x042a #x042b #x042c #x042d #x042e #x042f 354 ;; #xd0 355 #x0430 #x0431 #x0432 #x0433 #x0434 #x0435 #x0436 #x0437 356 #x0438 #x0439 #x043a #x043b #x043c #x043d #x043e #x043f 357 ;; #xe0 358 #x0440 #x0441 #x0442 #x0443 #x0444 #x0445 #x0446 #x0447 359 #x0448 #x0449 #x044a #x044b #x044c #x044d #x044e #x044f 360 ;; #xf0 361 #x2116 #x0451 #x0452 #x0453 #x0454 #x0455 #x0456 #x0457 362 #x0458 #x0459 #x045a #x045b #x045c #x00a7 #x045e #x045f) 363 :test #'equalp) 364 365 (define-unibyte-decoder :iso-8859-5 (octet) 366 (if (< octet #xa0) 367 octet 368 (svref +iso-8859-5-to-unicode+ (the ub8 (- octet #xa0))))) 369 370 (define-character-encoding :iso-8859-6 371 "An 8-bit, fixed-width character encoding in which codes #x00-#x9f 372 map to their Unicode equivalents and other codes map to other Unicode 373 character values. Intended to provide most characters found in the 374 Arabic alphabet." 375 :aliases '(:arabic) 376 :literal-char-code-limit #xa0) 377 378 (define-constant +unicode-a0-b0-to-iso-8859-6+ 379 #(#xa0 nil nil nil #xa4 nil nil nil ; #xa0-#xa7 380 nil nil nil nil nil #xad nil nil) ; #xa8-#xaf 381 :test #'equalp) 382 383 (define-constant +unicode-608-658-to-iso-8859-6+ 384 #(nil nil nil nil #xac nil nil nil ; #x608-#x60f 385 nil nil nil nil nil nil nil nil ; #x610-#x617 386 nil nil nil #xbb nil nil nil #xbf ; #x618-#x61f 387 nil #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 #xc7 ; #x620-#x627 388 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #x628-#x62f 389 #xd0 #xd1 #xd2 #xd3 #xd4 #xd5 #xd6 #xd7 ; #x630-#x637 390 #xd8 #xd9 #xda nil nil nil nil nil ; #x638-#x63f 391 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #x640-#x647 392 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #x648-#x64f 393 #xf0 #xf1 #xf2 nil nil nil nil nil) ; #x650-#x657 394 :test #'equalp) 395 396 (define-unibyte-encoder :iso-8859-6 (code) 397 (or (cond ((< code #xa0) code) 398 ((< code #xb0) 399 (svref +unicode-a0-b0-to-iso-8859-6+ 400 (the ub8 (- code #xa0)))) 401 ((<= #x608 code #x657) 402 (svref +unicode-608-658-to-iso-8859-6+ 403 (the ub8 (- code #x608))))) 404 (handle-error))) 405 406 (define-constant +iso-8859-6-to-unicode+ 407 #(;; #xa0 408 #x00a0 #xfffd #xfffd #xfffd #x00a4 #xfffd #xfffd #xfffd 409 #xfffd #xfffd #xfffd #xfffd #x060c #x00ad #xfffd #xfffd 410 ;; #xb0 411 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd 412 #xfffd #xfffd #xfffd #x061b #xfffd #xfffd #xfffd #x061f 413 ;; #xc0 414 #xfffd #x0621 #x0622 #x0623 #x0624 #x0625 #x0626 #x0627 415 #x0628 #x0629 #x062a #x062b #x062c #x062d #x062e #x062f 416 ;; #xd0 417 #x0630 #x0631 #x0632 #x0633 #x0634 #x0635 #x0636 #x0637 418 #x0638 #x0639 #x063a #xfffd #xfffd #xfffd #xfffd #xfffd 419 ;; #xe0 420 #x0640 #x0641 #x0642 #x0643 #x0644 #x0645 #x0646 #x0647 421 #x0648 #x0649 #x064a #x064b #x064c #x064d #x064e #x064f 422 ;; #xf0 423 #x0650 #x0651 #x0652 #xfffd #xfffd #xfffd #xfffd #xfffd 424 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd) 425 :test #'equalp) 426 427 (define-unibyte-decoder :iso-8859-6 (octet) 428 (if (< octet #xa0) 429 octet 430 (svref +iso-8859-6-to-unicode+ (the ub8 (- octet #xa0))))) 431 432 (define-character-encoding :iso-8859-7 433 "An 8-bit, fixed-width character encoding in which codes 434 #x00-#x9f map to their Unicode equivalents and other codes map to 435 other Unicode character values. Intended to provide most 436 characters found in the Greek alphabet." 437 :aliases '(:greek) 438 :literal-char-code-limit #xa0) 439 440 (define-constant +unicode-a0-c0-to-iso-8859-7+ 441 #(#xa0 nil nil #xa3 nil nil #xa6 #xa7 ; #xa0-#xa7 442 #xa8 #xa9 nil #xab #xac #xad nil nil ; #xa8-#xaf 443 #xb0 #xb1 #xb2 #xb3 nil nil nil #xb7 ; #xb0-#xb7 444 nil nil nil #xbb nil #xbd nil nil) ; #xb8-#xbf 445 :test #'equalp) 446 447 (define-constant +unicode-378-3d0-to-iso-8859-7+ 448 #(nil nil #xaa nil nil nil nil nil ; #x378-#x37f 449 nil nil nil nil #xb4 #xb5 #xb6 nil ; #x380-#x387 450 #xb8 #xb9 #xba nil #xbc nil #xbe #xbf ; #x388-#x38f 451 #xc0 #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 #xc7 ; #x390-#x397 452 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #x398-#x39f 453 #xd0 #xd1 nil #xd3 #xd4 #xd5 #xd6 #xd7 ; #x3a0-#x3a7 454 #xd8 #xd9 #xda #xdb #xdc #xdd #xde #xdf ; #x3a8-#x3af 455 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #x3b0-#x3b7 456 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #x3b8-#x3bf 457 #xf0 #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 #xf7 ; #x3c0-#x3c7 458 #xf8 #xf9 #xfa #xfb #xfc #xfd #xfe nil) ; #x3c8-#x3cf 459 :test #'equalp) 460 461 (define-constant +unicode-2010-2020-to-iso-8859-7+ 462 #(nil nil nil nil nil #xaf nil nil ; #x2010-#x2017 463 #xa1 #xa2 nil nil nil nil nil nil) ; #x2018-#x201f 464 :test #'equalp) 465 466 (define-constant +unicode-20ac-20b0-to-iso-8859-7+ 467 #(#xa4 nil nil #xa5) 468 :test #'equalp) 469 470 (define-unibyte-encoder :iso-8859-7 (code) 471 (or (cond ((< code #xa0) code) 472 ((< code #xc0) 473 (svref +unicode-a0-c0-to-iso-8859-7+ 474 (the ub8 (- code #xa0)))) 475 ((<= #x378 code #x3cf) 476 (svref +unicode-378-3d0-to-iso-8859-7+ 477 (the ub8 (- code #x378)))) 478 ((<= #x2010 code #x201f) 479 (svref +unicode-2010-2020-to-iso-8859-7+ 480 (the ub8 (- code #x2010)))) 481 ((<= #x201c code #x20af) 482 (svref +unicode-20ac-20b0-to-iso-8859-7+ 483 (the ub8 (- code #x20ac))))) 484 (handle-error))) 485 486 (define-constant +iso-8859-7-to-unicode+ 487 #(;; #xa0 488 #x00a0 #x2018 #x2019 #x00a3 #x20ac #x20af #x00a6 #x00a7 489 #x00a8 #x00a9 #x037a #x00ab #x00ac #x00ad #xfffd #x2015 490 ;; #xb0 491 #x00b0 #x00b1 #x00b2 #x00b3 #x0384 #x0385 #x0386 #x00b7 492 #x0388 #x0389 #x038a #x00bb #x038c #x00bd #x038e #x038f 493 ;; #xc0 494 #x0390 #x0391 #x0392 #x0393 #x0394 #x0395 #x0396 #x0397 495 #x0398 #x0399 #x039a #x039b #x039c #x039d #x039e #x039f 496 ;; #xd0 497 #x03a0 #x03a1 #xfffd #x03a3 #x03a4 #x03a5 #x03a6 #x03a7 498 #x03a8 #x03a9 #x03aa #x03ab #x03ac #x03ad #x03ae #x03af 499 ;; #xe0 500 #x03b0 #x03b1 #x03b2 #x03b3 #x03b4 #x03b5 #x03b6 #x03b7 501 #x03b8 #x03b9 #x03ba #x03bb #x03bc #x03bd #x03be #x03bf 502 ;; #xf0 503 #x03c0 #x03c1 #x03c2 #x03c3 #x03c4 #x03c5 #x03c6 #x03c7 504 #x03c8 #x03c9 #x03ca #x03cb #x03cc #x03cd #x03ce #xfffd) 505 :test #'equalp) 506 507 (define-unibyte-decoder :iso-8859-7 (octet) 508 (if (< octet #xa0) 509 octet 510 (svref +iso-8859-7-to-unicode+ (the ub8 (- octet #xa0))))) 511 512 (define-character-encoding :iso-8859-8 513 "An 8-bit, fixed-width character encoding in which codes #x00-#x9f 514 map to their Unicode equivalents and other codes map to other Unicode 515 character values. Intended to provide most characters found in the 516 Hebrew alphabet." 517 :aliases '(:hebrew) 518 :literal-char-code-limit #xa0) 519 520 (define-constant +unicode-a0-f8-to-iso-8859-8+ 521 #(#xa0 nil #xa2 #xa3 #xa4 #xa5 #xa6 #xa7 ; #xa0-#xa7 522 #xa8 #xa9 nil #xab #xac #xad #xae #xaf ; #xa8-#xaf 523 #xb0 #xb1 #xb2 #xb3 #xb4 #xb5 #xb6 #xb7 ; #xb0-#xb7 524 #xb8 #xb9 nil #xbb #xbc #xbd #xbe nil ; #xb8-#xbf 525 nil nil nil nil nil nil nil nil ; #xc0-#xc7 526 nil nil nil nil nil nil nil nil ; #xc8-#xcf 527 nil nil nil nil nil nil nil #xaa ; #xd0-#xd7 528 nil nil nil nil nil nil nil nil ; #xd8-#xdf 529 nil nil nil nil nil nil nil nil ; #xe0-#xe7 530 nil nil nil nil nil nil nil nil ; #xe8-#xef 531 nil nil nil nil nil nil nil #xba) ; #xf0-#xf7 532 :test #'equalp) 533 534 (define-constant +unicode-5d0-5f0-to-iso-8859-8+ 535 #(#xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #x5d0-#x5d7 536 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #x5d8-#x5df 537 #xf0 #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 #xf7 ; #x5e0-#x5e7 538 #xf8 #xf9 #xfa nil nil nil nil nil) ; #x5e8-#x5ef 539 :test #'equalp) 540 541 (define-constant +unicode-2008-2018-to-iso-8859-8+ 542 #(nil nil nil nil nil nil #xfd #xfe ; #x2008-#x200f 543 nil nil nil nil nil nil nil #xdf) ; #x2010-#x2017 544 :test #'equalp) 545 546 (define-unibyte-encoder :iso-8859-8 (code) 547 (or (cond ((< code #xa0) code) 548 ((< code #xf8) 549 (svref +unicode-a0-f8-to-iso-8859-8+ 550 (the ub8 (- code #xa0)))) 551 ((<= #x5d0 code #x5ef) 552 (svref +unicode-5d0-5f0-to-iso-8859-8+ 553 (the ub8 (- code #x5d0)))) 554 ((<= #x2008 code #x201f) 555 (svref +unicode-2008-2018-to-iso-8859-8+ 556 (the ub8 (- code #x2008))))) 557 (handle-error))) 558 559 (define-constant +iso-8859-8-to-unicode+ 560 #(;; #xa0 561 #x00a0 #xfffd #x00a2 #x00a3 #x00a4 #x00a5 #x00a6 #x00a7 562 #x00a8 #x00a9 #x00d7 #x00ab #x00ac #x00ad #x00ae #x00af 563 ;; #xb0 564 #x00b0 #x00b1 #x00b2 #x00b3 #x00b4 #x00b5 #x00b6 #x00b7 565 #x00b8 #x00b9 #x00f7 #x00bb #x00bc #x00bd #x00be #xfffd 566 ;; #xc0 567 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd 568 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd 569 ;; #xd0 570 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd 571 #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #xfffd #x2017 572 ;; #xe0 573 #x05d0 #x05d1 #x05d2 #x05d3 #x05d4 #x05d5 #x05d6 #x05d7 574 #x05d8 #x05d9 #x05da #x05db #x05dc #x05dd #x05de #x05df 575 ;; #xf0 576 #x05e0 #x05e1 #x05e2 #x05e3 #x05e4 #x05e5 #x05e6 #x05e7 577 #x05e8 #x05e9 #x05ea #xfffd #xfffd #x200e #x200f #xfffd) 578 :test #'equalp) 579 580 (define-unibyte-decoder :iso-8859-8 (octet) 581 (if (< octet #xa0) 582 octet 583 (svref +iso-8859-8-to-unicode+ (the ub8 (- octet #xa0))))) 584 585 (define-character-encoding :iso-8859-9 586 "An 8-bit, fixed-width character encoding in which codes 587 #x00-#xcf map to their Unicode equivalents and other codes map to 588 other Unicode character values. Intended to provide most 589 characters found in the Turkish alphabet." 590 :aliases '(:latin-5 :latin5) 591 :decode-literal-code-unit-limit #xd0 592 :encode-literal-code-unit-limit #xa0) 593 594 (define-constant +unicode-d0-100-to-iso-8859-9+ 595 #(nil #xd1 #xd2 #xd3 #xd4 #xd5 #xd6 #xd7 ; #xd0-#xd7 596 #xd8 #xd9 #xda #xdb #xdc nil nil #xdf ; #xd8-#xdf 597 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #xe0-#xe7 598 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #xe8-#xef 599 nil #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 #xf7 ; #xf0-#xf7 600 #xf8 #xf9 #xfa #xfb #xfc nil nil #xff) ; #xf8-#xff 601 :test #'equalp) 602 603 (define-constant +unicode-118-160-to-iso-8859-9+ 604 #(nil nil nil nil nil nil #xd0 #xf0 ; #x118-#x11f 605 nil nil nil nil nil nil nil nil ; #x120-#x127 606 nil nil nil nil nil nil nil nil ; #x128-#x12f 607 #xdd #xfd nil nil nil nil nil nil ; #x130-#x137 608 nil nil nil nil nil nil nil nil ; #x138-#x13f 609 nil nil nil nil nil nil nil nil ; #x140-#x147 610 nil nil nil nil nil nil nil nil ; #x148-#x14f 611 nil nil nil nil nil nil nil nil ; #x150-#x157 612 nil nil nil nil nil nil #xde #xfe) ; #x158-#x15f 613 :test #'equalp) 614 615 (define-unibyte-encoder :iso-8859-9 (code) 616 (or (cond ((< code #xd0) code) 617 ((< code #x100) 618 (svref +unicode-d0-100-to-iso-8859-9+ 619 (the ub8 (- code #xd0)))) 620 ((<= #x118 code #x15f) 621 (svref +unicode-118-160-to-iso-8859-9+ 622 (the ub8 (- code #x118))))) 623 (handle-error))) 624 625 (define-constant +iso-8859-9-to-unicode+ 626 #(;; #xd0 627 #x011e #x00d1 #x00d2 #x00d3 #x00d4 #x00d5 #x00d6 #x00d7 628 #x00d8 #x00d9 #x00da #x00db #x00dc #x0130 #x015e #x00df 629 ;; #xe0 630 #x00e0 #x00e1 #x00e2 #x00e3 #x00e4 #x00e5 #x00e6 #x00e7 631 #x00e8 #x00e9 #x00ea #x00eb #x00ec #x00ed #x00ee #x00ef 632 ;; #xf0 633 #x011f #x00f1 #x00f2 #x00f3 #x00f4 #x00f5 #x00f6 #x00f7 634 #x00f8 #x00f9 #x00fa #x00fb #x00fc #x0131 #x015f #x00ff) 635 :test #'equalp) 636 637 (define-unibyte-decoder :iso-8859-9 (octet) 638 (if (< octet #xd0) 639 octet 640 (svref +iso-8859-9-to-unicode+ (the ub8 (- octet #xd0))))) 641 642 (define-character-encoding :iso-8859-10 643 "An 8-bit, fixed-width character encoding in which codes 644 #x00-#x9f map to their Unicode equivalents and other codes map to 645 other Unicode character values. Intended to provide most 646 characters found in Nordic alphabets." 647 :aliases '(:latin-6 :latin6) 648 :literal-char-code-limit #xa0) 649 650 (define-constant +unicode-a0-180-to-iso-8859-10+ 651 #(#xa0 nil nil nil nil nil nil #xa7 ; #xa0-#xa7 652 nil nil nil nil nil #xad nil nil ; #xa8-#xaf 653 #xb0 nil nil nil nil nil nil #xb7 ; #xb0-#xb7 654 nil nil nil nil nil #x2015 nil nil ; #xb8-#xbf 655 nil #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 nil ; #xc0-#xc7 656 nil #xc9 nil #xcb nil #xcd #xce #xcf ; #xc8-#xcf 657 #xd0 nil nil #xd3 #xd4 #xd5 #xd6 nil ; #xd0-#xd7 658 #xd8 nil #xda #xdb #xdc #xdd #xde #xdf ; #xd8-#xdf 659 nil #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 nil ; #xe0-#xe7 660 nil #xe9 nil #xeb nil #xed #xee #xef ; #xe8-#xef 661 #xf0 nil nil #xf3 #xf4 #xf5 #xf6 nil ; #xf0-#xf7 662 #xf8 nil #xfa #xfb #xfc #xfd #xfe nil ; #xf8-#xff 663 #xc0 #xe0 nil nil #xa1 #xb1 nil nil ; #x100-#x107 664 nil nil nil nil #xc8 #xe8 nil nil ; #x108-#x10f 665 #xa9 #xb9 #xa2 #xb2 nil nil #xcc #xec ; #x110-#x117 666 #xca #xea nil nil nil nil nil nil ; #x118-#x11f 667 nil nil #xa3 #xb3 nil nil nil nil ; #x120-#x127 668 #xa5 #xb5 #xa4 #xb4 nil nil #xc7 #xe7 ; #x128-#x12f 669 nil nil nil nil nil nil #xa6 #xb6 ; #x130-#x137 670 #xff nil nil #xa8 #xb8 nil nil nil ; #x138-#x13f 671 nil nil nil nil nil #xd1 #xf1 nil ; #x140-#x147 672 nil nil #xaf #xbf #xd2 #xf2 nil nil ; #x148-#x14f 673 nil nil nil nil nil nil nil nil ; #x150-#x157 674 nil nil nil nil nil nil nil nil ; #x158-#x15f 675 #xaa #xba nil nil nil nil #xab #xbb ; #x160-#x167 676 #xd7 #xf7 #xae #xbe nil nil nil nil ; #x168-#x16f 677 nil nil #xd9 #xf9 nil nil nil nil ; #x170-#x177 678 nil nil nil nil nil #xac #xbc nil) ; #x178-#x17f 679 :test #'equalp) 680 681 (define-unibyte-encoder :iso-8859-10 (code) 682 (or (cond ((< code #xa0) code) 683 ((< code #x180) 684 (svref +unicode-a0-180-to-iso-8859-10+ 685 (the ub8 (- code #xa0)))) 686 ;; Horizontal bar 687 ((= code #x2015) #xbd)) 688 (handle-error))) 689 690 (define-constant +iso-8859-10-to-unicode+ 691 #(;; #xa0 692 #x00a0 #x0104 #x0112 #x0122 #x012a #x0128 #x0136 #x00a7 693 #x013b #x0110 #x0160 #x0166 #x017d #x00ad #x016a #x014a 694 ;; #xb0 695 #x00b0 #x0105 #x0113 #x0123 #x012b #x0129 #x0137 #x00b7 696 #x013c #x0111 #x0161 #x0167 #x017e #x2015 #x016b #x014b 697 ;; #xc0 698 #x0100 #x00c1 #x00c2 #x00c3 #x00c4 #x00c5 #x00c6 #x012e 699 #x010c #x00c9 #x0118 #x00cb #x0116 #x00cd #x00ce #x00cf 700 ;; #xd0 701 #x00d0 #x0145 #x014c #x00d3 #x00d4 #x00d5 #x00d6 #x0168 702 #x00d8 #x0172 #x00da #x00db #x00dc #x00dd #x00de #x00df 703 ;; #xe0 704 #x0101 #x00e1 #x00e2 #x00e3 #x00e4 #x00e5 #x00e6 #x012f 705 #x010d #x00e9 #x0119 #x00eb #x0117 #x00ed #x00ee #x00ef 706 ;; #xf0 707 #x00f0 #x0146 #x014d #x00f3 #x00f4 #x00f5 #x00f6 #x0169 708 #x00f8 #x0173 #x00fa #x00fb #x00fc #x00fd #x00fe #x0138) 709 :test #'equalp) 710 711 (define-unibyte-decoder :iso-8859-10 (octet) 712 (if (< octet #xa0) 713 octet 714 (svref +iso-8859-10-to-unicode+ (the ub8 (- octet #xa0))))) 715 716 (define-character-encoding :iso-8859-11 717 "An 8-bit, fixed-width character encoding in which codes 718 #x00-#x9f map to their Unicode equivalents and other codes map to 719 other Unicode character values. Intended to provide most 720 characters found the Thai alphabet." 721 :aliases '() 722 :literal-char-code-limit #xa0) 723 724 (define-unibyte-encoder :iso-8859-11 (code) 725 (cond ((< code #xa1) code) 726 ((and (<= #xe01 code #xe5b) 727 (not (<= #xe3b code #xe3e)) 728 (not (<= #xe5c code #xe5f))) 729 (- code #xd60)) 730 (t (handle-error)))) 731 732 (define-unibyte-decoder :iso-8859-11 (octet) 733 (cond ((<= octet #xa0) octet) 734 ((or (<= #xdb octet #xde) 735 (<= #xfc octet #xff)) 736 #xfffd) 737 ((<= octet #xfb) 738 (+ octet #x0d60)) 739 (t (handle-error)))) 740 741 ;;; There is no iso-8859-12 encoding. 742 743 (define-character-encoding :iso-8859-13 744 "An 8-bit, fixed-width character encoding in which codes 745 #x00-#x9f map to their Unicode equivalents and other codes map to 746 other Unicode character values. Intended to provide most 747 characters found in Baltic alphabets." 748 :aliases '() 749 :literal-char-code-limit #xa0) 750 751 (define-constant +unicode-a0-180-to-iso-8859-13+ 752 #(#xa0 nil #xa2 #xa3 #xa4 nil #xa6 #xa7 ; #xa0-#xa7 753 nil #xa9 nil #xab #xac #xad #xae nil ; #xa8-#xaf 754 #xb0 #xb1 #xb2 #xb3 nil #xb5 #xb6 #xb7 ; #xb0-#xb7 755 nil #xb9 nil #xbb #xbc #xbd #xbe nil ; #xb8-#xbf 756 nil nil nil nil #xc4 #xc5 #xaf nil ; #xc0-#xc7 757 nil #xc9 nil nil nil nil nil nil ; #xc8-#xcf 758 nil nil nil #xd3 nil #xd5 #xd6 #xd7 ; #xd0-#xd7 759 #xa8 nil nil nil #xdc nil nil #xdf ; #xd8-#xdf 760 nil nil nil nil #xe4 #xe5 #xbf nil ; #xe0-#xe7 761 nil #xe9 nil nil nil nil nil nil ; #xe8-#xef 762 nil nil nil #xf3 nil #xf5 #xf6 #xf7 ; #xf0-#xf7 763 #xb8 nil nil nil #xfc nil nil nil ; #xf8-#xff 764 #xc2 #xe2 nil nil #xc0 #xe0 #xc3 #xe3 ; #x100-#x107 765 nil nil nil nil #xc8 #xe8 nil nil ; #x108-#x10f 766 nil nil #xc7 #xe7 nil nil #xcb #xeb ; #x110-#x117 767 #xc6 #xe6 nil nil nil nil nil nil ; #x118-#x11f 768 nil nil #xcc #xec nil nil nil nil ; #x120-#x127 769 nil nil #xce #xee nil nil #xc1 #xe1 ; #x128-#x12f 770 nil nil nil nil nil nil #xcd #xed ; #x130-#x137 771 nil nil nil #xcf #xef nil nil nil ; #x138-#x13f 772 nil #xd9 #xf9 #xd1 #xf1 #xd2 #xf2 nil ; #x140-#x147 773 nil nil nil nil #xd4 #xf4 nil nil ; #x148-#x14f 774 nil nil nil nil nil nil #xaa #xba ; #x150-#x157 775 nil nil #xda #xfa nil nil nil nil ; #x158-#x15f 776 #xd0 #xf0 nil nil nil nil nil nil ; #x160-#x167 777 nil nil #xdb #xfb nil nil nil nil ; #x168-#x16f 778 nil nil #xd8 #xf8 nil nil nil nil ; #x170-#x177 779 nil #xca #xea #xdd #xfd #xde #xfe nil) ; #x178-#x17f 780 :test #'equalp) 781 782 (define-constant +unicode-2018-2020-to-iso-8859-13+ 783 #(nil #xff nil nil #xb4 #xa1 #xa5 nil) ; #x2018-#x201f 784 :test #'equalp) 785 786 (define-unibyte-encoder :iso-8859-13 (code) 787 (or (cond ((< code #xa0) code) 788 ((< code #x180) 789 (svref +unicode-a0-180-to-iso-8859-13+ 790 (the ub8 (- code #xa0)))) 791 ((<= #x2018 code #x201f) 792 (svref +unicode-2018-2020-to-iso-8859-13+ 793 (the ub8 (- code #x2018))))) 794 (handle-error))) 795 796 (define-constant +iso-8859-13-to-unicode+ 797 #(;; #xa0 798 #x00a0 #x201d #x00a2 #x00a3 #x00a4 #x201e #x00a6 #x00a7 799 #x00d8 #x00a9 #x0156 #x00ab #x00ac #x00ad #x00ae #x00c6 800 ;; #xb0 801 #x00b0 #x00b1 #x00b2 #x00b3 #x201c #x00b5 #x00b6 #x00b7 802 #x00f8 #x00b9 #x0157 #x00bb #x00bc #x00bd #x00be #x00e6 803 ;; #xc0 804 #x0104 #x012e #x0100 #x0106 #x00c4 #x00c5 #x0118 #x0112 805 #x010c #x00c9 #x0179 #x0116 #x0122 #x0136 #x012a #x013b 806 ;; #xd0 807 #x0160 #x0143 #x0145 #x00d3 #x014c #x00d5 #x00d6 #x00d7 808 #x0172 #x0141 #x015a #x016a #x00dc #x017b #x017d #x00df 809 ;; #xe0 810 #x0105 #x012f #x0101 #x0107 #x00e4 #x00e5 #x0119 #x0113 811 #x010d #x00e9 #x017a #x0117 #x0123 #x0137 #x012b #x013c 812 ;; #xf0 813 #x0161 #x0144 #x0146 #x00f3 #x014d #x00f5 #x00f6 #x00f7 814 #x0173 #x0142 #x015b #x016b #x00fc #x017c #x017e #x2019) 815 :test #'equalp) 816 817 (define-unibyte-decoder :iso-8859-13 (octet) 818 (if (< octet #xa0) 819 octet 820 (svref +iso-8859-13-to-unicode+ (the ub8 (- octet #xa0))))) 821 822 (define-character-encoding :iso-8859-14 823 "An 8-bit, fixed-width character encoding in which codes 824 #x00-#x9f map to their Unicode equivalents and other codes map to 825 other Unicode character values. Intended to provide most 826 characters found in Celtic languages." 827 :aliases '(:latin-8 :latin8) 828 :literal-char-code-limit #xa0) 829 830 (define-constant +unicode-a0-100-to-iso-8859-14+ 831 #(#xa0 nil nil #xa3 nil nil nil #xa7 ; #xa0-#xa7 832 nil #xa9 nil nil nil #xad #xae nil ; #xa8-#xaf 833 nil nil nil nil nil nil #xb6 nil ; #xb0-#xb7 834 nil nil nil nil nil nil nil nil ; #xb8-#xbf 835 #xc0 #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 #xc7 ; #xc0-#xc7 836 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #xc8-#xcf 837 nil #xd1 #xd2 #xd3 #xd4 #xd5 #xd6 nil ; #xd0-#xd7 838 #xd8 #xd9 #xda #xdb #xdc #xdd nil #xdf ; #xd8-#xdf 839 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #xe0-#xe7 840 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #xe8-#xef 841 nil #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 nil ; #xf0-#xf7 842 #xf8 #xf9 #xfa #xfb #xfc #xfd nil #xff) ; #xf8-#xff 843 :test #'equalp) 844 845 (define-constant +unicode-108-128-to-iso-8859-14+ 846 #(nil nil #xa4 #xa5 nil nil nil nil ; #x108-#x10f 847 nil nil nil nil nil nil nil nil ; #x110-#x117 848 nil nil nil nil nil nil nil nil ; #x118-#x11f 849 #xb2 #xb3 nil nil nil nil nil nil) ; #x120-#x127 850 :test #'equalp) 851 852 (define-constant +unicode-170-180-to-iso-8859-14+ 853 #(nil nil nil nil #xd0 #xf0 #xde #xfe ; #x170-#x177 854 #xaf nil nil nil nil nil nil nil) ; #x178-#x17f 855 :test #'equalp) 856 857 (define-constant +unicode-1e00-1e88-to-iso-8859-14+ 858 #(nil nil #xa1 #xa2 nil nil nil nil ; #x1e00-#x1e07 859 nil nil #xa6 #xab nil nil nil nil ; #x1e08-#x1e0f 860 nil nil nil nil nil nil nil nil ; #x1e10-#x1e17 861 nil nil nil nil nil nil #xb0 #xb1 ; #x1e18-#x1e1f 862 nil nil nil nil nil nil nil nil ; #x1e20-#x1e27 863 nil nil nil nil nil nil nil nil ; #x1e28-#x1e2f 864 nil nil nil nil nil nil nil nil ; #x1e30-#x1e37 865 nil nil nil nil nil nil nil nil ; #x1e38-#x1e3f 866 #xb4 #xb5 nil nil nil nil nil nil ; #x1e40-#x1e47 867 nil nil nil nil nil nil nil nil ; #x1e48-#x1e4f 868 nil nil nil nil nil nil #xb7 #xb9 ; #x1e50-#x1e57 869 nil nil nil nil nil nil nil nil ; #x1e58-#x1e5f 870 #xbb #xbf nil nil nil nil nil nil ; #x1e60-#x1e67 871 nil nil #xd7 #xf7 nil nil nil nil ; #x1e68-#x1e6f 872 nil nil nil nil nil nil nil nil ; #x1e70-#x1e77 873 nil nil nil nil nil nil nil nil ; #x1e78-#x1e7f 874 #xa8 #xb8 #xaa #xba #xbd #xbe nil nil) ; #x1e80-#x1e87 875 :test #'equalp) 876 877 (define-constant +unicode-1ef0-1ef8-to-iso-8859-14+ 878 #(nil nil #xac #xbc nil nil nil nil) ; #x1ef0-#x1ef7 879 :test #'equalp) 880 881 (define-unibyte-encoder :iso-8859-14 (code) 882 (or (cond ((< code #xa0) code) 883 ((< code #x100) 884 (svref +unicode-a0-100-to-iso-8859-14+ 885 (the ub8 (- code #xa0)))) 886 ((<= #x108 code #x127) 887 (svref +unicode-108-128-to-iso-8859-14+ 888 (the ub8 (- code #x108)))) 889 ((<= #x170 code #x17f) 890 (svref +unicode-170-180-to-iso-8859-14+ 891 (the ub8 (- code #x170)))) 892 ((<= #x1e00 code #x1e87) 893 (svref +unicode-1e00-1e88-to-iso-8859-14+ 894 (the ub8 (- code #x1e00)))) 895 ((<= #x1ef0 code #x1ef7) 896 (svref +unicode-1ef0-1ef8-to-iso-8859-14+ 897 (the ub8 (- code #x1ef0))))) 898 (handle-error))) 899 900 (define-constant +iso-8859-14-to-unicode+ 901 #(;; #xa0 902 #x00a0 #x1e02 #x1e03 #x00a3 #x010a #x010b #x1e0a #x00a7 903 #x1e80 #x00a9 #x1e82 #x1e0b #x1ef2 #x00ad #x00ae #x0178 904 ;; #xb0 905 #x1e1e #x1e1f #x0120 #x0121 #x1e40 #x1e41 #x00b6 #x1e56 906 #x1e81 #x1e57 #x1e83 #x1e60 #x1ef3 #x1e84 #x1e85 #x1e61 907 ;; #xc0 908 #x00c0 #x00c1 #x00c2 #x00c3 #x00c4 #x00c5 #x00c6 #x00c7 909 #x00c8 #x00c9 #x00ca #x00cb #x00cc #x00cd #x00ce #x00cf 910 ;; #xd0 911 #x0174 #x00d1 #x00d2 #x00d3 #x00d4 #x00d5 #x00d6 #x1e6a 912 #x00d8 #x00d9 #x00da #x00db #x00dc #x00dd #x0176 #x00df 913 ;; #xe0 914 #x00e0 #x00e1 #x00e2 #x00e3 #x00e4 #x00e5 #x00e6 #x00e7 915 #x00e8 #x00e9 #x00ea #x00eb #x00ec #x00ed #x00ee #x00ef 916 ;; #xf0 917 #x0175 #x00f1 #x00f2 #x00f3 #x00f4 #x00f5 #x00f6 #x1e6b 918 #x00f8 #x00f9 #x00fa #x00fb #x00fc #x00fd #x0177 #x00ff) 919 :test #'equalp) 920 921 (define-unibyte-decoder :iso-8859-14 (octet) 922 (if (< octet #xa0) 923 octet 924 (svref +iso-8859-14-to-unicode+ (the ub8 (- octet #xa0))))) 925 926 (define-character-encoding :iso-8859-15 927 "An 8-bit, fixed-width character encoding in which codes 928 #x00-#x9f map to their Unicode equivalents and other codes map to 929 other Unicode character values. Intended to provide most 930 characters found in Western European languages (including the 931 Euro sign and some other characters missing from ISO-8859-1." 932 :aliases '(:latin-9 :latin9) 933 :literal-char-code-limit #xa0) 934 935 (define-constant +unicode-a0-100-to-iso-8859-15+ 936 #(#xa0 #xa1 #xa2 #xa3 nil #xa5 nil #xa7 ; #xa0-#xa7 937 nil #xa9 #xaa #xab #xac #xad #xae #xaf ; #xa8-#xaf 938 #xb0 #xb1 #xb2 #xb3 nil #xb5 #xb6 #xb7 ; #xb0-#xb7 939 nil #xb9 #xba #xbb nil nil nil #xbf ; #xb8-0xbf 940 #xc0 #xc1 #xc2 #xc3 #xc4 #xc5 #xc6 #xc7 ; #xc0-#xc7 941 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #xc8-#xcf 942 #xd0 #xd1 #xd2 #xd3 #xd4 #xd5 #xd6 #xd7 ; #xd0-#xd7 943 #xd8 #xd9 #xda #xdb #xdc #xdd #xde #xdf ; #xd8-#xdf 944 #xe0 #xe1 #xe2 #xe3 #xe4 #xe5 #xe6 #xe7 ; #xe0-#xe7 945 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #xe8-#xef 946 #xf0 #xf1 #xf2 #xf3 #xf4 #xf5 #xf6 #xf7 ; #xf0-#xf7 947 #xf8 #xf9 #xfa #xfb #xfc #xfd #xfe #xff) ; #xf8-#xff 948 :test #'equalp) 949 950 (define-constant +unicode-150-180-to-iso-8859-15+ 951 #(nil nil #xbc #xbd nil nil nil nil ; #x150-#x157 952 nil nil nil nil nil nil nil nil ; #x158-#x15f 953 #xa6 #xa8 nil nil nil nil nil nil ; #x160-#x167 954 nil nil nil nil nil nil nil nil ; #x168-#x16f 955 nil nil nil nil nil nil nil nil ; #x170-#x177 956 #xbe nil nil nil nil #xb4 #xb8 nil) ; #x178-#x17f 957 :test #'equalp) 958 959 (define-unibyte-encoder :iso-8859-15 (code) 960 (or (cond ((< code #xa0) code) 961 ((< code #x100) 962 (svref +unicode-a0-100-to-iso-8859-15+ 963 (the ub8 (- code #xa0)))) 964 ((<= #x150 code #x1f7) 965 (svref +unicode-150-180-to-iso-8859-15+ 966 (the ub8 (- code #x150)))) 967 ;; Euro sign 968 ((= code #x20ac) #xa4)) 969 (handle-error))) 970 971 (define-constant +iso-8859-15-to-unicode+ 972 #(;; #xa0 973 #x00a0 #x00a1 #x00a2 #x00a3 #x20ac #x00a5 #x0160 #x00a7 974 #x0161 #x00a9 #x00aa #x00ab #x00ac #x00ad #x00ae #x00af 975 ;; #xb0 976 #x00b0 #x00b1 #x00b2 #x00b3 #x017d #x00b5 #x00b6 #x00b7 977 #x017e #x00b9 #x00ba #x00bb #x0152 #x0153 #x0178 #x00bf 978 ;; #xc0 979 #x00c0 #x00c1 #x00c2 #x00c3 #x00c4 #x00c5 #x00c6 #x00c7 980 ;; #xc8 981 #x00c8 #x00c9 #x00ca #x00cb #x00cc #x00cd #x00ce #x00cf 982 ;; #xd0 983 #x00d0 #x00d1 #x00d2 #x00d3 #x00d4 #x00d5 #x00d6 #x00d7 984 ;; #xd8 985 #x00d8 #x00d9 #x00da #x00db #x00dc #x00dd #x00de #x00df 986 ;; #xe0 987 #x00e0 #x00e1 #x00e2 #x00e3 #x00e4 #x00e5 #x00e6 #x00e7 988 ;; #xe8 989 #x00e8 #x00e9 #x00ea #x00eb #x00ec #x00ed #x00ee #x00ef 990 ;; #xf0 991 #x00f0 #x00f1 #x00f2 #x00f3 #x00f4 #x00f5 #x00f6 #x00f7 992 ;; #xf8 993 #x00f8 #x00f9 #x00fa #x00fb #x00fc #x00fd #x00fe #x00ff) 994 :test #'equalp) 995 996 (define-unibyte-decoder :iso-8859-15 (octet) 997 (if (< octet #xa0) 998 octet 999 (svref +iso-8859-15-to-unicode+ (the ub8 (- octet #xa0))))) 1000 1001 (define-character-encoding :iso-8859-16 1002 "An 8-bit, fixed-width character encoding in which codes 1003 #x00-#x9f map to their Unicode equivalents and other codes map to 1004 other Unicode character values. Intended to provide most 1005 characters found in Southeast European languages." 1006 :aliases '(:latin-10 :latin10) 1007 :literal-char-code-limit #xa0) 1008 1009 (define-constant +unicode-a0-180-to-iso-8859-16+ 1010 #(#xa0 nil nil nil nil nil nil #xa7 ; #xa0-#xa7 1011 nil #xa9 nil #xab nil #xad nil nil ; #xa8-#xaf 1012 #xb0 #xb1 nil nil nil nil #xb6 #xb7 ; #xb0-#xb7 1013 nil nil nil #xbb nil nil nil nil ; #xb8-#xbf 1014 #xc0 #xc1 #xc2 nil #xc4 nil #xc6 #xc7 ; #xc0-#xc7 1015 #xc8 #xc9 #xca #xcb #xcc #xcd #xce #xcf ; #xc8-#xcf 1016 nil nil #xd2 #xd3 #xd4 nil #xd6 nil ; #xd0-#xd7 1017 nil #xd9 #xda #xdb #xdc nil nil #xdf ; #xd8-#xdf 1018 #xe0 #xe1 #xe2 nil #xe4 nil #xe6 #xe7 ; #xe0-#xe7 1019 #xe8 #xe9 #xea #xeb #xec #xed #xee #xef ; #xe8-#xef 1020 nil nil #xf2 #xf3 #xf4 nil #xf6 nil ; #xf0-#xf7 1021 nil #xf9 #xfa #xfb #xfc nil nil #xff ; #xf8-#xff 1022 nil nil #xc3 #xe3 #xa1 #xa2 #xc5 #xe5 ; #x100-#x107 1023 nil nil nil nil #xb2 #xb9 nil nil ; #x108-#x10f 1024 #xd0 #xf0 nil nil nil nil nil nil ; #x110-#x117 1025 #xdd #xfd nil nil nil nil nil nil ; #x118-#x11f 1026 nil nil nil nil nil nil nil nil ; #x120-#x127 1027 nil nil nil nil nil nil nil nil ; #x128-#x12f 1028 nil nil nil nil nil nil nil nil ; #x130-#x137 1029 nil nil nil nil nil nil nil nil ; #x138-#x13f 1030 nil #xa3 #xb3 #xd1 #xf1 nil nil nil ; #x140-#x147 1031 nil nil nil nil nil nil nil nil ; #x148-#x14f 1032 #xd5 #xf5 #xbc #xbd nil nil nil nil ; #x150-#x157 1033 nil nil #xd7 #xf7 nil nil nil nil ; #x158-#x15f 1034 #xa6 #xa8 nil nil nil nil nil nil ; #x160-#x167 1035 nil nil nil nil nil nil nil nil ; #x168-#x16f 1036 #xd8 #xf8 nil nil nil nil nil nil ; #x170-#x177 1037 #xbe #xac #xae #xaf #xbf #xb4 #xb8 nil) ; #x178-#x17f 1038 :test #'equalp) 1039 1040 (define-constant +unicode-218-220-to-iso-8859-16+ 1041 #(#xaa #xba #xde #xfe nil nil nil nil) ; #x218-#x21f 1042 :test #'equalp) 1043 1044 (define-constant +unicode-2018-2020-to-iso-8859-16+ 1045 #(nil nil nil nil nil #xb5 #xa5 nil) ; #x2018-#x201f 1046 :test #'equalp) 1047 1048 (define-unibyte-encoder :iso-8859-16 (code) 1049 (or (cond ((< code #xa0) code) 1050 ((< code #x180) 1051 (svref +unicode-a0-180-to-iso-8859-16+ 1052 (the ub8 (- code #xa0)))) 1053 ((<= #x218 code #x21f) 1054 (svref +unicode-218-220-to-iso-8859-16+ 1055 (the ub8 (- code #x218)))) 1056 ((< #x2018 code #x201f) 1057 (svref +unicode-2018-2020-to-iso-8859-16+ 1058 (the ub8 (- code #x2018)))) 1059 ;; Euro sign 1060 ((= code #x20ac) #xa4)) 1061 (handle-error))) 1062 1063 (define-constant +iso-8859-16-to-unicode+ 1064 #(;; #xa0 1065 #x00a0 #x0104 #x0105 #x0141 #x20ac #x201e #x0160 #x00a7 1066 #x0161 #x00a9 #x0218 #x00ab #x0179 #x00ad #x017a #x017b 1067 ;; #xb0 1068 #x00b0 #x00b1 #x010c #x0142 #x017d #x201d #x00b6 #x00b7 1069 #x017e #x010d #x0219 #x00bb #x0152 #x0153 #x0178 #x017c 1070 ;; #xc0 1071 #x00c0 #x00c1 #x00c2 #x0102 #x00c4 #x0106 #x00c6 #x00c7 1072 #x00c8 #x00c9 #x00ca #x00cb #x00cc #x00cd #x00ce #x00cf 1073 ;; #xd0 1074 #x0110 #x0143 #x00d2 #x00d3 #x00d4 #x0150 #x00d6 #x015a 1075 #x0170 #x00d9 #x00da #x00db #x00dc #x0118 #x021a #x00df 1076 ;; #xe0 1077 #x00e0 #x00e1 #x00e2 #x0103 #x00e4 #x0107 #x00e6 #x00e7 1078 #x00e8 #x00e9 #x00ea #x00eb #x00ec #x00ed #x00ee #x00ef 1079 ;; #xf0 1080 #x0111 #x0144 #x00f2 #x00f3 #x00f4 #x0151 #x00f6 #x015b 1081 #x0171 #x00f9 #x00fa #x00fb #x00fc #x0119 #x021b #x00ff) 1082 :test #'equalp) 1083 1084 (define-unibyte-decoder :iso-8859-16 (octet) 1085 (if (< octet #xa0) 1086 octet 1087 (svref +iso-8859-16-to-unicode+ (the ub8 (- octet #xa0)))))