| tenc-iso-8859.lisp - clic - Clic is an command line interactive client for goph… | |
| git clone git://bitreich.org/clic/ git://hg6vgqziawt5s4dj.onion/clic/ | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| 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 <[email protected]> | |
| 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))))) |