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 end)
87 (declare (optimize speed (safety 0))
88 (type simple-string string)
89 (type array-range pos end))
90 (get-latin-bytes #'code->cp1250-mapper :cp1250 string pos end))
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 (push '((:cp1250 :|cp1250| :windows-1250 :|windows-1250|)
115 cp1250->string-aref string->cp1250)
116 *external-format-functions*)
118 (define-external-format (:cp1250 :|cp1250| :windows-1250 :|windows-1250|)
120 (let ((cp1250-byte (code->cp1250-mapper bits)))
122 (setf (sap-ref-8 sap tail) cp1250-byte)
123 (stream-encoding-error-and-handle stream bits)))
124 (let ((code (cp1250->code-mapper byte)))
127 (stream-decoding-error stream byte)))) ;; TODO -- error check
129 (define-unibyte-mapper cp1251->code-mapper code->cp1251-mapper
130 (#x80 #x0402) ; CYRILLIC CAPITAL LETTER DJE
131 (#x81 #x0403) ; CYRILLIC CAPITAL LETTER GJE
132 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
133 (#x83 #x0453) ; CYRILLIC SMALL LETTER GJE
134 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
135 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
136 (#x86 #x2020) ; DAGGER
137 (#x87 #x2021) ; DOUBLE DAGGER
139 (#x89 #x2030) ; PER MILLE SIGN
140 (#x8A #x0409) ; CYRILLIC CAPITAL LETTER LJE
141 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
142 (#x8C #x040A) ; CYRILLIC CAPITAL LETTER NJE
143 (#x8D #x040C) ; CYRILLIC CAPITAL LETTER KJE
144 (#x8E #x040B) ; CYRILLIC CAPITAL LETTER TSHE
145 (#x8F #x040F) ; CYRILLIC CAPITAL LETTER DZHE
146 (#x90 #x0452) ; CYRILLIC SMALL LETTER DJE
147 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
148 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
149 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
150 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
151 (#x95 #x2022) ; BULLET
152 (#x96 #x2013) ; EN DASH
153 (#x97 #x2014) ; EM DASH
155 (#x99 #x2122) ; TRADE MARK SIGN
156 (#x9A #x0459) ; CYRILLIC SMALL LETTER LJE
157 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
158 (#x9C #x045A) ; CYRILLIC SMALL LETTER NJE
159 (#x9D #x045C) ; CYRILLIC SMALL LETTER KJE
160 (#x9E #x045B) ; CYRILLIC SMALL LETTER TSHE
161 (#x9F #x045F) ; CYRILLIC SMALL LETTER DZHE
162 (#xA1 #x040E) ; CYRILLIC CAPITAL LETTER SHORT U
163 (#xA2 #x045E) ; CYRILLIC SMALL LETTER SHORT U
164 (#xA3 #x0408) ; CYRILLIC CAPITAL LETTER JE
165 (#xA5 #x0490) ; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
166 (#xA8 #x0401) ; CYRILLIC CAPITAL LETTER IO
167 (#xAA #x0404) ; CYRILLIC CAPITAL LETTER UKRAINIAN IE
168 (#xAF #x0407) ; CYRILLIC CAPITAL LETTER YI
169 (#xB2 #x0406) ; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
170 (#xB3 #x0456) ; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
171 (#xB4 #x0491) ; CYRILLIC SMALL LETTER GHE WITH UPTURN
172 (#xB8 #x0451) ; CYRILLIC SMALL LETTER IO
173 (#xB9 #x2116) ; NUMERO SIGN
174 (#xBA #x0454) ; CYRILLIC SMALL LETTER UKRAINIAN IE
175 (#xBC #x0458) ; CYRILLIC SMALL LETTER JE
176 (#xBD #x0405) ; CYRILLIC CAPITAL LETTER DZE
177 (#xBE #x0455) ; CYRILLIC SMALL LETTER DZE
178 (#xBF #x0457) ; CYRILLIC SMALL LETTER YI
179 (#xC0 #x0410) ; CYRILLIC CAPITAL LETTER A
180 (#xC1 #x0411) ; CYRILLIC CAPITAL LETTER BE
181 (#xC2 #x0412) ; CYRILLIC CAPITAL LETTER VE
182 (#xC3 #x0413) ; CYRILLIC CAPITAL LETTER GHE
183 (#xC4 #x0414) ; CYRILLIC CAPITAL LETTER DE
184 (#xC5 #x0415) ; CYRILLIC CAPITAL LETTER IE
185 (#xC6 #x0416) ; CYRILLIC CAPITAL LETTER ZHE
186 (#xC7 #x0417) ; CYRILLIC CAPITAL LETTER ZE
187 (#xC8 #x0418) ; CYRILLIC CAPITAL LETTER I
188 (#xC9 #x0419) ; CYRILLIC CAPITAL LETTER SHORT I
189 (#xCA #x041A) ; CYRILLIC CAPITAL LETTER KA
190 (#xCB #x041B) ; CYRILLIC CAPITAL LETTER EL
191 (#xCC #x041C) ; CYRILLIC CAPITAL LETTER EM
192 (#xCD #x041D) ; CYRILLIC CAPITAL LETTER EN
193 (#xCE #x041E) ; CYRILLIC CAPITAL LETTER O
194 (#xCF #x041F) ; CYRILLIC CAPITAL LETTER PE
195 (#xD0 #x0420) ; CYRILLIC CAPITAL LETTER ER
196 (#xD1 #x0421) ; CYRILLIC CAPITAL LETTER ES
197 (#xD2 #x0422) ; CYRILLIC CAPITAL LETTER TE
198 (#xD3 #x0423) ; CYRILLIC CAPITAL LETTER U
199 (#xD4 #x0424) ; CYRILLIC CAPITAL LETTER EF
200 (#xD5 #x0425) ; CYRILLIC CAPITAL LETTER HA
201 (#xD6 #x0426) ; CYRILLIC CAPITAL LETTER TSE
202 (#xD7 #x0427) ; CYRILLIC CAPITAL LETTER CHE
203 (#xD8 #x0428) ; CYRILLIC CAPITAL LETTER SHA
204 (#xD9 #x0429) ; CYRILLIC CAPITAL LETTER SHCHA
205 (#xDA #x042A) ; CYRILLIC CAPITAL LETTER HARD SIGN
206 (#xDB #x042B) ; CYRILLIC CAPITAL LETTER YERU
207 (#xDC #x042C) ; CYRILLIC CAPITAL LETTER SOFT SIGN
208 (#xDD #x042D) ; CYRILLIC CAPITAL LETTER E
209 (#xDE #x042E) ; CYRILLIC CAPITAL LETTER YU
210 (#xDF #x042F) ; CYRILLIC CAPITAL LETTER YA
211 (#xE0 #x0430) ; CYRILLIC SMALL LETTER A
212 (#xE1 #x0431) ; CYRILLIC SMALL LETTER BE
213 (#xE2 #x0432) ; CYRILLIC SMALL LETTER VE
214 (#xE3 #x0433) ; CYRILLIC SMALL LETTER GHE
215 (#xE4 #x0434) ; CYRILLIC SMALL LETTER DE
216 (#xE5 #x0435) ; CYRILLIC SMALL LETTER IE
217 (#xE6 #x0436) ; CYRILLIC SMALL LETTER ZHE
218 (#xE7 #x0437) ; CYRILLIC SMALL LETTER ZE
219 (#xE8 #x0438) ; CYRILLIC SMALL LETTER I
220 (#xE9 #x0439) ; CYRILLIC SMALL LETTER SHORT I
221 (#xEA #x043A) ; CYRILLIC SMALL LETTER KA
222 (#xEB #x043B) ; CYRILLIC SMALL LETTER EL
223 (#xEC #x043C) ; CYRILLIC SMALL LETTER EM
224 (#xED #x043D) ; CYRILLIC SMALL LETTER EN
225 (#xEE #x043E) ; CYRILLIC SMALL LETTER O
226 (#xEF #x043F) ; CYRILLIC SMALL LETTER PE
227 (#xF0 #x0440) ; CYRILLIC SMALL LETTER ER
228 (#xF1 #x0441) ; CYRILLIC SMALL LETTER ES
229 (#xF2 #x0442) ; CYRILLIC SMALL LETTER TE
230 (#xF3 #x0443) ; CYRILLIC SMALL LETTER U
231 (#xF4 #x0444) ; CYRILLIC SMALL LETTER EF
232 (#xF5 #x0445) ; CYRILLIC SMALL LETTER HA
233 (#xF6 #x0446) ; CYRILLIC SMALL LETTER TSE
234 (#xF7 #x0447) ; CYRILLIC SMALL LETTER CHE
235 (#xF8 #x0448) ; CYRILLIC SMALL LETTER SHA
236 (#xF9 #x0449) ; CYRILLIC SMALL LETTER SHCHA
237 (#xFA #x044A) ; CYRILLIC SMALL LETTER HARD SIGN
238 (#xFB #x044B) ; CYRILLIC SMALL LETTER YERU
239 (#xFC #x044C) ; CYRILLIC SMALL LETTER SOFT SIGN
240 (#xFD #x044D) ; CYRILLIC SMALL LETTER E
241 (#xFE #x044E) ; CYRILLIC SMALL LETTER YU
242 (#xFF #x044F) ; CYRILLIC SMALL LETTER YA
245 (declaim (inline get-cp1251-bytes))
246 (defun get-cp1251-bytes(string pos end)
247 (declare (optimize speed (safety 0))
248 (type simple-string string)
249 (type array-range pos end))
250 (get-latin-bytes #'code->cp1251-mapper :cp1251 string pos end))
252 (defun string->cp1251 (string sstart send null-padding)
253 (declare (optimize speed (safety 0))
254 (type simple-string string)
255 (type array-range sstart send))
256 (values (string->latin% string sstart send #'get-cp1251-bytes null-padding)))
258 (defmacro define-cp1251->string* (accessor type)
259 (declare (ignore type))
260 (let ((name (make-od-name 'cp1251->string* accessor)))
262 (defun ,name (string sstart send array astart aend)
263 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1251->code-mapper)))))
265 (instantiate-octets-definition define-cp1251->string*)
267 (defmacro define-cp1251->string (accessor type)
268 (declare (ignore type))
269 `(defun ,(make-od-name 'cp1251->string accessor) (array astart aend)
270 (,(make-od-name 'latin->string accessor) array astart aend #'cp1251->code-mapper)))
272 (instantiate-octets-definition define-cp1251->string)
274 (push '((:cp1251 :|cp1251| :windows-1251 :|windows-1251|)
275 cp1251->string-aref string->cp1251)
276 *external-format-functions*)
278 (define-external-format (:cp1251 :|cp1251| :windows-1251 :|windows-1251|)
280 (let ((cp1251-byte (code->cp1251-mapper bits)))
282 (setf (sap-ref-8 sap tail) cp1251-byte)
283 (stream-encoding-error-and-handle stream bits)))
284 (let ((code (cp1251->code-mapper byte)))
287 (stream-decoding-error stream byte)))) ;; TODO -- error check
289 (define-unibyte-mapper cp1252->code-mapper code->cp1252-mapper
290 (#x80 #x20AC) ; EURO SIGN
292 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
293 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
294 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
295 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
296 (#x86 #x2020) ; DAGGER
297 (#x87 #x2021) ; DOUBLE DAGGER
298 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
299 (#x89 #x2030) ; PER MILLE SIGN
300 (#x8A #x0160) ; LATIN CAPITAL LETTER S WITH CARON
301 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
302 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
304 (#x8E #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
307 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
308 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
309 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
310 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
311 (#x95 #x2022) ; BULLET
312 (#x96 #x2013) ; EN DASH
313 (#x97 #x2014) ; EM DASH
314 (#x98 #x02DC) ; SMALL TILDE
315 (#x99 #x2122) ; TRADE MARK SIGN
316 (#x9A #x0161) ; LATIN SMALL LETTER S WITH CARON
317 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
318 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
320 (#x9E #x017E) ; LATIN SMALL LETTER Z WITH CARON
321 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
324 (declaim (inline get-cp1252-bytes))
325 (defun get-cp1252-bytes(string pos end)
326 (declare (optimize speed (safety 0))
327 (type simple-string string)
328 (type array-range pos end))
329 (get-latin-bytes #'code->cp1252-mapper :cp1252 string pos end))
331 (defun string->cp1252 (string sstart send null-padding)
332 (declare (optimize speed (safety 0))
333 (type simple-string string)
334 (type array-range sstart send))
335 (values (string->latin% string sstart send #'get-cp1252-bytes null-padding)))
337 (defmacro define-cp1252->string* (accessor type)
338 (declare (ignore type))
339 (let ((name (make-od-name 'cp1252->string* accessor)))
341 (defun ,name (string sstart send array astart aend)
342 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1252->code-mapper)))))
344 (instantiate-octets-definition define-cp1252->string*)
346 (defmacro define-cp1252->string (accessor type)
347 (declare (ignore type))
348 `(defun ,(make-od-name 'cp1252->string accessor) (array astart aend)
349 (,(make-od-name 'latin->string accessor) array astart aend #'cp1252->code-mapper)))
351 (instantiate-octets-definition define-cp1252->string)
353 (push '((:cp1252 :|cp1252| :windows-1252 :|windows-1252|)
354 cp1252->string-aref string->cp1252)
355 *external-format-functions*)
357 (define-external-format (:cp1252 :|cp1252| :windows-1252 :|windows-1252|)
359 (let ((cp1252-byte (code->cp1252-mapper bits)))
361 (setf (sap-ref-8 sap tail) cp1252-byte)
362 (stream-encoding-error-and-handle stream bits)))
363 (let ((code (cp1252->code-mapper byte)))
366 (stream-decoding-error stream byte)))) ;; TODO -- error check
368 (define-unibyte-mapper cp1253->code-mapper code->cp1253-mapper
369 (#x80 #x20AC) ; EURO SIGN
371 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
372 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
373 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
374 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
375 (#x86 #x2020) ; DAGGER
376 (#x87 #x2021) ; DOUBLE DAGGER
378 (#x89 #x2030) ; PER MILLE SIGN
380 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
386 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
387 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
388 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
389 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
390 (#x95 #x2022) ; BULLET
391 (#x96 #x2013) ; EN DASH
392 (#x97 #x2014) ; EM DASH
394 (#x99 #x2122) ; TRADE MARK SIGN
396 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
401 (#xA1 #x0385) ; GREEK DIALYTIKA TONOS
402 (#xA2 #x0386) ; GREEK CAPITAL LETTER ALPHA WITH TONOS
404 (#xAF #x2015) ; HORIZONTAL BAR
405 (#xB4 #x0384) ; GREEK TONOS
406 (#xB8 #x0388) ; GREEK CAPITAL LETTER EPSILON WITH TONOS
407 (#xB9 #x0389) ; GREEK CAPITAL LETTER ETA WITH TONOS
408 (#xBA #x038A) ; GREEK CAPITAL LETTER IOTA WITH TONOS
409 (#xBC #x038C) ; GREEK CAPITAL LETTER OMICRON WITH TONOS
410 (#xBE #x038E) ; GREEK CAPITAL LETTER UPSILON WITH TONOS
411 (#xBF #x038F) ; GREEK CAPITAL LETTER OMEGA WITH TONOS
412 (#xC0 #x0390) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
413 (#xC1 #x0391) ; GREEK CAPITAL LETTER ALPHA
414 (#xC2 #x0392) ; GREEK CAPITAL LETTER BETA
415 (#xC3 #x0393) ; GREEK CAPITAL LETTER GAMMA
416 (#xC4 #x0394) ; GREEK CAPITAL LETTER DELTA
417 (#xC5 #x0395) ; GREEK CAPITAL LETTER EPSILON
418 (#xC6 #x0396) ; GREEK CAPITAL LETTER ZETA
419 (#xC7 #x0397) ; GREEK CAPITAL LETTER ETA
420 (#xC8 #x0398) ; GREEK CAPITAL LETTER THETA
421 (#xC9 #x0399) ; GREEK CAPITAL LETTER IOTA
422 (#xCA #x039A) ; GREEK CAPITAL LETTER KAPPA
423 (#xCB #x039B) ; GREEK CAPITAL LETTER LAMDA
424 (#xCC #x039C) ; GREEK CAPITAL LETTER MU
425 (#xCD #x039D) ; GREEK CAPITAL LETTER NU
426 (#xCE #x039E) ; GREEK CAPITAL LETTER XI
427 (#xCF #x039F) ; GREEK CAPITAL LETTER OMICRON
428 (#xD0 #x03A0) ; GREEK CAPITAL LETTER PI
429 (#xD1 #x03A1) ; GREEK CAPITAL LETTER RHO
431 (#xD3 #x03A3) ; GREEK CAPITAL LETTER SIGMA
432 (#xD4 #x03A4) ; GREEK CAPITAL LETTER TAU
433 (#xD5 #x03A5) ; GREEK CAPITAL LETTER UPSILON
434 (#xD6 #x03A6) ; GREEK CAPITAL LETTER PHI
435 (#xD7 #x03A7) ; GREEK CAPITAL LETTER CHI
436 (#xD8 #x03A8) ; GREEK CAPITAL LETTER PSI
437 (#xD9 #x03A9) ; GREEK CAPITAL LETTER OMEGA
438 (#xDA #x03AA) ; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
439 (#xDB #x03AB) ; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
440 (#xDC #x03AC) ; GREEK SMALL LETTER ALPHA WITH TONOS
441 (#xDD #x03AD) ; GREEK SMALL LETTER EPSILON WITH TONOS
442 (#xDE #x03AE) ; GREEK SMALL LETTER ETA WITH TONOS
443 (#xDF #x03AF) ; GREEK SMALL LETTER IOTA WITH TONOS
444 (#xE0 #x03B0) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
445 (#xE1 #x03B1) ; GREEK SMALL LETTER ALPHA
446 (#xE2 #x03B2) ; GREEK SMALL LETTER BETA
447 (#xE3 #x03B3) ; GREEK SMALL LETTER GAMMA
448 (#xE4 #x03B4) ; GREEK SMALL LETTER DELTA
449 (#xE5 #x03B5) ; GREEK SMALL LETTER EPSILON
450 (#xE6 #x03B6) ; GREEK SMALL LETTER ZETA
451 (#xE7 #x03B7) ; GREEK SMALL LETTER ETA
452 (#xE8 #x03B8) ; GREEK SMALL LETTER THETA
453 (#xE9 #x03B9) ; GREEK SMALL LETTER IOTA
454 (#xEA #x03BA) ; GREEK SMALL LETTER KAPPA
455 (#xEB #x03BB) ; GREEK SMALL LETTER LAMDA
456 (#xEC #x03BC) ; GREEK SMALL LETTER MU
457 (#xED #x03BD) ; GREEK SMALL LETTER NU
458 (#xEE #x03BE) ; GREEK SMALL LETTER XI
459 (#xEF #x03BF) ; GREEK SMALL LETTER OMICRON
460 (#xF0 #x03C0) ; GREEK SMALL LETTER PI
461 (#xF1 #x03C1) ; GREEK SMALL LETTER RHO
462 (#xF2 #x03C2) ; GREEK SMALL LETTER FINAL SIGMA
463 (#xF3 #x03C3) ; GREEK SMALL LETTER SIGMA
464 (#xF4 #x03C4) ; GREEK SMALL LETTER TAU
465 (#xF5 #x03C5) ; GREEK SMALL LETTER UPSILON
466 (#xF6 #x03C6) ; GREEK SMALL LETTER PHI
467 (#xF7 #x03C7) ; GREEK SMALL LETTER CHI
468 (#xF8 #x03C8) ; GREEK SMALL LETTER PSI
469 (#xF9 #x03C9) ; GREEK SMALL LETTER OMEGA
470 (#xFA #x03CA) ; GREEK SMALL LETTER IOTA WITH DIALYTIKA
471 (#xFB #x03CB) ; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
472 (#xFC #x03CC) ; GREEK SMALL LETTER OMICRON WITH TONOS
473 (#xFD #x03CD) ; GREEK SMALL LETTER UPSILON WITH TONOS
474 (#xFE #x03CE) ; GREEK SMALL LETTER OMEGA WITH TONOS
478 (declaim (inline get-cp1253-bytes))
479 (defun get-cp1253-bytes(string pos end)
480 (declare (optimize speed (safety 0))
481 (type simple-string string)
482 (type array-range pos end))
483 (get-latin-bytes #'code->cp1253-mapper :cp1253 string pos end))
485 (defun string->cp1253 (string sstart send null-padding)
486 (declare (optimize speed (safety 0))
487 (type simple-string string)
488 (type array-range sstart send))
489 (values (string->latin% string sstart send #'get-cp1253-bytes null-padding)))
491 (defmacro define-cp1253->string* (accessor type)
492 (declare (ignore type))
493 (let ((name (make-od-name 'cp1253->string* accessor)))
495 (defun ,name (string sstart send array astart aend)
496 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1253->code-mapper)))))
498 (instantiate-octets-definition define-cp1253->string*)
500 (defmacro define-cp1253->string (accessor type)
501 (declare (ignore type))
502 `(defun ,(make-od-name 'cp1253->string accessor) (array astart aend)
503 (,(make-od-name 'latin->string accessor) array astart aend #'cp1253->code-mapper)))
505 (instantiate-octets-definition define-cp1253->string)
507 (push '((:cp1253 :|cp1253| :windows-1253 :|windows-1253|)
508 cp1253->string-aref string->cp1253)
509 *external-format-functions*)
511 (define-external-format (:cp1253 :|cp1253| :windows-1253 :|windows-1253|)
513 (let ((cp1253-byte (code->cp1253-mapper bits)))
515 (setf (sap-ref-8 sap tail) cp1253-byte)
516 (stream-encoding-error-and-handle stream bits)))
517 (let ((code (cp1253->code-mapper byte)))
520 (stream-decoding-error stream byte)))) ;; TODO -- error check
522 (define-unibyte-mapper cp1254->code-mapper code->cp1254-mapper
523 (#x80 #x20AC) ; EURO SIGN
525 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
526 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
527 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
528 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
529 (#x86 #x2020) ; DAGGER
530 (#x87 #x2021) ; DOUBLE DAGGER
531 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
532 (#x89 #x2030) ; PER MILLE SIGN
533 (#x8A #x0160) ; LATIN CAPITAL LETTER S WITH CARON
534 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
535 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
540 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
541 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
542 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
543 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
544 (#x95 #x2022) ; BULLET
545 (#x96 #x2013) ; EN DASH
546 (#x97 #x2014) ; EM DASH
547 (#x98 #x02DC) ; SMALL TILDE
548 (#x99 #x2122) ; TRADE MARK SIGN
549 (#x9A #x0161) ; LATIN SMALL LETTER S WITH CARON
550 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
551 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
554 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
555 (#xD0 #x011E) ; LATIN CAPITAL LETTER G WITH BREVE
556 (#xDD #x0130) ; LATIN CAPITAL LETTER I WITH DOT ABOVE
557 (#xDE #x015E) ; LATIN CAPITAL LETTER S WITH CEDILLA
558 (#xF0 #x011F) ; LATIN SMALL LETTER G WITH BREVE
559 (#xFD #x0131) ; LATIN SMALL LETTER DOTLESS I
560 (#xFE #x015F) ; LATIN SMALL LETTER S WITH CEDILLA
563 (declaim (inline get-cp1254-bytes))
564 (defun get-cp1254-bytes(string pos end)
565 (declare (optimize speed (safety 0))
566 (type simple-string string)
567 (type array-range pos end))
568 (get-latin-bytes #'code->cp1254-mapper :cp1254 string pos end))
570 (defun string->cp1254 (string sstart send null-padding)
571 (declare (optimize speed (safety 0))
572 (type simple-string string)
573 (type array-range sstart send))
574 (values (string->latin% string sstart send #'get-cp1254-bytes null-padding)))
576 (defmacro define-cp1254->string* (accessor type)
577 (declare (ignore type))
578 (let ((name (make-od-name 'cp1254->string* accessor)))
580 (defun ,name (string sstart send array astart aend)
581 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1254->code-mapper)))))
583 (instantiate-octets-definition define-cp1254->string*)
585 (defmacro define-cp1254->string (accessor type)
586 (declare (ignore type))
587 `(defun ,(make-od-name 'cp1254->string accessor) (array astart aend)
588 (,(make-od-name 'latin->string accessor) array astart aend #'cp1254->code-mapper)))
590 (instantiate-octets-definition define-cp1254->string)
592 (push '((:cp1254 :|cp1254| :windows-1254 :|windows-1254|)
593 cp1254->string-aref string->cp1254)
594 *external-format-functions*)
596 (define-external-format (:cp1254 :|cp1254|)
598 (let ((cp1254-byte (code->cp1254-mapper bits)))
600 (setf (sap-ref-8 sap tail) cp1254-byte)
601 (stream-encoding-error-and-handle stream bits)))
602 (let ((code (cp1254->code-mapper byte)))
605 (stream-decoding-error stream byte)))) ;; TODO -- error check
607 (define-unibyte-mapper cp1255->code-mapper code->cp1255-mapper
608 (#x80 #x20AC) ; EURO SIGN
610 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
611 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
612 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
613 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
614 (#x86 #x2020) ; DAGGER
615 (#x87 #x2021) ; DOUBLE DAGGER
616 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
617 (#x89 #x2030) ; PER MILLE SIGN
619 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
625 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
626 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
627 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
628 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
629 (#x95 #x2022) ; BULLET
630 (#x96 #x2013) ; EN DASH
631 (#x97 #x2014) ; EM DASH
632 (#x98 #x02DC) ; SMALL TILDE
633 (#x99 #x2122) ; TRADE MARK SIGN
635 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
640 (#xA4 #x20AA) ; NEW SHEQEL SIGN
641 (#xAA #x00D7) ; MULTIPLICATION SIGN
642 (#xBA #x00F7) ; DIVISION SIGN
643 (#xC0 #x05B0) ; HEBREW POINT SHEVA
644 (#xC1 #x05B1) ; HEBREW POINT HATAF SEGOL
645 (#xC2 #x05B2) ; HEBREW POINT HATAF PATAH
646 (#xC3 #x05B3) ; HEBREW POINT HATAF QAMATS
647 (#xC4 #x05B4) ; HEBREW POINT HIRIQ
648 (#xC5 #x05B5) ; HEBREW POINT TSERE
649 (#xC6 #x05B6) ; HEBREW POINT SEGOL
650 (#xC7 #x05B7) ; HEBREW POINT PATAH
651 (#xC8 #x05B8) ; HEBREW POINT QAMATS
652 (#xC9 #x05B9) ; HEBREW POINT HOLAM
654 (#xCB #x05BB) ; HEBREW POINT QUBUTS
655 (#xCC #x05BC) ; HEBREW POINT DAGESH OR MAPIQ
656 (#xCD #x05BD) ; HEBREW POINT METEG
657 (#xCE #x05BE) ; HEBREW PUNCTUATION MAQAF
658 (#xCF #x05BF) ; HEBREW POINT RAFE
659 (#xD0 #x05C0) ; HEBREW PUNCTUATION PASEQ
660 (#xD1 #x05C1) ; HEBREW POINT SHIN DOT
661 (#xD2 #x05C2) ; HEBREW POINT SIN DOT
662 (#xD3 #x05C3) ; HEBREW PUNCTUATION SOF PASUQ
663 (#xD4 #x05F0) ; HEBREW LIGATURE YIDDISH DOUBLE VAV
664 (#xD5 #x05F1) ; HEBREW LIGATURE YIDDISH VAV YOD
665 (#xD6 #x05F2) ; HEBREW LIGATURE YIDDISH DOUBLE YOD
666 (#xD7 #x05F3) ; HEBREW PUNCTUATION GERESH
667 (#xD8 #x05F4) ; HEBREW PUNCTUATION GERSHAYIM
675 (#xE0 #x05D0) ; HEBREW LETTER ALEF
676 (#xE1 #x05D1) ; HEBREW LETTER BET
677 (#xE2 #x05D2) ; HEBREW LETTER GIMEL
678 (#xE3 #x05D3) ; HEBREW LETTER DALET
679 (#xE4 #x05D4) ; HEBREW LETTER HE
680 (#xE5 #x05D5) ; HEBREW LETTER VAV
681 (#xE6 #x05D6) ; HEBREW LETTER ZAYIN
682 (#xE7 #x05D7) ; HEBREW LETTER HET
683 (#xE8 #x05D8) ; HEBREW LETTER TET
684 (#xE9 #x05D9) ; HEBREW LETTER YOD
685 (#xEA #x05DA) ; HEBREW LETTER FINAL KAF
686 (#xEB #x05DB) ; HEBREW LETTER KAF
687 (#xEC #x05DC) ; HEBREW LETTER LAMED
688 (#xED #x05DD) ; HEBREW LETTER FINAL MEM
689 (#xEE #x05DE) ; HEBREW LETTER MEM
690 (#xEF #x05DF) ; HEBREW LETTER FINAL NUN
691 (#xF0 #x05E0) ; HEBREW LETTER NUN
692 (#xF1 #x05E1) ; HEBREW LETTER SAMEKH
693 (#xF2 #x05E2) ; HEBREW LETTER AYIN
694 (#xF3 #x05E3) ; HEBREW LETTER FINAL PE
695 (#xF4 #x05E4) ; HEBREW LETTER PE
696 (#xF5 #x05E5) ; HEBREW LETTER FINAL TSADI
697 (#xF6 #x05E6) ; HEBREW LETTER TSADI
698 (#xF7 #x05E7) ; HEBREW LETTER QOF
699 (#xF8 #x05E8) ; HEBREW LETTER RESH
700 (#xF9 #x05E9) ; HEBREW LETTER SHIN
701 (#xFA #x05EA) ; HEBREW LETTER TAV
704 (#xFD #x200E) ; LEFT-TO-RIGHT MARK
705 (#xFE #x200F) ; RIGHT-TO-LEFT MARK
709 (declaim (inline get-cp1255-bytes))
710 (defun get-cp1255-bytes(string pos end)
711 (declare (optimize speed (safety 0))
712 (type simple-string string)
713 (type array-range pos end))
714 (get-latin-bytes #'code->cp1255-mapper :cp1255 string pos end))
716 (defun string->cp1255 (string sstart send null-padding)
717 (declare (optimize speed (safety 0))
718 (type simple-string string)
719 (type array-range sstart send))
720 (values (string->latin% string sstart send #'get-cp1255-bytes null-padding)))
722 (defmacro define-cp1255->string* (accessor type)
723 (declare (ignore type))
724 (let ((name (make-od-name 'cp1255->string* accessor)))
726 (defun ,name (string sstart send array astart aend)
727 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1255->code-mapper)))))
729 (instantiate-octets-definition define-cp1255->string*)
731 (defmacro define-cp1255->string (accessor type)
732 (declare (ignore type))
733 `(defun ,(make-od-name 'cp1255->string accessor) (array astart aend)
734 (,(make-od-name 'latin->string accessor) array astart aend #'cp1255->code-mapper)))
736 (instantiate-octets-definition define-cp1255->string)
738 (push '((:cp1255 :|cp1255| :windows-1255 :|windows-1255|)
739 cp1255->string-aref string->cp1255)
740 *external-format-functions*)
742 (define-external-format (:cp1255 :|cp1255| :windows-1255 :|windows-1255|)
744 (let ((cp1255-byte (code->cp1255-mapper bits)))
746 (setf (sap-ref-8 sap tail) cp1255-byte)
747 (stream-encoding-error-and-handle stream bits)))
748 (let ((code (cp1255->code-mapper byte)))
751 (stream-decoding-error stream byte)))) ;; TODO -- error check
753 (define-unibyte-mapper cp1256->code-mapper code->cp1256-mapper
754 (#x80 #x20AC) ; EURO SIGN
755 (#x81 #x067E) ; ARABIC LETTER PEH
756 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
757 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
758 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
759 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
760 (#x86 #x2020) ; DAGGER
761 (#x87 #x2021) ; DOUBLE DAGGER
762 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
763 (#x89 #x2030) ; PER MILLE SIGN
765 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
766 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
767 (#x8D #x0686) ; ARABIC LETTER TCHEH
768 (#x8E #x0698) ; ARABIC LETTER JEH
770 (#x90 #x06AF) ; ARABIC LETTER GAF
771 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
772 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
773 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
774 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
775 (#x95 #x2022) ; BULLET
776 (#x96 #x2013) ; EN DASH
777 (#x97 #x2014) ; EM DASH
779 (#x99 #x2122) ; TRADE MARK SIGN
781 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
782 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
783 (#x9D #x200C) ; ZERO WIDTH NON-JOINER
784 (#x9E #x200D) ; ZERO WIDTH JOINER
786 (#xA1 #x060C) ; ARABIC COMMA
788 (#xBA #x061B) ; ARABIC SEMICOLON
789 (#xBF #x061F) ; ARABIC QUESTION MARK
791 (#xC1 #x0621) ; ARABIC LETTER HAMZA
792 (#xC2 #x0622) ; ARABIC LETTER ALEF WITH MADDA ABOVE
793 (#xC3 #x0623) ; ARABIC LETTER ALEF WITH HAMZA ABOVE
794 (#xC4 #x0624) ; ARABIC LETTER WAW WITH HAMZA ABOVE
795 (#xC5 #x0625) ; ARABIC LETTER ALEF WITH HAMZA BELOW
796 (#xC6 #x0626) ; ARABIC LETTER YEH WITH HAMZA ABOVE
797 (#xC7 #x0627) ; ARABIC LETTER ALEF
798 (#xC8 #x0628) ; ARABIC LETTER BEH
799 (#xC9 #x0629) ; ARABIC LETTER TEH MARBUTA
800 (#xCA #x062A) ; ARABIC LETTER TEH
801 (#xCB #x062B) ; ARABIC LETTER THEH
802 (#xCC #x062C) ; ARABIC LETTER JEEM
803 (#xCD #x062D) ; ARABIC LETTER HAH
804 (#xCE #x062E) ; ARABIC LETTER KHAH
805 (#xCF #x062F) ; ARABIC LETTER DAL
806 (#xD0 #x0630) ; ARABIC LETTER THAL
807 (#xD1 #x0631) ; ARABIC LETTER REH
808 (#xD2 #x0632) ; ARABIC LETTER ZAIN
809 (#xD3 #x0633) ; ARABIC LETTER SEEN
810 (#xD4 #x0634) ; ARABIC LETTER SHEEN
811 (#xD5 #x0635) ; ARABIC LETTER SAD
812 (#xD6 #x0636) ; ARABIC LETTER DAD
813 (#xD8 #x0637) ; ARABIC LETTER TAH
814 (#xD9 #x0638) ; ARABIC LETTER ZAH
815 (#xDA #x0639) ; ARABIC LETTER AIN
816 (#xDB #x063A) ; ARABIC LETTER GHAIN
817 (#xDC #x0640) ; ARABIC TATWEEL
818 (#xDD #x0641) ; ARABIC LETTER FEH
819 (#xDE #x0642) ; ARABIC LETTER QAF
820 (#xDF #x0643) ; ARABIC LETTER KAF
821 (#xE1 #x0644) ; ARABIC LETTER LAM
822 (#xE3 #x0645) ; ARABIC LETTER MEEM
823 (#xE4 #x0646) ; ARABIC LETTER NOON
824 (#xE5 #x0647) ; ARABIC LETTER HEH
825 (#xE6 #x0648) ; ARABIC LETTER WAW
826 (#xEC #x0649) ; ARABIC LETTER ALEF MAKSURA
827 (#xED #x064A) ; ARABIC LETTER YEH
828 (#xF0 #x064B) ; ARABIC FATHATAN
829 (#xF1 #x064C) ; ARABIC DAMMATAN
830 (#xF2 #x064D) ; ARABIC KASRATAN
831 (#xF3 #x064E) ; ARABIC FATHA
832 (#xF5 #x064F) ; ARABIC DAMMA
833 (#xF6 #x0650) ; ARABIC KASRA
834 (#xF8 #x0651) ; ARABIC SHADDA
835 (#xFA #x0652) ; ARABIC SUKUN
836 (#xFD #x200E) ; LEFT-TO-RIGHT MARK
837 (#xFE #x200F) ; RIGHT-TO-LEFT MARK
841 (declaim (inline get-cp1256-bytes))
842 (defun get-cp1256-bytes(string pos end)
843 (declare (optimize speed (safety 0))
844 (type simple-string string)
845 (type array-range pos end))
846 (get-latin-bytes #'code->cp1256-mapper :cp1256 string pos end))
848 (defun string->cp1256 (string sstart send null-padding)
849 (declare (optimize speed (safety 0))
850 (type simple-string string)
851 (type array-range sstart send))
852 (values (string->latin% string sstart send #'get-cp1256-bytes null-padding)))
854 (defmacro define-cp1256->string* (accessor type)
855 (declare (ignore type))
856 (let ((name (make-od-name 'cp1256->string* accessor)))
858 (defun ,name (string sstart send array astart aend)
859 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1256->code-mapper)))))
861 (instantiate-octets-definition define-cp1256->string*)
863 (defmacro define-cp1256->string (accessor type)
864 (declare (ignore type))
865 `(defun ,(make-od-name 'cp1256->string accessor) (array astart aend)
866 (,(make-od-name 'latin->string accessor) array astart aend #'cp1256->code-mapper)))
868 (instantiate-octets-definition define-cp1256->string)
870 (push '((:cp1256 :|cp1256| :windows-1256 :|windows-1256|)
871 cp1256->string-aref string->cp1256)
872 *external-format-functions*)
874 (define-external-format (:cp1256 :|cp1256|)
876 (let ((cp1256-byte (code->cp1256-mapper bits)))
878 (setf (sap-ref-8 sap tail) cp1256-byte)
879 (stream-encoding-error-and-handle stream bits)))
880 (let ((code (cp1256->code-mapper byte)))
883 (stream-decoding-error stream byte)))) ;; TODO -- error check
885 (define-unibyte-mapper cp1257->code-mapper code->cp1257-mapper
886 (#x80 #x20AC) ; EURO SIGN
888 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
890 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
891 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
892 (#x86 #x2020) ; DAGGER
893 (#x87 #x2021) ; DOUBLE DAGGER
895 (#x89 #x2030) ; PER MILLE SIGN
897 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
899 (#x8D #x00A8) ; DIAERESIS
900 (#x8E #x02C7) ; CARON
901 (#x8F #x00B8) ; CEDILLA
903 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
904 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
905 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
906 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
907 (#x95 #x2022) ; BULLET
908 (#x96 #x2013) ; EN DASH
909 (#x97 #x2014) ; EM DASH
911 (#x99 #x2122) ; TRADE MARK SIGN
913 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
915 (#x9D #x00AF) ; MACRON
916 (#x9E #x02DB) ; OGONEK
920 (#xA8 #x00D8) ; LATIN CAPITAL LETTER O WITH STROKE
921 (#xAA #x0156) ; LATIN CAPITAL LETTER R WITH CEDILLA
922 (#xAF #x00C6) ; LATIN CAPITAL LETTER AE
923 (#xB8 #x00F8) ; LATIN SMALL LETTER O WITH STROKE
924 (#xBA #x0157) ; LATIN SMALL LETTER R WITH CEDILLA
925 (#xBF #x00E6) ; LATIN SMALL LETTER AE
926 (#xC0 #x0104) ; LATIN CAPITAL LETTER A WITH OGONEK
927 (#xC1 #x012E) ; LATIN CAPITAL LETTER I WITH OGONEK
928 (#xC2 #x0100) ; LATIN CAPITAL LETTER A WITH MACRON
929 (#xC3 #x0106) ; LATIN CAPITAL LETTER C WITH ACUTE
930 (#xC6 #x0118) ; LATIN CAPITAL LETTER E WITH OGONEK
931 (#xC7 #x0112) ; LATIN CAPITAL LETTER E WITH MACRON
932 (#xC8 #x010C) ; LATIN CAPITAL LETTER C WITH CARON
933 (#xCA #x0179) ; LATIN CAPITAL LETTER Z WITH ACUTE
934 (#xCB #x0116) ; LATIN CAPITAL LETTER E WITH DOT ABOVE
935 (#xCC #x0122) ; LATIN CAPITAL LETTER G WITH CEDILLA
936 (#xCD #x0136) ; LATIN CAPITAL LETTER K WITH CEDILLA
937 (#xCE #x012A) ; LATIN CAPITAL LETTER I WITH MACRON
938 (#xCF #x013B) ; LATIN CAPITAL LETTER L WITH CEDILLA
939 (#xD0 #x0160) ; LATIN CAPITAL LETTER S WITH CARON
940 (#xD1 #x0143) ; LATIN CAPITAL LETTER N WITH ACUTE
941 (#xD2 #x0145) ; LATIN CAPITAL LETTER N WITH CEDILLA
942 (#xD4 #x014C) ; LATIN CAPITAL LETTER O WITH MACRON
943 (#xD8 #x0172) ; LATIN CAPITAL LETTER U WITH OGONEK
944 (#xD9 #x0141) ; LATIN CAPITAL LETTER L WITH STROKE
945 (#xDA #x015A) ; LATIN CAPITAL LETTER S WITH ACUTE
946 (#xDB #x016A) ; LATIN CAPITAL LETTER U WITH MACRON
947 (#xDD #x017B) ; LATIN CAPITAL LETTER Z WITH DOT ABOVE
948 (#xDE #x017D) ; LATIN CAPITAL LETTER Z WITH CARON
949 (#xE0 #x0105) ; LATIN SMALL LETTER A WITH OGONEK
950 (#xE1 #x012F) ; LATIN SMALL LETTER I WITH OGONEK
951 (#xE2 #x0101) ; LATIN SMALL LETTER A WITH MACRON
952 (#xE3 #x0107) ; LATIN SMALL LETTER C WITH ACUTE
953 (#xE6 #x0119) ; LATIN SMALL LETTER E WITH OGONEK
954 (#xE7 #x0113) ; LATIN SMALL LETTER E WITH MACRON
955 (#xE8 #x010D) ; LATIN SMALL LETTER C WITH CARON
956 (#xEA #x017A) ; LATIN SMALL LETTER Z WITH ACUTE
957 (#xEB #x0117) ; LATIN SMALL LETTER E WITH DOT ABOVE
958 (#xEC #x0123) ; LATIN SMALL LETTER G WITH CEDILLA
959 (#xED #x0137) ; LATIN SMALL LETTER K WITH CEDILLA
960 (#xEE #x012B) ; LATIN SMALL LETTER I WITH MACRON
961 (#xEF #x013C) ; LATIN SMALL LETTER L WITH CEDILLA
962 (#xF0 #x0161) ; LATIN SMALL LETTER S WITH CARON
963 (#xF1 #x0144) ; LATIN SMALL LETTER N WITH ACUTE
964 (#xF2 #x0146) ; LATIN SMALL LETTER N WITH CEDILLA
965 (#xF4 #x014D) ; LATIN SMALL LETTER O WITH MACRON
966 (#xF8 #x0173) ; LATIN SMALL LETTER U WITH OGONEK
967 (#xF9 #x0142) ; LATIN SMALL LETTER L WITH STROKE
968 (#xFA #x015B) ; LATIN SMALL LETTER S WITH ACUTE
969 (#xFB #x016B) ; LATIN SMALL LETTER U WITH MACRON
970 (#xFD #x017C) ; LATIN SMALL LETTER Z WITH DOT ABOVE
971 (#xFE #x017E) ; LATIN SMALL LETTER Z WITH CARON
972 (#xFF #x02D9) ; DOT ABOVE
975 (declaim (inline get-cp1257-bytes))
976 (defun get-cp1257-bytes(string pos end)
977 (declare (optimize speed (safety 0))
978 (type simple-string string)
979 (type array-range pos end))
980 (get-latin-bytes #'code->cp1257-mapper :cp1257 string pos end))
982 (defun string->cp1257 (string sstart send null-padding)
983 (declare (optimize speed (safety 0))
984 (type simple-string string)
985 (type array-range sstart send))
986 (values (string->latin% string sstart send #'get-cp1257-bytes null-padding)))
988 (defmacro define-cp1257->string* (accessor type)
989 (declare (ignore type))
990 (let ((name (make-od-name 'cp1257->string* accessor)))
992 (defun ,name (string sstart send array astart aend)
993 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1257->code-mapper)))))
995 (instantiate-octets-definition define-cp1257->string*)
997 (defmacro define-cp1257->string (accessor type)
998 (declare (ignore type))
999 `(defun ,(make-od-name 'cp1257->string accessor) (array astart aend)
1000 (,(make-od-name 'latin->string accessor) array astart aend #'cp1257->code-mapper)))
1002 (instantiate-octets-definition define-cp1257->string)
1004 (push '((:cp1257 :|cp1257| :windows-1257 :|windows-1257|)
1005 cp1257->string-aref string->cp1257)
1006 *external-format-functions*)
1008 (define-external-format (:cp1257 :|cp1257| :windows-1257 :|windows-1257|)
1010 (let ((cp1257-byte (code->cp1257-mapper bits)))
1012 (setf (sap-ref-8 sap tail) cp1257-byte)
1013 (stream-encoding-error-and-handle stream bits)))
1014 (let ((code (cp1257->code-mapper byte)))
1017 (stream-decoding-error stream byte)))) ;; TODO -- error check
1019 (define-unibyte-mapper cp1258->code-mapper code->cp1258-mapper
1020 (#x80 #x20AC) ; EURO SIGN
1022 (#x82 #x201A) ; SINGLE LOW-9 QUOTATION MARK
1023 (#x83 #x0192) ; LATIN SMALL LETTER F WITH HOOK
1024 (#x84 #x201E) ; DOUBLE LOW-9 QUOTATION MARK
1025 (#x85 #x2026) ; HORIZONTAL ELLIPSIS
1026 (#x86 #x2020) ; DAGGER
1027 (#x87 #x2021) ; DOUBLE DAGGER
1028 (#x88 #x02C6) ; MODIFIER LETTER CIRCUMFLEX ACCENT
1029 (#x89 #x2030) ; PER MILLE SIGN
1031 (#x8B #x2039) ; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
1032 (#x8C #x0152) ; LATIN CAPITAL LIGATURE OE
1037 (#x91 #x2018) ; LEFT SINGLE QUOTATION MARK
1038 (#x92 #x2019) ; RIGHT SINGLE QUOTATION MARK
1039 (#x93 #x201C) ; LEFT DOUBLE QUOTATION MARK
1040 (#x94 #x201D) ; RIGHT DOUBLE QUOTATION MARK
1041 (#x95 #x2022) ; BULLET
1042 (#x96 #x2013) ; EN DASH
1043 (#x97 #x2014) ; EM DASH
1044 (#x98 #x02DC) ; SMALL TILDE
1045 (#x99 #x2122) ; TRADE MARK SIGN
1047 (#x9B #x203A) ; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
1048 (#x9C #x0153) ; LATIN SMALL LIGATURE OE
1051 (#x9F #x0178) ; LATIN CAPITAL LETTER Y WITH DIAERESIS
1052 (#xC3 #x0102) ; LATIN CAPITAL LETTER A WITH BREVE
1053 (#xCC #x0300) ; COMBINING GRAVE ACCENT
1054 (#xD0 #x0110) ; LATIN CAPITAL LETTER D WITH STROKE
1055 (#xD2 #x0309) ; COMBINING HOOK ABOVE
1056 (#xD5 #x01A0) ; LATIN CAPITAL LETTER O WITH HORN
1057 (#xDD #x01AF) ; LATIN CAPITAL LETTER U WITH HORN
1058 (#xDE #x0303) ; COMBINING TILDE
1059 (#xE3 #x0103) ; LATIN SMALL LETTER A WITH BREVE
1060 (#xEC #x0301) ; COMBINING ACUTE ACCENT
1061 (#xF0 #x0111) ; LATIN SMALL LETTER D WITH STROKE
1062 (#xF2 #x0323) ; COMBINING DOT BELOW
1063 (#xF5 #x01A1) ; LATIN SMALL LETTER O WITH HORN
1064 (#xFD #x01B0) ; LATIN SMALL LETTER U WITH HORN
1065 (#xFE #x20AB) ; DONG SIGN
1068 (declaim (inline get-cp1258-bytes))
1069 (defun get-cp1258-bytes(string pos end)
1070 (declare (optimize speed (safety 0))
1071 (type simple-string string)
1072 (type array-range pos end))
1073 (get-latin-bytes #'code->cp1258-mapper :cp1258 string pos end))
1075 (defun string->cp1258 (string sstart send null-padding)
1076 (declare (optimize speed (safety 0))
1077 (type simple-string string)
1078 (type array-range sstart send))
1079 (values (string->latin% string sstart send #'get-cp1258-bytes null-padding)))
1081 (defmacro define-cp1258->string* (accessor type)
1082 (declare (ignore type))
1083 (let ((name (make-od-name 'cp1258->string* accessor)))
1085 (defun ,name (string sstart send array astart aend)
1086 (,(make-od-name 'latin->string* accessor) string sstart send array astart aend #'cp1258->code-mapper)))))
1088 (instantiate-octets-definition define-cp1258->string*)
1090 (defmacro define-cp1258->string (accessor type)
1091 (declare (ignore type))
1092 `(defun ,(make-od-name 'cp1258->string accessor) (array astart aend)
1093 (,(make-od-name 'latin->string accessor) array astart aend #'cp1258->code-mapper)))
1095 (instantiate-octets-definition define-cp1258->string)
1097 (push '((:cp1258 :|cp1258| :windows-1258 :|windows-1258|)
1098 cp1258->string-aref string->cp1258)
1099 *external-format-functions*)
1101 (define-external-format (:cp1258 :|cp1258| :windows-1258 :|windows-1258|)
1103 (let ((cp1258-byte (code->cp1258-mapper bits)))
1105 (setf (sap-ref-8 sap tail) cp1258-byte)
1106 (stream-encoding-error-and-handle stream bits)))
1107 (let ((code (cp1258->code-mapper byte)))
1110 (stream-decoding-error stream byte)))) ;; TODO -- error check