enc-iso-8859.lisp - clic - Clic is an command line interactive client for gophe… | |
git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
enc-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))))) |