3 (define-unibyte-mapper cp1250->code-mapper code->cp1250-mapper
4 (#x80 #x20AC) ; EURO SIGN
6 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
8 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
9 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
10 (#x86 #x2020) ; DAGGER
11 (#x87 #x2021) ; DOUBLE DAGGER
13 (#x89 #x2030) ; PER MILLE SIGN
14 (#x8A #x0160) ; LATIN CAPITAL LETTER S WITH CARON
15 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
16 (#x8C #x015A) ; LATIN CAPITAL LETTER S WITH ACUTE
17 (#x8D #x0164) ; LATIN CAPITAL LETTER T WITH CARON
18 (#x8E #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
19 (#x8F #x0179) ; LATIN CAPITAL LETTER Z WITH ACUTE
21 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
22 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
23 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
24 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
25 (#x95 #x2022) ; BULLET
26 (#x96 #x2013) ; EN DASH
27 (#x97 #x2014) ; EM DASH
29 (#x99 #x2122) ; TRADE MARK SIGN
30 (#x9A #x0161) ; LATIN SMALL LETTER S WITH CARON
31 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
32 (#x9C #x015B) ; LATIN SMALL LETTER S WITH ACUTE
33 (#x9D #x0165) ; LATIN SMALL LETTER T WITH CARON
34 (#x9E #x017E) ; LATIN SMALL LETTER Z WITH CARON
35 (#x9F #x017A) ; LATIN SMALL LETTER Z WITH ACUTE
38 (#xA3 #x0141) ; LATIN CAPITAL LETTER L WITH STROKE
39 (#xA5 #x0104) ; LATIN CAPITAL LETTER A WITH OGONEK
40 (#xAA #x015E) ; LATIN CAPITAL LETTER S WITH CEDILLA
41 (#xAF #x017B) ; LATIN CAPITAL LETTER Z WITH DOT ABOVE
42 (#xB2 #x02DB) ; OGONEK
43 (#xB3 #x0142) ; LATIN SMALL LETTER L WITH STROKE
44 (#xB9 #x0105) ; LATIN SMALL LETTER A WITH OGONEK
45 (#xBA #x015F) ; LATIN SMALL LETTER S WITH CEDILLA
46 (#xBC #x013D) ; LATIN CAPITAL LETTER L WITH CARON
47 (#xBD #x02DD) ; DOUBLE ACUTE ACCENT
48 (#xBE #x013E) ; LATIN SMALL LETTER L WITH CARON
49 (#xBF #x017C) ; LATIN SMALL LETTER Z WITH DOT ABOVE
50 (#xC0 #x0154) ; LATIN CAPITAL LETTER R WITH ACUTE
51 (#xC3 #x0102) ; LATIN CAPITAL LETTER A WITH BREVE
52 (#xC5 #x0139) ; LATIN CAPITAL LETTER L WITH ACUTE
53 (#xC6 #x0106) ; LATIN CAPITAL LETTER C WITH ACUTE
54 (#xC8 #x010C) ; LATIN CAPITAL LETTER C WITH CARON
55 (#xCA #x0118) ; LATIN CAPITAL LETTER E WITH OGONEK
56 (#xCC #x011A) ; LATIN CAPITAL LETTER E WITH CARON
57 (#xCF #x010E) ; LATIN CAPITAL LETTER D WITH CARON
58 (#xD0 #x0110) ; LATIN CAPITAL LETTER D WITH STROKE
59 (#xD1 #x0143) ; LATIN CAPITAL LETTER N WITH ACUTE
60 (#xD2 #x0147) ; LATIN CAPITAL LETTER N WITH CARON
61 (#xD5 #x0150) ; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
62 (#xD8 #x0158) ; LATIN CAPITAL LETTER R WITH CARON
63 (#xD9 #x016E) ; LATIN CAPITAL LETTER U WITH RING ABOVE
64 (#xDB #x0170) ; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
65 (#xDE #x0162) ; LATIN CAPITAL LETTER T WITH CEDILLA
66 (#xE0 #x0155) ; LATIN SMALL LETTER R WITH ACUTE
67 (#xE3 #x0103) ; LATIN SMALL LETTER A WITH BREVE
68 (#xE5 #x013A) ; LATIN SMALL LETTER L WITH ACUTE
69 (#xE6 #x0107) ; LATIN SMALL LETTER C WITH ACUTE
70 (#xE8 #x010D) ; LATIN SMALL LETTER C WITH CARON
71 (#xEA #x0119) ; LATIN SMALL LETTER E WITH OGONEK
72 (#xEC #x011B) ; LATIN SMALL LETTER E WITH CARON
73 (#xEF #x010F) ; LATIN SMALL LETTER D WITH CARON
74 (#xF0 #x0111) ; LATIN SMALL LETTER D WITH STROKE
75 (#xF1 #x0144) ; LATIN SMALL LETTER N WITH ACUTE
76 (#xF2 #x0148) ; LATIN SMALL LETTER N WITH CARON
77 (#xF5 #x0151) ; LATIN SMALL LETTER O WITH DOUBLE ACUTE
78 (#xF8 #x0159) ; LATIN SMALL LETTER R WITH CARON
79 (#xF9 #x016F) ; LATIN SMALL LETTER U WITH RING ABOVE
80 (#xFB #x0171) ; LATIN SMALL LETTER U WITH DOUBLE ACUTE
81 (#xFE #x0163) ; LATIN SMALL LETTER T WITH CEDILLA
82 (#xFF #x02D9) ; DOT ABOVE
85 (declaim (inline get-cp1250-bytes))
86 (defun get-cp1250-bytes (string pos)
87 (declare (optimize speed (safety 0))
88 (type simple-string string)
89 (type array-range pos))
90 (get-latin-bytes #'code->cp1250-mapper :cp1250 string pos))
92 (defun string->cp1250 (string sstart send null-padding)
93 (declare (optimize speed (safety 0))
94 (type simple-string string)
95 (type array-range sstart send))
96 (values (string->latin% string sstart send #'get-cp1250-bytes null-padding)))
98 (defmacro define-cp1250->string* (accessor type)
99 (declare (ignore type))
100 (let ((name (make-od-name 'cp1250->string* accessor)))
102 (defun ,name (string sstart send array astart aend)
103 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1250->code-mapper)))))
105 (instantiate-octets-definition define-cp1250->string*)
107 (defmacro define-cp1250->string (accessor type)
108 (declare (ignore type))
109 `(defun ,(make-od-name 'cp1250->string accessor) (array astart aend)
110 (,(make-od-name 'latin->string accessor) array astart aend #'cp1250->code-mapper)))
112 (instantiate-octets-definition define-cp1250->string)
114 (define-external-format (:cp1250 :|cp1250| :windows-1250 :|windows-1250|)
116 (let ((cp1250-byte (code->cp1250-mapper bits)))
118 (setf (sap-ref-8 sap tail) cp1250-byte)
119 (external-format-encoding-error stream bits)))
120 (let ((code (cp1250->code-mapper byte)))
123 (external-format-decoding-error stream byte)))
125 string->cp1250) ;; TODO -- error check
127 (define-unibyte-mapper cp1251->code-mapper code->cp1251-mapper
128 (#x80 #x0402) ; CYRILLIC CAPITAL LETTER DJE
129 (#x81 #x0403) ; CYRILLIC CAPITAL LETTER GJE
130 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
131 (#x83 #x0453) ; CYRILLIC SMALL LETTER GJE
132 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
133 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
134 (#x86 #x2020) ; DAGGER
135 (#x87 #x2021) ; DOUBLE DAGGER
137 (#x89 #x2030) ; PER MILLE SIGN
138 (#x8A #x0409) ; CYRILLIC CAPITAL LETTER LJE
139 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
140 (#x8C #x040A) ; CYRILLIC CAPITAL LETTER NJE
141 (#x8D #x040C) ; CYRILLIC CAPITAL LETTER KJE
142 (#x8E #x040B) ; CYRILLIC CAPITAL LETTER TSHE
143 (#x8F #x040F) ; CYRILLIC CAPITAL LETTER DZHE
144 (#x90 #x0452) ; CYRILLIC SMALL LETTER DJE
145 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
146 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
147 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
148 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
149 (#x95 #x2022) ; BULLET
150 (#x96 #x2013) ; EN DASH
151 (#x97 #x2014) ; EM DASH
153 (#x99 #x2122) ; TRADE MARK SIGN
154 (#x9A #x0459) ; CYRILLIC SMALL LETTER LJE
155 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
156 (#x9C #x045A) ; CYRILLIC SMALL LETTER NJE
157 (#x9D #x045C) ; CYRILLIC SMALL LETTER KJE
158 (#x9E #x045B) ; CYRILLIC SMALL LETTER TSHE
159 (#x9F #x045F) ; CYRILLIC SMALL LETTER DZHE
160 (#xA1 #x040E) ; CYRILLIC CAPITAL LETTER SHORT U
161 (#xA2 #x045E) ; CYRILLIC SMALL LETTER SHORT U
162 (#xA3 #x0408) ; CYRILLIC CAPITAL LETTER JE
163 (#xA5 #x0490) ; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
164 (#xA8 #x0401) ; CYRILLIC CAPITAL LETTER IO
165 (#xAA #x0404) ; CYRILLIC CAPITAL LETTER UKRAINIAN IE
166 (#xAF #x0407) ; CYRILLIC CAPITAL LETTER YI
167 (#xB2 #x0406) ; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
168 (#xB3 #x0456) ; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
169 (#xB4 #x0491) ; CYRILLIC SMALL LETTER GHE WITH UPTURN
170 (#xB8 #x0451) ; CYRILLIC SMALL LETTER IO
171 (#xB9 #x2116) ; NUMERO SIGN
172 (#xBA #x0454) ; CYRILLIC SMALL LETTER UKRAINIAN IE
173 (#xBC #x0458) ; CYRILLIC SMALL LETTER JE
174 (#xBD #x0405) ; CYRILLIC CAPITAL LETTER DZE
175 (#xBE #x0455) ; CYRILLIC SMALL LETTER DZE
176 (#xBF #x0457) ; CYRILLIC SMALL LETTER YI
177 (#xC0 #x0410) ; CYRILLIC CAPITAL LETTER A
178 (#xC1 #x0411) ; CYRILLIC CAPITAL LETTER BE
179 (#xC2 #x0412) ; CYRILLIC CAPITAL LETTER VE
180 (#xC3 #x0413) ; CYRILLIC CAPITAL LETTER GHE
181 (#xC4 #x0414) ; CYRILLIC CAPITAL LETTER DE
182 (#xC5 #x0415) ; CYRILLIC CAPITAL LETTER IE
183 (#xC6 #x0416) ; CYRILLIC CAPITAL LETTER ZHE
184 (#xC7 #x0417) ; CYRILLIC CAPITAL LETTER ZE
185 (#xC8 #x0418) ; CYRILLIC CAPITAL LETTER I
186 (#xC9 #x0419) ; CYRILLIC CAPITAL LETTER SHORT I
187 (#xCA #x041A) ; CYRILLIC CAPITAL LETTER KA
188 (#xCB #x041B) ; CYRILLIC CAPITAL LETTER EL
189 (#xCC #x041C) ; CYRILLIC CAPITAL LETTER EM
190 (#xCD #x041D) ; CYRILLIC CAPITAL LETTER EN
191 (#xCE #x041E) ; CYRILLIC CAPITAL LETTER O
192 (#xCF #x041F) ; CYRILLIC CAPITAL LETTER PE
193 (#xD0 #x0420) ; CYRILLIC CAPITAL LETTER ER
194 (#xD1 #x0421) ; CYRILLIC CAPITAL LETTER ES
195 (#xD2 #x0422) ; CYRILLIC CAPITAL LETTER TE
196 (#xD3 #x0423) ; CYRILLIC CAPITAL LETTER U
197 (#xD4 #x0424) ; CYRILLIC CAPITAL LETTER EF
198 (#xD5 #x0425) ; CYRILLIC CAPITAL LETTER HA
199 (#xD6 #x0426) ; CYRILLIC CAPITAL LETTER TSE
200 (#xD7 #x0427) ; CYRILLIC CAPITAL LETTER CHE
201 (#xD8 #x0428) ; CYRILLIC CAPITAL LETTER SHA
202 (#xD9 #x0429) ; CYRILLIC CAPITAL LETTER SHCHA
203 (#xDA #x042A) ; CYRILLIC CAPITAL LETTER HARD SIGN
204 (#xDB #x042B) ; CYRILLIC CAPITAL LETTER YERU
205 (#xDC #x042C) ; CYRILLIC CAPITAL LETTER SOFT SIGN
206 (#xDD #x042D) ; CYRILLIC CAPITAL LETTER E
207 (#xDE #x042E) ; CYRILLIC CAPITAL LETTER YU
208 (#xDF #x042F) ; CYRILLIC CAPITAL LETTER YA
209 (#xE0 #x0430) ; CYRILLIC SMALL LETTER A
210 (#xE1 #x0431) ; CYRILLIC SMALL LETTER BE
211 (#xE2 #x0432) ; CYRILLIC SMALL LETTER VE
212 (#xE3 #x0433) ; CYRILLIC SMALL LETTER GHE
213 (#xE4 #x0434) ; CYRILLIC SMALL LETTER DE
214 (#xE5 #x0435) ; CYRILLIC SMALL LETTER IE
215 (#xE6 #x0436) ; CYRILLIC SMALL LETTER ZHE
216 (#xE7 #x0437) ; CYRILLIC SMALL LETTER ZE
217 (#xE8 #x0438) ; CYRILLIC SMALL LETTER I
218 (#xE9 #x0439) ; CYRILLIC SMALL LETTER SHORT I
219 (#xEA #x043A) ; CYRILLIC SMALL LETTER KA
220 (#xEB #x043B) ; CYRILLIC SMALL LETTER EL
221 (#xEC #x043C) ; CYRILLIC SMALL LETTER EM
222 (#xED #x043D) ; CYRILLIC SMALL LETTER EN
223 (#xEE #x043E) ; CYRILLIC SMALL LETTER O
224 (#xEF #x043F) ; CYRILLIC SMALL LETTER PE
225 (#xF0 #x0440) ; CYRILLIC SMALL LETTER ER
226 (#xF1 #x0441) ; CYRILLIC SMALL LETTER ES
227 (#xF2 #x0442) ; CYRILLIC SMALL LETTER TE
228 (#xF3 #x0443) ; CYRILLIC SMALL LETTER U
229 (#xF4 #x0444) ; CYRILLIC SMALL LETTER EF
230 (#xF5 #x0445) ; CYRILLIC SMALL LETTER HA
231 (#xF6 #x0446) ; CYRILLIC SMALL LETTER TSE
232 (#xF7 #x0447) ; CYRILLIC SMALL LETTER CHE
233 (#xF8 #x0448) ; CYRILLIC SMALL LETTER SHA
234 (#xF9 #x0449) ; CYRILLIC SMALL LETTER SHCHA
235 (#xFA #x044A) ; CYRILLIC SMALL LETTER HARD SIGN
236 (#xFB #x044B) ; CYRILLIC SMALL LETTER YERU
237 (#xFC #x044C) ; CYRILLIC SMALL LETTER SOFT SIGN
238 (#xFD #x044D) ; CYRILLIC SMALL LETTER E
239 (#xFE #x044E) ; CYRILLIC SMALL LETTER YU
240 (#xFF #x044F) ; CYRILLIC SMALL LETTER YA
243 (declaim (inline get-cp1251-bytes))
244 (defun get-cp1251-bytes (string pos)
245 (declare (optimize speed (safety 0))
246 (type simple-string string)
247 (type array-range pos))
248 (get-latin-bytes #'code->cp1251-mapper :cp1251 string pos))
250 (defun string->cp1251 (string sstart send null-padding)
251 (declare (optimize speed (safety 0))
252 (type simple-string string)
253 (type array-range sstart send))
254 (values (string->latin% string sstart send #'get-cp1251-bytes null-padding)))
256 (defmacro define-cp1251->string* (accessor type)
257 (declare (ignore type))
258 (let ((name (make-od-name 'cp1251->string* accessor)))
260 (defun ,name (string sstart send array astart aend)
261 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1251->code-mapper)))))
263 (instantiate-octets-definition define-cp1251->string*)
265 (defmacro define-cp1251->string (accessor type)
266 (declare (ignore type))
267 `(defun ,(make-od-name 'cp1251->string accessor) (array astart aend)
268 (,(make-od-name 'latin->string accessor) array astart aend #'cp1251->code-mapper)))
270 (instantiate-octets-definition define-cp1251->string)
272 (define-external-format (:cp1251 :|cp1251| :windows-1251 :|windows-1251|)
274 (let ((cp1251-byte (code->cp1251-mapper bits)))
276 (setf (sap-ref-8 sap tail) cp1251-byte)
277 (external-format-encoding-error stream bits)))
278 (let ((code (cp1251->code-mapper byte)))
281 (external-format-decoding-error stream byte)))
283 string->cp1251) ;; TODO -- error check
285 (define-unibyte-mapper cp1252->code-mapper code->cp1252-mapper
286 (#x80 #x20AC) ; EURO SIGN
288 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
289 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
290 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
291 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
292 (#x86 #x2020) ; DAGGER
293 (#x87 #x2021) ; DOUBLE DAGGER
294 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
295 (#x89 #x2030) ; PER MILLE SIGN
296 (#x8A #x0160) ; LATIN CAPITAL LETTER S WITH CARON
297 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
298 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
300 (#x8E #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
303 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
304 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
305 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
306 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
307 (#x95 #x2022) ; BULLET
308 (#x96 #x2013) ; EN DASH
309 (#x97 #x2014) ; EM DASH
310 (#x98 #x02DC) ; SMALL TILDE
311 (#x99 #x2122) ; TRADE MARK SIGN
312 (#x9A #x0161) ; LATIN SMALL LETTER S WITH CARON
313 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
314 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
316 (#x9E #x017E) ; LATIN SMALL LETTER Z WITH CARON
317 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
320 (declaim (inline get-cp1252-bytes))
321 (defun get-cp1252-bytes (string pos)
322 (declare (optimize speed (safety 0))
323 (type simple-string string)
324 (type array-range pos))
325 (get-latin-bytes #'code->cp1252-mapper :cp1252 string pos))
327 (defun string->cp1252 (string sstart send null-padding)
328 (declare (optimize speed (safety 0))
329 (type simple-string string)
330 (type array-range sstart send))
331 (values (string->latin% string sstart send #'get-cp1252-bytes null-padding)))
333 (defmacro define-cp1252->string* (accessor type)
334 (declare (ignore type))
335 (let ((name (make-od-name 'cp1252->string* accessor)))
337 (defun ,name (string sstart send array astart aend)
338 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1252->code-mapper)))))
340 (instantiate-octets-definition define-cp1252->string*)
342 (defmacro define-cp1252->string (accessor type)
343 (declare (ignore type))
344 `(defun ,(make-od-name 'cp1252->string accessor) (array astart aend)
345 (,(make-od-name 'latin->string accessor) array astart aend #'cp1252->code-mapper)))
347 (instantiate-octets-definition define-cp1252->string)
349 (define-external-format (:cp1252 :|cp1252| :windows-1252 :|windows-1252|)
351 (let ((cp1252-byte (code->cp1252-mapper bits)))
353 (setf (sap-ref-8 sap tail) cp1252-byte)
354 (external-format-encoding-error stream bits)))
355 (let ((code (cp1252->code-mapper byte)))
358 (external-format-decoding-error stream byte)))
360 string->cp1252) ;; TODO -- error check
362 (define-unibyte-mapper cp1253->code-mapper code->cp1253-mapper
363 (#x80 #x20AC) ; EURO SIGN
365 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
366 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
367 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
368 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
369 (#x86 #x2020) ; DAGGER
370 (#x87 #x2021) ; DOUBLE DAGGER
372 (#x89 #x2030) ; PER MILLE SIGN
374 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
380 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
381 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
382 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
383 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
384 (#x95 #x2022) ; BULLET
385 (#x96 #x2013) ; EN DASH
386 (#x97 #x2014) ; EM DASH
388 (#x99 #x2122) ; TRADE MARK SIGN
390 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
395 (#xA1 #x0385) ; GREEK DIALYTIKA TONOS
396 (#xA2 #x0386) ; GREEK CAPITAL LETTER ALPHA WITH TONOS
398 (#xAF #x2015) ; HORIZONTAL BAR
399 (#xB4 #x0384) ; GREEK TONOS
400 (#xB8 #x0388) ; GREEK CAPITAL LETTER EPSILON WITH TONOS
401 (#xB9 #x0389) ; GREEK CAPITAL LETTER ETA WITH TONOS
402 (#xBA #x038A) ; GREEK CAPITAL LETTER IOTA WITH TONOS
403 (#xBC #x038C) ; GREEK CAPITAL LETTER OMICRON WITH TONOS
404 (#xBE #x038E) ; GREEK CAPITAL LETTER UPSILON WITH TONOS
405 (#xBF #x038F) ; GREEK CAPITAL LETTER OMEGA WITH TONOS
406 (#xC0 #x0390) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
407 (#xC1 #x0391) ; GREEK CAPITAL LETTER ALPHA
408 (#xC2 #x0392) ; GREEK CAPITAL LETTER BETA
409 (#xC3 #x0393) ; GREEK CAPITAL LETTER GAMMA
410 (#xC4 #x0394) ; GREEK CAPITAL LETTER DELTA
411 (#xC5 #x0395) ; GREEK CAPITAL LETTER EPSILON
412 (#xC6 #x0396) ; GREEK CAPITAL LETTER ZETA
413 (#xC7 #x0397) ; GREEK CAPITAL LETTER ETA
414 (#xC8 #x0398) ; GREEK CAPITAL LETTER THETA
415 (#xC9 #x0399) ; GREEK CAPITAL LETTER IOTA
416 (#xCA #x039A) ; GREEK CAPITAL LETTER KAPPA
417 (#xCB #x039B) ; GREEK CAPITAL LETTER LAMDA
418 (#xCC #x039C) ; GREEK CAPITAL LETTER MU
419 (#xCD #x039D) ; GREEK CAPITAL LETTER NU
420 (#xCE #x039E) ; GREEK CAPITAL LETTER XI
421 (#xCF #x039F) ; GREEK CAPITAL LETTER OMICRON
422 (#xD0 #x03A0) ; GREEK CAPITAL LETTER PI
423 (#xD1 #x03A1) ; GREEK CAPITAL LETTER RHO
425 (#xD3 #x03A3) ; GREEK CAPITAL LETTER SIGMA
426 (#xD4 #x03A4) ; GREEK CAPITAL LETTER TAU
427 (#xD5 #x03A5) ; GREEK CAPITAL LETTER UPSILON
428 (#xD6 #x03A6) ; GREEK CAPITAL LETTER PHI
429 (#xD7 #x03A7) ; GREEK CAPITAL LETTER CHI
430 (#xD8 #x03A8) ; GREEK CAPITAL LETTER PSI
431 (#xD9 #x03A9) ; GREEK CAPITAL LETTER OMEGA
432 (#xDA #x03AA) ; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
433 (#xDB #x03AB) ; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
434 (#xDC #x03AC) ; GREEK SMALL LETTER ALPHA WITH TONOS
435 (#xDD #x03AD) ; GREEK SMALL LETTER EPSILON WITH TONOS
436 (#xDE #x03AE) ; GREEK SMALL LETTER ETA WITH TONOS
437 (#xDF #x03AF) ; GREEK SMALL LETTER IOTA WITH TONOS
438 (#xE0 #x03B0) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
439 (#xE1 #x03B1) ; GREEK SMALL LETTER ALPHA
440 (#xE2 #x03B2) ; GREEK SMALL LETTER BETA
441 (#xE3 #x03B3) ; GREEK SMALL LETTER GAMMA
442 (#xE4 #x03B4) ; GREEK SMALL LETTER DELTA
443 (#xE5 #x03B5) ; GREEK SMALL LETTER EPSILON
444 (#xE6 #x03B6) ; GREEK SMALL LETTER ZETA
445 (#xE7 #x03B7) ; GREEK SMALL LETTER ETA
446 (#xE8 #x03B8) ; GREEK SMALL LETTER THETA
447 (#xE9 #x03B9) ; GREEK SMALL LETTER IOTA
448 (#xEA #x03BA) ; GREEK SMALL LETTER KAPPA
449 (#xEB #x03BB) ; GREEK SMALL LETTER LAMDA
450 (#xEC #x03BC) ; GREEK SMALL LETTER MU
451 (#xED #x03BD) ; GREEK SMALL LETTER NU
452 (#xEE #x03BE) ; GREEK SMALL LETTER XI
453 (#xEF #x03BF) ; GREEK SMALL LETTER OMICRON
454 (#xF0 #x03C0) ; GREEK SMALL LETTER PI
455 (#xF1 #x03C1) ; GREEK SMALL LETTER RHO
456 (#xF2 #x03C2) ; GREEK SMALL LETTER FINAL SIGMA
457 (#xF3 #x03C3) ; GREEK SMALL LETTER SIGMA
458 (#xF4 #x03C4) ; GREEK SMALL LETTER TAU
459 (#xF5 #x03C5) ; GREEK SMALL LETTER UPSILON
460 (#xF6 #x03C6) ; GREEK SMALL LETTER PHI
461 (#xF7 #x03C7) ; GREEK SMALL LETTER CHI
462 (#xF8 #x03C8) ; GREEK SMALL LETTER PSI
463 (#xF9 #x03C9) ; GREEK SMALL LETTER OMEGA
464 (#xFA #x03CA) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA
465 (#xFB #x03CB) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
466 (#xFC #x03CC) ; GREEK SMALL LETTER OMICRON WITH TONOS
467 (#xFD #x03CD) ; GREEK SMALL LETTER UPSILON WITH TONOS
468 (#xFE #x03CE) ; GREEK SMALL LETTER OMEGA WITH TONOS
472 (declaim (inline get-cp1253-bytes))
473 (defun get-cp1253-bytes (string pos)
474 (declare (optimize speed (safety 0))
475 (type simple-string string)
476 (type array-range pos))
477 (get-latin-bytes #'code->cp1253-mapper :cp1253 string pos))
479 (defun string->cp1253 (string sstart send null-padding)
480 (declare (optimize speed (safety 0))
481 (type simple-string string)
482 (type array-range sstart send))
483 (values (string->latin% string sstart send #'get-cp1253-bytes null-padding)))
485 (defmacro define-cp1253->string* (accessor type)
486 (declare (ignore type))
487 (let ((name (make-od-name 'cp1253->string* accessor)))
489 (defun ,name (string sstart send array astart aend)
490 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1253->code-mapper)))))
492 (instantiate-octets-definition define-cp1253->string*)
494 (defmacro define-cp1253->string (accessor type)
495 (declare (ignore type))
496 `(defun ,(make-od-name 'cp1253->string accessor) (array astart aend)
497 (,(make-od-name 'latin->string accessor) array astart aend #'cp1253->code-mapper)))
499 (instantiate-octets-definition define-cp1253->string)
501 (define-external-format (:cp1253 :|cp1253| :windows-1253 :|windows-1253|)
503 (let ((cp1253-byte (code->cp1253-mapper bits)))
505 (setf (sap-ref-8 sap tail) cp1253-byte)
506 (external-format-encoding-error stream bits)))
507 (let ((code (cp1253->code-mapper byte)))
510 (external-format-decoding-error stream byte)))
512 string->cp1253) ;; TODO -- error check
514 (define-unibyte-mapper cp1254->code-mapper code->cp1254-mapper
515 (#x80 #x20AC) ; EURO SIGN
517 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
518 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
519 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
520 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
521 (#x86 #x2020) ; DAGGER
522 (#x87 #x2021) ; DOUBLE DAGGER
523 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
524 (#x89 #x2030) ; PER MILLE SIGN
525 (#x8A #x0160) ; LATIN CAPITAL LETTER S WITH CARON
526 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
527 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
532 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
533 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
534 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
535 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
536 (#x95 #x2022) ; BULLET
537 (#x96 #x2013) ; EN DASH
538 (#x97 #x2014) ; EM DASH
539 (#x98 #x02DC) ; SMALL TILDE
540 (#x99 #x2122) ; TRADE MARK SIGN
541 (#x9A #x0161) ; LATIN SMALL LETTER S WITH CARON
542 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
543 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
546 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
547 (#xD0 #x011E) ; LATIN CAPITAL LETTER G WITH BREVE
548 (#xDD #x0130) ; LATIN CAPITAL LETTER I WITH DOT ABOVE
549 (#xDE #x015E) ; LATIN CAPITAL LETTER S WITH CEDILLA
550 (#xF0 #x011F) ; LATIN SMALL LETTER G WITH BREVE
551 (#xFD #x0131) ; LATIN SMALL LETTER DOTLESS I
552 (#xFE #x015F) ; LATIN SMALL LETTER S WITH CEDILLA
555 (declaim (inline get-cp1254-bytes))
556 (defun get-cp1254-bytes (string pos)
557 (declare (optimize speed (safety 0))
558 (type simple-string string)
559 (type array-range pos))
560 (get-latin-bytes #'code->cp1254-mapper :cp1254 string pos))
562 (defun string->cp1254 (string sstart send null-padding)
563 (declare (optimize speed (safety 0))
564 (type simple-string string)
565 (type array-range sstart send))
566 (values (string->latin% string sstart send #'get-cp1254-bytes null-padding)))
568 (defmacro define-cp1254->string* (accessor type)
569 (declare (ignore type))
570 (let ((name (make-od-name 'cp1254->string* accessor)))
572 (defun ,name (string sstart send array astart aend)
573 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1254->code-mapper)))))
575 (instantiate-octets-definition define-cp1254->string*)
577 (defmacro define-cp1254->string (accessor type)
578 (declare (ignore type))
579 `(defun ,(make-od-name 'cp1254->string accessor) (array astart aend)
580 (,(make-od-name 'latin->string accessor) array astart aend #'cp1254->code-mapper)))
582 (instantiate-octets-definition define-cp1254->string)
584 (define-external-format (:cp1254 :|cp1254|)
586 (let ((cp1254-byte (code->cp1254-mapper bits)))
588 (setf (sap-ref-8 sap tail) cp1254-byte)
589 (external-format-encoding-error stream bits)))
590 (let ((code (cp1254->code-mapper byte)))
593 (external-format-decoding-error stream byte)))
595 string->cp1254) ;; TODO -- error check
597 (define-unibyte-mapper cp1255->code-mapper code->cp1255-mapper
598 (#x80 #x20AC) ; EURO SIGN
600 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
601 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
602 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
603 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
604 (#x86 #x2020) ; DAGGER
605 (#x87 #x2021) ; DOUBLE DAGGER
606 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
607 (#x89 #x2030) ; PER MILLE SIGN
609 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
615 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
616 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
617 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
618 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
619 (#x95 #x2022) ; BULLET
620 (#x96 #x2013) ; EN DASH
621 (#x97 #x2014) ; EM DASH
622 (#x98 #x02DC) ; SMALL TILDE
623 (#x99 #x2122) ; TRADE MARK SIGN
625 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
630 (#xA4 #x20AA) ; NEW SHEQEL SIGN
631 (#xAA #x00D7) ; MULTIPLICATION SIGN
632 (#xBA #x00F7) ; DIVISION SIGN
633 (#xC0 #x05B0) ; HEBREW POINT SHEVA
634 (#xC1 #x05B1) ; HEBREW POINT HATAF SEGOL
635 (#xC2 #x05B2) ; HEBREW POINT HATAF PATAH
636 (#xC3 #x05B3) ; HEBREW POINT HATAF QAMATS
637 (#xC4 #x05B4) ; HEBREW POINT HIRIQ
638 (#xC5 #x05B5) ; HEBREW POINT TSERE
639 (#xC6 #x05B6) ; HEBREW POINT SEGOL
640 (#xC7 #x05B7) ; HEBREW POINT PATAH
641 (#xC8 #x05B8) ; HEBREW POINT QAMATS
642 (#xC9 #x05B9) ; HEBREW POINT HOLAM
644 (#xCB #x05BB) ; HEBREW POINT QUBUTS
645 (#xCC #x05BC) ; HEBREW POINT DAGESH OR MAPIQ
646 (#xCD #x05BD) ; HEBREW POINT METEG
647 (#xCE #x05BE) ; HEBREW PUNCTUATION MAQAF
648 (#xCF #x05BF) ; HEBREW POINT RAFE
649 (#xD0 #x05C0) ; HEBREW PUNCTUATION PASEQ
650 (#xD1 #x05C1) ; HEBREW POINT SHIN DOT
651 (#xD2 #x05C2) ; HEBREW POINT SIN DOT
652 (#xD3 #x05C3) ; HEBREW PUNCTUATION SOF PASUQ
653 (#xD4 #x05F0) ; HEBREW LIGATURE YIDDISH DOUBLE VAV
654 (#xD5 #x05F1) ; HEBREW LIGATURE YIDDISH VAV YOD
655 (#xD6 #x05F2) ; HEBREW LIGATURE YIDDISH DOUBLE YOD
656 (#xD7 #x05F3) ; HEBREW PUNCTUATION GERESH
657 (#xD8 #x05F4) ; HEBREW PUNCTUATION GERSHAYIM
665 (#xE0 #x05D0) ; HEBREW LETTER ALEF
666 (#xE1 #x05D1) ; HEBREW LETTER BET
667 (#xE2 #x05D2) ; HEBREW LETTER GIMEL
668 (#xE3 #x05D3) ; HEBREW LETTER DALET
669 (#xE4 #x05D4) ; HEBREW LETTER HE
670 (#xE5 #x05D5) ; HEBREW LETTER VAV
671 (#xE6 #x05D6) ; HEBREW LETTER ZAYIN
672 (#xE7 #x05D7) ; HEBREW LETTER HET
673 (#xE8 #x05D8) ; HEBREW LETTER TET
674 (#xE9 #x05D9) ; HEBREW LETTER YOD
675 (#xEA #x05DA) ; HEBREW LETTER FINAL KAF
676 (#xEB #x05DB) ; HEBREW LETTER KAF
677 (#xEC #x05DC) ; HEBREW LETTER LAMED
678 (#xED #x05DD) ; HEBREW LETTER FINAL MEM
679 (#xEE #x05DE) ; HEBREW LETTER MEM
680 (#xEF #x05DF) ; HEBREW LETTER FINAL NUN
681 (#xF0 #x05E0) ; HEBREW LETTER NUN
682 (#xF1 #x05E1) ; HEBREW LETTER SAMEKH
683 (#xF2 #x05E2) ; HEBREW LETTER AYIN
684 (#xF3 #x05E3) ; HEBREW LETTER FINAL PE
685 (#xF4 #x05E4) ; HEBREW LETTER PE
686 (#xF5 #x05E5) ; HEBREW LETTER FINAL TSADI
687 (#xF6 #x05E6) ; HEBREW LETTER TSADI
688 (#xF7 #x05E7) ; HEBREW LETTER QOF
689 (#xF8 #x05E8) ; HEBREW LETTER RESH
690 (#xF9 #x05E9) ; HEBREW LETTER SHIN
691 (#xFA #x05EA) ; HEBREW LETTER TAV
694 (#xFD #x200E) ; LEFT-TO-RIGHT MARK
695 (#xFE #x200F) ; RIGHT-TO-LEFT MARK
699 (declaim (inline get-cp1255-bytes))
700 (defun get-cp1255-bytes (string pos)
701 (declare (optimize speed (safety 0))
702 (type simple-string string)
703 (type array-range pos))
704 (get-latin-bytes #'code->cp1255-mapper :cp1255 string pos))
706 (defun string->cp1255 (string sstart send null-padding)
707 (declare (optimize speed (safety 0))
708 (type simple-string string)
709 (type array-range sstart send))
710 (values (string->latin% string sstart send #'get-cp1255-bytes null-padding)))
712 (defmacro define-cp1255->string* (accessor type)
713 (declare (ignore type))
714 (let ((name (make-od-name 'cp1255->string* accessor)))
716 (defun ,name (string sstart send array astart aend)
717 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1255->code-mapper)))))
719 (instantiate-octets-definition define-cp1255->string*)
721 (defmacro define-cp1255->string (accessor type)
722 (declare (ignore type))
723 `(defun ,(make-od-name 'cp1255->string accessor) (array astart aend)
724 (,(make-od-name 'latin->string accessor) array astart aend #'cp1255->code-mapper)))
726 (instantiate-octets-definition define-cp1255->string)
728 (define-external-format (:cp1255 :|cp1255| :windows-1255 :|windows-1255|)
730 (let ((cp1255-byte (code->cp1255-mapper bits)))
732 (setf (sap-ref-8 sap tail) cp1255-byte)
733 (external-format-encoding-error stream bits)))
734 (let ((code (cp1255->code-mapper byte)))
737 (external-format-decoding-error stream byte)))
739 string->cp1255) ;; TODO -- error check
741 (define-unibyte-mapper cp1256->code-mapper code->cp1256-mapper
742 (#x80 #x20AC) ; EURO SIGN
743 (#x81 #x067E) ; ARABIC LETTER PEH
744 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
745 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
746 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
747 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
748 (#x86 #x2020) ; DAGGER
749 (#x87 #x2021) ; DOUBLE DAGGER
750 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
751 (#x89 #x2030) ; PER MILLE SIGN
753 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
754 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
755 (#x8D #x0686) ; ARABIC LETTER TCHEH
756 (#x8E #x0698) ; ARABIC LETTER JEH
758 (#x90 #x06AF) ; ARABIC LETTER GAF
759 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
760 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
761 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
762 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
763 (#x95 #x2022) ; BULLET
764 (#x96 #x2013) ; EN DASH
765 (#x97 #x2014) ; EM DASH
767 (#x99 #x2122) ; TRADE MARK SIGN
769 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
770 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
771 (#x9D #x200C) ; ZERO WIDTH NON-JOINER
772 (#x9E #x200D) ; ZERO WIDTH JOINER
774 (#xA1 #x060C) ; ARABIC COMMA
776 (#xBA #x061B) ; ARABIC SEMICOLON
777 (#xBF #x061F) ; ARABIC QUESTION MARK
779 (#xC1 #x0621) ; ARABIC LETTER HAMZA
780 (#xC2 #x0622) ; ARABIC LETTER ALEF WITH MADDA ABOVE
781 (#xC3 #x0623) ; ARABIC LETTER ALEF WITH HAMZA ABOVE
782 (#xC4 #x0624) ; ARABIC LETTER WAW WITH HAMZA ABOVE
783 (#xC5 #x0625) ; ARABIC LETTER ALEF WITH HAMZA BELOW
784 (#xC6 #x0626) ; ARABIC LETTER YEH WITH HAMZA ABOVE
785 (#xC7 #x0627) ; ARABIC LETTER ALEF
786 (#xC8 #x0628) ; ARABIC LETTER BEH
787 (#xC9 #x0629) ; ARABIC LETTER TEH MARBUTA
788 (#xCA #x062A) ; ARABIC LETTER TEH
789 (#xCB #x062B) ; ARABIC LETTER THEH
790 (#xCC #x062C) ; ARABIC LETTER JEEM
791 (#xCD #x062D) ; ARABIC LETTER HAH
792 (#xCE #x062E) ; ARABIC LETTER KHAH
793 (#xCF #x062F) ; ARABIC LETTER DAL
794 (#xD0 #x0630) ; ARABIC LETTER THAL
795 (#xD1 #x0631) ; ARABIC LETTER REH
796 (#xD2 #x0632) ; ARABIC LETTER ZAIN
797 (#xD3 #x0633) ; ARABIC LETTER SEEN
798 (#xD4 #x0634) ; ARABIC LETTER SHEEN
799 (#xD5 #x0635) ; ARABIC LETTER SAD
800 (#xD6 #x0636) ; ARABIC LETTER DAD
801 (#xD8 #x0637) ; ARABIC LETTER TAH
802 (#xD9 #x0638) ; ARABIC LETTER ZAH
803 (#xDA #x0639) ; ARABIC LETTER AIN
804 (#xDB #x063A) ; ARABIC LETTER GHAIN
805 (#xDC #x0640) ; ARABIC TATWEEL
806 (#xDD #x0641) ; ARABIC LETTER FEH
807 (#xDE #x0642) ; ARABIC LETTER QAF
808 (#xDF #x0643) ; ARABIC LETTER KAF
809 (#xE1 #x0644) ; ARABIC LETTER LAM
810 (#xE3 #x0645) ; ARABIC LETTER MEEM
811 (#xE4 #x0646) ; ARABIC LETTER NOON
812 (#xE5 #x0647) ; ARABIC LETTER HEH
813 (#xE6 #x0648) ; ARABIC LETTER WAW
814 (#xEC #x0649) ; ARABIC LETTER ALEF MAKSURA
815 (#xED #x064A) ; ARABIC LETTER YEH
816 (#xF0 #x064B) ; ARABIC FATHATAN
817 (#xF1 #x064C) ; ARABIC DAMMATAN
818 (#xF2 #x064D) ; ARABIC KASRATAN
819 (#xF3 #x064E) ; ARABIC FATHA
820 (#xF5 #x064F) ; ARABIC DAMMA
821 (#xF6 #x0650) ; ARABIC KASRA
822 (#xF8 #x0651) ; ARABIC SHADDA
823 (#xFA #x0652) ; ARABIC SUKUN
824 (#xFD #x200E) ; LEFT-TO-RIGHT MARK
825 (#xFE #x200F) ; RIGHT-TO-LEFT MARK
829 (declaim (inline get-cp1256-bytes))
830 (defun get-cp1256-bytes (string pos)
831 (declare (optimize speed (safety 0))
832 (type simple-string string)
833 (type array-range pos))
834 (get-latin-bytes #'code->cp1256-mapper :cp1256 string pos))
836 (defun string->cp1256 (string sstart send null-padding)
837 (declare (optimize speed (safety 0))
838 (type simple-string string)
839 (type array-range sstart send))
840 (values (string->latin% string sstart send #'get-cp1256-bytes null-padding)))
842 (defmacro define-cp1256->string* (accessor type)
843 (declare (ignore type))
844 (let ((name (make-od-name 'cp1256->string* accessor)))
846 (defun ,name (string sstart send array astart aend)
847 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1256->code-mapper)))))
849 (instantiate-octets-definition define-cp1256->string*)
851 (defmacro define-cp1256->string (accessor type)
852 (declare (ignore type))
853 `(defun ,(make-od-name 'cp1256->string accessor) (array astart aend)
854 (,(make-od-name 'latin->string accessor) array astart aend #'cp1256->code-mapper)))
856 (instantiate-octets-definition define-cp1256->string)
858 (define-external-format (:cp1256 :|cp1256| :windows-1256 :|windows-1256|)
860 (let ((cp1256-byte (code->cp1256-mapper bits)))
862 (setf (sap-ref-8 sap tail) cp1256-byte)
863 (external-format-encoding-error stream bits)))
864 (let ((code (cp1256->code-mapper byte)))
867 (external-format-decoding-error stream byte)))
869 string->cp1256) ;; TODO -- error check
871 (define-unibyte-mapper cp1257->code-mapper code->cp1257-mapper
872 (#x80 #x20AC) ; EURO SIGN
874 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
876 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
877 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
878 (#x86 #x2020) ; DAGGER
879 (#x87 #x2021) ; DOUBLE DAGGER
881 (#x89 #x2030) ; PER MILLE SIGN
883 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
885 (#x8D #x00A8) ; DIAERESIS
886 (#x8E #x02C7) ; CARON
887 (#x8F #x00B8) ; CEDILLA
889 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
890 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
891 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
892 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
893 (#x95 #x2022) ; BULLET
894 (#x96 #x2013) ; EN DASH
895 (#x97 #x2014) ; EM DASH
897 (#x99 #x2122) ; TRADE MARK SIGN
899 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
901 (#x9D #x00AF) ; MACRON
902 (#x9E #x02DB) ; OGONEK
906 (#xA8 #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
907 (#xAA #x0156) ; LATIN CAPITAL LETTER R WITH CEDILLA
908 (#xAF #x00C6) ; LATIN CAPITAL LETTER AE
909 (#xB8 #x00F8) ; LATIN SMALL LETTER O WITH STROKE
910 (#xBA #x0157) ; LATIN SMALL LETTER R WITH CEDILLA
911 (#xBF #x00E6) ; LATIN SMALL LETTER AE
912 (#xC0 #x0104) ; LATIN CAPITAL LETTER A WITH OGONEK
913 (#xC1 #x012E) ; LATIN CAPITAL LETTER I WITH OGONEK
914 (#xC2 #x0100) ; LATIN CAPITAL LETTER A WITH MACRON
915 (#xC3 #x0106) ; LATIN CAPITAL LETTER C WITH ACUTE
916 (#xC6 #x0118) ; LATIN CAPITAL LETTER E WITH OGONEK
917 (#xC7 #x0112) ; LATIN CAPITAL LETTER E WITH MACRON
918 (#xC8 #x010C) ; LATIN CAPITAL LETTER C WITH CARON
919 (#xCA #x0179) ; LATIN CAPITAL LETTER Z WITH ACUTE
920 (#xCB #x0116) ; LATIN CAPITAL LETTER E WITH DOT ABOVE
921 (#xCC #x0122) ; LATIN CAPITAL LETTER G WITH CEDILLA
922 (#xCD #x0136) ; LATIN CAPITAL LETTER K WITH CEDILLA
923 (#xCE #x012A) ; LATIN CAPITAL LETTER I WITH MACRON
924 (#xCF #x013B) ; LATIN CAPITAL LETTER L WITH CEDILLA
925 (#xD0 #x0160) ; LATIN CAPITAL LETTER S WITH CARON
926 (#xD1 #x0143) ; LATIN CAPITAL LETTER N WITH ACUTE
927 (#xD2 #x0145) ; LATIN CAPITAL LETTER N WITH CEDILLA
928 (#xD4 #x014C) ; LATIN CAPITAL LETTER O WITH MACRON
929 (#xD8 #x0172) ; LATIN CAPITAL LETTER U WITH OGONEK
930 (#xD9 #x0141) ; LATIN CAPITAL LETTER L WITH STROKE
931 (#xDA #x015A) ; LATIN CAPITAL LETTER S WITH ACUTE
932 (#xDB #x016A) ; LATIN CAPITAL LETTER U WITH MACRON
933 (#xDD #x017B) ; LATIN CAPITAL LETTER Z WITH DOT ABOVE
934 (#xDE #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
935 (#xE0 #x0105) ; LATIN SMALL LETTER A WITH OGONEK
936 (#xE1 #x012F) ; LATIN SMALL LETTER I WITH OGONEK
937 (#xE2 #x0101) ; LATIN SMALL LETTER A WITH MACRON
938 (#xE3 #x0107) ; LATIN SMALL LETTER C WITH ACUTE
939 (#xE6 #x0119) ; LATIN SMALL LETTER E WITH OGONEK
940 (#xE7 #x0113) ; LATIN SMALL LETTER E WITH MACRON
941 (#xE8 #x010D) ; LATIN SMALL LETTER C WITH CARON
942 (#xEA #x017A) ; LATIN SMALL LETTER Z WITH ACUTE
943 (#xEB #x0117) ; LATIN SMALL LETTER E WITH DOT ABOVE
944 (#xEC #x0123) ; LATIN SMALL LETTER G WITH CEDILLA
945 (#xED #x0137) ; LATIN SMALL LETTER K WITH CEDILLA
946 (#xEE #x012B) ; LATIN SMALL LETTER I WITH MACRON
947 (#xEF #x013C) ; LATIN SMALL LETTER L WITH CEDILLA
948 (#xF0 #x0161) ; LATIN SMALL LETTER S WITH CARON
949 (#xF1 #x0144) ; LATIN SMALL LETTER N WITH ACUTE
950 (#xF2 #x0146) ; LATIN SMALL LETTER N WITH CEDILLA
951 (#xF4 #x014D) ; LATIN SMALL LETTER O WITH MACRON
952 (#xF8 #x0173) ; LATIN SMALL LETTER U WITH OGONEK
953 (#xF9 #x0142) ; LATIN SMALL LETTER L WITH STROKE
954 (#xFA #x015B) ; LATIN SMALL LETTER S WITH ACUTE
955 (#xFB #x016B) ; LATIN SMALL LETTER U WITH MACRON
956 (#xFD #x017C) ; LATIN SMALL LETTER Z WITH DOT ABOVE
957 (#xFE #x017E) ; LATIN SMALL LETTER Z WITH CARON
958 (#xFF #x02D9) ; DOT ABOVE
961 (declaim (inline get-cp1257-bytes))
962 (defun get-cp1257-bytes (string pos)
963 (declare (optimize speed (safety 0))
964 (type simple-string string)
965 (type array-range pos))
966 (get-latin-bytes #'code->cp1257-mapper :cp1257 string pos))
968 (defun string->cp1257 (string sstart send null-padding)
969 (declare (optimize speed (safety 0))
970 (type simple-string string)
971 (type array-range sstart send))
972 (values (string->latin% string sstart send #'get-cp1257-bytes null-padding)))
974 (defmacro define-cp1257->string* (accessor type)
975 (declare (ignore type))
976 (let ((name (make-od-name 'cp1257->string* accessor)))
978 (defun ,name (string sstart send array astart aend)
979 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1257->code-mapper)))))
981 (instantiate-octets-definition define-cp1257->string*)
983 (defmacro define-cp1257->string (accessor type)
984 (declare (ignore type))
985 `(defun ,(make-od-name 'cp1257->string accessor) (array astart aend)
986 (,(make-od-name 'latin->string accessor) array astart aend #'cp1257->code-mapper)))
988 (instantiate-octets-definition define-cp1257->string)
990 (define-external-format (:cp1257 :|cp1257| :windows-1257 :|windows-1257|)
992 (let ((cp1257-byte (code->cp1257-mapper bits)))
994 (setf (sap-ref-8 sap tail) cp1257-byte)
995 (external-format-encoding-error stream bits)))
996 (let ((code (cp1257->code-mapper byte)))
999 (external-format-decoding-error stream byte)))
1001 string->cp1257) ;; TODO -- error check
1003 (define-unibyte-mapper cp1258->code-mapper code->cp1258-mapper
1004 (#x80 #x20AC) ; EURO SIGN
1006 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
1007 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
1008 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
1009 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
1010 (#x86 #x2020) ; DAGGER
1011 (#x87 #x2021) ; DOUBLE DAGGER
1012 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
1013 (#x89 #x2030) ; PER MILLE SIGN
1015 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
1016 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
1021 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
1022 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
1023 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
1024 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
1025 (#x95 #x2022) ; BULLET
1026 (#x96 #x2013) ; EN DASH
1027 (#x97 #x2014) ; EM DASH
1028 (#x98 #x02DC) ; SMALL TILDE
1029 (#x99 #x2122) ; TRADE MARK SIGN
1031 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
1032 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
1035 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
1036 (#xC3 #x0102) ; LATIN CAPITAL LETTER A WITH BREVE
1037 (#xCC #x0300) ; COMBINING GRAVE ACCENT
1038 (#xD0 #x0110) ; LATIN CAPITAL LETTER D WITH STROKE
1039 (#xD2 #x0309) ; COMBINING HOOK ABOVE
1040 (#xD5 #x01A0) ; LATIN CAPITAL LETTER O WITH HORN
1041 (#xDD #x01AF) ; LATIN CAPITAL LETTER U WITH HORN
1042 (#xDE #x0303) ; COMBINING TILDE
1043 (#xE3 #x0103) ; LATIN SMALL LETTER A WITH BREVE
1044 (#xEC #x0301) ; COMBINING ACUTE ACCENT
1045 (#xF0 #x0111) ; LATIN SMALL LETTER D WITH STROKE
1046 (#xF2 #x0323) ; COMBINING DOT BELOW
1047 (#xF5 #x01A1) ; LATIN SMALL LETTER O WITH HORN
1048 (#xFD #x01B0) ; LATIN SMALL LETTER U WITH HORN
1049 (#xFE #x20AB) ; DONG SIGN
1052 (declaim (inline get-cp1258-bytes))
1053 (defun get-cp1258-bytes (string pos)
1054 (declare (optimize speed (safety 0))
1055 (type simple-string string)
1056 (type array-range pos))
1057 (get-latin-bytes #'code->cp1258-mapper :cp1258 string pos))
1059 (defun string->cp1258 (string sstart send null-padding)
1060 (declare (optimize speed (safety 0))
1061 (type simple-string string)
1062 (type array-range sstart send))
1063 (values (string->latin% string sstart send #'get-cp1258-bytes null-padding)))
1065 (defmacro define-cp1258->string* (accessor type)
1066 (declare (ignore type))
1067 (let ((name (make-od-name 'cp1258->string* accessor)))
1069 (defun ,name (string sstart send array astart aend)
1070 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1258->code-mapper)))))
1072 (instantiate-octets-definition define-cp1258->string*)
1074 (defmacro define-cp1258->string (accessor type)
1075 (declare (ignore type))
1076 `(defun ,(make-od-name 'cp1258->string accessor) (array astart aend)
1077 (,(make-od-name 'latin->string accessor) array astart aend #'cp1258->code-mapper)))
1079 (instantiate-octets-definition define-cp1258->string)
1081 (define-external-format (:cp1258 :|cp1258| :windows-1258 :|windows-1258|)
1083 (let ((cp1258-byte (code->cp1258-mapper bits)))
1085 (setf (sap-ref-8 sap tail) cp1258-byte)
1086 (external-format-encoding-error stream bits)))
1087 (let ((code (cp1258->code-mapper byte)))
1090 (external-format-decoding-error stream byte)))
1092 string->cp1258) ;; TODO -- error check