1 | ;;;-*-Mode: LISP; Package: CCL -*- |
---|
2 | ;;; |
---|
3 | ;;; Copyright (C) 1994-2001 Digitool, Inc |
---|
4 | ;;; This file is part of Clozure CL. |
---|
5 | ;;; |
---|
6 | ;;; Clozure CL is licensed under the terms of the Lisp Lesser GNU Public |
---|
7 | ;;; License , known as the LLGPL and distributed with Clozure CL as the |
---|
8 | ;;; file "LICENSE". The LLGPL consists of a preamble and the LGPL, |
---|
9 | ;;; which is distributed with Clozure CL as the file "LGPL". Where these |
---|
10 | ;;; conflict, the preamble takes precedence. |
---|
11 | ;;; |
---|
12 | ;;; Clozure CL is referenced in the preamble as the "LIBRARY." |
---|
13 | ;;; |
---|
14 | ;;; The LLGPL is also available online at |
---|
15 | ;;; http://opensource.franz.com/preamble.html |
---|
16 | |
---|
17 | ;;; READ and related functions. |
---|
18 | |
---|
19 | (in-package "CCL") |
---|
20 | |
---|
21 | (eval-when (:compile-toplevel :execute) |
---|
22 | (defconstant readtable-case-keywords '((:upcase . 1) (:downcase . 2) (:preserve . 0) |
---|
23 | (:invert . -1) (:studly . -2))) |
---|
24 | (defmacro readtable-case-keywords () `',readtable-case-keywords)) |
---|
25 | |
---|
26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
27 | |
---|
28 | (defmethod make-load-form ((ref package-ref) &optional env) |
---|
29 | (declare (ignore env)) |
---|
30 | `(register-package-ref ',(package-ref.name ref))) |
---|
31 | |
---|
32 | (defmethod print-object ((ref package-ref) stream) |
---|
33 | (print-unreadable-object (ref stream :type t :identity t) |
---|
34 | (format stream "for ~s [~s]" (package-ref.name ref) (package-ref.pkg ref)))) |
---|
35 | |
---|
36 | ;;; Maps character names to characters |
---|
37 | (defvar *name->char* (make-hash-table :test #'equalp)) |
---|
38 | ;;; Maps characters to (canonical) character names. |
---|
39 | (defvar *char->name* (make-hash-table :test #'eql)) |
---|
40 | |
---|
41 | ;;; This isn't thread-safe. If the user really wants to register character |
---|
42 | ;;; names from multiple threads, they should do their own locking. |
---|
43 | (defun register-character-name (name char) |
---|
44 | (setf (gethash name *name->char*) char) |
---|
45 | (unless (gethash char *char->name*) |
---|
46 | (setf (gethash char *char->name*) name))) |
---|
47 | |
---|
48 | (dolist (pair '( |
---|
49 | ;; Standard character names |
---|
50 | ("Newline" . #\012) ("Space" . #\040) |
---|
51 | ;; Semi-standard character names |
---|
52 | ("Rubout" . #\177) ("Page" . #\014) ("Tab" . #\011) |
---|
53 | ("Backspace" . #\010) ("Return" . #\015) ("Linefeed" . #\012) |
---|
54 | ;; Other character names. (When available, standard |
---|
55 | ;; names should be used for printing in preference to |
---|
56 | ;; any non-standard names.) |
---|
57 | ("Null" . #\000) ("Nul" . #\000) |
---|
58 | ("Bell" . #\007) ; ^G , used by Franz (and others with bells.) |
---|
59 | ("Delete" . #\010) ("BS" . #\010) |
---|
60 | ("LF" . #\012) |
---|
61 | ("PageUp" . #\013) |
---|
62 | ("PageDown" . #\014)("Formfeed" . #\014) ("FF" . #\014) |
---|
63 | ("CR" . #\015) |
---|
64 | ("Sub" . #\032) |
---|
65 | ("ESC" . #\033) ("Escape" . #\033) ("Clear" . #\033) |
---|
66 | ("Altmode" . #\033) ("ALT" . #\033) |
---|
67 | ("Fs" . #\034) |
---|
68 | ("Gs" . #\035) |
---|
69 | ("Rs" . #\036) |
---|
70 | ("Us" . #\037) |
---|
71 | ("DEL" . #\177)("ForwardDelete" . #\177) |
---|
72 | ("No-Break_Space" . #\u+00a0) |
---|
73 | ("Inverted_Exclamation_Mark" . #\u+00a1) |
---|
74 | ("Cent_Sign" . #\u+00a2) |
---|
75 | ("Pound_Sign" . #\u+00a3) |
---|
76 | ("Currency_Sign" . #\u+00a4) |
---|
77 | ("Yen_Sign" . #\u+00a5) |
---|
78 | ("Broken_Bar" . #\u+00a6) |
---|
79 | ("Section_Sign" . #\u+00a7) |
---|
80 | ("Diaeresis" . #\u+00a8) |
---|
81 | ("Copyright_Sign" . #\u+00a9) |
---|
82 | ("Feminine_Ordinal_Indicator" . #\u+00aa) |
---|
83 | ("Left-Pointing_Double_Angle_Quotation_Mark" . #\u+00ab) |
---|
84 | ("Not_Sign" . #\u+00ac) |
---|
85 | ("Soft_Hyphen" . #\u+00ad) |
---|
86 | ("Registered_Sign" . #\u+00ae) |
---|
87 | ("Macron" . #\u+00af) |
---|
88 | ("Degree_Sign" . #\u+00b0) |
---|
89 | ("Plus-Minus_Sign" . #\u+00b1) |
---|
90 | ("Superscript_Two" . #\u+00b2) |
---|
91 | ("Superscript_Three" . #\u+00b3) |
---|
92 | ("Acute_Accent" . #\u+00b4) |
---|
93 | ("Micro_Sign" . #\u+00b5) |
---|
94 | ("Pilcrow_Sign" . #\u+00b6) |
---|
95 | ("Middle_Dot" . #\u+00b7) |
---|
96 | ("Cedilla" . #\u+00b8) |
---|
97 | ("Superscript_One" . #\u+00b9) |
---|
98 | ("Masculine_Ordinal_Indicator" . #\u+00ba) |
---|
99 | ("Right-Pointing_Double_Angle_Quotation_Mark" . #\u+00bb) |
---|
100 | ("Vulgar_Fraction_One_Quarter" . #\u+00bc) |
---|
101 | ("Vulgar_Fraction_One_Half" . #\u+00bd) |
---|
102 | ("Vulgar_Fraction_Three_Quarters" . #\u+00be) |
---|
103 | ("Inverted_Question_Mark" . #\u+00bf) |
---|
104 | ("Latin_Capital_Letter_A_With_Grave" . #\u+00c0) |
---|
105 | ("Latin_Capital_Letter_A_With_Acute" . #\u+00c1) |
---|
106 | ("Latin_Capital_Letter_A_With_Circumflex" . #\u+00c2) |
---|
107 | ("Latin_Capital_Letter_A_With_Tilde" . #\u+00c3) |
---|
108 | ("Latin_Capital_Letter_A_With_Diaeresis" . #\u+00c4) |
---|
109 | ("Latin_Capital_Letter_A_With_Ring_Above" . #\u+00c5) |
---|
110 | ("Latin_Capital_Letter_Ae" . #\u+00c6) |
---|
111 | ("Latin_Capital_Letter_C_With_Cedilla" . #\u+00c7) |
---|
112 | ("Latin_Capital_Letter_E_With_Grave" . #\u+00c8) |
---|
113 | ("Latin_Capital_Letter_E_With_Acute" . #\u+00c9) |
---|
114 | ("Latin_Capital_Letter_E_With_Circumflex" . #\u+00ca) |
---|
115 | ("Latin_Capital_Letter_E_With_Diaeresis" . #\u+00cb) |
---|
116 | ("Latin_Capital_Letter_I_With_Grave" . #\u+00cc) |
---|
117 | ("Latin_Capital_Letter_I_With_Acute" . #\u+00cd) |
---|
118 | ("Latin_Capital_Letter_I_With_Circumflex" . #\u+00ce) |
---|
119 | ("Latin_Capital_Letter_I_With_Diaeresis" . #\u+00cf) |
---|
120 | ("Latin_Capital_Letter_Eth" . #\u+00d0) |
---|
121 | ("Latin_Capital_Letter_N_With_Tilde" . #\u+00d1) |
---|
122 | ("Latin_Capital_Letter_O_With_Grave" . #\u+00d2) |
---|
123 | ("Latin_Capital_Letter_O_With_Acute" . #\u+00d3) |
---|
124 | ("Latin_Capital_Letter_O_With_Circumflex" . #\u+00d4) |
---|
125 | ("Latin_Capital_Letter_O_With_Tilde" . #\u+00d5) |
---|
126 | ("Latin_Capital_Letter_O_With_Diaeresis" . #\u+00d6) |
---|
127 | ("Multiplication_Sign" . #\u+00d7) |
---|
128 | ("Latin_Capital_Letter_O_With_Stroke" . #\u+00d8) |
---|
129 | ("Latin_Capital_Letter_U_With_Grave" . #\u+00d9) |
---|
130 | ("Latin_Capital_Letter_U_With_Acute" . #\u+00da) |
---|
131 | ("Latin_Capital_Letter_U_With_Circumflex" . #\u+00db) |
---|
132 | ("Latin_Capital_Letter_U_With_Diaeresis" . #\u+00dc) |
---|
133 | ("Latin_Capital_Letter_Y_With_Acute" . #\u+00dd) |
---|
134 | ("Latin_Capital_Letter_Thorn" . #\u+00de) |
---|
135 | ("Latin_Small_Letter_Sharp_S" . #\u+00df) |
---|
136 | ("Latin_Small_Letter_A_With_Grave" . #\u+00e0) |
---|
137 | ("Latin_Small_Letter_A_With_Acute" . #\u+00e1) |
---|
138 | ("Latin_Small_Letter_A_With_Circumflex" . #\u+00e2) |
---|
139 | ("Latin_Small_Letter_A_With_Tilde" . #\u+00e3) |
---|
140 | ("Latin_Small_Letter_A_With_Diaeresis" . #\u+00e4) |
---|
141 | ("Latin_Small_Letter_A_With_Ring_Above" . #\u+00e5) |
---|
142 | ("Latin_Small_Letter_Ae" . #\u+00e6) |
---|
143 | ("Latin_Small_Letter_C_With_Cedilla" . #\u+00e7) |
---|
144 | ("Latin_Small_Letter_E_With_Grave" . #\u+00e8) |
---|
145 | ("Latin_Small_Letter_E_With_Acute" . #\u+00e9) |
---|
146 | ("Latin_Small_Letter_E_With_Circumflex" . #\u+00ea) |
---|
147 | ("Latin_Small_Letter_E_With_Diaeresis" . #\u+00eb) |
---|
148 | ("Latin_Small_Letter_I_With_Grave" . #\u+00ec) |
---|
149 | ("Latin_Small_Letter_I_With_Acute" . #\u+00ed) |
---|
150 | ("Latin_Small_Letter_I_With_Circumflex" . #\u+00ee) |
---|
151 | ("Latin_Small_Letter_I_With_Diaeresis" . #\u+00ef) |
---|
152 | ("Latin_Small_Letter_Eth" . #\u+00f0) |
---|
153 | ("Latin_Small_Letter_N_With_Tilde" . #\u+00f1) |
---|
154 | ("Latin_Small_Letter_O_With_Grave" . #\u+00f2) |
---|
155 | ("Latin_Small_Letter_O_With_Acute" . #\u+00f3) |
---|
156 | ("Latin_Small_Letter_O_With_Circumflex" . #\u+00f4) |
---|
157 | ("Latin_Small_Letter_O_With_Tilde" . #\u+00f5) |
---|
158 | ("Latin_Small_Letter_O_With_Diaeresis" . #\u+00f6) |
---|
159 | ("Division_Sign" . #\u+00f7) |
---|
160 | ("Latin_Small_Letter_O_With_Stroke" . #\u+00f8) |
---|
161 | ("Latin_Small_Letter_U_With_Grave" . #\u+00f9) |
---|
162 | ("Latin_Small_Letter_U_With_Acute" . #\u+00fa) |
---|
163 | ("Latin_Small_Letter_U_With_Circumflex" . #\u+00fb) |
---|
164 | ("Latin_Small_Letter_U_With_Diaeresis" . #\u+00fc) |
---|
165 | ("Latin_Small_Letter_Y_With_Acute" . #\u+00fd) |
---|
166 | ("Latin_Small_Letter_Thorn" . #\u+00fe) |
---|
167 | ("Latin_Small_Letter_Y_With_Diaeresis" . #\u+00ff) |
---|
168 | ("Latin_Capital_Letter_A_With_Macron" . #\u+0100) |
---|
169 | ("Latin_Small_Letter_A_With_Macron" . #\u+0101) |
---|
170 | ("Latin_Capital_Letter_A_With_Breve" . #\u+0102) |
---|
171 | ("Latin_Small_Letter_A_With_Breve" . #\u+0103) |
---|
172 | ("Latin_Capital_Letter_A_With_Ogonek" . #\u+0104) |
---|
173 | ("Latin_Small_Letter_A_With_Ogonek" . #\u+0105) |
---|
174 | ("Latin_Capital_Letter_C_With_Acute" . #\u+0106) |
---|
175 | ("Latin_Small_Letter_C_With_Acute" . #\u+0107) |
---|
176 | ("Latin_Capital_Letter_C_With_Circumflex" . #\u+0108) |
---|
177 | ("Latin_Small_Letter_C_With_Circumflex" . #\u+0109) |
---|
178 | ("Latin_Capital_Letter_C_With_Dot_Above" . #\u+010a) |
---|
179 | ("Latin_Small_Letter_C_With_Dot_Above" . #\u+010b) |
---|
180 | ("Latin_Capital_Letter_C_With_Caron" . #\u+010c) |
---|
181 | ("Latin_Small_Letter_C_With_Caron" . #\u+010d) |
---|
182 | ("Latin_Capital_Letter_D_With_Caron" . #\u+010e) |
---|
183 | ("Latin_Small_Letter_D_With_Caron" . #\u+010f) |
---|
184 | ("Latin_Capital_Letter_D_With_Stroke" . #\u+0110) |
---|
185 | ("Latin_Small_Letter_D_With_Stroke" . #\u+0111) |
---|
186 | ("Latin_Capital_Letter_E_With_Macron" . #\u+0112) |
---|
187 | ("Latin_Small_Letter_E_With_Macron" . #\u+0113) |
---|
188 | ("Latin_Capital_Letter_E_With_Breve" . #\u+0114) |
---|
189 | ("Latin_Small_Letter_E_With_Breve" . #\u+0115) |
---|
190 | ("Latin_Capital_Letter_E_With_Dot_Above" . #\u+0116) |
---|
191 | ("Latin_Small_Letter_E_With_Dot_Above" . #\u+0117) |
---|
192 | ("Latin_Capital_Letter_E_With_Ogonek" . #\u+0118) |
---|
193 | ("Latin_Small_Letter_E_With_Ogonek" . #\u+0119) |
---|
194 | ("Latin_Capital_Letter_E_With_Caron" . #\u+011a) |
---|
195 | ("Latin_Small_Letter_E_With_Caron" . #\u+011b) |
---|
196 | ("Latin_Capital_Letter_G_With_Circumflex" . #\u+011c) |
---|
197 | ("Latin_Small_Letter_G_With_Circumflex" . #\u+011d) |
---|
198 | ("Latin_Capital_Letter_G_With_Breve" . #\u+011e) |
---|
199 | ("Latin_Small_Letter_G_With_Breve" . #\u+011f) |
---|
200 | ("Latin_Capital_Letter_G_With_Dot_Above" . #\u+0120) |
---|
201 | ("Latin_Small_Letter_G_With_Dot_Above" . #\u+0121) |
---|
202 | ("Latin_Capital_Letter_G_With_Cedilla" . #\u+0122) |
---|
203 | ("Latin_Small_Letter_G_With_Cedilla" . #\u+0123) |
---|
204 | ("Latin_Capital_Letter_H_With_Circumflex" . #\u+0124) |
---|
205 | ("Latin_Small_Letter_H_With_Circumflex" . #\u+0125) |
---|
206 | ("Latin_Capital_Letter_H_With_Stroke" . #\u+0126) |
---|
207 | ("Latin_Small_Letter_H_With_Stroke" . #\u+0127) |
---|
208 | ("Latin_Capital_Letter_I_With_Tilde" . #\u+0128) |
---|
209 | ("Latin_Small_Letter_I_With_Tilde" . #\u+0129) |
---|
210 | ("Latin_Capital_Letter_I_With_Macron" . #\u+012a) |
---|
211 | ("Latin_Small_Letter_I_With_Macron" . #\u+012b) |
---|
212 | ("Latin_Capital_Letter_I_With_Breve" . #\u+012c) |
---|
213 | ("Latin_Small_Letter_I_With_Breve" . #\u+012d) |
---|
214 | ("Latin_Capital_Letter_I_With_Ogonek" . #\u+012e) |
---|
215 | ("Latin_Small_Letter_I_With_Ogonek" . #\u+012f) |
---|
216 | ("Latin_Capital_Letter_I_With_Dot_Above" . #\u+0130) |
---|
217 | ("Latin_Small_Letter_Dotless_I" . #\u+0131) |
---|
218 | ("Latin_Capital_Ligature_Ij" . #\u+0132) |
---|
219 | ("Latin_Small_Ligature_Ij" . #\u+0133) |
---|
220 | ("Latin_Capital_Letter_J_With_Circumflex" . #\u+0134) |
---|
221 | ("Latin_Small_Letter_J_With_Circumflex" . #\u+0135) |
---|
222 | ("Latin_Capital_Letter_K_With_Cedilla" . #\u+0136) |
---|
223 | ("Latin_Small_Letter_K_With_Cedilla" . #\u+0137) |
---|
224 | ("Latin_Small_Letter_Kra" . #\u+0138) |
---|
225 | ("Latin_Capital_Letter_L_With_Acute" . #\u+0139) |
---|
226 | ("Latin_Small_Letter_L_With_Acute" . #\u+013a) |
---|
227 | ("Latin_Capital_Letter_L_With_Cedilla" . #\u+013b) |
---|
228 | ("Latin_Small_Letter_L_With_Cedilla" . #\u+013c) |
---|
229 | ("Latin_Capital_Letter_L_With_Caron" . #\u+013d) |
---|
230 | ("Latin_Small_Letter_L_With_Caron" . #\u+013e) |
---|
231 | ("Latin_Capital_Letter_L_With_Middle_Dot" . #\u+013f) |
---|
232 | ("Latin_Small_Letter_L_With_Middle_Dot" . #\u+0140) |
---|
233 | ("Latin_Capital_Letter_L_With_Stroke" . #\u+0141) |
---|
234 | ("Latin_Small_Letter_L_With_Stroke" . #\u+0142) |
---|
235 | ("Latin_Capital_Letter_N_With_Acute" . #\u+0143) |
---|
236 | ("Latin_Small_Letter_N_With_Acute" . #\u+0144) |
---|
237 | ("Latin_Capital_Letter_N_With_Cedilla" . #\u+0145) |
---|
238 | ("Latin_Small_Letter_N_With_Cedilla" . #\u+0146) |
---|
239 | ("Latin_Capital_Letter_N_With_Caron" . #\u+0147) |
---|
240 | ("Latin_Small_Letter_N_With_Caron" . #\u+0148) |
---|
241 | ("Latin_Small_Letter_N_Preceded_By_Apostrophe" . #\u+0149) |
---|
242 | ("Latin_Capital_Letter_Eng" . #\u+014a) |
---|
243 | ("Latin_Small_Letter_Eng" . #\u+014b) |
---|
244 | ("Latin_Capital_Letter_O_With_Macron" . #\u+014c) |
---|
245 | ("Latin_Small_Letter_O_With_Macron" . #\u+014d) |
---|
246 | ("Latin_Capital_Letter_O_With_Breve" . #\u+014e) |
---|
247 | ("Latin_Small_Letter_O_With_Breve" . #\u+014f) |
---|
248 | ("Latin_Capital_Letter_O_With_Double_Acute" . #\u+0150) |
---|
249 | ("Latin_Small_Letter_O_With_Double_Acute" . #\u+0151) |
---|
250 | ("Latin_Capital_Ligature_Oe" . #\u+0152) |
---|
251 | ("Latin_Small_Ligature_Oe" . #\u+0153) |
---|
252 | ("Latin_Capital_Letter_R_With_Acute" . #\u+0154) |
---|
253 | ("Latin_Small_Letter_R_With_Acute" . #\u+0155) |
---|
254 | ("Latin_Capital_Letter_R_With_Cedilla" . #\u+0156) |
---|
255 | ("Latin_Small_Letter_R_With_Cedilla" . #\u+0157) |
---|
256 | ("Latin_Capital_Letter_R_With_Caron" . #\u+0158) |
---|
257 | ("Latin_Small_Letter_R_With_Caron" . #\u+0159) |
---|
258 | ("Latin_Capital_Letter_S_With_Acute" . #\u+015a) |
---|
259 | ("Latin_Small_Letter_S_With_Acute" . #\u+015b) |
---|
260 | ("Latin_Capital_Letter_S_With_Circumflex" . #\u+015c) |
---|
261 | ("Latin_Small_Letter_S_With_Circumflex" . #\u+015d) |
---|
262 | ("Latin_Capital_Letter_S_With_Cedilla" . #\u+015e) |
---|
263 | ("Latin_Small_Letter_S_With_Cedilla" . #\u+015f) |
---|
264 | ("Latin_Capital_Letter_S_With_Caron" . #\u+0160) |
---|
265 | ("Latin_Small_Letter_S_With_Caron" . #\u+0161) |
---|
266 | ("Latin_Capital_Letter_T_With_Cedilla" . #\u+0162) |
---|
267 | ("Latin_Small_Letter_T_With_Cedilla" . #\u+0163) |
---|
268 | ("Latin_Capital_Letter_T_With_Caron" . #\u+0164) |
---|
269 | ("Latin_Small_Letter_T_With_Caron" . #\u+0165) |
---|
270 | ("Latin_Capital_Letter_T_With_Stroke" . #\u+0166) |
---|
271 | ("Latin_Small_Letter_T_With_Stroke" . #\u+0167) |
---|
272 | ("Latin_Capital_Letter_U_With_Tilde" . #\u+0168) |
---|
273 | ("Latin_Small_Letter_U_With_Tilde" . #\u+0169) |
---|
274 | ("Latin_Capital_Letter_U_With_Macron" . #\u+016a) |
---|
275 | ("Latin_Small_Letter_U_With_Macron" . #\u+016b) |
---|
276 | ("Latin_Capital_Letter_U_With_Breve" . #\u+016c) |
---|
277 | ("Latin_Small_Letter_U_With_Breve" . #\u+016d) |
---|
278 | ("Latin_Capital_Letter_U_With_Ring_Above" . #\u+016e) |
---|
279 | ("Latin_Small_Letter_U_With_Ring_Above" . #\u+016f) |
---|
280 | ("Latin_Capital_Letter_U_With_Double_Acute" . #\u+0170) |
---|
281 | ("Latin_Small_Letter_U_With_Double_Acute" . #\u+0171) |
---|
282 | ("Latin_Capital_Letter_U_With_Ogonek" . #\u+0172) |
---|
283 | ("Latin_Small_Letter_U_With_Ogonek" . #\u+0173) |
---|
284 | ("Latin_Capital_Letter_W_With_Circumflex" . #\u+0174) |
---|
285 | ("Latin_Small_Letter_W_With_Circumflex" . #\u+0175) |
---|
286 | ("Latin_Capital_Letter_Y_With_Circumflex" . #\u+0176) |
---|
287 | ("Latin_Small_Letter_Y_With_Circumflex" . #\u+0177) |
---|
288 | ("Latin_Capital_Letter_Y_With_Diaeresis" . #\u+0178) |
---|
289 | ("Latin_Capital_Letter_Z_With_Acute" . #\u+0179) |
---|
290 | ("Latin_Small_Letter_Z_With_Acute" . #\u+017a) |
---|
291 | ("Latin_Capital_Letter_Z_With_Dot_Above" . #\u+017b) |
---|
292 | ("Latin_Small_Letter_Z_With_Dot_Above" . #\u+017c) |
---|
293 | ("Latin_Capital_Letter_Z_With_Caron" . #\u+017d) |
---|
294 | ("Latin_Small_Letter_Z_With_Caron" . #\u+017e) |
---|
295 | ("Latin_Small_Letter_Long_S" . #\u+017f) |
---|
296 | ("Latin_Small_Letter_B_With_Stroke" . #\u+0180) |
---|
297 | ("Latin_Capital_Letter_B_With_Hook" . #\u+0181) |
---|
298 | ("Latin_Capital_Letter_B_With_Topbar" . #\u+0182) |
---|
299 | ("Latin_Small_Letter_B_With_Topbar" . #\u+0183) |
---|
300 | ("Latin_Capital_Letter_Tone_Six" . #\u+0184) |
---|
301 | ("Latin_Small_Letter_Tone_Six" . #\u+0185) |
---|
302 | ("Latin_Capital_Letter_Open_O" . #\u+0186) |
---|
303 | ("Latin_Capital_Letter_C_With_Hook" . #\u+0187) |
---|
304 | ("Latin_Small_Letter_C_With_Hook" . #\u+0188) |
---|
305 | ("Latin_Capital_Letter_African_D" . #\u+0189) |
---|
306 | ("Latin_Capital_Letter_D_With_Hook" . #\u+018a) |
---|
307 | ("Latin_Capital_Letter_D_With_Topbar" . #\u+018b) |
---|
308 | ("Latin_Small_Letter_D_With_Topbar" . #\u+018c) |
---|
309 | ("Latin_Small_Letter_Turned_Delta" . #\u+018d) |
---|
310 | ("Latin_Capital_Letter_Reversed_E" . #\u+018e) |
---|
311 | ("Latin_Capital_Letter_Schwa" . #\u+018f) |
---|
312 | ("Latin_Capital_Letter_Open_E" . #\u+0190) |
---|
313 | ("Latin_Capital_Letter_F_With_Hook" . #\u+0191) |
---|
314 | ("Latin_Small_Letter_F_With_Hook" . #\u+0192) |
---|
315 | ("Latin_Capital_Letter_G_With_Hook" . #\u+0193) |
---|
316 | ("Latin_Capital_Letter_Gamma" . #\u+0194) |
---|
317 | ("Latin_Small_Letter_Hv" . #\u+0195) |
---|
318 | ("Latin_Capital_Letter_Iota" . #\u+0196) |
---|
319 | ("Latin_Capital_Letter_I_With_Stroke" . #\u+0197) |
---|
320 | ("Latin_Capital_Letter_K_With_Hook" . #\u+0198) |
---|
321 | ("Latin_Small_Letter_K_With_Hook" . #\u+0199) |
---|
322 | ("Latin_Small_Letter_L_With_Bar" . #\u+019a) |
---|
323 | ("Latin_Small_Letter_Lambda_With_Stroke" . #\u+019b) |
---|
324 | ("Latin_Capital_Letter_Turned_M" . #\u+019c) |
---|
325 | ("Latin_Capital_Letter_N_With_Left_Hook" . #\u+019d) |
---|
326 | ("Latin_Small_Letter_N_With_Long_Right_Leg" . #\u+019e) |
---|
327 | ("Latin_Capital_Letter_O_With_Middle_Tilde" . #\u+019f) |
---|
328 | ("Latin_Capital_Letter_O_With_Horn" . #\u+01a0) |
---|
329 | ("Latin_Small_Letter_O_With_Horn" . #\u+01a1) |
---|
330 | ("Latin_Capital_Letter_Oi" . #\u+01a2) |
---|
331 | ("Latin_Small_Letter_Oi" . #\u+01a3) |
---|
332 | ("Latin_Capital_Letter_P_With_Hook" . #\u+01a4) |
---|
333 | ("Latin_Small_Letter_P_With_Hook" . #\u+01a5) |
---|
334 | ("Latin_Letter_Yr" . #\u+01a6) |
---|
335 | ("Latin_Capital_Letter_Tone_Two" . #\u+01a7) |
---|
336 | ("Latin_Small_Letter_Tone_Two" . #\u+01a8) |
---|
337 | ("Latin_Capital_Letter_Esh" . #\u+01a9) |
---|
338 | ("Latin_Letter_Reversed_Esh_Loop" . #\u+01aa) |
---|
339 | ("Latin_Small_Letter_T_With_Palatal_Hook" . #\u+01ab) |
---|
340 | ("Latin_Capital_Letter_T_With_Hook" . #\u+01ac) |
---|
341 | ("Latin_Small_Letter_T_With_Hook" . #\u+01ad) |
---|
342 | ("Latin_Capital_Letter_T_With_Retroflex_Hook" . #\u+01ae) |
---|
343 | ("Latin_Capital_Letter_U_With_Horn" . #\u+01af) |
---|
344 | ("Latin_Small_Letter_U_With_Horn" . #\u+01b0) |
---|
345 | ("Latin_Capital_Letter_Upsilon" . #\u+01b1) |
---|
346 | ("Latin_Capital_Letter_V_With_Hook" . #\u+01b2) |
---|
347 | ("Latin_Capital_Letter_Y_With_Hook" . #\u+01b3) |
---|
348 | ("Latin_Small_Letter_Y_With_Hook" . #\u+01b4) |
---|
349 | ("Latin_Capital_Letter_Z_With_Stroke" . #\u+01b5) |
---|
350 | ("Latin_Small_Letter_Z_With_Stroke" . #\u+01b6) |
---|
351 | ("Latin_Capital_Letter_Ezh" . #\u+01b7) |
---|
352 | ("Latin_Capital_Letter_Ezh_Reversed" . #\u+01b8) |
---|
353 | ("Latin_Small_Letter_Ezh_Reversed" . #\u+01b9) |
---|
354 | ("Latin_Small_Letter_Ezh_With_Tail" . #\u+01ba) |
---|
355 | ("Latin_Letter_Two_With_Stroke" . #\u+01bb) |
---|
356 | ("Latin_Capital_Letter_Tone_Five" . #\u+01bc) |
---|
357 | ("Latin_Small_Letter_Tone_Five" . #\u+01bd) |
---|
358 | ("Latin_Letter_Inverted_Glottal_Stop_With_Stroke" . #\u+01be) |
---|
359 | ("Latin_Letter_Wynn" . #\u+01bf) |
---|
360 | ("Latin_Letter_Dental_Click" . #\u+01c0) |
---|
361 | ("Latin_Letter_Lateral_Click" . #\u+01c1) |
---|
362 | ("Latin_Letter_Alveolar_Click" . #\u+01c2) |
---|
363 | ("Latin_Letter_Retroflex_Click" . #\u+01c3) |
---|
364 | ("Latin_Capital_Letter_Dz_With_Caron" . #\u+01c4) |
---|
365 | ("Latin_Capital_Letter_D_With_Small_Letter_Z_With_Caron" . #\u+01c5) |
---|
366 | ("Latin_Small_Letter_Dz_With_Caron" . #\u+01c6) |
---|
367 | ("Latin_Capital_Letter_Lj" . #\u+01c7) |
---|
368 | ("Latin_Capital_Letter_L_With_Small_Letter_J" . #\u+01c8) |
---|
369 | ("Latin_Small_Letter_Lj" . #\u+01c9) |
---|
370 | ("Latin_Capital_Letter_Nj" . #\u+01ca) |
---|
371 | ("Latin_Capital_Letter_N_With_Small_Letter_J" . #\u+01cb) |
---|
372 | ("Latin_Small_Letter_Nj" . #\u+01cc) |
---|
373 | ("Latin_Capital_Letter_A_With_Caron" . #\u+01cd) |
---|
374 | ("Latin_Small_Letter_A_With_Caron" . #\u+01ce) |
---|
375 | ("Latin_Capital_Letter_I_With_Caron" . #\u+01cf) |
---|
376 | ("Latin_Small_Letter_I_With_Caron" . #\u+01d0) |
---|
377 | ("Latin_Capital_Letter_O_With_Caron" . #\u+01d1) |
---|
378 | ("Latin_Small_Letter_O_With_Caron" . #\u+01d2) |
---|
379 | ("Latin_Capital_Letter_U_With_Caron" . #\u+01d3) |
---|
380 | ("Latin_Small_Letter_U_With_Caron" . #\u+01d4) |
---|
381 | ("Latin_Capital_Letter_U_With_Diaeresis_And_Macron" . #\u+01d5) |
---|
382 | ("Latin_Small_Letter_U_With_Diaeresis_And_Macron" . #\u+01d6) |
---|
383 | ("Latin_Capital_Letter_U_With_Diaeresis_And_Acute" . #\u+01d7) |
---|
384 | ("Latin_Small_Letter_U_With_Diaeresis_And_Acute" . #\u+01d8) |
---|
385 | ("Latin_Capital_Letter_U_With_Diaeresis_And_Caron" . #\u+01d9) |
---|
386 | ("Latin_Small_Letter_U_With_Diaeresis_And_Caron" . #\u+01da) |
---|
387 | ("Latin_Capital_Letter_U_With_Diaeresis_And_Grave" . #\u+01db) |
---|
388 | ("Latin_Small_Letter_U_With_Diaeresis_And_Grave" . #\u+01dc) |
---|
389 | ("Latin_Small_Letter_Turned_E" . #\u+01dd) |
---|
390 | ("Latin_Capital_Letter_A_With_Diaeresis_And_Macron" . #\u+01de) |
---|
391 | ("Latin_Small_Letter_A_With_Diaeresis_And_Macron" . #\u+01df) |
---|
392 | ("Latin_Capital_Letter_A_With_Dot_Above_And_Macron" . #\u+01e0) |
---|
393 | ("Latin_Small_Letter_A_With_Dot_Above_And_Macron" . #\u+01e1) |
---|
394 | ("Latin_Capital_Letter_Ae_With_Macron" . #\u+01e2) |
---|
395 | ("Latin_Small_Letter_Ae_With_Macron" . #\u+01e3) |
---|
396 | ("Latin_Capital_Letter_G_With_Stroke" . #\u+01e4) |
---|
397 | ("Latin_Small_Letter_G_With_Stroke" . #\u+01e5) |
---|
398 | ("Latin_Capital_Letter_G_With_Caron" . #\u+01e6) |
---|
399 | ("Latin_Small_Letter_G_With_Caron" . #\u+01e7) |
---|
400 | ("Latin_Capital_Letter_K_With_Caron" . #\u+01e8) |
---|
401 | ("Latin_Small_Letter_K_With_Caron" . #\u+01e9) |
---|
402 | ("Latin_Capital_Letter_O_With_Ogonek" . #\u+01ea) |
---|
403 | ("Latin_Small_Letter_O_With_Ogonek" . #\u+01eb) |
---|
404 | ("Latin_Capital_Letter_O_With_Ogonek_And_Macron" . #\u+01ec) |
---|
405 | ("Latin_Small_Letter_O_With_Ogonek_And_Macron" . #\u+01ed) |
---|
406 | ("Latin_Capital_Letter_Ezh_With_Caron" . #\u+01ee) |
---|
407 | ("Latin_Small_Letter_Ezh_With_Caron" . #\u+01ef) |
---|
408 | ("Latin_Small_Letter_J_With_Caron" . #\u+01f0) |
---|
409 | ("Latin_Capital_Letter_Dz" . #\u+01f1) |
---|
410 | ("Latin_Capital_Letter_D_With_Small_Letter_Z" . #\u+01f2) |
---|
411 | ("Latin_Small_Letter_Dz" . #\u+01f3) |
---|
412 | ("Latin_Capital_Letter_G_With_Acute" . #\u+01f4) |
---|
413 | ("Latin_Small_Letter_G_With_Acute" . #\u+01f5) |
---|
414 | ("Latin_Capital_Letter_Hwair" . #\u+01f6) |
---|
415 | ("Latin_Capital_Letter_Wynn" . #\u+01f7) |
---|
416 | ("Latin_Capital_Letter_N_With_Grave" . #\u+01f8) |
---|
417 | ("Latin_Small_Letter_N_With_Grave" . #\u+01f9) |
---|
418 | ("Latin_Capital_Letter_A_With_Ring_Above_And_Acute" . #\u+01fa) |
---|
419 | ("Latin_Small_Letter_A_With_Ring_Above_And_Acute" . #\u+01fb) |
---|
420 | ("Latin_Capital_Letter_Ae_With_Acute" . #\u+01fc) |
---|
421 | ("Latin_Small_Letter_Ae_With_Acute" . #\u+01fd) |
---|
422 | ("Latin_Capital_Letter_O_With_Stroke_And_Acute" . #\u+01fe) |
---|
423 | ("Latin_Small_Letter_O_With_Stroke_And_Acute" . #\u+01ff) |
---|
424 | ("Latin_Capital_Letter_A_With_Double_Grave" . #\u+0200) |
---|
425 | ("Latin_Small_Letter_A_With_Double_Grave" . #\u+0201) |
---|
426 | ("Latin_Capital_Letter_A_With_Inverted_Breve" . #\u+0202) |
---|
427 | ("Latin_Small_Letter_A_With_Inverted_Breve" . #\u+0203) |
---|
428 | ("Latin_Capital_Letter_E_With_Double_Grave" . #\u+0204) |
---|
429 | ("Latin_Small_Letter_E_With_Double_Grave" . #\u+0205) |
---|
430 | ("Latin_Capital_Letter_E_With_Inverted_Breve" . #\u+0206) |
---|
431 | ("Latin_Small_Letter_E_With_Inverted_Breve" . #\u+0207) |
---|
432 | ("Latin_Capital_Letter_I_With_Double_Grave" . #\u+0208) |
---|
433 | ("Latin_Small_Letter_I_With_Double_Grave" . #\u+0209) |
---|
434 | ("Latin_Capital_Letter_I_With_Inverted_Breve" . #\u+020a) |
---|
435 | ("Latin_Small_Letter_I_With_Inverted_Breve" . #\u+020b) |
---|
436 | ("Latin_Capital_Letter_O_With_Double_Grave" . #\u+020c) |
---|
437 | ("Latin_Small_Letter_O_With_Double_Grave" . #\u+020d) |
---|
438 | ("Latin_Capital_Letter_O_With_Inverted_Breve" . #\u+020e) |
---|
439 | ("Latin_Small_Letter_O_With_Inverted_Breve" . #\u+020f) |
---|
440 | ("Latin_Capital_Letter_R_With_Double_Grave" . #\u+0210) |
---|
441 | ("Latin_Small_Letter_R_With_Double_Grave" . #\u+0211) |
---|
442 | ("Latin_Capital_Letter_R_With_Inverted_Breve" . #\u+0212) |
---|
443 | ("Latin_Small_Letter_R_With_Inverted_Breve" . #\u+0213) |
---|
444 | ("Latin_Capital_Letter_U_With_Double_Grave" . #\u+0214) |
---|
445 | ("Latin_Small_Letter_U_With_Double_Grave" . #\u+0215) |
---|
446 | ("Latin_Capital_Letter_U_With_Inverted_Breve" . #\u+0216) |
---|
447 | ("Latin_Small_Letter_U_With_Inverted_Breve" . #\u+0217) |
---|
448 | ("Latin_Capital_Letter_S_With_Comma_Below" . #\u+0218) |
---|
449 | ("Latin_Small_Letter_S_With_Comma_Below" . #\u+0219) |
---|
450 | ("Latin_Capital_Letter_T_With_Comma_Below" . #\u+021a) |
---|
451 | ("Latin_Small_Letter_T_With_Comma_Below" . #\u+021b) |
---|
452 | ("Latin_Capital_Letter_Yogh" . #\u+021c) |
---|
453 | ("Latin_Small_Letter_Yogh" . #\u+021d) |
---|
454 | ("Latin_Capital_Letter_H_With_Caron" . #\u+021e) |
---|
455 | ("Latin_Small_Letter_H_With_Caron" . #\u+021f) |
---|
456 | ("Latin_Capital_Letter_N_With_Long_Right_Leg" . #\u+0220) |
---|
457 | ("Latin_Small_Letter_D_With_Curl" . #\u+0221) |
---|
458 | ("Latin_Capital_Letter_Ou" . #\u+0222) |
---|
459 | ("Latin_Small_Letter_Ou" . #\u+0223) |
---|
460 | ("Latin_Capital_Letter_Z_With_Hook" . #\u+0224) |
---|
461 | ("Latin_Small_Letter_Z_With_Hook" . #\u+0225) |
---|
462 | ("Latin_Capital_Letter_A_With_Dot_Above" . #\u+0226) |
---|
463 | ("Latin_Small_Letter_A_With_Dot_Above" . #\u+0227) |
---|
464 | ("Latin_Capital_Letter_E_With_Cedilla" . #\u+0228) |
---|
465 | ("Latin_Small_Letter_E_With_Cedilla" . #\u+0229) |
---|
466 | ("Latin_Capital_Letter_O_With_Diaeresis_And_Macron" . #\u+022a) |
---|
467 | ("Latin_Small_Letter_O_With_Diaeresis_And_Macron" . #\u+022b) |
---|
468 | ("Latin_Capital_Letter_O_With_Tilde_And_Macron" . #\u+022c) |
---|
469 | ("Latin_Small_Letter_O_With_Tilde_And_Macron" . #\u+022d) |
---|
470 | ("Latin_Capital_Letter_O_With_Dot_Above" . #\u+022e) |
---|
471 | ("Latin_Small_Letter_O_With_Dot_Above" . #\u+022f) |
---|
472 | ("Latin_Capital_Letter_O_With_Dot_Above_And_Macron" . #\u+0230) |
---|
473 | ("Latin_Small_Letter_O_With_Dot_Above_And_Macron" . #\u+0231) |
---|
474 | ("Latin_Capital_Letter_Y_With_Macron" . #\u+0232) |
---|
475 | ("Latin_Small_Letter_Y_With_Macron" . #\u+0233) |
---|
476 | ("Latin_Small_Letter_L_With_Curl" . #\u+0234) |
---|
477 | ("Latin_Small_Letter_N_With_Curl" . #\u+0235) |
---|
478 | ("Latin_Small_Letter_T_With_Curl" . #\u+0236) |
---|
479 | ("Latin_Small_Letter_Dotless_J" . #\u+0237) |
---|
480 | ("Latin_Small_Letter_Db_Digraph" . #\u+0238) |
---|
481 | ("Latin_Small_Letter_Qp_Digraph" . #\u+0239) |
---|
482 | ("Latin_Capital_Letter_A_With_Stroke" . #\u+023a) |
---|
483 | ("Latin_Capital_Letter_C_With_Stroke" . #\u+023b) |
---|
484 | ("Latin_Small_Letter_C_With_Stroke" . #\u+023c) |
---|
485 | ("Latin_Capital_Letter_L_With_Bar" . #\u+023d) |
---|
486 | ("Latin_Capital_Letter_T_With_Diagonal_Stroke" . #\u+023e) |
---|
487 | ("Latin_Small_Letter_S_With_Swash_Tail" . #\u+023f) |
---|
488 | ("Latin_Small_Letter_Z_With_Swash_Tail" . #\u+0240) |
---|
489 | ("Latin_Capital_Letter_Glottal_Stop" . #\u+0241) |
---|
490 | ("Latin_Small_Letter_Glottal_Stop" . #\u+0242) |
---|
491 | ("Latin_Capital_Letter_B_With_Stroke" . #\u+0243) |
---|
492 | ("Latin_Capital_Letter_U_Bar" . #\u+0244) |
---|
493 | ("Latin_Capital_Letter_Turned_V" . #\u+0245) |
---|
494 | ("Latin_Capital_Letter_E_With_Stroke" . #\u+0246) |
---|
495 | ("Latin_Small_Letter_E_With_Stroke" . #\u+0247) |
---|
496 | ("Latin_Capital_Letter_J_With_Stroke" . #\u+0248) |
---|
497 | ("Latin_Small_Letter_J_With_Stroke" . #\u+0249) |
---|
498 | ("Latin_Capital_Letter_Small_Q_With_Hook_Tail" . #\u+024a) |
---|
499 | ("Latin_Small_Letter_Q_With_Hook_Tail" . #\u+024b) |
---|
500 | ("Latin_Capital_Letter_R_With_Stroke" . #\u+024c) |
---|
501 | ("Latin_Small_Letter_R_With_Stroke" . #\u+024d) |
---|
502 | ("Latin_Capital_Letter_Y_With_Stroke" . #\u+024e) |
---|
503 | ("Latin_Small_Letter_Y_With_Stroke" . #\u+024f) |
---|
504 | ("Latin_Small_Letter_Turned_A" . #\u+0250) |
---|
505 | ("Latin_Small_Letter_Alpha" . #\u+0251) |
---|
506 | ("Latin_Small_Letter_Turned_Alpha" . #\u+0252) |
---|
507 | ("Latin_Small_Letter_B_With_Hook" . #\u+0253) |
---|
508 | ("Latin_Small_Letter_Open_O" . #\u+0254) |
---|
509 | ("Latin_Small_Letter_C_With_Curl" . #\u+0255) |
---|
510 | ("Latin_Small_Letter_D_With_Tail" . #\u+0256) |
---|
511 | ("Latin_Small_Letter_D_With_Hook" . #\u+0257) |
---|
512 | ("Latin_Small_Letter_Reversed_E" . #\u+0258) |
---|
513 | ("Latin_Small_Letter_Schwa" . #\u+0259) |
---|
514 | ("Latin_Small_Letter_Schwa_With_Hook" . #\u+025a) |
---|
515 | ("Latin_Small_Letter_Open_E" . #\u+025b) |
---|
516 | ("Latin_Small_Letter_Reversed_Open_E" . #\u+025c) |
---|
517 | ("Latin_Small_Letter_Reversed_Open_E_With_Hook" . #\u+025d) |
---|
518 | ("Latin_Small_Letter_Closed_Reversed_Open_E" . #\u+025e) |
---|
519 | ("Latin_Small_Letter_Dotless_J_With_Stroke" . #\u+025f) |
---|
520 | ("Latin_Small_Letter_G_With_Hook" . #\u+0260) |
---|
521 | ("Latin_Small_Letter_Script_G" . #\u+0261) |
---|
522 | ("Latin_Letter_Small_Capital_G" . #\u+0262) |
---|
523 | ("Latin_Small_Letter_Gamma" . #\u+0263) |
---|
524 | ("Latin_Small_Letter_Rams_Horn" . #\u+0264) |
---|
525 | ("Latin_Small_Letter_Turned_H" . #\u+0265) |
---|
526 | ("Latin_Small_Letter_H_With_Hook" . #\u+0266) |
---|
527 | ("Latin_Small_Letter_Heng_With_Hook" . #\u+0267) |
---|
528 | ("Latin_Small_Letter_I_With_Stroke" . #\u+0268) |
---|
529 | ("Latin_Small_Letter_Iota" . #\u+0269) |
---|
530 | ("Latin_Letter_Small_Capital_I" . #\u+026a) |
---|
531 | ("Latin_Small_Letter_L_With_Middle_Tilde" . #\u+026b) |
---|
532 | ("Latin_Small_Letter_L_With_Belt" . #\u+026c) |
---|
533 | ("Latin_Small_Letter_L_With_Retroflex_Hook" . #\u+026d) |
---|
534 | ("Latin_Small_Letter_Lezh" . #\u+026e) |
---|
535 | ("Latin_Small_Letter_Turned_M" . #\u+026f) |
---|
536 | ("Latin_Small_Letter_Turned_M_With_Long_Leg" . #\u+0270) |
---|
537 | ("Latin_Small_Letter_M_With_Hook" . #\u+0271) |
---|
538 | ("Latin_Small_Letter_N_With_Left_Hook" . #\u+0272) |
---|
539 | ("Latin_Small_Letter_N_With_Retroflex_Hook" . #\u+0273) |
---|
540 | ("Latin_Letter_Small_Capital_N" . #\u+0274) |
---|
541 | ("Latin_Small_Letter_Barred_O" . #\u+0275) |
---|
542 | ("Latin_Letter_Small_Capital_Oe" . #\u+0276) |
---|
543 | ("Latin_Small_Letter_Closed_Omega" . #\u+0277) |
---|
544 | ("Latin_Small_Letter_Phi" . #\u+0278) |
---|
545 | ("Latin_Small_Letter_Turned_R" . #\u+0279) |
---|
546 | ("Latin_Small_Letter_Turned_R_With_Long_Leg" . #\u+027a) |
---|
547 | ("Latin_Small_Letter_Turned_R_With_Hook" . #\u+027b) |
---|
548 | ("Latin_Small_Letter_R_With_Long_Leg" . #\u+027c) |
---|
549 | ("Latin_Small_Letter_R_With_Tail" . #\u+027d) |
---|
550 | ("Latin_Small_Letter_R_With_Fishhook" . #\u+027e) |
---|
551 | ("Latin_Small_Letter_Reversed_R_With_Fishhook" . #\u+027f) |
---|
552 | ("Latin_Letter_Small_Capital_R" . #\u+0280) |
---|
553 | ("Latin_Letter_Small_Capital_Inverted_R" . #\u+0281) |
---|
554 | ("Latin_Small_Letter_S_With_Hook" . #\u+0282) |
---|
555 | ("Latin_Small_Letter_Esh" . #\u+0283) |
---|
556 | ("Latin_Small_Letter_Dotless_J_With_Stroke_And_Hook" . #\u+0284) |
---|
557 | ("Latin_Small_Letter_Squat_Reversed_Esh" . #\u+0285) |
---|
558 | ("Latin_Small_Letter_Esh_With_Curl" . #\u+0286) |
---|
559 | ("Latin_Small_Letter_Turned_T" . #\u+0287) |
---|
560 | ("Latin_Small_Letter_T_With_Retroflex_Hook" . #\u+0288) |
---|
561 | ("Latin_Small_Letter_U_Bar" . #\u+0289) |
---|
562 | ("Latin_Small_Letter_Upsilon" . #\u+028a) |
---|
563 | ("Latin_Small_Letter_V_With_Hook" . #\u+028b) |
---|
564 | ("Latin_Small_Letter_Turned_V" . #\u+028c) |
---|
565 | ("Latin_Small_Letter_Turned_W" . #\u+028d) |
---|
566 | ("Latin_Small_Letter_Turned_Y" . #\u+028e) |
---|
567 | ("Latin_Letter_Small_Capital_Y" . #\u+028f) |
---|
568 | ("Latin_Small_Letter_Z_With_Retroflex_Hook" . #\u+0290) |
---|
569 | ("Latin_Small_Letter_Z_With_Curl" . #\u+0291) |
---|
570 | ("Latin_Small_Letter_Ezh" . #\u+0292) |
---|
571 | ("Latin_Small_Letter_Ezh_With_Curl" . #\u+0293) |
---|
572 | ("Latin_Letter_Glottal_Stop" . #\u+0294) |
---|
573 | ("Latin_Letter_Pharyngeal_Voiced_Fricative" . #\u+0295) |
---|
574 | ("Latin_Letter_Inverted_Glottal_Stop" . #\u+0296) |
---|
575 | ("Latin_Letter_Stretched_C" . #\u+0297) |
---|
576 | ("Latin_Letter_Bilabial_Click" . #\u+0298) |
---|
577 | ("Latin_Letter_Small_Capital_B" . #\u+0299) |
---|
578 | ("Latin_Small_Letter_Closed_Open_E" . #\u+029a) |
---|
579 | ("Latin_Letter_Small_Capital_G_With_Hook" . #\u+029b) |
---|
580 | ("Latin_Letter_Small_Capital_H" . #\u+029c) |
---|
581 | ("Latin_Small_Letter_J_With_Crossed-Tail" . #\u+029d) |
---|
582 | ("Latin_Small_Letter_Turned_K" . #\u+029e) |
---|
583 | ("Latin_Letter_Small_Capital_L" . #\u+029f) |
---|
584 | ("Latin_Small_Letter_Q_With_Hook" . #\u+02a0) |
---|
585 | ("Latin_Letter_Glottal_Stop_With_Stroke" . #\u+02a1) |
---|
586 | ("Latin_Letter_Reversed_Glottal_Stop_With_Stroke" . #\u+02a2) |
---|
587 | ("Latin_Small_Letter_Dz_Digraph" . #\u+02a3) |
---|
588 | ("Latin_Small_Letter_Dezh_Digraph" . #\u+02a4) |
---|
589 | ("Latin_Small_Letter_Dz_Digraph_With_Curl" . #\u+02a5) |
---|
590 | ("Latin_Small_Letter_Ts_Digraph" . #\u+02a6) |
---|
591 | ("Latin_Small_Letter_Tesh_Digraph" . #\u+02a7) |
---|
592 | ("Latin_Small_Letter_Tc_Digraph_With_Curl" . #\u+02a8) |
---|
593 | ("Latin_Small_Letter_Feng_Digraph" . #\u+02a9) |
---|
594 | ("Latin_Small_Letter_Ls_Digraph" . #\u+02aa) |
---|
595 | ("Latin_Small_Letter_Lz_Digraph" . #\u+02ab) |
---|
596 | ("Latin_Letter_Bilabial_Percussive" . #\u+02ac) |
---|
597 | ("Latin_Letter_Bidental_Percussive" . #\u+02ad) |
---|
598 | ("Latin_Small_Letter_Turned_H_With_Fishhook" . #\u+02ae) |
---|
599 | ("Latin_Small_Letter_Turned_H_With_Fishhook_And_Tail" . #\u+02af) |
---|
600 | ("Modifier_Letter_Small_H" . #\u+02b0) |
---|
601 | ("Modifier_Letter_Small_H_With_Hook" . #\u+02b1) |
---|
602 | ("Modifier_Letter_Small_J" . #\u+02b2) |
---|
603 | ("Modifier_Letter_Small_R" . #\u+02b3) |
---|
604 | ("Modifier_Letter_Small_Turned_R" . #\u+02b4) |
---|
605 | ("Modifier_Letter_Small_Turned_R_With_Hook" . #\u+02b5) |
---|
606 | ("Modifier_Letter_Small_Capital_Inverted_R" . #\u+02b6) |
---|
607 | ("Modifier_Letter_Small_W" . #\u+02b7) |
---|
608 | ("Modifier_Letter_Small_Y" . #\u+02b8) |
---|
609 | ("Modifier_Letter_Prime" . #\u+02b9) |
---|
610 | ("Modifier_Letter_Double_Prime" . #\u+02ba) |
---|
611 | ("Modifier_Letter_Turned_Comma" . #\u+02bb) |
---|
612 | ("Modifier_Letter_Apostrophe" . #\u+02bc) |
---|
613 | ("Modifier_Letter_Reversed_Comma" . #\u+02bd) |
---|
614 | ("Modifier_Letter_Right_Half_Ring" . #\u+02be) |
---|
615 | ("Modifier_Letter_Left_Half_Ring" . #\u+02bf) |
---|
616 | ("Modifier_Letter_Glottal_Stop" . #\u+02c0) |
---|
617 | ("Modifier_Letter_Reversed_Glottal_Stop" . #\u+02c1) |
---|
618 | ("Modifier_Letter_Left_Arrowhead" . #\u+02c2) |
---|
619 | ("Modifier_Letter_Right_Arrowhead" . #\u+02c3) |
---|
620 | ("Modifier_Letter_Up_Arrowhead" . #\u+02c4) |
---|
621 | ("Modifier_Letter_Down_Arrowhead" . #\u+02c5) |
---|
622 | ("Modifier_Letter_Circumflex_Accent" . #\u+02c6) |
---|
623 | ("Caron" . #\u+02c7) |
---|
624 | ("Modifier_Letter_Vertical_Line" . #\u+02c8) |
---|
625 | ("Modifier_Letter_Macron" . #\u+02c9) |
---|
626 | ("Modifier_Letter_Acute_Accent" . #\u+02ca) |
---|
627 | ("Modifier_Letter_Grave_Accent" . #\u+02cb) |
---|
628 | ("Modifier_Letter_Low_Vertical_Line" . #\u+02cc) |
---|
629 | ("Modifier_Letter_Low_Macron" . #\u+02cd) |
---|
630 | ("Modifier_Letter_Low_Grave_Accent" . #\u+02ce) |
---|
631 | ("Modifier_Letter_Low_Acute_Accent" . #\u+02cf) |
---|
632 | ("Modifier_Letter_Triangular_Colon" . #\u+02d0) |
---|
633 | ("Modifier_Letter_Half_Triangular_Colon" . #\u+02d1) |
---|
634 | ("Modifier_Letter_Centred_Right_Half_Ring" . #\u+02d2) |
---|
635 | ("Modifier_Letter_Centred_Left_Half_Ring" . #\u+02d3) |
---|
636 | ("Modifier_Letter_Up_Tack" . #\u+02d4) |
---|
637 | ("Modifier_Letter_Down_Tack" . #\u+02d5) |
---|
638 | ("Modifier_Letter_Plus_Sign" . #\u+02d6) |
---|
639 | ("Modifier_Letter_Minus_Sign" . #\u+02d7) |
---|
640 | ("Breve" . #\u+02d8) |
---|
641 | ("Dot_Above" . #\u+02d9) |
---|
642 | ("Ring_Above" . #\u+02da) |
---|
643 | ("Ogonek" . #\u+02db) |
---|
644 | ("Small_Tilde" . #\u+02dc) |
---|
645 | ("Double_Acute_Accent" . #\u+02dd) |
---|
646 | ("Modifier_Letter_Rhotic_Hook" . #\u+02de) |
---|
647 | ("Modifier_Letter_Cross_Accent" . #\u+02df) |
---|
648 | ("Modifier_Letter_Small_Gamma" . #\u+02e0) |
---|
649 | ("Modifier_Letter_Small_L" . #\u+02e1) |
---|
650 | ("Modifier_Letter_Small_S" . #\u+02e2) |
---|
651 | ("Modifier_Letter_Small_X" . #\u+02e3) |
---|
652 | ("Modifier_Letter_Small_Reversed_Glottal_Stop" . #\u+02e4) |
---|
653 | ("Modifier_Letter_Extra-High_Tone_Bar" . #\u+02e5) |
---|
654 | ("Modifier_Letter_High_Tone_Bar" . #\u+02e6) |
---|
655 | ("Modifier_Letter_Mid_Tone_Bar" . #\u+02e7) |
---|
656 | ("Modifier_Letter_Low_Tone_Bar" . #\u+02e8) |
---|
657 | ("Modifier_Letter_Extra-Low_Tone_Bar" . #\u+02e9) |
---|
658 | ("Modifier_Letter_Yin_Departing_Tone_Mark" . #\u+02ea) |
---|
659 | ("Modifier_Letter_Yang_Departing_Tone_Mark" . #\u+02eb) |
---|
660 | ("Modifier_Letter_Voicing" . #\u+02ec) |
---|
661 | ("Modifier_Letter_Unaspirated" . #\u+02ed) |
---|
662 | ("Modifier_Letter_Double_Apostrophe" . #\u+02ee) |
---|
663 | ("Modifier_Letter_Low_Down_Arrowhead" . #\u+02ef) |
---|
664 | ("Modifier_Letter_Low_Up_Arrowhead" . #\u+02f0) |
---|
665 | ("Modifier_Letter_Low_Left_Arrowhead" . #\u+02f1) |
---|
666 | ("Modifier_Letter_Low_Right_Arrowhead" . #\u+02f2) |
---|
667 | ("Modifier_Letter_Low_Ring" . #\u+02f3) |
---|
668 | ("Modifier_Letter_Middle_Grave_Accent" . #\u+02f4) |
---|
669 | ("Modifier_Letter_Middle_Double_Grave_Accent" . #\u+02f5) |
---|
670 | ("Modifier_Letter_Middle_Double_Acute_Accent" . #\u+02f6) |
---|
671 | ("Modifier_Letter_Low_Tilde" . #\u+02f7) |
---|
672 | ("Modifier_Letter_Raised_Colon" . #\u+02f8) |
---|
673 | ("Modifier_Letter_Begin_High_Tone" . #\u+02f9) |
---|
674 | ("Modifier_Letter_End_High_Tone" . #\u+02fa) |
---|
675 | ("Modifier_Letter_Begin_Low_Tone" . #\u+02fb) |
---|
676 | ("Modifier_Letter_End_Low_Tone" . #\u+02fc) |
---|
677 | ("Modifier_Letter_Shelf" . #\u+02fd) |
---|
678 | ("Modifier_Letter_Open_Shelf" . #\u+02fe) |
---|
679 | ("Modifier_Letter_Low_Left_Arrow" . #\u+02ff) |
---|
680 | ("Combining_Grave_Accent" . #\u+0300) |
---|
681 | ("Combining_Acute_Accent" . #\u+0301) |
---|
682 | ("Combining_Circumflex_Accent" . #\u+0302) |
---|
683 | ("Combining_Tilde" . #\u+0303) |
---|
684 | ("Combining_Macron" . #\u+0304) |
---|
685 | ("Combining_Overline" . #\u+0305) |
---|
686 | ("Combining_Breve" . #\u+0306) |
---|
687 | ("Combining_Dot_Above" . #\u+0307) |
---|
688 | ("Combining_Diaeresis" . #\u+0308) |
---|
689 | ("Combining_Hook_Above" . #\u+0309) |
---|
690 | ("Combining_Ring_Above" . #\u+030a) |
---|
691 | ("Combining_Double_Acute_Accent" . #\u+030b) |
---|
692 | ("Combining_Caron" . #\u+030c) |
---|
693 | ("Combining_Vertical_Line_Above" . #\u+030d) |
---|
694 | ("Combining_Double_Vertical_Line_Above" . #\u+030e) |
---|
695 | ("Combining_Double_Grave_Accent" . #\u+030f) |
---|
696 | ("Combining_Candrabindu" . #\u+0310) |
---|
697 | ("Combining_Inverted_Breve" . #\u+0311) |
---|
698 | ("Combining_Turned_Comma_Above" . #\u+0312) |
---|
699 | ("Combining_Comma_Above" . #\u+0313) |
---|
700 | ("Combining_Reversed_Comma_Above" . #\u+0314) |
---|
701 | ("Combining_Comma_Above_Right" . #\u+0315) |
---|
702 | ("Combining_Grave_Accent_Below" . #\u+0316) |
---|
703 | ("Combining_Acute_Accent_Below" . #\u+0317) |
---|
704 | ("Combining_Left_Tack_Below" . #\u+0318) |
---|
705 | ("Combining_Right_Tack_Below" . #\u+0319) |
---|
706 | ("Combining_Left_Angle_Above" . #\u+031a) |
---|
707 | ("Combining_Horn" . #\u+031b) |
---|
708 | ("Combining_Left_Half_Ring_Below" . #\u+031c) |
---|
709 | ("Combining_Up_Tack_Below" . #\u+031d) |
---|
710 | ("Combining_Down_Tack_Below" . #\u+031e) |
---|
711 | ("Combining_Plus_Sign_Below" . #\u+031f) |
---|
712 | ("Combining_Minus_Sign_Below" . #\u+0320) |
---|
713 | ("Combining_Palatalized_Hook_Below" . #\u+0321) |
---|
714 | ("Combining_Retroflex_Hook_Below" . #\u+0322) |
---|
715 | ("Combining_Dot_Below" . #\u+0323) |
---|
716 | ("Combining_Diaeresis_Below" . #\u+0324) |
---|
717 | ("Combining_Ring_Below" . #\u+0325) |
---|
718 | ("Combining_Comma_Below" . #\u+0326) |
---|
719 | ("Combining_Cedilla" . #\u+0327) |
---|
720 | ("Combining_Ogonek" . #\u+0328) |
---|
721 | ("Combining_Vertical_Line_Below" . #\u+0329) |
---|
722 | ("Combining_Bridge_Below" . #\u+032a) |
---|
723 | ("Combining_Inverted_Double_Arch_Below" . #\u+032b) |
---|
724 | ("Combining_Caron_Below" . #\u+032c) |
---|
725 | ("Combining_Circumflex_Accent_Below" . #\u+032d) |
---|
726 | ("Combining_Breve_Below" . #\u+032e) |
---|
727 | ("Combining_Inverted_Breve_Below" . #\u+032f) |
---|
728 | ("Combining_Tilde_Below" . #\u+0330) |
---|
729 | ("Combining_Macron_Below" . #\u+0331) |
---|
730 | ("Combining_Low_Line" . #\u+0332) |
---|
731 | ("Combining_Double_Low_Line" . #\u+0333) |
---|
732 | ("Combining_Tilde_Overlay" . #\u+0334) |
---|
733 | ("Combining_Short_Stroke_Overlay" . #\u+0335) |
---|
734 | ("Combining_Long_Stroke_Overlay" . #\u+0336) |
---|
735 | ("Combining_Short_Solidus_Overlay" . #\u+0337) |
---|
736 | ("Combining_Long_Solidus_Overlay" . #\u+0338) |
---|
737 | ("Combining_Right_Half_Ring_Below" . #\u+0339) |
---|
738 | ("Combining_Inverted_Bridge_Below" . #\u+033a) |
---|
739 | ("Combining_Square_Below" . #\u+033b) |
---|
740 | ("Combining_Seagull_Below" . #\u+033c) |
---|
741 | ("Combining_X_Above" . #\u+033d) |
---|
742 | ("Combining_Vertical_Tilde" . #\u+033e) |
---|
743 | ("Combining_Double_Overline" . #\u+033f) |
---|
744 | ("Combining_Grave_Tone_Mark" . #\u+0340) |
---|
745 | ("Combining_Acute_Tone_Mark" . #\u+0341) |
---|
746 | ("Combining_Greek_Perispomeni" . #\u+0342) |
---|
747 | ("Combining_Greek_Koronis" . #\u+0343) |
---|
748 | ("Combining_Greek_Dialytika_Tonos" . #\u+0344) |
---|
749 | ("Combining_Greek_Ypogegrammeni" . #\u+0345) |
---|
750 | ("Combining_Bridge_Above" . #\u+0346) |
---|
751 | ("Combining_Equals_Sign_Below" . #\u+0347) |
---|
752 | ("Combining_Double_Vertical_Line_Below" . #\u+0348) |
---|
753 | ("Combining_Left_Angle_Below" . #\u+0349) |
---|
754 | ("Combining_Not_Tilde_Above" . #\u+034a) |
---|
755 | ("Combining_Homothetic_Above" . #\u+034b) |
---|
756 | ("Combining_Almost_Equal_To_Above" . #\u+034c) |
---|
757 | ("Combining_Left_Right_Arrow_Below" . #\u+034d) |
---|
758 | ("Combining_Upwards_Arrow_Below" . #\u+034e) |
---|
759 | ("Combining_Grapheme_Joiner" . #\u+034f) |
---|
760 | ("Combining_Right_Arrowhead_Above" . #\u+0350) |
---|
761 | ("Combining_Left_Half_Ring_Above" . #\u+0351) |
---|
762 | ("Combining_Fermata" . #\u+0352) |
---|
763 | ("Combining_X_Below" . #\u+0353) |
---|
764 | ("Combining_Left_Arrowhead_Below" . #\u+0354) |
---|
765 | ("Combining_Right_Arrowhead_Below" . #\u+0355) |
---|
766 | ("Combining_Right_Arrowhead_And_Up_Arrowhead_Below" . #\u+0356) |
---|
767 | ("Combining_Right_Half_Ring_Above" . #\u+0357) |
---|
768 | ("Combining_Dot_Above_Right" . #\u+0358) |
---|
769 | ("Combining_Asterisk_Below" . #\u+0359) |
---|
770 | ("Combining_Double_Ring_Below" . #\u+035a) |
---|
771 | ("Combining_Zigzag_Above" . #\u+035b) |
---|
772 | ("Combining_Double_Breve_Below" . #\u+035c) |
---|
773 | ("Combining_Double_Breve" . #\u+035d) |
---|
774 | ("Combining_Double_Macron" . #\u+035e) |
---|
775 | ("Combining_Double_Macron_Below" . #\u+035f) |
---|
776 | ("Combining_Double_Tilde" . #\u+0360) |
---|
777 | ("Combining_Double_Inverted_Breve" . #\u+0361) |
---|
778 | ("Combining_Double_Rightwards_Arrow_Below" . #\u+0362) |
---|
779 | ("Combining_Latin_Small_Letter_A" . #\u+0363) |
---|
780 | ("Combining_Latin_Small_Letter_E" . #\u+0364) |
---|
781 | ("Combining_Latin_Small_Letter_I" . #\u+0365) |
---|
782 | ("Combining_Latin_Small_Letter_O" . #\u+0366) |
---|
783 | ("Combining_Latin_Small_Letter_U" . #\u+0367) |
---|
784 | ("Combining_Latin_Small_Letter_C" . #\u+0368) |
---|
785 | ("Combining_Latin_Small_Letter_D" . #\u+0369) |
---|
786 | ("Combining_Latin_Small_Letter_H" . #\u+036a) |
---|
787 | ("Combining_Latin_Small_Letter_M" . #\u+036b) |
---|
788 | ("Combining_Latin_Small_Letter_R" . #\u+036c) |
---|
789 | ("Combining_Latin_Small_Letter_T" . #\u+036d) |
---|
790 | ("Combining_Latin_Small_Letter_V" . #\u+036e) |
---|
791 | ("Combining_Latin_Small_Letter_X" . #\u+036f) |
---|
792 | ("Greek_Numeral_Sign" . #\u+0374) |
---|
793 | ("Greek_Lower_Numeral_Sign" . #\u+0375) |
---|
794 | ("Greek_Ypogegrammeni" . #\u+037a) |
---|
795 | ("Greek_Small_Reversed_Lunate_Sigma_Symbol" . #\u+037b) |
---|
796 | ("Greek_Small_Dotted_Lunate_Sigma_Symbol" . #\u+037c) |
---|
797 | ("Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol" . #\u+037d) |
---|
798 | ("Greek_Question_Mark" . #\u+037e) |
---|
799 | ("Greek_Tonos" . #\u+0384) |
---|
800 | ("Greek_Dialytika_Tonos" . #\u+0385) |
---|
801 | ("Greek_Capital_Letter_Alpha_With_Tonos" . #\u+0386) |
---|
802 | ("Greek_Ano_Teleia" . #\u+0387) |
---|
803 | ("Greek_Capital_Letter_Epsilon_With_Tonos" . #\u+0388) |
---|
804 | ("Greek_Capital_Letter_Eta_With_Tonos" . #\u+0389) |
---|
805 | ("Greek_Capital_Letter_Iota_With_Tonos" . #\u+038a) |
---|
806 | ("Greek_Capital_Letter_Omicron_With_Tonos" . #\u+038c) |
---|
807 | ("Greek_Capital_Letter_Upsilon_With_Tonos" . #\u+038e) |
---|
808 | ("Greek_Capital_Letter_Omega_With_Tonos" . #\u+038f) |
---|
809 | ("Greek_Small_Letter_Iota_With_Dialytika_And_Tonos" . #\u+0390) |
---|
810 | ("Greek_Capital_Letter_Alpha" . #\u+0391) |
---|
811 | ("Greek_Capital_Letter_Beta" . #\u+0392) |
---|
812 | ("Greek_Capital_Letter_Gamma" . #\u+0393) |
---|
813 | ("Greek_Capital_Letter_Delta" . #\u+0394) |
---|
814 | ("Greek_Capital_Letter_Epsilon" . #\u+0395) |
---|
815 | ("Greek_Capital_Letter_Zeta" . #\u+0396) |
---|
816 | ("Greek_Capital_Letter_Eta" . #\u+0397) |
---|
817 | ("Greek_Capital_Letter_Theta" . #\u+0398) |
---|
818 | ("Greek_Capital_Letter_Iota" . #\u+0399) |
---|
819 | ("Greek_Capital_Letter_Kappa" . #\u+039a) |
---|
820 | ("Greek_Capital_Letter_Lamda" . #\u+039b) |
---|
821 | ("Greek_Capital_Letter_Mu" . #\u+039c) |
---|
822 | ("Greek_Capital_Letter_Nu" . #\u+039d) |
---|
823 | ("Greek_Capital_Letter_Xi" . #\u+039e) |
---|
824 | ("Greek_Capital_Letter_Omicron" . #\u+039f) |
---|
825 | ("Greek_Capital_Letter_Pi" . #\u+03a0) |
---|
826 | ("Greek_Capital_Letter_Rho" . #\u+03a1) |
---|
827 | ("Greek_Capital_Letter_Sigma" . #\u+03a3) |
---|
828 | ("Greek_Capital_Letter_Tau" . #\u+03a4) |
---|
829 | ("Greek_Capital_Letter_Upsilon" . #\u+03a5) |
---|
830 | ("Greek_Capital_Letter_Phi" . #\u+03a6) |
---|
831 | ("Greek_Capital_Letter_Chi" . #\u+03a7) |
---|
832 | ("Greek_Capital_Letter_Psi" . #\u+03a8) |
---|
833 | ("Greek_Capital_Letter_Omega" . #\u+03a9) |
---|
834 | ("Greek_Capital_Letter_Iota_With_Dialytika" . #\u+03aa) |
---|
835 | ("Greek_Capital_Letter_Upsilon_With_Dialytika" . #\u+03ab) |
---|
836 | ("Greek_Small_Letter_Alpha_With_Tonos" . #\u+03ac) |
---|
837 | ("Greek_Small_Letter_Epsilon_With_Tonos" . #\u+03ad) |
---|
838 | ("Greek_Small_Letter_Eta_With_Tonos" . #\u+03ae) |
---|
839 | ("Greek_Small_Letter_Iota_With_Tonos" . #\u+03af) |
---|
840 | ("Greek_Small_Letter_Upsilon_With_Dialytika_And_Tonos" . #\u+03b0) |
---|
841 | ("Greek_Small_Letter_Alpha" . #\u+03b1) |
---|
842 | ("Greek_Small_Letter_Beta" . #\u+03b2) |
---|
843 | ("Greek_Small_Letter_Gamma" . #\u+03b3) |
---|
844 | ("Greek_Small_Letter_Delta" . #\u+03b4) |
---|
845 | ("Greek_Small_Letter_Epsilon" . #\u+03b5) |
---|
846 | ("Greek_Small_Letter_Zeta" . #\u+03b6) |
---|
847 | ("Greek_Small_Letter_Eta" . #\u+03b7) |
---|
848 | ("Greek_Small_Letter_Theta" . #\u+03b8) |
---|
849 | ("Greek_Small_Letter_Iota" . #\u+03b9) |
---|
850 | ("Greek_Small_Letter_Kappa" . #\u+03ba) |
---|
851 | ("Greek_Small_Letter_Lamda" . #\u+03bb) |
---|
852 | ("Greek_Small_Letter_Mu" . #\u+03bc) |
---|
853 | ("Greek_Small_Letter_Nu" . #\u+03bd) |
---|
854 | ("Greek_Small_Letter_Xi" . #\u+03be) |
---|
855 | ("Greek_Small_Letter_Omicron" . #\u+03bf) |
---|
856 | ("Greek_Small_Letter_Pi" . #\u+03c0) |
---|
857 | ("Greek_Small_Letter_Rho" . #\u+03c1) |
---|
858 | ("Greek_Small_Letter_Final_Sigma" . #\u+03c2) |
---|
859 | ("Greek_Small_Letter_Sigma" . #\u+03c3) |
---|
860 | ("Greek_Small_Letter_Tau" . #\u+03c4) |
---|
861 | ("Greek_Small_Letter_Upsilon" . #\u+03c5) |
---|
862 | ("Greek_Small_Letter_Phi" . #\u+03c6) |
---|
863 | ("Greek_Small_Letter_Chi" . #\u+03c7) |
---|
864 | ("Greek_Small_Letter_Psi" . #\u+03c8) |
---|
865 | ("Greek_Small_Letter_Omega" . #\u+03c9) |
---|
866 | ("Greek_Small_Letter_Iota_With_Dialytika" . #\u+03ca) |
---|
867 | ("Greek_Small_Letter_Upsilon_With_Dialytika" . #\u+03cb) |
---|
868 | ("Greek_Small_Letter_Omicron_With_Tonos" . #\u+03cc) |
---|
869 | ("Greek_Small_Letter_Upsilon_With_Tonos" . #\u+03cd) |
---|
870 | ("Greek_Small_Letter_Omega_With_Tonos" . #\u+03ce) |
---|
871 | ("Greek_Beta_Symbol" . #\u+03d0) |
---|
872 | ("Greek_Theta_Symbol" . #\u+03d1) |
---|
873 | ("Greek_Upsilon_With_Hook_Symbol" . #\u+03d2) |
---|
874 | ("Greek_Upsilon_With_Acute_And_Hook_Symbol" . #\u+03d3) |
---|
875 | ("Greek_Upsilon_With_Diaeresis_And_Hook_Symbol" . #\u+03d4) |
---|
876 | ("Greek_Phi_Symbol" . #\u+03d5) |
---|
877 | ("Greek_Pi_Symbol" . #\u+03d6) |
---|
878 | ("Greek_Kai_Symbol" . #\u+03d7) |
---|
879 | ("Greek_Letter_Archaic_Koppa" . #\u+03d8) |
---|
880 | ("Greek_Small_Letter_Archaic_Koppa" . #\u+03d9) |
---|
881 | ("Greek_Letter_Stigma" . #\u+03da) |
---|
882 | ("Greek_Small_Letter_Stigma" . #\u+03db) |
---|
883 | ("Greek_Letter_Digamma" . #\u+03dc) |
---|
884 | ("Greek_Small_Letter_Digamma" . #\u+03dd) |
---|
885 | ("Greek_Letter_Koppa" . #\u+03de) |
---|
886 | ("Greek_Small_Letter_Koppa" . #\u+03df) |
---|
887 | ("Greek_Letter_Sampi" . #\u+03e0) |
---|
888 | ("Greek_Small_Letter_Sampi" . #\u+03e1) |
---|
889 | ("Coptic_Capital_Letter_Shei" . #\u+03e2) |
---|
890 | ("Coptic_Small_Letter_Shei" . #\u+03e3) |
---|
891 | ("Coptic_Capital_Letter_Fei" . #\u+03e4) |
---|
892 | ("Coptic_Small_Letter_Fei" . #\u+03e5) |
---|
893 | ("Coptic_Capital_Letter_Khei" . #\u+03e6) |
---|
894 | ("Coptic_Small_Letter_Khei" . #\u+03e7) |
---|
895 | ("Coptic_Capital_Letter_Hori" . #\u+03e8) |
---|
896 | ("Coptic_Small_Letter_Hori" . #\u+03e9) |
---|
897 | ("Coptic_Capital_Letter_Gangia" . #\u+03ea) |
---|
898 | ("Coptic_Small_Letter_Gangia" . #\u+03eb) |
---|
899 | ("Coptic_Capital_Letter_Shima" . #\u+03ec) |
---|
900 | ("Coptic_Small_Letter_Shima" . #\u+03ed) |
---|
901 | ("Coptic_Capital_Letter_Dei" . #\u+03ee) |
---|
902 | ("Coptic_Small_Letter_Dei" . #\u+03ef) |
---|
903 | ("Greek_Kappa_Symbol" . #\u+03f0) |
---|
904 | ("Greek_Rho_Symbol" . #\u+03f1) |
---|
905 | ("Greek_Lunate_Sigma_Symbol" . #\u+03f2) |
---|
906 | ("Greek_Letter_Yot" . #\u+03f3) |
---|
907 | ("Greek_Capital_Theta_Symbol" . #\u+03f4) |
---|
908 | ("Greek_Lunate_Epsilon_Symbol" . #\u+03f5) |
---|
909 | ("Greek_Reversed_Lunate_Epsilon_Symbol" . #\u+03f6) |
---|
910 | ("Greek_Capital_Letter_Sho" . #\u+03f7) |
---|
911 | ("Greek_Small_Letter_Sho" . #\u+03f8) |
---|
912 | ("Greek_Capital_Lunate_Sigma_Symbol" . #\u+03f9) |
---|
913 | ("Greek_Capital_Letter_San" . #\u+03fa) |
---|
914 | ("Greek_Small_Letter_San" . #\u+03fb) |
---|
915 | ("Greek_Rho_With_Stroke_Symbol" . #\u+03fc) |
---|
916 | ("Greek_Capital_Reversed_Lunate_Sigma_Symbol" . #\u+03fd) |
---|
917 | ("Greek_Capital_Dotted_Lunate_Sigma_Symbol" . #\u+03fe) |
---|
918 | ("Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol" . #\u+03ff) |
---|
919 | ("Cyrillic_Capital_Letter_Ie_With_Grave" . #\u+0400) |
---|
920 | ("Cyrillic_Capital_Letter_Io" . #\u+0401) |
---|
921 | ("Cyrillic_Capital_Letter_Dje" . #\u+0402) |
---|
922 | ("Cyrillic_Capital_Letter_Gje" . #\u+0403) |
---|
923 | ("Cyrillic_Capital_Letter_Ukrainian_Ie" . #\u+0404) |
---|
924 | ("Cyrillic_Capital_Letter_Dze" . #\u+0405) |
---|
925 | ("Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I" . #\u+0406) |
---|
926 | ("Cyrillic_Capital_Letter_Yi" . #\u+0407) |
---|
927 | ("Cyrillic_Capital_Letter_Je" . #\u+0408) |
---|
928 | ("Cyrillic_Capital_Letter_Lje" . #\u+0409) |
---|
929 | ("Cyrillic_Capital_Letter_Nje" . #\u+040a) |
---|
930 | ("Cyrillic_Capital_Letter_Tshe" . #\u+040b) |
---|
931 | ("Cyrillic_Capital_Letter_Kje" . #\u+040c) |
---|
932 | ("Cyrillic_Capital_Letter_I_With_Grave" . #\u+040d) |
---|
933 | ("Cyrillic_Capital_Letter_Short_U" . #\u+040e) |
---|
934 | ("Cyrillic_Capital_Letter_Dzhe" . #\u+040f) |
---|
935 | ("Cyrillic_Capital_Letter_A" . #\u+0410) |
---|
936 | ("Cyrillic_Capital_Letter_Be" . #\u+0411) |
---|
937 | ("Cyrillic_Capital_Letter_Ve" . #\u+0412) |
---|
938 | ("Cyrillic_Capital_Letter_Ghe" . #\u+0413) |
---|
939 | ("Cyrillic_Capital_Letter_De" . #\u+0414) |
---|
940 | ("Cyrillic_Capital_Letter_Ie" . #\u+0415) |
---|
941 | ("Cyrillic_Capital_Letter_Zhe" . #\u+0416) |
---|
942 | ("Cyrillic_Capital_Letter_Ze" . #\u+0417) |
---|
943 | ("Cyrillic_Capital_Letter_I" . #\u+0418) |
---|
944 | ("Cyrillic_Capital_Letter_Short_I" . #\u+0419) |
---|
945 | ("Cyrillic_Capital_Letter_Ka" . #\u+041a) |
---|
946 | ("Cyrillic_Capital_Letter_El" . #\u+041b) |
---|
947 | ("Cyrillic_Capital_Letter_Em" . #\u+041c) |
---|
948 | ("Cyrillic_Capital_Letter_En" . #\u+041d) |
---|
949 | ("Cyrillic_Capital_Letter_O" . #\u+041e) |
---|
950 | ("Cyrillic_Capital_Letter_Pe" . #\u+041f) |
---|
951 | ("Cyrillic_Capital_Letter_Er" . #\u+0420) |
---|
952 | ("Cyrillic_Capital_Letter_Es" . #\u+0421) |
---|
953 | ("Cyrillic_Capital_Letter_Te" . #\u+0422) |
---|
954 | ("Cyrillic_Capital_Letter_U" . #\u+0423) |
---|
955 | ("Cyrillic_Capital_Letter_Ef" . #\u+0424) |
---|
956 | ("Cyrillic_Capital_Letter_Ha" . #\u+0425) |
---|
957 | ("Cyrillic_Capital_Letter_Tse" . #\u+0426) |
---|
958 | ("Cyrillic_Capital_Letter_Che" . #\u+0427) |
---|
959 | ("Cyrillic_Capital_Letter_Sha" . #\u+0428) |
---|
960 | ("Cyrillic_Capital_Letter_Shcha" . #\u+0429) |
---|
961 | ("Cyrillic_Capital_Letter_Hard_Sign" . #\u+042a) |
---|
962 | ("Cyrillic_Capital_Letter_Yeru" . #\u+042b) |
---|
963 | ("Cyrillic_Capital_Letter_Soft_Sign" . #\u+042c) |
---|
964 | ("Cyrillic_Capital_Letter_E" . #\u+042d) |
---|
965 | ("Cyrillic_Capital_Letter_Yu" . #\u+042e) |
---|
966 | ("Cyrillic_Capital_Letter_Ya" . #\u+042f) |
---|
967 | ("Cyrillic_Small_Letter_A" . #\u+0430) |
---|
968 | ("Cyrillic_Small_Letter_Be" . #\u+0431) |
---|
969 | ("Cyrillic_Small_Letter_Ve" . #\u+0432) |
---|
970 | ("Cyrillic_Small_Letter_Ghe" . #\u+0433) |
---|
971 | ("Cyrillic_Small_Letter_De" . #\u+0434) |
---|
972 | ("Cyrillic_Small_Letter_Ie" . #\u+0435) |
---|
973 | ("Cyrillic_Small_Letter_Zhe" . #\u+0436) |
---|
974 | ("Cyrillic_Small_Letter_Ze" . #\u+0437) |
---|
975 | ("Cyrillic_Small_Letter_I" . #\u+0438) |
---|
976 | ("Cyrillic_Small_Letter_Short_I" . #\u+0439) |
---|
977 | ("Cyrillic_Small_Letter_Ka" . #\u+043a) |
---|
978 | ("Cyrillic_Small_Letter_El" . #\u+043b) |
---|
979 | ("Cyrillic_Small_Letter_Em" . #\u+043c) |
---|
980 | ("Cyrillic_Small_Letter_En" . #\u+043d) |
---|
981 | ("Cyrillic_Small_Letter_O" . #\u+043e) |
---|
982 | ("Cyrillic_Small_Letter_Pe" . #\u+043f) |
---|
983 | ("Cyrillic_Small_Letter_Er" . #\u+0440) |
---|
984 | ("Cyrillic_Small_Letter_Es" . #\u+0441) |
---|
985 | ("Cyrillic_Small_Letter_Te" . #\u+0442) |
---|
986 | ("Cyrillic_Small_Letter_U" . #\u+0443) |
---|
987 | ("Cyrillic_Small_Letter_Ef" . #\u+0444) |
---|
988 | ("Cyrillic_Small_Letter_Ha" . #\u+0445) |
---|
989 | ("Cyrillic_Small_Letter_Tse" . #\u+0446) |
---|
990 | ("Cyrillic_Small_Letter_Che" . #\u+0447) |
---|
991 | ("Cyrillic_Small_Letter_Sha" . #\u+0448) |
---|
992 | ("Cyrillic_Small_Letter_Shcha" . #\u+0449) |
---|
993 | ("Cyrillic_Small_Letter_Hard_Sign" . #\u+044a) |
---|
994 | ("Cyrillic_Small_Letter_Yeru" . #\u+044b) |
---|
995 | ("Cyrillic_Small_Letter_Soft_Sign" . #\u+044c) |
---|
996 | ("Cyrillic_Small_Letter_E" . #\u+044d) |
---|
997 | ("Cyrillic_Small_Letter_Yu" . #\u+044e) |
---|
998 | ("Cyrillic_Small_Letter_Ya" . #\u+044f) |
---|
999 | ("Cyrillic_Small_Letter_Ie_With_Grave" . #\u+0450) |
---|
1000 | ("Cyrillic_Small_Letter_Io" . #\u+0451) |
---|
1001 | ("Cyrillic_Small_Letter_Dje" . #\u+0452) |
---|
1002 | ("Cyrillic_Small_Letter_Gje" . #\u+0453) |
---|
1003 | ("Cyrillic_Small_Letter_Ukrainian_Ie" . #\u+0454) |
---|
1004 | ("Cyrillic_Small_Letter_Dze" . #\u+0455) |
---|
1005 | ("Cyrillic_Small_Letter_Byelorussian-Ukrainian_I" . #\u+0456) |
---|
1006 | ("Cyrillic_Small_Letter_Yi" . #\u+0457) |
---|
1007 | ("Cyrillic_Small_Letter_Je" . #\u+0458) |
---|
1008 | ("Cyrillic_Small_Letter_Lje" . #\u+0459) |
---|
1009 | ("Cyrillic_Small_Letter_Nje" . #\u+045a) |
---|
1010 | ("Cyrillic_Small_Letter_Tshe" . #\u+045b) |
---|
1011 | ("Cyrillic_Small_Letter_Kje" . #\u+045c) |
---|
1012 | ("Cyrillic_Small_Letter_I_With_Grave" . #\u+045d) |
---|
1013 | ("Cyrillic_Small_Letter_Short_U" . #\u+045e) |
---|
1014 | ("Cyrillic_Small_Letter_Dzhe" . #\u+045f) |
---|
1015 | ("Cyrillic_Capital_Letter_Omega" . #\u+0460) |
---|
1016 | ("Cyrillic_Small_Letter_Omega" . #\u+0461) |
---|
1017 | ("Cyrillic_Capital_Letter_Yat" . #\u+0462) |
---|
1018 | ("Cyrillic_Small_Letter_Yat" . #\u+0463) |
---|
1019 | ("Cyrillic_Capital_Letter_Iotified_E" . #\u+0464) |
---|
1020 | ("Cyrillic_Small_Letter_Iotified_E" . #\u+0465) |
---|
1021 | ("Cyrillic_Capital_Letter_Little_Yus" . #\u+0466) |
---|
1022 | ("Cyrillic_Small_Letter_Little_Yus" . #\u+0467) |
---|
1023 | ("Cyrillic_Capital_Letter_Iotified_Little_Yus" . #\u+0468) |
---|
1024 | ("Cyrillic_Small_Letter_Iotified_Little_Yus" . #\u+0469) |
---|
1025 | ("Cyrillic_Capital_Letter_Big_Yus" . #\u+046a) |
---|
1026 | ("Cyrillic_Small_Letter_Big_Yus" . #\u+046b) |
---|
1027 | ("Cyrillic_Capital_Letter_Iotified_Big_Yus" . #\u+046c) |
---|
1028 | ("Cyrillic_Small_Letter_Iotified_Big_Yus" . #\u+046d) |
---|
1029 | ("Cyrillic_Capital_Letter_Ksi" . #\u+046e) |
---|
1030 | ("Cyrillic_Small_Letter_Ksi" . #\u+046f) |
---|
1031 | ("Cyrillic_Capital_Letter_Psi" . #\u+0470) |
---|
1032 | ("Cyrillic_Small_Letter_Psi" . #\u+0471) |
---|
1033 | ("Cyrillic_Capital_Letter_Fita" . #\u+0472) |
---|
1034 | ("Cyrillic_Small_Letter_Fita" . #\u+0473) |
---|
1035 | ("Cyrillic_Capital_Letter_Izhitsa" . #\u+0474) |
---|
1036 | ("Cyrillic_Small_Letter_Izhitsa" . #\u+0475) |
---|
1037 | ("Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent" . #\u+0476) |
---|
1038 | ("Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent" . #\u+0477) |
---|
1039 | ("Cyrillic_Capital_Letter_Uk" . #\u+0478) |
---|
1040 | ("Cyrillic_Small_Letter_Uk" . #\u+0479) |
---|
1041 | ("Cyrillic_Capital_Letter_Round_Omega" . #\u+047a) |
---|
1042 | ("Cyrillic_Small_Letter_Round_Omega" . #\u+047b) |
---|
1043 | ("Cyrillic_Capital_Letter_Omega_With_Titlo" . #\u+047c) |
---|
1044 | ("Cyrillic_Small_Letter_Omega_With_Titlo" . #\u+047d) |
---|
1045 | ("Cyrillic_Capital_Letter_Ot" . #\u+047e) |
---|
1046 | ("Cyrillic_Small_Letter_Ot" . #\u+047f) |
---|
1047 | ("Cyrillic_Capital_Letter_Koppa" . #\u+0480) |
---|
1048 | ("Cyrillic_Small_Letter_Koppa" . #\u+0481) |
---|
1049 | ("Cyrillic_Thousands_Sign" . #\u+0482) |
---|
1050 | ("Combining_Cyrillic_Titlo" . #\u+0483) |
---|
1051 | ("Combining_Cyrillic_Palatalization" . #\u+0484) |
---|
1052 | ("Combining_Cyrillic_Dasia_Pneumata" . #\u+0485) |
---|
1053 | ("Combining_Cyrillic_Psili_Pneumata" . #\u+0486) |
---|
1054 | ("Combining_Cyrillic_Hundred_Thousands_Sign" . #\u+0488) |
---|
1055 | ("Combining_Cyrillic_Millions_Sign" . #\u+0489) |
---|
1056 | ("Cyrillic_Capital_Letter_Short_I_With_Tail" . #\u+048a) |
---|
1057 | ("Cyrillic_Small_Letter_Short_I_With_Tail" . #\u+048b) |
---|
1058 | ("Cyrillic_Capital_Letter_Semisoft_Sign" . #\u+048c) |
---|
1059 | ("Cyrillic_Small_Letter_Semisoft_Sign" . #\u+048d) |
---|
1060 | ("Cyrillic_Capital_Letter_Er_With_Tick" . #\u+048e) |
---|
1061 | ("Cyrillic_Small_Letter_Er_With_Tick" . #\u+048f) |
---|
1062 | ("Cyrillic_Capital_Letter_Ghe_With_Upturn" . #\u+0490) |
---|
1063 | ("Cyrillic_Small_Letter_Ghe_With_Upturn" . #\u+0491) |
---|
1064 | ("Cyrillic_Capital_Letter_Ghe_With_Stroke" . #\u+0492) |
---|
1065 | ("Cyrillic_Small_Letter_Ghe_With_Stroke" . #\u+0493) |
---|
1066 | ("Cyrillic_Capital_Letter_Ghe_With_Middle_Hook" . #\u+0494) |
---|
1067 | ("Cyrillic_Small_Letter_Ghe_With_Middle_Hook" . #\u+0495) |
---|
1068 | ("Cyrillic_Capital_Letter_Zhe_With_Descender" . #\u+0496) |
---|
1069 | ("Cyrillic_Small_Letter_Zhe_With_Descender" . #\u+0497) |
---|
1070 | ("Cyrillic_Capital_Letter_Ze_With_Descender" . #\u+0498) |
---|
1071 | ("Cyrillic_Small_Letter_Ze_With_Descender" . #\u+0499) |
---|
1072 | ("Cyrillic_Capital_Letter_Ka_With_Descender" . #\u+049a) |
---|
1073 | ("Cyrillic_Small_Letter_Ka_With_Descender" . #\u+049b) |
---|
1074 | ("Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke" . #\u+049c) |
---|
1075 | ("Cyrillic_Small_Letter_Ka_With_Vertical_Stroke" . #\u+049d) |
---|
1076 | ("Cyrillic_Capital_Letter_Ka_With_Stroke" . #\u+049e) |
---|
1077 | ("Cyrillic_Small_Letter_Ka_With_Stroke" . #\u+049f) |
---|
1078 | ("Cyrillic_Capital_Letter_Bashkir_Ka" . #\u+04a0) |
---|
1079 | ("Cyrillic_Small_Letter_Bashkir_Ka" . #\u+04a1) |
---|
1080 | ("Cyrillic_Capital_Letter_En_With_Descender" . #\u+04a2) |
---|
1081 | ("Cyrillic_Small_Letter_En_With_Descender" . #\u+04a3) |
---|
1082 | ("Cyrillic_Capital_Ligature_En_Ghe" . #\u+04a4) |
---|
1083 | ("Cyrillic_Small_Ligature_En_Ghe" . #\u+04a5) |
---|
1084 | ("Cyrillic_Capital_Letter_Pe_With_Middle_Hook" . #\u+04a6) |
---|
1085 | ("Cyrillic_Small_Letter_Pe_With_Middle_Hook" . #\u+04a7) |
---|
1086 | ("Cyrillic_Capital_Letter_Abkhasian_Ha" . #\u+04a8) |
---|
1087 | ("Cyrillic_Small_Letter_Abkhasian_Ha" . #\u+04a9) |
---|
1088 | ("Cyrillic_Capital_Letter_Es_With_Descender" . #\u+04aa) |
---|
1089 | ("Cyrillic_Small_Letter_Es_With_Descender" . #\u+04ab) |
---|
1090 | ("Cyrillic_Capital_Letter_Te_With_Descender" . #\u+04ac) |
---|
1091 | ("Cyrillic_Small_Letter_Te_With_Descender" . #\u+04ad) |
---|
1092 | ("Cyrillic_Capital_Letter_Straight_U" . #\u+04ae) |
---|
1093 | ("Cyrillic_Small_Letter_Straight_U" . #\u+04af) |
---|
1094 | ("Cyrillic_Capital_Letter_Straight_U_With_Stroke" . #\u+04b0) |
---|
1095 | ("Cyrillic_Small_Letter_Straight_U_With_Stroke" . #\u+04b1) |
---|
1096 | ("Cyrillic_Capital_Letter_Ha_With_Descender" . #\u+04b2) |
---|
1097 | ("Cyrillic_Small_Letter_Ha_With_Descender" . #\u+04b3) |
---|
1098 | ("Cyrillic_Capital_Ligature_Te_Tse" . #\u+04b4) |
---|
1099 | ("Cyrillic_Small_Ligature_Te_Tse" . #\u+04b5) |
---|
1100 | ("Cyrillic_Capital_Letter_Che_With_Descender" . #\u+04b6) |
---|
1101 | ("Cyrillic_Small_Letter_Che_With_Descender" . #\u+04b7) |
---|
1102 | ("Cyrillic_Capital_Letter_Che_With_Vertical_Stroke" . #\u+04b8) |
---|
1103 | ("Cyrillic_Small_Letter_Che_With_Vertical_Stroke" . #\u+04b9) |
---|
1104 | ("Cyrillic_Capital_Letter_Shha" . #\u+04ba) |
---|
1105 | ("Cyrillic_Small_Letter_Shha" . #\u+04bb) |
---|
1106 | ("Cyrillic_Capital_Letter_Abkhasian_Che" . #\u+04bc) |
---|
1107 | ("Cyrillic_Small_Letter_Abkhasian_Che" . #\u+04bd) |
---|
1108 | ("Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender" . #\u+04be) |
---|
1109 | ("Cyrillic_Small_Letter_Abkhasian_Che_With_Descender" . #\u+04bf) |
---|
1110 | ("Cyrillic_Letter_Palochka" . #\u+04c0) |
---|
1111 | ("Cyrillic_Capital_Letter_Zhe_With_Breve" . #\u+04c1) |
---|
1112 | ("Cyrillic_Small_Letter_Zhe_With_Breve" . #\u+04c2) |
---|
1113 | ("Cyrillic_Capital_Letter_Ka_With_Hook" . #\u+04c3) |
---|
1114 | ("Cyrillic_Small_Letter_Ka_With_Hook" . #\u+04c4) |
---|
1115 | ("Cyrillic_Capital_Letter_El_With_Tail" . #\u+04c5) |
---|
1116 | ("Cyrillic_Small_Letter_El_With_Tail" . #\u+04c6) |
---|
1117 | ("Cyrillic_Capital_Letter_En_With_Hook" . #\u+04c7) |
---|
1118 | ("Cyrillic_Small_Letter_En_With_Hook" . #\u+04c8) |
---|
1119 | ("Cyrillic_Capital_Letter_En_With_Tail" . #\u+04c9) |
---|
1120 | ("Cyrillic_Small_Letter_En_With_Tail" . #\u+04ca) |
---|
1121 | ("Cyrillic_Capital_Letter_Khakassian_Che" . #\u+04cb) |
---|
1122 | ("Cyrillic_Small_Letter_Khakassian_Che" . #\u+04cc) |
---|
1123 | ("Cyrillic_Capital_Letter_Em_With_Tail" . #\u+04cd) |
---|
1124 | ("Cyrillic_Small_Letter_Em_With_Tail" . #\u+04ce) |
---|
1125 | ("Cyrillic_Small_Letter_Palochka" . #\u+04cf) |
---|
1126 | ("Cyrillic_Capital_Letter_A_With_Breve" . #\u+04d0) |
---|
1127 | ("Cyrillic_Small_Letter_A_With_Breve" . #\u+04d1) |
---|
1128 | ("Cyrillic_Capital_Letter_A_With_Diaeresis" . #\u+04d2) |
---|
1129 | ("Cyrillic_Small_Letter_A_With_Diaeresis" . #\u+04d3) |
---|
1130 | ("Cyrillic_Capital_Ligature_A_Ie" . #\u+04d4) |
---|
1131 | ("Cyrillic_Small_Ligature_A_Ie" . #\u+04d5) |
---|
1132 | ("Cyrillic_Capital_Letter_Ie_With_Breve" . #\u+04d6) |
---|
1133 | ("Cyrillic_Small_Letter_Ie_With_Breve" . #\u+04d7) |
---|
1134 | ("Cyrillic_Capital_Letter_Schwa" . #\u+04d8) |
---|
1135 | ("Cyrillic_Small_Letter_Schwa" . #\u+04d9) |
---|
1136 | ("Cyrillic_Capital_Letter_Schwa_With_Diaeresis" . #\u+04da) |
---|
1137 | ("Cyrillic_Small_Letter_Schwa_With_Diaeresis" . #\u+04db) |
---|
1138 | ("Cyrillic_Capital_Letter_Zhe_With_Diaeresis" . #\u+04dc) |
---|
1139 | ("Cyrillic_Small_Letter_Zhe_With_Diaeresis" . #\u+04dd) |
---|
1140 | ("Cyrillic_Capital_Letter_Ze_With_Diaeresis" . #\u+04de) |
---|
1141 | ("Cyrillic_Small_Letter_Ze_With_Diaeresis" . #\u+04df) |
---|
1142 | ("Cyrillic_Capital_Letter_Abkhasian_Dze" . #\u+04e0) |
---|
1143 | ("Cyrillic_Small_Letter_Abkhasian_Dze" . #\u+04e1) |
---|
1144 | ("Cyrillic_Capital_Letter_I_With_Macron" . #\u+04e2) |
---|
1145 | ("Cyrillic_Small_Letter_I_With_Macron" . #\u+04e3) |
---|
1146 | ("Cyrillic_Capital_Letter_I_With_Diaeresis" . #\u+04e4) |
---|
1147 | ("Cyrillic_Small_Letter_I_With_Diaeresis" . #\u+04e5) |
---|
1148 | ("Cyrillic_Capital_Letter_O_With_Diaeresis" . #\u+04e6) |
---|
1149 | ("Cyrillic_Small_Letter_O_With_Diaeresis" . #\u+04e7) |
---|
1150 | ("Cyrillic_Capital_Letter_Barred_O" . #\u+04e8) |
---|
1151 | ("Cyrillic_Small_Letter_Barred_O" . #\u+04e9) |
---|
1152 | ("Cyrillic_Capital_Letter_Barred_O_With_Diaeresis" . #\u+04ea) |
---|
1153 | ("Cyrillic_Small_Letter_Barred_O_With_Diaeresis" . #\u+04eb) |
---|
1154 | ("Cyrillic_Capital_Letter_E_With_Diaeresis" . #\u+04ec) |
---|
1155 | ("Cyrillic_Small_Letter_E_With_Diaeresis" . #\u+04ed) |
---|
1156 | ("Cyrillic_Capital_Letter_U_With_Macron" . #\u+04ee) |
---|
1157 | ("Cyrillic_Small_Letter_U_With_Macron" . #\u+04ef) |
---|
1158 | ("Cyrillic_Capital_Letter_U_With_Diaeresis" . #\u+04f0) |
---|
1159 | ("Cyrillic_Small_Letter_U_With_Diaeresis" . #\u+04f1) |
---|
1160 | ("Cyrillic_Capital_Letter_U_With_Double_Acute" . #\u+04f2) |
---|
1161 | ("Cyrillic_Small_Letter_U_With_Double_Acute" . #\u+04f3) |
---|
1162 | ("Cyrillic_Capital_Letter_Che_With_Diaeresis" . #\u+04f4) |
---|
1163 | ("Cyrillic_Small_Letter_Che_With_Diaeresis" . #\u+04f5) |
---|
1164 | ("Cyrillic_Capital_Letter_Ghe_With_Descender" . #\u+04f6) |
---|
1165 | ("Cyrillic_Small_Letter_Ghe_With_Descender" . #\u+04f7) |
---|
1166 | ("Cyrillic_Capital_Letter_Yeru_With_Diaeresis" . #\u+04f8) |
---|
1167 | ("Cyrillic_Small_Letter_Yeru_With_Diaeresis" . #\u+04f9) |
---|
1168 | ("Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook" . #\u+04fa) |
---|
1169 | ("Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook" . #\u+04fb) |
---|
1170 | ("Cyrillic_Capital_Letter_Ha_With_Hook" . #\u+04fc) |
---|
1171 | ("Cyrillic_Small_Letter_Ha_With_Hook" . #\u+04fd) |
---|
1172 | ("Cyrillic_Capital_Letter_Ha_With_Stroke" . #\u+04fe) |
---|
1173 | ("Cyrillic_Small_Letter_Ha_With_Stroke" . #\u+04ff) |
---|
1174 | ("Cyrillic_Capital_Letter_Komi_De" . #\u+0500) |
---|
1175 | ("Cyrillic_Small_Letter_Komi_De" . #\u+0501) |
---|
1176 | ("Cyrillic_Capital_Letter_Komi_Dje" . #\u+0502) |
---|
1177 | ("Cyrillic_Small_Letter_Komi_Dje" . #\u+0503) |
---|
1178 | ("Cyrillic_Capital_Letter_Komi_Zje" . #\u+0504) |
---|
1179 | ("Cyrillic_Small_Letter_Komi_Zje" . #\u+0505) |
---|
1180 | ("Cyrillic_Capital_Letter_Komi_Dzje" . #\u+0506) |
---|
1181 | ("Cyrillic_Small_Letter_Komi_Dzje" . #\u+0507) |
---|
1182 | ("Cyrillic_Capital_Letter_Komi_Lje" . #\u+0508) |
---|
1183 | ("Cyrillic_Small_Letter_Komi_Lje" . #\u+0509) |
---|
1184 | ("Cyrillic_Capital_Letter_Komi_Nje" . #\u+050a) |
---|
1185 | ("Cyrillic_Small_Letter_Komi_Nje" . #\u+050b) |
---|
1186 | ("Cyrillic_Capital_Letter_Komi_Sje" . #\u+050c) |
---|
1187 | ("Cyrillic_Small_Letter_Komi_Sje" . #\u+050d) |
---|
1188 | ("Cyrillic_Capital_Letter_Komi_Tje" . #\u+050e) |
---|
1189 | ("Cyrillic_Small_Letter_Komi_Tje" . #\u+050f) |
---|
1190 | ("Cyrillic_Capital_Letter_Reversed_Ze" . #\u+0510) |
---|
1191 | ("Cyrillic_Small_Letter_Reversed_Ze" . #\u+0511) |
---|
1192 | ("Cyrillic_Capital_Letter_El_With_Hook" . #\u+0512) |
---|
1193 | ("Cyrillic_Small_Letter_El_With_Hook" . #\u+0513) |
---|
1194 | ("Armenian_Capital_Letter_Ayb" . #\u+0531) |
---|
1195 | ("Armenian_Capital_Letter_Ben" . #\u+0532) |
---|
1196 | ("Armenian_Capital_Letter_Gim" . #\u+0533) |
---|
1197 | ("Armenian_Capital_Letter_Da" . #\u+0534) |
---|
1198 | ("Armenian_Capital_Letter_Ech" . #\u+0535) |
---|
1199 | ("Armenian_Capital_Letter_Za" . #\u+0536) |
---|
1200 | ("Armenian_Capital_Letter_Eh" . #\u+0537) |
---|
1201 | ("Armenian_Capital_Letter_Et" . #\u+0538) |
---|
1202 | ("Armenian_Capital_Letter_To" . #\u+0539) |
---|
1203 | ("Armenian_Capital_Letter_Zhe" . #\u+053a) |
---|
1204 | ("Armenian_Capital_Letter_Ini" . #\u+053b) |
---|
1205 | ("Armenian_Capital_Letter_Liwn" . #\u+053c) |
---|
1206 | ("Armenian_Capital_Letter_Xeh" . #\u+053d) |
---|
1207 | ("Armenian_Capital_Letter_Ca" . #\u+053e) |
---|
1208 | ("Armenian_Capital_Letter_Ken" . #\u+053f) |
---|
1209 | ("Armenian_Capital_Letter_Ho" . #\u+0540) |
---|
1210 | ("Armenian_Capital_Letter_Ja" . #\u+0541) |
---|
1211 | ("Armenian_Capital_Letter_Ghad" . #\u+0542) |
---|
1212 | ("Armenian_Capital_Letter_Cheh" . #\u+0543) |
---|
1213 | ("Armenian_Capital_Letter_Men" . #\u+0544) |
---|
1214 | ("Armenian_Capital_Letter_Yi" . #\u+0545) |
---|
1215 | ("Armenian_Capital_Letter_Now" . #\u+0546) |
---|
1216 | ("Armenian_Capital_Letter_Sha" . #\u+0547) |
---|
1217 | ("Armenian_Capital_Letter_Vo" . #\u+0548) |
---|
1218 | ("Armenian_Capital_Letter_Cha" . #\u+0549) |
---|
1219 | ("Armenian_Capital_Letter_Peh" . #\u+054a) |
---|
1220 | ("Armenian_Capital_Letter_Jheh" . #\u+054b) |
---|
1221 | ("Armenian_Capital_Letter_Ra" . #\u+054c) |
---|
1222 | ("Armenian_Capital_Letter_Seh" . #\u+054d) |
---|
1223 | ("Armenian_Capital_Letter_Vew" . #\u+054e) |
---|
1224 | ("Armenian_Capital_Letter_Tiwn" . #\u+054f) |
---|
1225 | ("Armenian_Capital_Letter_Reh" . #\u+0550) |
---|
1226 | ("Armenian_Capital_Letter_Co" . #\u+0551) |
---|
1227 | ("Armenian_Capital_Letter_Yiwn" . #\u+0552) |
---|
1228 | ("Armenian_Capital_Letter_Piwr" . #\u+0553) |
---|
1229 | ("Armenian_Capital_Letter_Keh" . #\u+0554) |
---|
1230 | ("Armenian_Capital_Letter_Oh" . #\u+0555) |
---|
1231 | ("Armenian_Capital_Letter_Feh" . #\u+0556) |
---|
1232 | ("Armenian_Modifier_Letter_Left_Half_Ring" . #\u+0559) |
---|
1233 | ("Armenian_Apostrophe" . #\u+055a) |
---|
1234 | ("Armenian_Emphasis_Mark" . #\u+055b) |
---|
1235 | ("Armenian_Exclamation_Mark" . #\u+055c) |
---|
1236 | ("Armenian_Comma" . #\u+055d) |
---|
1237 | ("Armenian_Question_Mark" . #\u+055e) |
---|
1238 | ("Armenian_Abbreviation_Mark" . #\u+055f) |
---|
1239 | ("Armenian_Small_Letter_Ayb" . #\u+0561) |
---|
1240 | ("Armenian_Small_Letter_Ben" . #\u+0562) |
---|
1241 | ("Armenian_Small_Letter_Gim" . #\u+0563) |
---|
1242 | ("Armenian_Small_Letter_Da" . #\u+0564) |
---|
1243 | ("Armenian_Small_Letter_Ech" . #\u+0565) |
---|
1244 | ("Armenian_Small_Letter_Za" . #\u+0566) |
---|
1245 | ("Armenian_Small_Letter_Eh" . #\u+0567) |
---|
1246 | ("Armenian_Small_Letter_Et" . #\u+0568) |
---|
1247 | ("Armenian_Small_Letter_To" . #\u+0569) |
---|
1248 | ("Armenian_Small_Letter_Zhe" . #\u+056a) |
---|
1249 | ("Armenian_Small_Letter_Ini" . #\u+056b) |
---|
1250 | ("Armenian_Small_Letter_Liwn" . #\u+056c) |
---|
1251 | ("Armenian_Small_Letter_Xeh" . #\u+056d) |
---|
1252 | ("Armenian_Small_Letter_Ca" . #\u+056e) |
---|
1253 | ("Armenian_Small_Letter_Ken" . #\u+056f) |
---|
1254 | ("Armenian_Small_Letter_Ho" . #\u+0570) |
---|
1255 | ("Armenian_Small_Letter_Ja" . #\u+0571) |
---|
1256 | ("Armenian_Small_Letter_Ghad" . #\u+0572) |
---|
1257 | ("Armenian_Small_Letter_Cheh" . #\u+0573) |
---|
1258 | ("Armenian_Small_Letter_Men" . #\u+0574) |
---|
1259 | ("Armenian_Small_Letter_Yi" . #\u+0575) |
---|
1260 | ("Armenian_Small_Letter_Now" . #\u+0576) |
---|
1261 | ("Armenian_Small_Letter_Sha" . #\u+0577) |
---|
1262 | ("Armenian_Small_Letter_Vo" . #\u+0578) |
---|
1263 | ("Armenian_Small_Letter_Cha" . #\u+0579) |
---|
1264 | ("Armenian_Small_Letter_Peh" . #\u+057a) |
---|
1265 | ("Armenian_Small_Letter_Jheh" . #\u+057b) |
---|
1266 | ("Armenian_Small_Letter_Ra" . #\u+057c) |
---|
1267 | ("Armenian_Small_Letter_Seh" . #\u+057d) |
---|
1268 | ("Armenian_Small_Letter_Vew" . #\u+057e) |
---|
1269 | ("Armenian_Small_Letter_Tiwn" . #\u+057f) |
---|
1270 | ("Armenian_Small_Letter_Reh" . #\u+0580) |
---|
1271 | ("Armenian_Small_Letter_Co" . #\u+0581) |
---|
1272 | ("Armenian_Small_Letter_Yiwn" . #\u+0582) |
---|
1273 | ("Armenian_Small_Letter_Piwr" . #\u+0583) |
---|
1274 | ("Armenian_Small_Letter_Keh" . #\u+0584) |
---|
1275 | ("Armenian_Small_Letter_Oh" . #\u+0585) |
---|
1276 | ("Armenian_Small_Letter_Feh" . #\u+0586) |
---|
1277 | ("Armenian_Small_Ligature_Ech_Yiwn" . #\u+0587) |
---|
1278 | ("Armenian_Full_Stop" . #\u+0589) |
---|
1279 | ("Armenian_Hyphen" . #\u+058a) |
---|
1280 | ("Hebrew_Accent_Etnahta" . #\u+0591) |
---|
1281 | ("Hebrew_Accent_Segol" . #\u+0592) |
---|
1282 | ("Hebrew_Accent_Shalshelet" . #\u+0593) |
---|
1283 | ("Hebrew_Accent_Zaqef_Qatan" . #\u+0594) |
---|
1284 | ("Hebrew_Accent_Zaqef_Gadol" . #\u+0595) |
---|
1285 | ("Hebrew_Accent_Tipeha" . #\u+0596) |
---|
1286 | ("Hebrew_Accent_Revia" . #\u+0597) |
---|
1287 | ("Hebrew_Accent_Zarqa" . #\u+0598) |
---|
1288 | ("Hebrew_Accent_Pashta" . #\u+0599) |
---|
1289 | ("Hebrew_Accent_Yetiv" . #\u+059a) |
---|
1290 | ("Hebrew_Accent_Tevir" . #\u+059b) |
---|
1291 | ("Hebrew_Accent_Geresh" . #\u+059c) |
---|
1292 | ("Hebrew_Accent_Geresh_Muqdam" . #\u+059d) |
---|
1293 | ("Hebrew_Accent_Gershayim" . #\u+059e) |
---|
1294 | ("Hebrew_Accent_Qarney_Para" . #\u+059f) |
---|
1295 | ("Hebrew_Accent_Telisha_Gedola" . #\u+05a0) |
---|
1296 | ("Hebrew_Accent_Pazer" . #\u+05a1) |
---|
1297 | ("Hebrew_Accent_Atnah_Hafukh" . #\u+05a2) |
---|
1298 | ("Hebrew_Accent_Munah" . #\u+05a3) |
---|
1299 | ("Hebrew_Accent_Mahapakh" . #\u+05a4) |
---|
1300 | ("Hebrew_Accent_Merkha" . #\u+05a5) |
---|
1301 | ("Hebrew_Accent_Merkha_Kefula" . #\u+05a6) |
---|
1302 | ("Hebrew_Accent_Darga" . #\u+05a7) |
---|
1303 | ("Hebrew_Accent_Qadma" . #\u+05a8) |
---|
1304 | ("Hebrew_Accent_Telisha_Qetana" . #\u+05a9) |
---|
1305 | ("Hebrew_Accent_Yerah_Ben_Yomo" . #\u+05aa) |
---|
1306 | ("Hebrew_Accent_Ole" . #\u+05ab) |
---|
1307 | ("Hebrew_Accent_Iluy" . #\u+05ac) |
---|
1308 | ("Hebrew_Accent_Dehi" . #\u+05ad) |
---|
1309 | ("Hebrew_Accent_Zinor" . #\u+05ae) |
---|
1310 | ("Hebrew_Mark_Masora_Circle" . #\u+05af) |
---|
1311 | ("Hebrew_Point_Sheva" . #\u+05b0) |
---|
1312 | ("Hebrew_Point_Hataf_Segol" . #\u+05b1) |
---|
1313 | ("Hebrew_Point_Hataf_Patah" . #\u+05b2) |
---|
1314 | ("Hebrew_Point_Hataf_Qamats" . #\u+05b3) |
---|
1315 | ("Hebrew_Point_Hiriq" . #\u+05b4) |
---|
1316 | ("Hebrew_Point_Tsere" . #\u+05b5) |
---|
1317 | ("Hebrew_Point_Segol" . #\u+05b6) |
---|
1318 | ("Hebrew_Point_Patah" . #\u+05b7) |
---|
1319 | ("Hebrew_Point_Qamats" . #\u+05b8) |
---|
1320 | ("Hebrew_Point_Holam" . #\u+05b9) |
---|
1321 | ("Hebrew_Point_Holam_Haser_For_Vav" . #\u+05ba) |
---|
1322 | ("Hebrew_Point_Qubuts" . #\u+05bb) |
---|
1323 | ("Hebrew_Point_Dagesh_Or_Mapiq" . #\u+05bc) |
---|
1324 | ("Hebrew_Point_Meteg" . #\u+05bd) |
---|
1325 | ("Hebrew_Punctuation_Maqaf" . #\u+05be) |
---|
1326 | ("Hebrew_Point_Rafe" . #\u+05bf) |
---|
1327 | ("Hebrew_Punctuation_Paseq" . #\u+05c0) |
---|
1328 | ("Hebrew_Point_Shin_Dot" . #\u+05c1) |
---|
1329 | ("Hebrew_Point_Sin_Dot" . #\u+05c2) |
---|
1330 | ("Hebrew_Punctuation_Sof_Pasuq" . #\u+05c3) |
---|
1331 | ("Hebrew_Mark_Upper_Dot" . #\u+05c4) |
---|
1332 | ("Hebrew_Mark_Lower_Dot" . #\u+05c5) |
---|
1333 | ("Hebrew_Punctuation_Nun_Hafukha" . #\u+05c6) |
---|
1334 | ("Hebrew_Point_Qamats_Qatan" . #\u+05c7) |
---|
1335 | ("Hebrew_Letter_Alef" . #\u+05d0) |
---|
1336 | ("Hebrew_Letter_Bet" . #\u+05d1) |
---|
1337 | ("Hebrew_Letter_Gimel" . #\u+05d2) |
---|
1338 | ("Hebrew_Letter_Dalet" . #\u+05d3) |
---|
1339 | ("Hebrew_Letter_He" . #\u+05d4) |
---|
1340 | ("Hebrew_Letter_Vav" . #\u+05d5) |
---|
1341 | ("Hebrew_Letter_Zayin" . #\u+05d6) |
---|
1342 | ("Hebrew_Letter_Het" . #\u+05d7) |
---|
1343 | ("Hebrew_Letter_Tet" . #\u+05d8) |
---|
1344 | ("Hebrew_Letter_Yod" . #\u+05d9) |
---|
1345 | ("Hebrew_Letter_Final_Kaf" . #\u+05da) |
---|
1346 | ("Hebrew_Letter_Kaf" . #\u+05db) |
---|
1347 | ("Hebrew_Letter_Lamed" . #\u+05dc) |
---|
1348 | ("Hebrew_Letter_Final_Mem" . #\u+05dd) |
---|
1349 | ("Hebrew_Letter_Mem" . #\u+05de) |
---|
1350 | ("Hebrew_Letter_Final_Nun" . #\u+05df) |
---|
1351 | ("Hebrew_Letter_Nun" . #\u+05e0) |
---|
1352 | ("Hebrew_Letter_Samekh" . #\u+05e1) |
---|
1353 | ("Hebrew_Letter_Ayin" . #\u+05e2) |
---|
1354 | ("Hebrew_Letter_Final_Pe" . #\u+05e3) |
---|
1355 | ("Hebrew_Letter_Pe" . #\u+05e4) |
---|
1356 | ("Hebrew_Letter_Final_Tsadi" . #\u+05e5) |
---|
1357 | ("Hebrew_Letter_Tsadi" . #\u+05e6) |
---|
1358 | ("Hebrew_Letter_Qof" . #\u+05e7) |
---|
1359 | ("Hebrew_Letter_Resh" . #\u+05e8) |
---|
1360 | ("Hebrew_Letter_Shin" . #\u+05e9) |
---|
1361 | ("Hebrew_Letter_Tav" . #\u+05ea) |
---|
1362 | ("Hebrew_Ligature_Yiddish_Double_Vav" . #\u+05f0) |
---|
1363 | ("Hebrew_Ligature_Yiddish_Vav_Yod" . #\u+05f1) |
---|
1364 | ("Hebrew_Ligature_Yiddish_Double_Yod" . #\u+05f2) |
---|
1365 | ("Hebrew_Punctuation_Geresh" . #\u+05f3) |
---|
1366 | ("Hebrew_Punctuation_Gershayim" . #\u+05f4) |
---|
1367 | ("Arabic_Number_Sign" . #\u+0600) |
---|
1368 | ("Arabic_Sign_Sanah" . #\u+0601) |
---|
1369 | ("Arabic_Footnote_Marker" . #\u+0602) |
---|
1370 | ("Arabic_Sign_Safha" . #\u+0603) |
---|
1371 | ("Afghani_Sign" . #\u+060b) |
---|
1372 | ("Arabic_Comma" . #\u+060c) |
---|
1373 | ("Arabic_Date_Separator" . #\u+060d) |
---|
1374 | ("Arabic_Poetic_Verse_Sign" . #\u+060e) |
---|
1375 | ("Arabic_Sign_Misra" . #\u+060f) |
---|
1376 | ("Arabic_Sign_Sallallahou_Alayhe_Wassallam" . #\u+0610) |
---|
1377 | ("Arabic_Sign_Alayhe_Assallam" . #\u+0611) |
---|
1378 | ("Arabic_Sign_Rahmatullah_Alayhe" . #\u+0612) |
---|
1379 | ("Arabic_Sign_Radi_Allahou_Anhu" . #\u+0613) |
---|
1380 | ("Arabic_Sign_Takhallus" . #\u+0614) |
---|
1381 | ("Arabic_Small_High_Tah" . #\u+0615) |
---|
1382 | ("Arabic_Semicolon" . #\u+061b) |
---|
1383 | ("Arabic_Triple_Dot_Punctuation_Mark" . #\u+061e) |
---|
1384 | ("Arabic_Question_Mark" . #\u+061f) |
---|
1385 | ("Arabic_Letter_Hamza" . #\u+0621) |
---|
1386 | ("Arabic_Letter_Alef_With_Madda_Above" . #\u+0622) |
---|
1387 | ("Arabic_Letter_Alef_With_Hamza_Above" . #\u+0623) |
---|
1388 | ("Arabic_Letter_Waw_With_Hamza_Above" . #\u+0624) |
---|
1389 | ("Arabic_Letter_Alef_With_Hamza_Below" . #\u+0625) |
---|
1390 | ("Arabic_Letter_Yeh_With_Hamza_Above" . #\u+0626) |
---|
1391 | ("Arabic_Letter_Alef" . #\u+0627) |
---|
1392 | ("Arabic_Letter_Beh" . #\u+0628) |
---|
1393 | ("Arabic_Letter_Teh_Marbuta" . #\u+0629) |
---|
1394 | ("Arabic_Letter_Teh" . #\u+062a) |
---|
1395 | ("Arabic_Letter_Theh" . #\u+062b) |
---|
1396 | ("Arabic_Letter_Jeem" . #\u+062c) |
---|
1397 | ("Arabic_Letter_Hah" . #\u+062d) |
---|
1398 | ("Arabic_Letter_Khah" . #\u+062e) |
---|
1399 | ("Arabic_Letter_Dal" . #\u+062f) |
---|
1400 | ("Arabic_Letter_Thal" . #\u+0630) |
---|
1401 | ("Arabic_Letter_Reh" . #\u+0631) |
---|
1402 | ("Arabic_Letter_Zain" . #\u+0632) |
---|
1403 | ("Arabic_Letter_Seen" . #\u+0633) |
---|
1404 | ("Arabic_Letter_Sheen" . #\u+0634) |
---|
1405 | ("Arabic_Letter_Sad" . #\u+0635) |
---|
1406 | ("Arabic_Letter_Dad" . #\u+0636) |
---|
1407 | ("Arabic_Letter_Tah" . #\u+0637) |
---|
1408 | ("Arabic_Letter_Zah" . #\u+0638) |
---|
1409 | ("Arabic_Letter_Ain" . #\u+0639) |
---|
1410 | ("Arabic_Letter_Ghain" . #\u+063a) |
---|
1411 | ("Arabic_Tatweel" . #\u+0640) |
---|
1412 | ("Arabic_Letter_Feh" . #\u+0641) |
---|
1413 | ("Arabic_Letter_Qaf" . #\u+0642) |
---|
1414 | ("Arabic_Letter_Kaf" . #\u+0643) |
---|
1415 | ("Arabic_Letter_Lam" . #\u+0644) |
---|
1416 | ("Arabic_Letter_Meem" . #\u+0645) |
---|
1417 | ("Arabic_Letter_Noon" . #\u+0646) |
---|
1418 | ("Arabic_Letter_Heh" . #\u+0647) |
---|
1419 | ("Arabic_Letter_Waw" . #\u+0648) |
---|
1420 | ("Arabic_Letter_Alef_Maksura" . #\u+0649) |
---|
1421 | ("Arabic_Letter_Yeh" . #\u+064a) |
---|
1422 | ("Arabic_Fathatan" . #\u+064b) |
---|
1423 | ("Arabic_Dammatan" . #\u+064c) |
---|
1424 | ("Arabic_Kasratan" . #\u+064d) |
---|
1425 | ("Arabic_Fatha" . #\u+064e) |
---|
1426 | ("Arabic_Damma" . #\u+064f) |
---|
1427 | ("Arabic_Kasra" . #\u+0650) |
---|
1428 | ("Arabic_Shadda" . #\u+0651) |
---|
1429 | ("Arabic_Sukun" . #\u+0652) |
---|
1430 | ("Arabic_Maddah_Above" . #\u+0653) |
---|
1431 | ("Arabic_Hamza_Above" . #\u+0654) |
---|
1432 | ("Arabic_Hamza_Below" . #\u+0655) |
---|
1433 | ("Arabic_Subscript_Alef" . #\u+0656) |
---|
1434 | ("Arabic_Inverted_Damma" . #\u+0657) |
---|
1435 | ("Arabic_Mark_Noon_Ghunna" . #\u+0658) |
---|
1436 | ("Arabic_Zwarakay" . #\u+0659) |
---|
1437 | ("Arabic_Vowel_Sign_Small_V_Above" . #\u+065a) |
---|
1438 | ("Arabic_Vowel_Sign_Inverted_Small_V_Above" . #\u+065b) |
---|
1439 | ("Arabic_Vowel_Sign_Dot_Below" . #\u+065c) |
---|
1440 | ("Arabic_Reversed_Damma" . #\u+065d) |
---|
1441 | ("Arabic_Fatha_With_Two_Dots" . #\u+065e) |
---|
1442 | ("Arabic-Indic_Digit_Zero" . #\u+0660) |
---|
1443 | ("Arabic-Indic_Digit_One" . #\u+0661) |
---|
1444 | ("Arabic-Indic_Digit_Two" . #\u+0662) |
---|
1445 | ("Arabic-Indic_Digit_Three" . #\u+0663) |
---|
1446 | ("Arabic-Indic_Digit_Four" . #\u+0664) |
---|
1447 | ("Arabic-Indic_Digit_Five" . #\u+0665) |
---|
1448 | ("Arabic-Indic_Digit_Six" . #\u+0666) |
---|
1449 | ("Arabic-Indic_Digit_Seven" . #\u+0667) |
---|
1450 | ("Arabic-Indic_Digit_Eight" . #\u+0668) |
---|
1451 | ("Arabic-Indic_Digit_Nine" . #\u+0669) |
---|
1452 | ("Arabic_Percent_Sign" . #\u+066a) |
---|
1453 | ("Arabic_Decimal_Separator" . #\u+066b) |
---|
1454 | ("Arabic_Thousands_Separator" . #\u+066c) |
---|
1455 | ("Arabic_Five_Pointed_Star" . #\u+066d) |
---|
1456 | ("Arabic_Letter_Dotless_Beh" . #\u+066e) |
---|
1457 | ("Arabic_Letter_Dotless_Qaf" . #\u+066f) |
---|
1458 | ("Arabic_Letter_Superscript_Alef" . #\u+0670) |
---|
1459 | ("Arabic_Letter_Alef_Wasla" . #\u+0671) |
---|
1460 | ("Arabic_Letter_Alef_With_Wavy_Hamza_Above" . #\u+0672) |
---|
1461 | ("Arabic_Letter_Alef_With_Wavy_Hamza_Below" . #\u+0673) |
---|
1462 | ("Arabic_Letter_High_Hamza" . #\u+0674) |
---|
1463 | ("Arabic_Letter_High_Hamza_Alef" . #\u+0675) |
---|
1464 | ("Arabic_Letter_High_Hamza_Waw" . #\u+0676) |
---|
1465 | ("Arabic_Letter_U_With_Hamza_Above" . #\u+0677) |
---|
1466 | ("Arabic_Letter_High_Hamza_Yeh" . #\u+0678) |
---|
1467 | ("Arabic_Letter_Tteh" . #\u+0679) |
---|
1468 | ("Arabic_Letter_Tteheh" . #\u+067a) |
---|
1469 | ("Arabic_Letter_Beeh" . #\u+067b) |
---|
1470 | ("Arabic_Letter_Teh_With_Ring" . #\u+067c) |
---|
1471 | ("Arabic_Letter_Teh_With_Three_Dots_Above_Downwards" . #\u+067d) |
---|
1472 | ("Arabic_Letter_Peh" . #\u+067e) |
---|
1473 | ("Arabic_Letter_Teheh" . #\u+067f) |
---|
1474 | ("Arabic_Letter_Beheh" . #\u+0680) |
---|
1475 | ("Arabic_Letter_Hah_With_Hamza_Above" . #\u+0681) |
---|
1476 | ("Arabic_Letter_Hah_With_Two_Dots_Vertical_Above" . #\u+0682) |
---|
1477 | ("Arabic_Letter_Nyeh" . #\u+0683) |
---|
1478 | ("Arabic_Letter_Dyeh" . #\u+0684) |
---|
1479 | ("Arabic_Letter_Hah_With_Three_Dots_Above" . #\u+0685) |
---|
1480 | ("Arabic_Letter_Tcheh" . #\u+0686) |
---|
1481 | ("Arabic_Letter_Tcheheh" . #\u+0687) |
---|
1482 | ("Arabic_Letter_Ddal" . #\u+0688) |
---|
1483 | ("Arabic_Letter_Dal_With_Ring" . #\u+0689) |
---|
1484 | ("Arabic_Letter_Dal_With_Dot_Below" . #\u+068a) |
---|
1485 | ("Arabic_Letter_Dal_With_Dot_Below_And_Small_Tah" . #\u+068b) |
---|
1486 | ("Arabic_Letter_Dahal" . #\u+068c) |
---|
1487 | ("Arabic_Letter_Ddahal" . #\u+068d) |
---|
1488 | ("Arabic_Letter_Dul" . #\u+068e) |
---|
1489 | ("Arabic_Letter_Dal_With_Three_Dots_Above_Downwards" . #\u+068f) |
---|
1490 | ("Arabic_Letter_Dal_With_Four_Dots_Above" . #\u+0690) |
---|
1491 | ("Arabic_Letter_Rreh" . #\u+0691) |
---|
1492 | ("Arabic_Letter_Reh_With_Small_V" . #\u+0692) |
---|
1493 | ("Arabic_Letter_Reh_With_Ring" . #\u+0693) |
---|
1494 | ("Arabic_Letter_Reh_With_Dot_Below" . #\u+0694) |
---|
1495 | ("Arabic_Letter_Reh_With_Small_V_Below" . #\u+0695) |
---|
1496 | ("Arabic_Letter_Reh_With_Dot_Below_And_Dot_Above" . #\u+0696) |
---|
1497 | ("Arabic_Letter_Reh_With_Two_Dots_Above" . #\u+0697) |
---|
1498 | ("Arabic_Letter_Jeh" . #\u+0698) |
---|
1499 | ("Arabic_Letter_Reh_With_Four_Dots_Above" . #\u+0699) |
---|
1500 | ("Arabic_Letter_Seen_With_Dot_Below_And_Dot_Above" . #\u+069a) |
---|
1501 | ("Arabic_Letter_Seen_With_Three_Dots_Below" . #\u+069b) |
---|
1502 | ("Arabic_Letter_Seen_With_Three_Dots_Below_And_Three_Dots_Above" . #\u+069c) |
---|
1503 | ("Arabic_Letter_Sad_With_Two_Dots_Below" . #\u+069d) |
---|
1504 | ("Arabic_Letter_Sad_With_Three_Dots_Above" . #\u+069e) |
---|
1505 | ("Arabic_Letter_Tah_With_Three_Dots_Above" . #\u+069f) |
---|
1506 | ("Arabic_Letter_Ain_With_Three_Dots_Above" . #\u+06a0) |
---|
1507 | ("Arabic_Letter_Dotless_Feh" . #\u+06a1) |
---|
1508 | ("Arabic_Letter_Feh_With_Dot_Moved_Below" . #\u+06a2) |
---|
1509 | ("Arabic_Letter_Feh_With_Dot_Below" . #\u+06a3) |
---|
1510 | ("Arabic_Letter_Veh" . #\u+06a4) |
---|
1511 | ("Arabic_Letter_Feh_With_Three_Dots_Below" . #\u+06a5) |
---|
1512 | ("Arabic_Letter_Peheh" . #\u+06a6) |
---|
1513 | ("Arabic_Letter_Qaf_With_Dot_Above" . #\u+06a7) |
---|
1514 | ("Arabic_Letter_Qaf_With_Three_Dots_Above" . #\u+06a8) |
---|
1515 | ("Arabic_Letter_Keheh" . #\u+06a9) |
---|
1516 | ("Arabic_Letter_Swash_Kaf" . #\u+06aa) |
---|
1517 | ("Arabic_Letter_Kaf_With_Ring" . #\u+06ab) |
---|
1518 | ("Arabic_Letter_Kaf_With_Dot_Above" . #\u+06ac) |
---|
1519 | ("Arabic_Letter_Ng" . #\u+06ad) |
---|
1520 | ("Arabic_Letter_Kaf_With_Three_Dots_Below" . #\u+06ae) |
---|
1521 | ("Arabic_Letter_Gaf" . #\u+06af) |
---|
1522 | ("Arabic_Letter_Gaf_With_Ring" . #\u+06b0) |
---|
1523 | ("Arabic_Letter_Ngoeh" . #\u+06b1) |
---|
1524 | ("Arabic_Letter_Gaf_With_Two_Dots_Below" . #\u+06b2) |
---|
1525 | ("Arabic_Letter_Gueh" . #\u+06b3) |
---|
1526 | ("Arabic_Letter_Gaf_With_Three_Dots_Above" . #\u+06b4) |
---|
1527 | ("Arabic_Letter_Lam_With_Small_V" . #\u+06b5) |
---|
1528 | ("Arabic_Letter_Lam_With_Dot_Above" . #\u+06b6) |
---|
1529 | ("Arabic_Letter_Lam_With_Three_Dots_Above" . #\u+06b7) |
---|
1530 | ("Arabic_Letter_Lam_With_Three_Dots_Below" . #\u+06b8) |
---|
1531 | ("Arabic_Letter_Noon_With_Dot_Below" . #\u+06b9) |
---|
1532 | ("Arabic_Letter_Noon_Ghunna" . #\u+06ba) |
---|
1533 | ("Arabic_Letter_Rnoon" . #\u+06bb) |
---|
1534 | ("Arabic_Letter_Noon_With_Ring" . #\u+06bc) |
---|
1535 | ("Arabic_Letter_Noon_With_Three_Dots_Above" . #\u+06bd) |
---|
1536 | ("Arabic_Letter_Heh_Doachashmee" . #\u+06be) |
---|
1537 | ("Arabic_Letter_Tcheh_With_Dot_Above" . #\u+06bf) |
---|
1538 | ("Arabic_Letter_Heh_With_Yeh_Above" . #\u+06c0) |
---|
1539 | ("Arabic_Letter_Heh_Goal" . #\u+06c1) |
---|
1540 | ("Arabic_Letter_Heh_Goal_With_Hamza_Above" . #\u+06c2) |
---|
1541 | ("Arabic_Letter_Teh_Marbuta_Goal" . #\u+06c3) |
---|
1542 | ("Arabic_Letter_Waw_With_Ring" . #\u+06c4) |
---|
1543 | ("Arabic_Letter_Kirghiz_Oe" . #\u+06c5) |
---|
1544 | ("Arabic_Letter_Oe" . #\u+06c6) |
---|
1545 | ("Arabic_Letter_U" . #\u+06c7) |
---|
1546 | ("Arabic_Letter_Yu" . #\u+06c8) |
---|
1547 | ("Arabic_Letter_Kirghiz_Yu" . #\u+06c9) |
---|
1548 | ("Arabic_Letter_Waw_With_Two_Dots_Above" . #\u+06ca) |
---|
1549 | ("Arabic_Letter_Ve" . #\u+06cb) |
---|
1550 | ("Arabic_Letter_Farsi_Yeh" . #\u+06cc) |
---|
1551 | ("Arabic_Letter_Yeh_With_Tail" . #\u+06cd) |
---|
1552 | ("Arabic_Letter_Yeh_With_Small_V" . #\u+06ce) |
---|
1553 | ("Arabic_Letter_Waw_With_Dot_Above" . #\u+06cf) |
---|
1554 | ("Arabic_Letter_E" . #\u+06d0) |
---|
1555 | ("Arabic_Letter_Yeh_With_Three_Dots_Below" . #\u+06d1) |
---|
1556 | ("Arabic_Letter_Yeh_Barree" . #\u+06d2) |
---|
1557 | ("Arabic_Letter_Yeh_Barree_With_Hamza_Above" . #\u+06d3) |
---|
1558 | ("Arabic_Full_Stop" . #\u+06d4) |
---|
1559 | ("Arabic_Letter_Ae" . #\u+06d5) |
---|
1560 | ("Arabic_Small_High_Ligature_Sad_With_Lam_With_Alef_Maksura" . #\u+06d6) |
---|
1561 | ("Arabic_Small_High_Ligature_Qaf_With_Lam_With_Alef_Maksura" . #\u+06d7) |
---|
1562 | ("Arabic_Small_High_Meem_Initial_Form" . #\u+06d8) |
---|
1563 | ("Arabic_Small_High_Lam_Alef" . #\u+06d9) |
---|
1564 | ("Arabic_Small_High_Jeem" . #\u+06da) |
---|
1565 | ("Arabic_Small_High_Three_Dots" . #\u+06db) |
---|
1566 | ("Arabic_Small_High_Seen" . #\u+06dc) |
---|
1567 | ("Arabic_End_Of_Ayah" . #\u+06dd) |
---|
1568 | ("Arabic_Start_Of_Rub_El_Hizb" . #\u+06de) |
---|
1569 | ("Arabic_Small_High_Rounded_Zero" . #\u+06df) |
---|
1570 | ("Arabic_Small_High_Upright_Rectangular_Zero" . #\u+06e0) |
---|
1571 | ("Arabic_Small_High_Dotless_Head_Of_Khah" . #\u+06e1) |
---|
1572 | ("Arabic_Small_High_Meem_Isolated_Form" . #\u+06e2) |
---|
1573 | ("Arabic_Small_Low_Seen" . #\u+06e3) |
---|
1574 | ("Arabic_Small_High_Madda" . #\u+06e4) |
---|
1575 | ("Arabic_Small_Waw" . #\u+06e5) |
---|
1576 | ("Arabic_Small_Yeh" . #\u+06e6) |
---|
1577 | ("Arabic_Small_High_Yeh" . #\u+06e7) |
---|
1578 | ("Arabic_Small_High_Noon" . #\u+06e8) |
---|
1579 | ("Arabic_Place_Of_Sajdah" . #\u+06e9) |
---|
1580 | ("Arabic_Empty_Centre_Low_Stop" . #\u+06ea) |
---|
1581 | ("Arabic_Empty_Centre_High_Stop" . #\u+06eb) |
---|
1582 | ("Arabic_Rounded_High_Stop_With_Filled_Centre" . #\u+06ec) |
---|
1583 | ("Arabic_Small_Low_Meem" . #\u+06ed) |
---|
1584 | ("Arabic_Letter_Dal_With_Inverted_V" . #\u+06ee) |
---|
1585 | ("Arabic_Letter_Reh_With_Inverted_V" . #\u+06ef) |
---|
1586 | ("Extended_Arabic-Indic_Digit_Zero" . #\u+06f0) |
---|
1587 | ("Extended_Arabic-Indic_Digit_One" . #\u+06f1) |
---|
1588 | ("Extended_Arabic-Indic_Digit_Two" . #\u+06f2) |
---|
1589 | ("Extended_Arabic-Indic_Digit_Three" . #\u+06f3) |
---|
1590 | ("Extended_Arabic-Indic_Digit_Four" . #\u+06f4) |
---|
1591 | ("Extended_Arabic-Indic_Digit_Five" . #\u+06f5) |
---|
1592 | ("Extended_Arabic-Indic_Digit_Six" . #\u+06f6) |
---|
1593 | ("Extended_Arabic-Indic_Digit_Seven" . #\u+06f7) |
---|
1594 | ("Extended_Arabic-Indic_Digit_Eight" . #\u+06f8) |
---|
1595 | ("Extended_Arabic-Indic_Digit_Nine" . #\u+06f9) |
---|
1596 | ("Arabic_Letter_Sheen_With_Dot_Below" . #\u+06fa) |
---|
1597 | ("Arabic_Letter_Dad_With_Dot_Below" . #\u+06fb) |
---|
1598 | ("Arabic_Letter_Ghain_With_Dot_Below" . #\u+06fc) |
---|
1599 | ("Arabic_Sign_Sindhi_Ampersand" . #\u+06fd) |
---|
1600 | ("Arabic_Sign_Sindhi_Postposition_Men" . #\u+06fe) |
---|
1601 | ("Arabic_Letter_Heh_With_Inverted_V" . #\u+06ff) |
---|
1602 | ("Syriac_End_Of_Paragraph" . #\u+0700) |
---|
1603 | ("Syriac_Supralinear_Full_Stop" . #\u+0701) |
---|
1604 | ("Syriac_Sublinear_Full_Stop" . #\u+0702) |
---|
1605 | ("Syriac_Supralinear_Colon" . #\u+0703) |
---|
1606 | ("Syriac_Sublinear_Colon" . #\u+0704) |
---|
1607 | ("Syriac_Horizontal_Colon" . #\u+0705) |
---|
1608 | ("Syriac_Colon_Skewed_Left" . #\u+0706) |
---|
1609 | ("Syriac_Colon_Skewed_Right" . #\u+0707) |
---|
1610 | ("Syriac_Supralinear_Colon_Skewed_Left" . #\u+0708) |
---|
1611 | ("Syriac_Sublinear_Colon_Skewed_Right" . #\u+0709) |
---|
1612 | ("Syriac_Contraction" . #\u+070a) |
---|
1613 | ("Syriac_Harklean_Obelus" . #\u+070b) |
---|
1614 | ("Syriac_Harklean_Metobelus" . #\u+070c) |
---|
1615 | ("Syriac_Harklean_Asteriscus" . #\u+070d) |
---|
1616 | ("Syriac_Abbreviation_Mark" . #\u+070f) |
---|
1617 | ("Syriac_Letter_Alaph" . #\u+0710) |
---|
1618 | ("Syriac_Letter_Superscript_Alaph" . #\u+0711) |
---|
1619 | ("Syriac_Letter_Beth" . #\u+0712) |
---|
1620 | ("Syriac_Letter_Gamal" . #\u+0713) |
---|
1621 | ("Syriac_Letter_Gamal_Garshuni" . #\u+0714) |
---|
1622 | ("Syriac_Letter_Dalath" . #\u+0715) |
---|
1623 | ("Syriac_Letter_Dotless_Dalath_Rish" . #\u+0716) |
---|
1624 | ("Syriac_Letter_He" . #\u+0717) |
---|
1625 | ("Syriac_Letter_Waw" . #\u+0718) |
---|
1626 | ("Syriac_Letter_Zain" . #\u+0719) |
---|
1627 | ("Syriac_Letter_Heth" . #\u+071a) |
---|
1628 | ("Syriac_Letter_Teth" . #\u+071b) |
---|
1629 | ("Syriac_Letter_Teth_Garshuni" . #\u+071c) |
---|
1630 | ("Syriac_Letter_Yudh" . #\u+071d) |
---|
1631 | ("Syriac_Letter_Yudh_He" . #\u+071e) |
---|
1632 | ("Syriac_Letter_Kaph" . #\u+071f) |
---|
1633 | ("Syriac_Letter_Lamadh" . #\u+0720) |
---|
1634 | ("Syriac_Letter_Mim" . #\u+0721) |
---|
1635 | ("Syriac_Letter_Nun" . #\u+0722) |
---|
1636 | ("Syriac_Letter_Semkath" . #\u+0723) |
---|
1637 | ("Syriac_Letter_Final_Semkath" . #\u+0724) |
---|
1638 | ("Syriac_Letter_E" . #\u+0725) |
---|
1639 | ("Syriac_Letter_Pe" . #\u+0726) |
---|
1640 | ("Syriac_Letter_Reversed_Pe" . #\u+0727) |
---|
1641 | ("Syriac_Letter_Sadhe" . #\u+0728) |
---|
1642 | ("Syriac_Letter_Qaph" . #\u+0729) |
---|
1643 | ("Syriac_Letter_Rish" . #\u+072a) |
---|
1644 | ("Syriac_Letter_Shin" . #\u+072b) |
---|
1645 | ("Syriac_Letter_Taw" . #\u+072c) |
---|
1646 | ("Syriac_Letter_Persian_Bheth" . #\u+072d) |
---|
1647 | ("Syriac_Letter_Persian_Ghamal" . #\u+072e) |
---|
1648 | ("Syriac_Letter_Persian_Dhalath" . #\u+072f) |
---|
1649 | ("Syriac_Pthaha_Above" . #\u+0730) |
---|
1650 | ("Syriac_Pthaha_Below" . #\u+0731) |
---|
1651 | ("Syriac_Pthaha_Dotted" . #\u+0732) |
---|
1652 | ("Syriac_Zqapha_Above" . #\u+0733) |
---|
1653 | ("Syriac_Zqapha_Below" . #\u+0734) |
---|
1654 | ("Syriac_Zqapha_Dotted" . #\u+0735) |
---|
1655 | ("Syriac_Rbasa_Above" . #\u+0736) |
---|
1656 | ("Syriac_Rbasa_Below" . #\u+0737) |
---|
1657 | ("Syriac_Dotted_Zlama_Horizontal" . #\u+0738) |
---|
1658 | ("Syriac_Dotted_Zlama_Angular" . #\u+0739) |
---|
1659 | ("Syriac_Hbasa_Above" . #\u+073a) |
---|
1660 | ("Syriac_Hbasa_Below" . #\u+073b) |
---|
1661 | ("Syriac_Hbasa-Esasa_Dotted" . #\u+073c) |
---|
1662 | ("Syriac_Esasa_Above" . #\u+073d) |
---|
1663 | ("Syriac_Esasa_Below" . #\u+073e) |
---|
1664 | ("Syriac_Rwaha" . #\u+073f) |
---|
1665 | ("Syriac_Feminine_Dot" . #\u+0740) |
---|
1666 | ("Syriac_Qushshaya" . #\u+0741) |
---|
1667 | ("Syriac_Rukkakha" . #\u+0742) |
---|
1668 | ("Syriac_Two_Vertical_Dots_Above" . #\u+0743) |
---|
1669 | ("Syriac_Two_Vertical_Dots_Below" . #\u+0744) |
---|
1670 | ("Syriac_Three_Dots_Above" . #\u+0745) |
---|
1671 | ("Syriac_Three_Dots_Below" . #\u+0746) |
---|
1672 | ("Syriac_Oblique_Line_Above" . #\u+0747) |
---|
1673 | ("Syriac_Oblique_Line_Below" . #\u+0748) |
---|
1674 | ("Syriac_Music" . #\u+0749) |
---|
1675 | ("Syriac_Barrekh" . #\u+074a) |
---|
1676 | ("Syriac_Letter_Sogdian_Zhain" . #\u+074d) |
---|
1677 | ("Syriac_Letter_Sogdian_Khaph" . #\u+074e) |
---|
1678 | ("Syriac_Letter_Sogdian_Fe" . #\u+074f) |
---|
1679 | ("Arabic_Letter_Beh_With_Three_Dots_Horizontally_Below" . #\u+0750) |
---|
1680 | ("Arabic_Letter_Beh_With_Dot_Below_And_Three_Dots_Above" . #\u+0751) |
---|
1681 | ("Arabic_Letter_Beh_With_Three_Dots_Pointing_Upwards_Below" . #\u+0752) |
---|
1682 | ("Arabic_Letter_Beh_With_Three_Dots_Pointing_Upwards_Below_And_Two_Dots_Above" . #\u+0753) |
---|
1683 | ("Arabic_Letter_Beh_With_Two_Dots_Below_And_Dot_Above" . #\u+0754) |
---|
1684 | ("Arabic_Letter_Beh_With_Inverted_Small_V_Below" . #\u+0755) |
---|
1685 | ("Arabic_Letter_Beh_With_Small_V" . #\u+0756) |
---|
1686 | ("Arabic_Letter_Hah_With_Two_Dots_Above" . #\u+0757) |
---|
1687 | ("Arabic_Letter_Hah_With_Three_Dots_Pointing_Upwards_Below" . #\u+0758) |
---|
1688 | ("Arabic_Letter_Dal_With_Two_Dots_Vertically_Below_And_Small_Tah" . #\u+0759) |
---|
1689 | ("Arabic_Letter_Dal_With_Inverted_Small_V_Below" . #\u+075a) |
---|
1690 | ("Arabic_Letter_Reh_With_Stroke" . #\u+075b) |
---|
1691 | ("Arabic_Letter_Seen_With_Four_Dots_Above" . #\u+075c) |
---|
1692 | ("Arabic_Letter_Ain_With_Two_Dots_Above" . #\u+075d) |
---|
1693 | ("Arabic_Letter_Ain_With_Three_Dots_Pointing_Downwards_Above" . #\u+075e) |
---|
1694 | ("Arabic_Letter_Ain_With_Two_Dots_Vertically_Above" . #\u+075f) |
---|
1695 | ("Arabic_Letter_Feh_With_Two_Dots_Below" . #\u+0760) |
---|
1696 | ("Arabic_Letter_Feh_With_Three_Dots_Pointing_Upwards_Below" . #\u+0761) |
---|
1697 | ("Arabic_Letter_Keheh_With_Dot_Above" . #\u+0762) |
---|
1698 | ("Arabic_Letter_Keheh_With_Three_Dots_Above" . #\u+0763) |
---|
1699 | ("Arabic_Letter_Keheh_With_Three_Dots_Pointing_Upwards_Below" . #\u+0764) |
---|
1700 | ("Arabic_Letter_Meem_With_Dot_Above" . #\u+0765) |
---|
1701 | ("Arabic_Letter_Meem_With_Dot_Below" . #\u+0766) |
---|
1702 | ("Arabic_Letter_Noon_With_Two_Dots_Below" . #\u+0767) |
---|
1703 | ("Arabic_Letter_Noon_With_Small_Tah" . #\u+0768) |
---|
1704 | ("Arabic_Letter_Noon_With_Small_V" . #\u+0769) |
---|
1705 | ("Arabic_Letter_Lam_With_Bar" . #\u+076a) |
---|
1706 | ("Arabic_Letter_Reh_With_Two_Dots_Vertically_Above" . #\u+076b) |
---|
1707 | ("Arabic_Letter_Reh_With_Hamza_Above" . #\u+076c) |
---|
1708 | ("Arabic_Letter_Seen_With_Two_Dots_Vertically_Above" . #\u+076d) |
---|
1709 | ("Thaana_Letter_Haa" . #\u+0780) |
---|
1710 | ("Thaana_Letter_Shaviyani" . #\u+0781) |
---|
1711 | ("Thaana_Letter_Noonu" . #\u+0782) |
---|
1712 | ("Thaana_Letter_Raa" . #\u+0783) |
---|
1713 | ("Thaana_Letter_Baa" . #\u+0784) |
---|
1714 | ("Thaana_Letter_Lhaviyani" . #\u+0785) |
---|
1715 | ("Thaana_Letter_Kaafu" . #\u+0786) |
---|
1716 | ("Thaana_Letter_Alifu" . #\u+0787) |
---|
1717 | ("Thaana_Letter_Vaavu" . #\u+0788) |
---|
1718 | ("Thaana_Letter_Meemu" . #\u+0789) |
---|
1719 | ("Thaana_Letter_Faafu" . #\u+078a) |
---|
1720 | ("Thaana_Letter_Dhaalu" . #\u+078b) |
---|
1721 | ("Thaana_Letter_Thaa" . #\u+078c) |
---|
1722 | ("Thaana_Letter_Laamu" . #\u+078d) |
---|
1723 | ("Thaana_Letter_Gaafu" . #\u+078e) |
---|
1724 | ("Thaana_Letter_Gnaviyani" . #\u+078f) |
---|
1725 | ("Thaana_Letter_Seenu" . #\u+0790) |
---|
1726 | ("Thaana_Letter_Daviyani" . #\u+0791) |
---|
1727 | ("Thaana_Letter_Zaviyani" . #\u+0792) |
---|
1728 | ("Thaana_Letter_Taviyani" . #\u+0793) |
---|
1729 | ("Thaana_Letter_Yaa" . #\u+0794) |
---|
1730 | ("Thaana_Letter_Paviyani" . #\u+0795) |
---|
1731 | ("Thaana_Letter_Javiyani" . #\u+0796) |
---|
1732 | ("Thaana_Letter_Chaviyani" . #\u+0797) |
---|
1733 | ("Thaana_Letter_Ttaa" . #\u+0798) |
---|
1734 | ("Thaana_Letter_Hhaa" . #\u+0799) |
---|
1735 | ("Thaana_Letter_Khaa" . #\u+079a) |
---|
1736 | ("Thaana_Letter_Thaalu" . #\u+079b) |
---|
1737 | ("Thaana_Letter_Zaa" . #\u+079c) |
---|
1738 | ("Thaana_Letter_Sheenu" . #\u+079d) |
---|
1739 | ("Thaana_Letter_Saadhu" . #\u+079e) |
---|
1740 | ("Thaana_Letter_Daadhu" . #\u+079f) |
---|
1741 | ("Thaana_Letter_To" . #\u+07a0) |
---|
1742 | ("Thaana_Letter_Zo" . #\u+07a1) |
---|
1743 | ("Thaana_Letter_Ainu" . #\u+07a2) |
---|
1744 | ("Thaana_Letter_Ghainu" . #\u+07a3) |
---|
1745 | ("Thaana_Letter_Qaafu" . #\u+07a4) |
---|
1746 | ("Thaana_Letter_Waavu" . #\u+07a5) |
---|
1747 | ("Thaana_Abafili" . #\u+07a6) |
---|
1748 | ("Thaana_Aabaafili" . #\u+07a7) |
---|
1749 | ("Thaana_Ibifili" . #\u+07a8) |
---|
1750 | ("Thaana_Eebeefili" . #\u+07a9) |
---|
1751 | ("Thaana_Ubufili" . #\u+07aa) |
---|
1752 | ("Thaana_Ooboofili" . #\u+07ab) |
---|
1753 | ("Thaana_Ebefili" . #\u+07ac) |
---|
1754 | ("Thaana_Eybeyfili" . #\u+07ad) |
---|
1755 | ("Thaana_Obofili" . #\u+07ae) |
---|
1756 | ("Thaana_Oaboafili" . #\u+07af) |
---|
1757 | ("Thaana_Sukun" . #\u+07b0) |
---|
1758 | ("Thaana_Letter_Naa" . #\u+07b1) |
---|
1759 | ("Nko_Digit_Zero" . #\u+07c0) |
---|
1760 | ("Nko_Digit_One" . #\u+07c1) |
---|
1761 | ("Nko_Digit_Two" . #\u+07c2) |
---|
1762 | ("Nko_Digit_Three" . #\u+07c3) |
---|
1763 | ("Nko_Digit_Four" . #\u+07c4) |
---|
1764 | ("Nko_Digit_Five" . #\u+07c5) |
---|
1765 | ("Nko_Digit_Six" . #\u+07c6) |
---|
1766 | ("Nko_Digit_Seven" . #\u+07c7) |
---|
1767 | ("Nko_Digit_Eight" . #\u+07c8) |
---|
1768 | ("Nko_Digit_Nine" . #\u+07c9) |
---|
1769 | ("Nko_Letter_A" . #\u+07ca) |
---|
1770 | ("Nko_Letter_Ee" . #\u+07cb) |
---|
1771 | ("Nko_Letter_I" . #\u+07cc) |
---|
1772 | ("Nko_Letter_E" . #\u+07cd) |
---|
1773 | ("Nko_Letter_U" . #\u+07ce) |
---|
1774 | ("Nko_Letter_Oo" . #\u+07cf) |
---|
1775 | ("Nko_Letter_O" . #\u+07d0) |
---|
1776 | ("Nko_Letter_Dagbasinna" . #\u+07d1) |
---|
1777 | ("Nko_Letter_N" . #\u+07d2) |
---|
1778 | ("Nko_Letter_Ba" . #\u+07d3) |
---|
1779 | ("Nko_Letter_Pa" . #\u+07d4) |
---|
1780 | ("Nko_Letter_Ta" . #\u+07d5) |
---|
1781 | ("Nko_Letter_Ja" . #\u+07d6) |
---|
1782 | ("Nko_Letter_Cha" . #\u+07d7) |
---|
1783 | ("Nko_Letter_Da" . #\u+07d8) |
---|
1784 | ("Nko_Letter_Ra" . #\u+07d9) |
---|
1785 | ("Nko_Letter_Rra" . #\u+07da) |
---|
1786 | ("Nko_Letter_Sa" . #\u+07db) |
---|
1787 | ("Nko_Letter_Gba" . #\u+07dc) |
---|
1788 | ("Nko_Letter_Fa" . #\u+07dd) |
---|
1789 | ("Nko_Letter_Ka" . #\u+07de) |
---|
1790 | ("Nko_Letter_La" . #\u+07df) |
---|
1791 | ("Nko_Letter_Na_Woloso" . #\u+07e0) |
---|
1792 | ("Nko_Letter_Ma" . #\u+07e1) |
---|
1793 | ("Nko_Letter_Nya" . #\u+07e2) |
---|
1794 | ("Nko_Letter_Na" . #\u+07e3) |
---|
1795 | ("Nko_Letter_Ha" . #\u+07e4) |
---|
1796 | ("Nko_Letter_Wa" . #\u+07e5) |
---|
1797 | ("Nko_Letter_Ya" . #\u+07e6) |
---|
1798 | ("Nko_Letter_Nya_Woloso" . #\u+07e7) |
---|
1799 | ("Nko_Letter_Jona_Ja" . #\u+07e8) |
---|
1800 | ("Nko_Letter_Jona_Cha" . #\u+07e9) |
---|
1801 | ("Nko_Letter_Jona_Ra" . #\u+07ea) |
---|
1802 | ("Nko_Combining_Short_High_Tone" . #\u+07eb) |
---|
1803 | ("Nko_Combining_Short_Low_Tone" . #\u+07ec) |
---|
1804 | ("Nko_Combining_Short_Rising_Tone" . #\u+07ed) |
---|
1805 | ("Nko_Combining_Long_Descending_Tone" . #\u+07ee) |
---|
1806 | ("Nko_Combining_Long_High_Tone" . #\u+07ef) |
---|
1807 | ("Nko_Combining_Long_Low_Tone" . #\u+07f0) |
---|
1808 | ("Nko_Combining_Long_Rising_Tone" . #\u+07f1) |
---|
1809 | ("Nko_Combining_Nasalization_Mark" . #\u+07f2) |
---|
1810 | ("Nko_Combining_Double_Dot_Above" . #\u+07f3) |
---|
1811 | ("Nko_High_Tone_Apostrophe" . #\u+07f4) |
---|
1812 | ("Nko_Low_Tone_Apostrophe" . #\u+07f5) |
---|
1813 | ("Nko_Symbol_Oo_Dennen" . #\u+07f6) |
---|
1814 | ("Nko_Symbol_Gbakurunen" . #\u+07f7) |
---|
1815 | ("Nko_Comma" . #\u+07f8) |
---|
1816 | ("Nko_Exclamation_Mark" . #\u+07f9) |
---|
1817 | ("Nko_Lajanyalan" . #\u+07fa) |
---|
1818 | ("Line_Separator" . #\u+2028) |
---|
1819 | ("Paragraph_Separator" . #\u+2029) |
---|
1820 | ("Replacement_Character" . #\u+fffd) |
---|
1821 | ("Skull_And_Crossbones" . #\u+2620))) |
---|
1822 | (destructuring-bind (name . char) pair |
---|
1823 | (register-character-name name char))) |
---|
1824 | |
---|
1825 | |
---|
1826 | |
---|
1827 | ;;;(NAME-CHAR name) |
---|
1828 | ;;;If name has an entry in the *NAME->CHAR*, return first such entry. |
---|
1829 | ;;;Otherwise, if it consists of one char, return it. |
---|
1830 | ;;;Otherwise, if it consists of two chars, the first of which is ^, |
---|
1831 | ;;; return %code-char(c xor 64), where c is the uppercased second char. |
---|
1832 | ;;;Otherwise, if it starts with the prefix "u+" or "U+" followed by |
---|
1833 | ;;; hex digits, the number denoted by those hex digits is interpreted as the |
---|
1834 | ;;; unicode code of the character; if this value is less than |
---|
1835 | ;;; CHAR-CODE-LIMIT, CODE-CHAR of that value is returned. |
---|
1836 | ;;;Otherwise, if it consists of octal digits, the number denoted by |
---|
1837 | ;;; those octal digits is interpreted as per the U+ case above. |
---|
1838 | ;;;Otherwise return NIL. |
---|
1839 | |
---|
1840 | |
---|
1841 | (defun name-char (name) |
---|
1842 | "Given an argument acceptable to STRING, NAME-CHAR returns a character |
---|
1843 | whose name is that string, if one exists. Otherwise, NIL is returned." |
---|
1844 | (if (characterp name) |
---|
1845 | name |
---|
1846 | (let* ((name (string name))) |
---|
1847 | (let* ((namelen (length name))) |
---|
1848 | (declare (fixnum namelen)) |
---|
1849 | (or (gethash name *name->char*) |
---|
1850 | (if (= namelen 1) |
---|
1851 | (char name 0) |
---|
1852 | (if (and (= namelen 2) (eq (char name 0) #\^)) |
---|
1853 | (let* ((c1 (char-code (char-upcase (char name 1))))) |
---|
1854 | (if (and (>= c1 64) (< c1 96)) |
---|
1855 | (code-char (the fixnum (logxor (the fixnum c1) #x40))))) |
---|
1856 | (let* ((n 0) |
---|
1857 | (start 1)) |
---|
1858 | (declare (fixnum start)) |
---|
1859 | (or |
---|
1860 | (if (and (> namelen 1) |
---|
1861 | (or (eql (char name 0) #\U) |
---|
1862 | (eql (char name 0) #\u)) |
---|
1863 | (or (= namelen 2) |
---|
1864 | (progn |
---|
1865 | (when (eql (char name 1) #\+) |
---|
1866 | (incf start)) |
---|
1867 | t))) |
---|
1868 | (do* ((i start (1+ i))) |
---|
1869 | ((= i namelen) (if (< n char-code-limit) |
---|
1870 | (code-char n))) |
---|
1871 | (declare (fixnum i)) |
---|
1872 | (let* ((pos (position (char-upcase (char name i)) |
---|
1873 | "0123456789ABCDEF"))) |
---|
1874 | (if pos |
---|
1875 | (setq n (logior (ash n 4) pos)) |
---|
1876 | (progn |
---|
1877 | (setq n 0) |
---|
1878 | (return)))))) |
---|
1879 | (dotimes (i namelen (if (< n char-code-limit) |
---|
1880 | (code-char n))) |
---|
1881 | (let* ((code (the fixnum (- (the fixnum (char-code (char name i))) |
---|
1882 | (char-code #\0))))) |
---|
1883 | (declare (fixnum code)) |
---|
1884 | (if (and (>= code 0) |
---|
1885 | (<= code 7)) |
---|
1886 | (setq n (logior code (the fixnum (ash n 3)))) |
---|
1887 | (return))))))))))))) |
---|
1888 | |
---|
1889 | (eval-when (:compile-toplevel :load-toplevel :execute) |
---|
1890 | (defconstant wsp #.(let ((str (make-string 6 :element-type 'base-char))) |
---|
1891 | (set-schar str 0 #\Space) |
---|
1892 | (set-schar str 1 #\^I) |
---|
1893 | (set-schar str 2 #\^L) |
---|
1894 | (set-schar str 3 #\^@) |
---|
1895 | (set-schar str 4 #\^J) |
---|
1896 | (set-schar str 5 (code-char #xa0)) |
---|
1897 | str)) |
---|
1898 | |
---|
1899 | (defconstant wsp&cr #.(let ((str (make-string 7 :element-type 'base-char))) |
---|
1900 | (set-schar str 0 #\Space) |
---|
1901 | (set-schar str 1 #\^M) |
---|
1902 | (set-schar str 2 #\^I) |
---|
1903 | (set-schar str 3 #\^L) |
---|
1904 | (set-schar str 4 #\^@) |
---|
1905 | (set-schar str 5 #\^J) |
---|
1906 | (set-schar str 0 #\Space) |
---|
1907 | (set-schar str 6 (code-char #xa0)) |
---|
1908 | str)) |
---|
1909 | ) |
---|
1910 | |
---|
1911 | (defun whitespacep (char) |
---|
1912 | (eql $cht_wsp (%character-attribute char (rdtab.ttab *readtable*)))) |
---|
1913 | |
---|
1914 | |
---|
1915 | |
---|
1916 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
1917 | ;; Readtables ;; |
---|
1918 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
1919 | |
---|
1920 | ;;; Readtable = istructure with data [1] type-table and [2] macro-char-alist |
---|
1921 | ;;; Type-table is a 256 byte ivector with a type byte for each char. |
---|
1922 | ;;; macro-char-alist is a list of (char . defn). The defn is either a |
---|
1923 | ;;; cons of (#'read-dispatch . macro-char-alist) for |
---|
1924 | ;;; dispatch macros, or it is a function or a symbol to call for simple macros. |
---|
1925 | |
---|
1926 | (defun readtablep (object) (istruct-typep object 'readtable)) |
---|
1927 | |
---|
1928 | (defun readtable-arg (object) |
---|
1929 | (if (null object) (setq object *readtable*)) |
---|
1930 | (unless (istruct-typep object 'readtable) |
---|
1931 | (report-bad-arg object 'readtable)) |
---|
1932 | object) |
---|
1933 | |
---|
1934 | (eval-when (:compile-toplevel :execute) |
---|
1935 | (def-accessors %svref |
---|
1936 | token.string |
---|
1937 | token.ipos |
---|
1938 | token.opos |
---|
1939 | token.len |
---|
1940 | ) |
---|
1941 | |
---|
1942 | (defmacro with-token-buffer ((name) &body body &environment env) |
---|
1943 | (multiple-value-bind (body decls) (parse-body body env nil) |
---|
1944 | `(let* ((,name (vector (%get-token-string 16) 0 0 16 nil))) |
---|
1945 | (declare (dynamic-extent ,name)) |
---|
1946 | (unwind-protect |
---|
1947 | (locally ,@decls ,@body) |
---|
1948 | (%return-token-string ,name))))) |
---|
1949 | ) |
---|
1950 | |
---|
1951 | (defun read-dispatch (stream char) |
---|
1952 | (let* ((info (cdr (assq char (rdtab.alist *readtable*))))) |
---|
1953 | (with-token-buffer (tb) |
---|
1954 | (let* ((subchar nil) |
---|
1955 | (numarg nil)) |
---|
1956 | (loop |
---|
1957 | (if (digit-char-p (setq subchar (%read-char-no-eof stream))) |
---|
1958 | (%add-char-to-token subchar tb) |
---|
1959 | (return (setq subchar (char-upcase subchar) |
---|
1960 | numarg (%token-to-number tb 10))))) |
---|
1961 | (let* ((dispfun (cdr (assq subchar (cdr info))))) ; <== WAS char |
---|
1962 | (if dispfun |
---|
1963 | (funcall dispfun stream subchar numarg) |
---|
1964 | (signal-reader-error stream "Undefined character ~S in a ~S dispatch macro." subchar char))))))) |
---|
1965 | |
---|
1966 | ;;; This -really- gets initialized later in the file |
---|
1967 | (defvar %standard-readtable% |
---|
1968 | (let* ((ttab (make-array 256 :element-type '(unsigned-byte 8))) |
---|
1969 | (macs `((#\# . (,#'read-dispatch)))) |
---|
1970 | (case :upcase)) |
---|
1971 | (dotimes (i 256) (declare (fixnum i))(uvset ttab i $cht_cnst)) |
---|
1972 | (dotimes (ch (1+ (char-code #\Space))) |
---|
1973 | (uvset ttab ch $cht_wsp)) |
---|
1974 | (uvset ttab #xa0 $cht_wsp) |
---|
1975 | (uvset ttab (char-code #\\) $cht_sesc) |
---|
1976 | (uvset ttab (char-code #\|) $cht_mesc) |
---|
1977 | (uvset ttab (char-code #\#) $cht_ntmac) |
---|
1978 | (uvset ttab (char-code #\Backspace) $cht_ill) |
---|
1979 | (uvset ttab (char-code #\Rubout) $cht_ill) |
---|
1980 | (%istruct 'readtable ttab macs case))) |
---|
1981 | |
---|
1982 | (defvar %initial-readtable%) |
---|
1983 | (setq *readtable* %standard-readtable%) |
---|
1984 | (def-standard-initial-binding *readtable* ) |
---|
1985 | (queue-fixup (setq %initial-readtable% (copy-readtable *readtable*))) |
---|
1986 | |
---|
1987 | (defun copy-readtable (&optional (from *readtable*) to) |
---|
1988 | (setq from (if from (readtable-arg from) %standard-readtable%)) |
---|
1989 | (setq to (if to |
---|
1990 | (readtable-arg to) |
---|
1991 | (%istruct 'readtable |
---|
1992 | (make-array 256 :element-type '(unsigned-byte 8)) |
---|
1993 | nil (rdtab.case from)))) |
---|
1994 | (setf (rdtab.alist to) (copy-tree (rdtab.alist from))) |
---|
1995 | (setf (rdtab.case to) (rdtab.case from)) |
---|
1996 | (let* ((fttab (rdtab.ttab from)) |
---|
1997 | (tttab (rdtab.ttab to))) |
---|
1998 | (%copy-ivector-to-ivector fttab 0 tttab 0 256)) |
---|
1999 | to) |
---|
2000 | |
---|
2001 | (declaim (inline %character-attribute)) |
---|
2002 | |
---|
2003 | (defun %character-attribute (char attrtab) |
---|
2004 | (declare (character char) |
---|
2005 | (type (simple-array (unsigned-byte 8) (256)) attrtab) |
---|
2006 | (optimize (speed 3) (safety 0))) |
---|
2007 | (let* ((code (char-code char))) |
---|
2008 | (declare (fixnum code)) |
---|
2009 | (if (< code 256) |
---|
2010 | (aref attrtab code) |
---|
2011 | ;; Should probably have an extension mechanism for things |
---|
2012 | ;; like NBS. |
---|
2013 | $cht_cnst))) |
---|
2014 | |
---|
2015 | ;;; returns: (values attrib <aux-info>), where |
---|
2016 | ;;; <aux-info> = (char . fn), if terminating macro |
---|
2017 | ;;; = (char . (fn . dispatch-alist)), if dispatching macro |
---|
2018 | ;;; = nil otherwise |
---|
2019 | |
---|
2020 | |
---|
2021 | (defun %get-readtable-char (char &optional (readtable *readtable*)) |
---|
2022 | (setq char (require-type char 'character)) |
---|
2023 | (let* ((attr (%character-attribute char (rdtab.ttab readtable)))) |
---|
2024 | (declare (fixnum attr)) |
---|
2025 | (values attr (if (logbitp $cht_macbit attr) (assoc char (rdtab.alist readtable)))))) |
---|
2026 | |
---|
2027 | |
---|
2028 | (defun set-syntax-from-char (to-char from-char &optional to-readtable from-readtable) |
---|
2029 | "Causes the syntax of TO-CHAR to be the same as FROM-CHAR in the |
---|
2030 | optional readtable (defaults to the current readtable). The |
---|
2031 | FROM-TABLE defaults to the standard Lisp readtable when NIL." |
---|
2032 | (setq to-char (require-type to-char 'base-char)) |
---|
2033 | (setq from-char (require-type from-char 'base-char)) |
---|
2034 | (setq to-readtable (readtable-arg to-readtable)) |
---|
2035 | (setq from-readtable (readtable-arg (or from-readtable %initial-readtable%))) |
---|
2036 | (multiple-value-bind (from-attr from-info) (%get-readtable-char from-char from-readtable) |
---|
2037 | (let* ((new-tree (copy-tree (cdr from-info))) |
---|
2038 | (old-to-info (nth-value 1 (%get-readtable-char to-char to-readtable)))) |
---|
2039 | (without-interrupts |
---|
2040 | (if from-info |
---|
2041 | (if old-to-info |
---|
2042 | (setf (cdr old-to-info) new-tree) |
---|
2043 | (push (cons to-char new-tree) (rdtab.alist to-readtable))) |
---|
2044 | (if old-to-info |
---|
2045 | (setf (rdtab.alist to-readtable) (delq old-to-info (rdtab.alist to-readtable))))) |
---|
2046 | (if (and (= from-attr $cht_cnst) |
---|
2047 | (member to-char '(#\Newline #\Linefeed #\Page #\Return |
---|
2048 | #\Space #\Tab #\Backspace #\Rubout))) |
---|
2049 | (setf (uvref (rdtab.ttab to-readtable) (char-code to-char)) $cht_ill) |
---|
2050 | (setf (uvref (rdtab.ttab to-readtable) (char-code to-char)) from-attr))) |
---|
2051 | t))) |
---|
2052 | |
---|
2053 | (defun get-macro-character (char &optional readtable) |
---|
2054 | "Return the function associated with the specified CHAR which is a macro |
---|
2055 | character, or NIL if there is no such function. As a second value, return |
---|
2056 | T if CHAR is a macro character which is non-terminating, i.e. which can |
---|
2057 | be embedded in a symbol name." |
---|
2058 | (setq readtable (readtable-arg readtable)) |
---|
2059 | (multiple-value-bind (attr info) (%get-readtable-char char readtable) |
---|
2060 | (declare (fixnum attr) (list info)) |
---|
2061 | (let* ((def (cdr info))) |
---|
2062 | (values (if (consp def) (car def) def) |
---|
2063 | (= attr $cht_ntmac))))) |
---|
2064 | |
---|
2065 | (defun set-macro-character (char fn &optional non-terminating-p readtable) |
---|
2066 | "Causes CHAR to be a macro character which invokes FUNCTION when seen |
---|
2067 | by the reader. The NON-TERMINATINGP flag can be used to make the macro |
---|
2068 | character non-terminating, i.e. embeddable in a symbol name." |
---|
2069 | (setq char (require-type char 'base-char)) |
---|
2070 | (setq readtable (readtable-arg readtable)) |
---|
2071 | (when fn |
---|
2072 | (unless (or (symbolp fn) (functionp fn)) |
---|
2073 | (setq fn (require-type fn '(or symbol function))))) |
---|
2074 | (let* ((info (nth-value 1 (%get-readtable-char char readtable)))) |
---|
2075 | (declare (list info)) |
---|
2076 | (without-interrupts |
---|
2077 | (setf (uvref (rdtab.ttab readtable) (char-code char)) |
---|
2078 | (if (null fn) $cht_cnst (if non-terminating-p $cht_ntmac $cht_tmac))) |
---|
2079 | (if (and (null fn) info) |
---|
2080 | (setf (rdtab.alist readtable) (delete info (rdtab.alist readtable) :test #'eq)) |
---|
2081 | (if (null info) |
---|
2082 | (push (cons char fn) (rdtab.alist readtable)) |
---|
2083 | (let* ((def (cdr info))) |
---|
2084 | (if (atom def) |
---|
2085 | (setf (cdr info) fn) ; Non-dispatching |
---|
2086 | (setf (car def) fn)))))) ; Dispatching |
---|
2087 | t)) |
---|
2088 | |
---|
2089 | (defun readtable-case (readtable) |
---|
2090 | (unless (istruct-typep readtable 'readtable) |
---|
2091 | (report-bad-arg readtable 'readtable)) |
---|
2092 | (let* ((case (rdtab.case (readtable-arg readtable)))) |
---|
2093 | (if (symbolp case) |
---|
2094 | case |
---|
2095 | (%car (rassoc case (readtable-case-keywords) :test #'eq))))) |
---|
2096 | |
---|
2097 | (defun %set-readtable-case (readtable case) |
---|
2098 | (unless (istruct-typep readtable 'readtable) |
---|
2099 | (report-bad-arg readtable 'readtable)) |
---|
2100 | (check-type case (member :upcase :downcase :preserve :invert)) |
---|
2101 | (setf (rdtab.case (readtable-arg readtable)) case)) |
---|
2102 | |
---|
2103 | (defsetf readtable-case %set-readtable-case) |
---|
2104 | |
---|
2105 | (defun make-dispatch-macro-character (char &optional non-terminating-p readtable) |
---|
2106 | "Cause CHAR to become a dispatching macro character in readtable (which |
---|
2107 | defaults to the current readtable). If NON-TERMINATING-P, the char will |
---|
2108 | be non-terminating." |
---|
2109 | (setq readtable (readtable-arg readtable)) |
---|
2110 | (setq char (require-type char 'base-char)) |
---|
2111 | (let* ((info (nth-value 1 (%get-readtable-char char readtable)))) |
---|
2112 | (declare (list info)) |
---|
2113 | (without-interrupts |
---|
2114 | (setf (uvref (rdtab.ttab readtable) (char-code char)) |
---|
2115 | (if non-terminating-p $cht_ntmac $cht_tmac)) |
---|
2116 | (if info |
---|
2117 | (rplacd (cdr info) nil) |
---|
2118 | (push (cons char (cons #'read-dispatch nil)) (rdtab.alist readtable))))) |
---|
2119 | t) |
---|
2120 | |
---|
2121 | (defun get-dispatch-macro-character (disp-ch sub-ch &optional (readtable *readtable*)) |
---|
2122 | "Return the macro character function for SUB-CHAR under DISP-CHAR |
---|
2123 | or NIL if there is no associated function." |
---|
2124 | (setq readtable (readtable-arg (or readtable %initial-readtable%))) |
---|
2125 | (setq disp-ch (require-type disp-ch 'base-char)) |
---|
2126 | (setq sub-ch (char-upcase (require-type sub-ch 'base-char))) |
---|
2127 | (unless (digit-char-p sub-ch 10) |
---|
2128 | (let* ((def (cdr (nth-value 1 (%get-readtable-char disp-ch readtable))))) |
---|
2129 | (if (consp def) |
---|
2130 | (cdr (assq sub-ch (cdr def))) |
---|
2131 | (error "~A is not a dispatching macro character in ~s ." disp-ch readtable))))) |
---|
2132 | |
---|
2133 | (defun set-dispatch-macro-character (disp-ch sub-ch fn &optional readtable) |
---|
2134 | "Cause FUNCTION to be called whenever the reader reads DISP-CHAR |
---|
2135 | followed by SUB-CHAR." |
---|
2136 | (setq readtable (readtable-arg readtable)) |
---|
2137 | (setq disp-ch (require-type disp-ch 'base-char)) |
---|
2138 | (setq sub-ch (char-upcase (require-type sub-ch 'base-char))) |
---|
2139 | (when (digit-char-p sub-ch 10) |
---|
2140 | (error "subchar can't be a decimal digit - ~a ." sub-ch)) |
---|
2141 | (let* ((info (nth-value 1 (%get-readtable-char disp-ch readtable))) |
---|
2142 | (def (cdr info))) |
---|
2143 | (declare (list info)) |
---|
2144 | (unless (consp def) |
---|
2145 | (error "~A is not a dispatching macro character in ~s ." disp-ch readtable)) |
---|
2146 | (let* ((alist (cdr def)) |
---|
2147 | (pair (assq sub-ch alist))) |
---|
2148 | (if pair |
---|
2149 | (setf (cdr pair) fn) |
---|
2150 | (push (cons sub-ch fn) (cdr def)))) |
---|
2151 | t)) |
---|
2152 | |
---|
2153 | |
---|
2154 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
2155 | ;; Reader ;; |
---|
2156 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
2157 | |
---|
2158 | (defvar *read-eval* t "When nil, #. signals an error.") |
---|
2159 | (defvar %read-objects% nil) |
---|
2160 | (defvar %keep-whitespace% nil) |
---|
2161 | |
---|
2162 | |
---|
2163 | |
---|
2164 | |
---|
2165 | (def-standard-initial-binding %token-strings% (%cons-pool nil)) |
---|
2166 | |
---|
2167 | |
---|
2168 | (defun %return-token-string (token) |
---|
2169 | (let* ((str (token.string token)) |
---|
2170 | (pool %token-strings%)) |
---|
2171 | (setf (token.string token) nil) |
---|
2172 | (without-interrupts |
---|
2173 | (setf (pool.data pool) |
---|
2174 | (cheap-cons str (pool.data pool)))))) |
---|
2175 | |
---|
2176 | ;;;Look for an exact match, else create a simple-string. |
---|
2177 | (defun %get-token-string (len) |
---|
2178 | (declare (fixnum len)) |
---|
2179 | (without-interrupts |
---|
2180 | (do* ((pool %token-strings%) |
---|
2181 | (head (cons nil (pool.data pool))) |
---|
2182 | (prev head next) |
---|
2183 | (next (cdr prev) (cdr next))) |
---|
2184 | ((null next) |
---|
2185 | (make-string len :element-type 'base-char)) |
---|
2186 | (declare (dynamic-extent head) |
---|
2187 | (list head prev next)) |
---|
2188 | (let* ((s (car next))) |
---|
2189 | (when (= len (length s)) |
---|
2190 | (rplacd prev (cdr next)) |
---|
2191 | (setf (pool.data pool) (cdr head)) |
---|
2192 | (free-cons next) |
---|
2193 | (return s)))))) |
---|
2194 | |
---|
2195 | (defun %extend-token-string (token) |
---|
2196 | (let* ((old-string (token.string token)) |
---|
2197 | (old-length (token.len token))) |
---|
2198 | (declare (fixnum old-length)) |
---|
2199 | (let* ((new-length (the fixnum (ash old-length 1))) |
---|
2200 | (new-string (%get-token-string new-length))) |
---|
2201 | (dotimes (i old-length) |
---|
2202 | (setf (%schar new-string i) |
---|
2203 | (%schar old-string i))) |
---|
2204 | (%return-token-string token) |
---|
2205 | (setf (token.string token) new-string |
---|
2206 | (token.len token) new-length) |
---|
2207 | token))) |
---|
2208 | |
---|
2209 | (defun %add-char-to-token (char token) |
---|
2210 | (let* ((len (token.len token)) |
---|
2211 | (opos (token.opos token))) |
---|
2212 | (declare (fixnum len opos)) |
---|
2213 | (when (= opos len) |
---|
2214 | (%extend-token-string token)) |
---|
2215 | (setf (token.opos token) (the fixnum (1+ opos)) |
---|
2216 | (%schar (token.string token) opos) char))) |
---|
2217 | |
---|
2218 | (defun %string-from-token (token) |
---|
2219 | (let* ((opos (token.opos token)) |
---|
2220 | (ipos (token.ipos token)) |
---|
2221 | (tstr (token.string token)) |
---|
2222 | (len (the fixnum (- opos ipos))) |
---|
2223 | (string (make-string len :element-type 'base-char))) |
---|
2224 | (do* ((k 0 (1+ k)) |
---|
2225 | (i ipos (1+ i))) |
---|
2226 | ((= i opos) string) |
---|
2227 | (declare (fixnum i k)) |
---|
2228 | (setf (%schar string k) (%schar tstr i))))) |
---|
2229 | |
---|
2230 | (defun %next-token-char (token) |
---|
2231 | (let* ((ipos (token.ipos token))) |
---|
2232 | (declare (fixnum ipos)) |
---|
2233 | (when (< ipos (the fixnum (token.opos token))) |
---|
2234 | (setf (token.ipos token) (the fixnum (1+ ipos))) |
---|
2235 | (%schar (token.string token) ipos)))) |
---|
2236 | |
---|
2237 | (defun input-stream-arg (stream) |
---|
2238 | (cond ((null stream) *standard-input*) |
---|
2239 | ((eq stream t) *terminal-io*) |
---|
2240 | ;Otherwise, let ASK complain... |
---|
2241 | (t stream))) |
---|
2242 | |
---|
2243 | (defun %read-char-no-eof (stream) |
---|
2244 | (read-char stream)) |
---|
2245 | |
---|
2246 | (defun %next-char-and-attr (stream &optional (attrtab (rdtab.ttab *readtable*))) |
---|
2247 | (let* ((ch (read-char stream nil :eof))) |
---|
2248 | (if (eq ch :eof) |
---|
2249 | (values nil nil) |
---|
2250 | (values ch (%character-attribute ch attrtab))))) |
---|
2251 | |
---|
2252 | (defun %next-non-whitespace-char-and-attr (stream) |
---|
2253 | (let* ((attrtab (rdtab.ttab *readtable*))) |
---|
2254 | (loop |
---|
2255 | (multiple-value-bind (ch attr) (%next-char-and-attr stream attrtab) |
---|
2256 | (if (null ch) |
---|
2257 | (return (values nil nil)) |
---|
2258 | (unless (eql attr $cht_wsp) |
---|
2259 | (return (values ch attr)))))))) |
---|
2260 | |
---|
2261 | (defun %next-char-and-attr-no-eof (stream &optional (attrtab (rdtab.ttab *readtable*))) |
---|
2262 | (let* ((ch (%read-char-no-eof stream))) |
---|
2263 | (values ch (%character-attribute ch attrtab)))) |
---|
2264 | |
---|
2265 | (defun %next-non-whitespace-char-and-attr-no-eof (stream) |
---|
2266 | (let* ((attrtab (rdtab.ttab *readtable*))) |
---|
2267 | (loop |
---|
2268 | (multiple-value-bind (ch attr) (%next-char-and-attr-no-eof stream attrtab) |
---|
2269 | (declare (fixnum attr)) |
---|
2270 | (unless (= attr $cht_wsp) |
---|
2271 | (return (values ch attr))))))) |
---|
2272 | |
---|
2273 | ;;; "escapes" is a list of escaped character positions, in reverse order |
---|
2274 | (defun %casify-token (token escapes) |
---|
2275 | (let* ((case (readtable-case *readtable*)) |
---|
2276 | (opos (token.opos token)) |
---|
2277 | (string (token.string token))) |
---|
2278 | (declare (fixnum opos)) |
---|
2279 | (if (and (null escapes) (eq case :upcase)) ; Most common case, pardon the pun |
---|
2280 | ; %strup is faster - boot probs tho |
---|
2281 | (dotimes (i opos) |
---|
2282 | (setf (%schar string i) (char-upcase (%schar string i)))) |
---|
2283 | (unless (eq case :preserve) |
---|
2284 | (when (eq case :invert) |
---|
2285 | (let* ((lower-seen nil) |
---|
2286 | (upper-seen nil)) |
---|
2287 | (do* ((i (1- opos) (1- i)) |
---|
2288 | (esclist escapes) |
---|
2289 | (nextesc (if esclist (pop esclist) -1))) |
---|
2290 | ((< i 0) (if upper-seen (unless lower-seen (setq case :downcase)) |
---|
2291 | (when lower-seen (setq case :upcase)))) |
---|
2292 | (declare (fixnum i nextesc)) |
---|
2293 | (if (= nextesc i) |
---|
2294 | (setq nextesc (if esclist (pop esclist) -1)) |
---|
2295 | (let* ((ch (%schar string i))) |
---|
2296 | (if (upper-case-p ch) |
---|
2297 | (setq upper-seen t) |
---|
2298 | (if (lower-case-p ch) |
---|
2299 | (setq lower-seen t)))))))) |
---|
2300 | (if (eq case :upcase) |
---|
2301 | (do* ((i (1- opos) (1- i)) |
---|
2302 | (nextesc (if escapes (pop escapes) -1))) |
---|
2303 | ((< i 0)) |
---|
2304 | (declare (fixnum i nextesc)) |
---|
2305 | (if (= nextesc i) |
---|
2306 | (setq nextesc (if escapes (pop escapes) -1)) |
---|
2307 | (setf (%schar string i) (char-upcase (%schar string i))))) |
---|
2308 | (if (eq case :downcase) |
---|
2309 | (do* ((i (1- opos) (1- i)) |
---|
2310 | (nextesc (if escapes (pop escapes) -1))) |
---|
2311 | ((< i 0)) |
---|
2312 | (declare (fixnum i nextesc)) |
---|
2313 | (if (= nextesc i) |
---|
2314 | (setq nextesc (if escapes (pop escapes) -1)) |
---|
2315 | (setf (%schar string i) (char-downcase (%schar string i))))))))))) |
---|
2316 | |
---|
2317 | ;;; MCL's reader has historically treated ||:foo as a reference to the |
---|
2318 | ;;; symbol FOO in the package which has the null string as its name. |
---|
2319 | ;;; Some other implementations treat it as a keyword. This takes an |
---|
2320 | ;;; argument indicating whether or not something was "seen" before the |
---|
2321 | ;;; first colon was read, even if that thing caused no characters to |
---|
2322 | ;;; be added to the token. |
---|
2323 | |
---|
2324 | (defun %token-package (token colonpos seenbeforecolon stream) |
---|
2325 | (if colonpos |
---|
2326 | (if (and (eql colonpos 0) (not seenbeforecolon)) |
---|
2327 | *keyword-package* |
---|
2328 | (let* ((string (token.string token))) |
---|
2329 | (or (%find-pkg string colonpos) |
---|
2330 | (signal-reader-error stream "Reference to unknown package ~s." (subseq string 0 colonpos))))) |
---|
2331 | *package*)) |
---|
2332 | |
---|
2333 | ;;; Returns 4 values: reversed list of escaped character positions, |
---|
2334 | ;;; explicit package (if unescaped ":" or "::") or nil, t iff any |
---|
2335 | ;;; non-dot, non-escaped chars in token, and t if either no explicit |
---|
2336 | ;;; package or "::" |
---|
2337 | |
---|
2338 | (defun %collect-xtoken (token stream 1stchar) |
---|
2339 | (let* ((escapes ()) |
---|
2340 | (nondots nil) |
---|
2341 | (explicit-package *read-suppress*) |
---|
2342 | (double-colon t) |
---|
2343 | (multi-escaped nil)) |
---|
2344 | (do* ((attrtab (rdtab.ttab *readtable*)) |
---|
2345 | (char 1stchar (read-char stream nil :eof ))) |
---|
2346 | ((eq char :eof)) |
---|
2347 | (flet ((add-note-escape-pos (char token escapes) |
---|
2348 | (push (token.opos token) escapes) |
---|
2349 | (%add-char-to-token char token) |
---|
2350 | escapes)) |
---|
2351 | (let* ((attr (%character-attribute char attrtab))) |
---|
2352 | (declare (fixnum attr)) |
---|
2353 | (when (or (= attr $cht_tmac) |
---|
2354 | (= attr $cht_wsp)) |
---|
2355 | (when (or (not (= attr $cht_wsp)) %keep-whitespace%) |
---|
2356 | (unread-char char stream)) |
---|
2357 | (return )) |
---|
2358 | (if (= attr $cht_ill) |
---|
2359 | (signal-reader-error stream "Illegal character ~S." char) |
---|
2360 | (if (= attr $cht_sesc) |
---|
2361 | (setq nondots t |
---|
2362 | escapes (add-note-escape-pos (%read-char-no-eof stream) token escapes)) |
---|
2363 | (if (= attr $cht_mesc) |
---|
2364 | (progn |
---|
2365 | (setq nondots t) |
---|
2366 | (loop |
---|
2367 | (multiple-value-bind (nextchar nextattr) (%next-char-and-attr-no-eof stream attrtab) |
---|
2368 | (declare (fixnum nextattr)) |
---|
2369 | (if (= nextattr $cht_mesc) |
---|
2370 | (return (setq multi-escaped t)) |
---|
2371 | (if (= nextattr $cht_sesc) |
---|
2372 | (setq escapes (add-note-escape-pos (%read-char-no-eof stream) token escapes)) |
---|
2373 | (setq escapes (add-note-escape-pos nextchar token escapes))))))) |
---|
2374 | (let* ((opos (token.opos token))) ; Add char to token, note 1st colonpos |
---|
2375 | (declare (fixnum opos)) |
---|
2376 | (if (and (eq char #\:) ; (package-delimiter-p char ?) |
---|
2377 | (not explicit-package)) |
---|
2378 | (let* ((nextch (%read-char-no-eof stream))) |
---|
2379 | (if (eq nextch #\:) |
---|
2380 | (setq double-colon t) |
---|
2381 | (progn |
---|
2382 | (unread-char nextch stream) |
---|
2383 | (setq double-colon nil))) |
---|
2384 | (%casify-token token escapes) |
---|
2385 | (setq explicit-package (%token-package token opos nondots stream) |
---|
2386 | nondots t |
---|
2387 | escapes nil) |
---|
2388 | (setf (token.opos token) 0)) |
---|
2389 | (progn |
---|
2390 | (unless (eq char #\.) (setq nondots t)) |
---|
2391 | (%add-char-to-token char token)))))))))) |
---|
2392 | (values (or escapes multi-escaped) (if *read-suppress* nil explicit-package) nondots double-colon))) |
---|
2393 | |
---|
2394 | (defun %validate-radix (radix) |
---|
2395 | (if (and (typep radix 'fixnum) |
---|
2396 | (>= (the fixnum radix) 2) |
---|
2397 | (<= (the fixnum radix) 36)) |
---|
2398 | radix |
---|
2399 | (progn |
---|
2400 | (check-type radix (integer 2 36)) |
---|
2401 | radix))) |
---|
2402 | |
---|
2403 | (defun %token-to-number (token radix &optional no-rat) |
---|
2404 | (new-numtoken (token.string token) (token.ipos token) (token.opos token) radix no-rat)) |
---|
2405 | |
---|
2406 | ;;; If we're allowed to have a single "." in this context, DOT-OK is some distinguished |
---|
2407 | ;;; value that's returned to the caller when exactly one dot is present. |
---|
2408 | (defun %parse-token (stream firstchar dot-ok) |
---|
2409 | (with-token-buffer (tb) |
---|
2410 | (multiple-value-bind (escapes explicit-package nondots double-colon) (%collect-xtoken tb stream firstchar) |
---|
2411 | (unless *read-suppress* |
---|
2412 | (let* ((string (token.string tb)) |
---|
2413 | (len (token.opos tb))) |
---|
2414 | (declare (fixnum len)) |
---|
2415 | (if (not nondots) |
---|
2416 | (if (= len 1) |
---|
2417 | (or dot-ok |
---|
2418 | (signal-reader-error stream "Dot context error in ~s." (%string-from-token tb))) |
---|
2419 | (signal-reader-error stream "Illegal symbol syntax in ~s." (%string-from-token tb))) |
---|
2420 | ;; Something other than a buffer full of dots. Thank god. |
---|
2421 | (let* ((num (if (null escapes) |
---|
2422 | (handler-case |
---|
2423 | (%token-to-number tb (%validate-radix *read-base*)) |
---|
2424 | (arithmetic-error (c) |
---|
2425 | (error 'impossible-number |
---|
2426 | :stream stream |
---|
2427 | :token (%string-from-token tb) |
---|
2428 | :condition c)))))) |
---|
2429 | (if (and num (not explicit-package)) |
---|
2430 | num |
---|
2431 | (if (and (zerop len) (null escapes)) |
---|
2432 | (%err-disp $XBADSYM) |
---|
2433 | (progn ; Muck with readtable case of extended token. |
---|
2434 | (%casify-token tb (unless (atom escapes) escapes)) |
---|
2435 | (let* ((pkg (or explicit-package *package*))) |
---|
2436 | (if (or double-colon (eq pkg *keyword-package*)) |
---|
2437 | (without-interrupts |
---|
2438 | (multiple-value-bind (symbol access internal-offset external-offset) |
---|
2439 | (%find-symbol string len pkg) |
---|
2440 | (if access |
---|
2441 | symbol |
---|
2442 | (%add-symbol (%string-from-token tb) pkg internal-offset external-offset)))) |
---|
2443 | (multiple-value-bind (found symbol) (%get-htab-symbol string len (pkg.etab pkg)) |
---|
2444 | (if found |
---|
2445 | symbol |
---|
2446 | (let* ((token (%string-from-token tb)) |
---|
2447 | (symbol (find-symbol token pkg))) |
---|
2448 | (with-simple-restart (continue |
---|
2449 | "~:[Create and use the internal symbol ~a::~a~;Use the internal symbol ~:*~s~]" |
---|
2450 | symbol (package-name pkg) token) |
---|
2451 | (%err-disp $XNOESYM token pkg)) |
---|
2452 | (or symbol (intern token pkg))))))))))))))))) |
---|
2453 | |
---|
2454 | #| |
---|
2455 | (defun %parse-token-test (string &key dot-ok (case (readtable-case *readtable*))) |
---|
2456 | (let* ((stream (make-string-input-stream string)) |
---|
2457 | (oldcase (readtable-case *readtable*))) |
---|
2458 | (unwind-protect |
---|
2459 | (progn |
---|
2460 | (setf (readtable-case *readtable*) case) |
---|
2461 | (%parse-token stream (read-char stream t) dot-ok)) |
---|
2462 | (setf (readtable-case *readtable*) oldcase)))) |
---|
2463 | |
---|
2464 | (%parse-token-test "ABC") |
---|
2465 | (%parse-token-test "TRAPS::_DEBUGGER") |
---|
2466 | (%parse-token-test "3.14159") |
---|
2467 | (ignore-errors (%parse-token-test "BAD-PACKAGE:WORSE-SYMBOL")) |
---|
2468 | (ignore-errors (%parse-token-test "CCL::")) |
---|
2469 | (%parse-token-test "TRAPS::_debugger" :case :preserve) |
---|
2470 | (%parse-token-test ":foo") |
---|
2471 | |# |
---|
2472 | |
---|
2473 | ;;; firstchar must not be whitespace. |
---|
2474 | ;;; People who think that there's so much overhead in all of |
---|
2475 | ;;; this (multiple-value-list, etc.) should probably consider |
---|
2476 | ;;; rewriting those parts of the CLOS and I/O code that make |
---|
2477 | ;;; using things like READ-CHAR impractical... |
---|
2478 | |
---|
2479 | ;;; mb: the reason multiple-value-list is used here is that we need to distunguish between the |
---|
2480 | ;;; recursive parse call returning (values nil) and (values). |
---|
2481 | (defun %parse-expression (stream firstchar dot-ok) |
---|
2482 | (let* ((readtable *readtable*) |
---|
2483 | (attrtab (rdtab.ttab readtable)) |
---|
2484 | (attr (%character-attribute firstchar attrtab)) |
---|
2485 | (start-pos (stream-position stream))) |
---|
2486 | (declare (fixnum attr)) |
---|
2487 | (when (eql attr $cht_ill) |
---|
2488 | (signal-reader-error stream "Illegal character ~S." firstchar)) |
---|
2489 | (let* ((vals (multiple-value-list |
---|
2490 | (if (not (logbitp $cht_macbit attr)) |
---|
2491 | (%parse-token stream firstchar dot-ok) |
---|
2492 | (let* ((def (cdr (assq firstchar (rdtab.alist readtable))))) |
---|
2493 | (cond ((null def)) |
---|
2494 | ((atom def) |
---|
2495 | (funcall def stream firstchar)) |
---|
2496 | #+no ; include if %initial-readtable% broken (see above) |
---|
2497 | ((and (consp (car def)) |
---|
2498 | (eq (caar def) 'function)) |
---|
2499 | (funcall (cadar def) stream firstchar)) |
---|
2500 | ((functionp (car def)) |
---|
2501 | (funcall (car def) stream firstchar)) |
---|
2502 | (t (error "Bogus default dispatch fn: ~S" (car def)) nil)))))) |
---|
2503 | (end-pos (and start-pos (stream-position stream)))) |
---|
2504 | (declare (dynamic-extent vals) |
---|
2505 | (list vals)) |
---|
2506 | (if (null vals) |
---|
2507 | (values nil nil) |
---|
2508 | (destructuring-bind (form &optional nested-source-notes) |
---|
2509 | vals |
---|
2510 | ;; Can't really trust random reader macros to return source notes... |
---|
2511 | (unless (and (consp nested-source-notes) |
---|
2512 | (source-note-p (car nested-source-notes))) |
---|
2513 | (setq nested-source-notes nil)) |
---|
2514 | (values form |
---|
2515 | t |
---|
2516 | (and start-pos |
---|
2517 | (record-source-note :form form |
---|
2518 | :stream stream |
---|
2519 | :start-pos (1- start-pos) |
---|
2520 | :end-pos end-pos |
---|
2521 | :subform-notes nested-source-notes)))))))) |
---|
2522 | |
---|
2523 | #| |
---|
2524 | (defun %parse-expression-test (string) |
---|
2525 | (let* ((stream (make-string-input-stream string))) |
---|
2526 | (%parse-expression stream (read-char stream t) nil))) |
---|
2527 | |
---|
2528 | (%parse-expression-test ";hello") |
---|
2529 | (%parse-expression-test "#'cdr") |
---|
2530 | (%parse-expression-test "#+foo 1 2") |
---|
2531 | |
---|
2532 | |# |
---|
2533 | |
---|
2534 | (defun %read-list-expression (stream dot-ok &optional (termch #\))) |
---|
2535 | (loop |
---|
2536 | (let* ((firstch (%next-non-whitespace-char-and-attr-no-eof stream))) |
---|
2537 | (if (eq firstch termch) |
---|
2538 | (return (values nil nil nil)) |
---|
2539 | (multiple-value-bind (val val-p source-info) |
---|
2540 | (%parse-expression stream firstch dot-ok) |
---|
2541 | (if val-p |
---|
2542 | (return (values val t source-info)))))))) |
---|
2543 | |
---|
2544 | (defun read-list (stream &optional nodots (termch #\))) |
---|
2545 | (let* ((dot-ok (cons nil nil)) |
---|
2546 | (head (cons nil nil)) |
---|
2547 | (tail head) |
---|
2548 | (source-note-list nil)) |
---|
2549 | (declare (dynamic-extent dot-ok head) |
---|
2550 | (list head tail)) |
---|
2551 | (if nodots (setq dot-ok nil)) |
---|
2552 | (multiple-value-bind (firstform firstform-p firstform-source-note) |
---|
2553 | (%read-list-expression stream dot-ok termch) |
---|
2554 | (when firstform-source-note |
---|
2555 | (push firstform-source-note source-note-list)) |
---|
2556 | (when firstform-p |
---|
2557 | (if (and dot-ok (eq firstform dot-ok)) ; just read a dot |
---|
2558 | (signal-reader-error stream "Dot context error.")) |
---|
2559 | (rplacd tail (setq tail (cons firstform nil))) |
---|
2560 | (loop |
---|
2561 | (multiple-value-bind (nextform nextform-p nextform-source-note) |
---|
2562 | (%read-list-expression stream dot-ok termch) |
---|
2563 | (when nextform-source-note |
---|
2564 | (push nextform-source-note source-note-list)) |
---|
2565 | (if (not nextform-p) (return)) |
---|
2566 | (if (and dot-ok (eq nextform dot-ok)) ; just read a dot |
---|
2567 | (if (multiple-value-bind (lastform lastform-p lastform-source-note) |
---|
2568 | (%read-list-expression stream nil termch) |
---|
2569 | (when lastform-source-note |
---|
2570 | (push lastform-source-note source-note-list)) |
---|
2571 | (and lastform-p |
---|
2572 | (progn (rplacd tail lastform) |
---|
2573 | (not (nth-value 1 (%read-list-expression stream nil termch)))))) |
---|
2574 | (return) |
---|
2575 | (signal-reader-error stream "Dot context error.")) |
---|
2576 | (rplacd tail (setq tail (cons nextform nil)))))))) |
---|
2577 | (values (cdr head) source-note-list))) |
---|
2578 | |
---|
2579 | #| |
---|
2580 | (defun read-list-test (string &optional nodots) |
---|
2581 | (read-list (make-string-input-stream string) nodots)) |
---|
2582 | |
---|
2583 | (read-list-test ")") |
---|
2584 | (read-list-test "a b c)" t) |
---|
2585 | (read-list-test "a b ;hello |
---|
2586 | c)" t) |
---|
2587 | |
---|
2588 | |# |
---|
2589 | |
---|
2590 | (set-macro-character |
---|
2591 | #\( |
---|
2592 | #'(lambda (stream ignore) |
---|
2593 | (declare (ignore ignore)) |
---|
2594 | (read-list stream nil #\)))) |
---|
2595 | |
---|
2596 | (set-macro-character |
---|
2597 | #\' |
---|
2598 | (nfunction |'-reader| |
---|
2599 | (lambda (stream ignore) |
---|
2600 | (declare (ignore ignore)) |
---|
2601 | (multiple-value-bind (form source-note) |
---|
2602 | (read-internal stream t nil t) |
---|
2603 | (values `(quote ,form) (and source-note (list source-note))))))) |
---|
2604 | |
---|
2605 | (defparameter *alternate-line-terminator* |
---|
2606 | #+darwin-target #\Return |
---|
2607 | #-darwin-target nil |
---|
2608 | "This variable is currently only used by the standard reader macro |
---|
2609 | function for #\; (single-line comments); that function reads successive |
---|
2610 | characters until EOF, a #\NewLine is read, or a character EQL to the value |
---|
2611 | of *alternate-line-terminator* is read. In Clozure CL for Darwin, the value |
---|
2612 | of this variable is initially #\Return ; in Clozure CL for other OSes, it's |
---|
2613 | initially NIL.") |
---|
2614 | |
---|
2615 | (set-macro-character |
---|
2616 | #\; |
---|
2617 | (nfunction |;-reader| |
---|
2618 | (lambda (stream ignore) |
---|
2619 | (declare (ignore ignore)) |
---|
2620 | (let* ((ch nil)) |
---|
2621 | (loop |
---|
2622 | (if (or (eq :eof (setq ch (read-char stream nil :eof))) |
---|
2623 | (eq ch #\NewLine) |
---|
2624 | (eq ch *alternate-line-terminator*)) |
---|
2625 | (return (values)))))))) |
---|
2626 | |
---|
2627 | (defun read-string (stream termch) |
---|
2628 | (with-token-buffer (tb) |
---|
2629 | (do* ((attrs (rdtab.ttab *readtable*)) |
---|
2630 | (ch (%read-char-no-eof stream) |
---|
2631 | (%read-char-no-eof stream))) |
---|
2632 | ((eq ch termch) |
---|
2633 | (%string-from-token tb)) |
---|
2634 | (if (= (the fixnum (%character-attribute ch attrs)) $CHT_SESC) |
---|
2635 | (setq ch (%read-char-no-eof stream))) |
---|
2636 | (%add-char-to-token ch tb)))) |
---|
2637 | |
---|
2638 | (set-macro-character #\" #'read-string) |
---|
2639 | |
---|
2640 | (defparameter *ignore-extra-close-parenthesis* nil) |
---|
2641 | |
---|
2642 | (set-macro-character |
---|
2643 | #\) |
---|
2644 | #'(lambda (stream ch) |
---|
2645 | (let* ((pos (if (typep stream 'file-stream) |
---|
2646 | (file-position stream)))) |
---|
2647 | (if *ignore-extra-close-parenthesis* |
---|
2648 | (warn "Ignoring extra \"~c\" ~@[near position ~d~] on ~s ." ch pos stream) |
---|
2649 | (signal-reader-error stream "Unmatched ')' ~@[near position ~d~]." pos))))) |
---|
2650 | |
---|
2651 | |
---|
2652 | |
---|
2653 | |
---|
2654 | (eval-when (:load-toplevel) ; But not when mousing around! |
---|
2655 | (make-dispatch-macro-character #\# t)) |
---|
2656 | |
---|
2657 | |
---|
2658 | (set-dispatch-macro-character |
---|
2659 | #\# |
---|
2660 | #\( |
---|
2661 | (nfunction |
---|
2662 | |#(-reader| |
---|
2663 | (lambda (stream subchar numarg) |
---|
2664 | (declare (ignore subchar)) |
---|
2665 | (if (or (null numarg) *read-suppress*) |
---|
2666 | (multiple-value-bind (lst notes) (read-list stream t) |
---|
2667 | (let* ((len (length lst)) |
---|
2668 | (vec (make-array len))) |
---|
2669 | (declare (list lst) (fixnum len) (simple-vector vec)) |
---|
2670 | (dotimes (i len) |
---|
2671 | (setf (svref vec i) (pop lst))) |
---|
2672 | (values vec notes))) |
---|
2673 | (locally |
---|
2674 | (declare (fixnum numarg)) |
---|
2675 | (do* ((vec (make-array numarg)) |
---|
2676 | (notes ()) |
---|
2677 | (lastform) |
---|
2678 | (i 0 (1+ i))) |
---|
2679 | ((multiple-value-bind (form form-p source-info) |
---|
2680 | (%read-list-expression stream nil) |
---|
2681 | (if form-p |
---|
2682 | (progn |
---|
2683 | (setq lastform form) |
---|
2684 | (when source-info (push source-info notes))) |
---|
2685 | (unless (= i numarg) |
---|
2686 | (if (= i 0) |
---|
2687 | (%err-disp $XARROOB -1 vec) |
---|
2688 | (do* ((j i (1+ j))) |
---|
2689 | ((= j numarg)) |
---|
2690 | (declare (fixnum j)) |
---|
2691 | (setf (svref vec j) lastform))))) |
---|
2692 | (not form-p)) |
---|
2693 | (values vec notes)) |
---|
2694 | (declare (fixnum i)) |
---|
2695 | (setf (svref vec i) lastform))))))) |
---|
2696 | |
---|
2697 | (defun %read-rational (stream subchar radix) |
---|
2698 | (declare (ignore subchar)) |
---|
2699 | (with-token-buffer (tb) |
---|
2700 | (multiple-value-bind (escapes xpackage) |
---|
2701 | (%collect-xtoken tb stream (%next-non-whitespace-char-and-attr-no-eof stream)) |
---|
2702 | (unless *read-suppress* |
---|
2703 | (let* ((val (%token-to-number tb radix))) |
---|
2704 | (or (and (null escapes) |
---|
2705 | (null xpackage) |
---|
2706 | (typep val 'rational) |
---|
2707 | val) |
---|
2708 | (%err-disp $xbadnum))))))) |
---|
2709 | |
---|
2710 | (defun require-numarg (subchar numarg) |
---|
2711 | (or numarg *read-suppress* |
---|
2712 | (error "Numeric argument required for #~A reader macro ." subchar))) |
---|
2713 | |
---|
2714 | (defun require-no-numarg (subchar numarg) |
---|
2715 | (if (and numarg (not *read-suppress*)) |
---|
2716 | (error "Spurious numeric argument in #~D~A reader macro ." numarg subchar))) |
---|
2717 | |
---|
2718 | (defun read-eval (stream subchar numarg) |
---|
2719 | (require-no-numarg subchar numarg) |
---|
2720 | (if *read-eval* |
---|
2721 | (let* ((exp (%read-list-expression stream nil))) |
---|
2722 | (unless *read-suppress* |
---|
2723 | (eval exp))) |
---|
2724 | (signal-reader-error stream "#. reader macro invoked when ~S is false ." |
---|
2725 | '*read-eval*))) |
---|
2726 | |
---|
2727 | (set-dispatch-macro-character |
---|
2728 | #\# |
---|
2729 | #\C |
---|
2730 | #'(lambda (stream char arg) |
---|
2731 | (require-no-numarg char arg ) |
---|
2732 | (multiple-value-bind (form note) (read-internal stream t nil t) |
---|
2733 | (values (unless *read-suppress* (apply #'complex form)) (and note (list note)))))) |
---|
2734 | |
---|
2735 | (set-dispatch-macro-character |
---|
2736 | #\# |
---|
2737 | #\. |
---|
2738 | #'read-eval) |
---|
2739 | |
---|
2740 | ;;; Read a valid, non-numeric token string from stream; *READ-SUPPRESS* |
---|
2741 | ;;; is known to be false. |
---|
2742 | (defun read-symbol-token (stream) |
---|
2743 | (multiple-value-bind (firstch attr) (%next-non-whitespace-char-and-attr-no-eof stream) |
---|
2744 | (declare (fixnum attr)) |
---|
2745 | (with-token-buffer (tb) |
---|
2746 | (if (or (= attr $CHT_ILL) |
---|
2747 | (logbitp $cht_macbit attr) |
---|
2748 | (multiple-value-bind (escapes explicit-package nondots) (%collect-xtoken tb stream firstch) |
---|
2749 | (declare (ignore nondots)) |
---|
2750 | (%casify-token tb (unless (atom escapes) escapes)) |
---|
2751 | (or explicit-package |
---|
2752 | (and (not escapes) |
---|
2753 | (%token-to-number tb (%validate-radix *read-base*)))))) |
---|
2754 | (%err-disp $XBADSYM) |
---|
2755 | (%string-from-token tb))))) |
---|
2756 | |
---|
2757 | (set-dispatch-macro-character |
---|
2758 | #\# |
---|
2759 | #\: |
---|
2760 | #'(lambda (stream subchar numarg) |
---|
2761 | (require-no-numarg subchar numarg) |
---|
2762 | (if (not *read-suppress*) |
---|
2763 | (make-symbol (read-symbol-token stream)) |
---|
2764 | (progn |
---|
2765 | (%read-list-expression stream nil) |
---|
2766 | nil)))) |
---|
2767 | |
---|
2768 | (set-dispatch-macro-character |
---|
2769 | #\# |
---|
2770 | #\b |
---|
2771 | #'(lambda (stream subchar numarg) |
---|
2772 | (require-no-numarg subchar numarg) |
---|
2773 | (%read-rational stream subchar 2))) |
---|
2774 | |
---|
2775 | (set-dispatch-macro-character |
---|
2776 | #\# |
---|
2777 | #\o |
---|
2778 | #'(lambda (stream subchar numarg) |
---|
2779 | (require-no-numarg subchar numarg) |
---|
2780 | (%read-rational stream subchar 8))) |
---|
2781 | |
---|
2782 | (set-dispatch-macro-character |
---|
2783 | #\# |
---|
2784 | #\x |
---|
2785 | #'(lambda (stream subchar numarg) |
---|
2786 | (require-no-numarg subchar numarg) |
---|
2787 | (%read-rational stream subchar 16))) |
---|
2788 | |
---|
2789 | (set-dispatch-macro-character |
---|
2790 | #\# |
---|
2791 | #\r |
---|
2792 | #'(lambda (stream subchar numarg) |
---|
2793 | (unless *read-suppress* |
---|
2794 | (require-numarg subchar numarg) |
---|
2795 | (check-type numarg (integer 2 36))) |
---|
2796 | (%read-rational stream subchar numarg))) |
---|
2797 | |
---|
2798 | (set-dispatch-macro-character |
---|
2799 | #\# |
---|
2800 | #\' |
---|
2801 | (nfunction |#'-reader| |
---|
2802 | (lambda (stream subchar numarg) |
---|
2803 | (require-no-numarg subchar numarg) |
---|
2804 | (multiple-value-bind (form note) (read-internal stream t nil t) |
---|
2805 | (values `(function ,form) (and note (list note))))))) |
---|
2806 | |
---|
2807 | (set-dispatch-macro-character |
---|
2808 | #\# |
---|
2809 | #\| |
---|
2810 | (nfunction |#\|-reader| |
---|
2811 | (lambda (stream subchar numarg) |
---|
2812 | (require-no-numarg subchar numarg) |
---|
2813 | (do* ((lastch nil ch) |
---|
2814 | (ch ) |
---|
2815 | (level 1)) |
---|
2816 | ((= level 0) (values)) |
---|
2817 | (declare (fixnum level)) |
---|
2818 | (setq ch (%read-char-no-eof stream)) |
---|
2819 | (if (and (eq ch #\|) |
---|
2820 | (eq lastch #\#)) |
---|
2821 | (progn |
---|
2822 | (setq ch nil) |
---|
2823 | (incf level)) |
---|
2824 | (if (and (eq ch #\#) |
---|
2825 | (eq lastch #\|)) |
---|
2826 | (progn |
---|
2827 | (setq ch nil) |
---|
2828 | (decf level)))))))) |
---|
2829 | |
---|
2830 | (defun %unreadable (stream description) |
---|
2831 | (signal-reader-error stream "~S encountered." description)) |
---|
2832 | |
---|
2833 | (set-dispatch-macro-character |
---|
2834 | #\# |
---|
2835 | #\< |
---|
2836 | #'(lambda (stream &rest ignore) |
---|
2837 | (declare (ignore ignore)) |
---|
2838 | (%unreadable stream "#<"))) |
---|
2839 | |
---|
2840 | (dolist (ch '(#\null #\tab #\linefeed #\page #\return #\space #\312)) |
---|
2841 | (set-dispatch-macro-character |
---|
2842 | #\# |
---|
2843 | ch |
---|
2844 | #'(lambda (stream &rest ignore) |
---|
2845 | (declare (ignore ignore)) |
---|
2846 | (%unreadable stream "#<whitespace>")))) |
---|
2847 | |
---|
2848 | (set-dispatch-macro-character |
---|
2849 | #\# |
---|
2850 | #\) |
---|
2851 | #'(lambda (stream &rest ignore) |
---|
2852 | (declare (ignore ignore)) |
---|
2853 | (%unreadable stream "#)"))) |
---|
2854 | |
---|
2855 | (set-dispatch-macro-character |
---|
2856 | #\# |
---|
2857 | #\\ |
---|
2858 | #'(lambda (stream subchar numarg) |
---|
2859 | (require-no-numarg subchar numarg) |
---|
2860 | (with-token-buffer (tb) |
---|
2861 | (%collect-xtoken tb stream #\\) |
---|
2862 | (unless *read-suppress* |
---|
2863 | (let* ((str (%string-from-token tb))) |
---|
2864 | (or (name-char str) |
---|
2865 | (error "Unknown character name - \"~a\" ." str))))))) |
---|
2866 | |
---|
2867 | |
---|
2868 | |
---|
2869 | ;;;Since some built-in read macros used to use internal reader entry points |
---|
2870 | ;;;for efficiency, we couldn't reliably offer a protocol for stream-dependent |
---|
2871 | ;;;recursive reading. So recursive reads always get done via tyi's, and streams |
---|
2872 | ;;;only get to intercept toplevel reads. |
---|
2873 | (defun read (&optional stream (eof-error-p t) eof-value recursive-p) |
---|
2874 | (declare (resident)) |
---|
2875 | ;; just return the first value of read-internal |
---|
2876 | (values (read-internal stream eof-error-p eof-value recursive-p))) |
---|
2877 | |
---|
2878 | (defun read-internal (stream eof-error-p eof-value recursive-p) |
---|
2879 | (setq stream (input-stream-arg stream)) |
---|
2880 | (if recursive-p |
---|
2881 | (%read-form stream (if eof-error-p 0) nil) |
---|
2882 | (let ((%read-objects% nil) (%keep-whitespace% nil)) |
---|
2883 | (%read-form stream (if eof-error-p 0) eof-value)))) |
---|
2884 | |
---|
2885 | (defun read-preserving-whitespace (&optional stream (eof-error-p t) eof-value recursive-p) |
---|
2886 | "Read from STREAM and return the value read, preserving any whitespace |
---|
2887 | that followed the object." |
---|
2888 | (setq stream (input-stream-arg stream)) |
---|
2889 | (values |
---|
2890 | (if recursive-p |
---|
2891 | (%read-form stream 0 nil) |
---|
2892 | (let ((%read-objects% nil) (%keep-whitespace% t)) |
---|
2893 | (%read-form stream (if eof-error-p 0) eof-value))))) |
---|
2894 | |
---|
2895 | |
---|
2896 | (defun read-delimited-list (char &optional stream recursive-p) |
---|
2897 | "Read Lisp values from INPUT-STREAM until the next character after a |
---|
2898 | value's representation is CHAR, and return the objects as a list." |
---|
2899 | (setq char (require-type char 'character)) |
---|
2900 | (setq stream (input-stream-arg stream)) |
---|
2901 | (values |
---|
2902 | (let ((%keep-whitespace% nil)) |
---|
2903 | (if recursive-p |
---|
2904 | (%read-form stream char nil) |
---|
2905 | (let ((%read-objects% nil)) |
---|
2906 | (%read-form stream char nil)))))) |
---|
2907 | |
---|
2908 | (defun read-conditional (stream subchar int) |
---|
2909 | (declare (ignore int)) |
---|
2910 | (cond ((eq subchar (read-feature stream)) |
---|
2911 | (multiple-value-bind (form note) (read-internal stream t nil t) |
---|
2912 | (values form (and note (list note))))) |
---|
2913 | (t (let* ((*read-suppress* t)) |
---|
2914 | (read stream t nil t) |
---|
2915 | (values))))) |
---|
2916 | |
---|
2917 | (defun read-feature (stream) |
---|
2918 | (let* ((f (let* ((*package* *keyword-package*)) |
---|
2919 | (read stream t nil t)))) |
---|
2920 | (labels ((eval-feature (form) |
---|
2921 | (cond ((atom form) |
---|
2922 | (member form *features*)) |
---|
2923 | ((eq (car form) :not) |
---|
2924 | (not (eval-feature (cadr form)))) |
---|
2925 | ((eq (car form) :and) |
---|
2926 | (dolist (subform (cdr form) t) |
---|
2927 | (unless (eval-feature subform) (return)))) |
---|
2928 | ((eq (car form) :or) |
---|
2929 | (dolist (subform (cdr form) nil) |
---|
2930 | (when (eval-feature subform) (return t)))) |
---|
2931 | (t (%err-disp $XRDFEATURE form))))) |
---|
2932 | (if (eval-feature f) #\+ #\-)))) |
---|
2933 | |
---|
2934 | (set-dispatch-macro-character #\# #\+ #'read-conditional) |
---|
2935 | (set-dispatch-macro-character #\# #\- #'read-conditional) |
---|
2936 | |
---|
2937 | (defun %read-form (stream arg eof-val) |
---|
2938 | "Read a lisp form from STREAM |
---|
2939 | |
---|
2940 | arg=0 : read form, error if eof |
---|
2941 | arg=nil : read form, eof-val if eof. |
---|
2942 | arg=char : read delimited list" |
---|
2943 | (declare (resident)) |
---|
2944 | (check-type *readtable* readtable) |
---|
2945 | (check-type *package* package) |
---|
2946 | (if (and arg (not (eq arg 0))) |
---|
2947 | (read-list stream nil arg) |
---|
2948 | (loop |
---|
2949 | (let* ((ch (%next-non-whitespace-char-and-attr stream))) |
---|
2950 | (if (null ch) |
---|
2951 | (if arg |
---|
2952 | (error 'end-of-file :stream stream) |
---|
2953 | (return eof-val)) |
---|
2954 | (multiple-value-bind (form form-p source-note) |
---|
2955 | (%parse-expression stream ch nil) |
---|
2956 | (when form-p |
---|
2957 | (return |
---|
2958 | (values (if *read-suppress* nil form) |
---|
2959 | source-note))))))))) |
---|
2960 | |
---|
2961 | ;;;Until load backquote... |
---|
2962 | (set-macro-character #\` |
---|
2963 | #'(lambda (stream char) (declare (ignore stream)) (%err-disp $xbadmac char))) |
---|
2964 | (set-macro-character #\, (get-macro-character #\`)) |
---|
2965 | |
---|
2966 | |
---|
2967 | |
---|
2968 | (set-dispatch-macro-character #\# #\P |
---|
2969 | (qlfun |#P-reader| (stream char flags &aux (invalid-string "Invalid flags (~S) for pathname ~S")) |
---|
2970 | (declare (ignore char)) |
---|
2971 | (when (null flags) (setq flags 0)) |
---|
2972 | (unless (memq flags '(0 1 2 3 4)) |
---|
2973 | (unless *read-suppress* (report-bad-arg flags '(integer 0 4)))) |
---|
2974 | (multiple-value-bind (path note) (read-internal stream t nil t) |
---|
2975 | (unless *read-suppress* |
---|
2976 | (unless (stringp path) (report-bad-arg path 'string)) |
---|
2977 | (setq path (pathname path)) |
---|
2978 | (when (%ilogbitp 0 flags) |
---|
2979 | (when (%pathname-type path) (error invalid-string flags path)) |
---|
2980 | (setf (%pathname-type path) :unspecific)) |
---|
2981 | (when (%ilogbitp 1 flags) |
---|
2982 | (when (%pathname-name path) (error invalid-string flags path)) |
---|
2983 | (setf (%pathname-name path) "")) |
---|
2984 | (values path (and note (list note))))))) |
---|
2985 | |
---|
2986 | |
---|
2987 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
2988 | |
---|
2989 | (defstruct (source-note (:conc-name "SOURCE-NOTE.") (:constructor %make-source-note)) |
---|
2990 | ;; For an inner source form, the source-note of the outer source form. |
---|
2991 | ;; For outer source note, octets |
---|
2992 | source |
---|
2993 | filename |
---|
2994 | ;; start and end file positions (NOT characters positions) |
---|
2995 | file-range) |
---|
2996 | |
---|
2997 | (defun make-source-note (&key filename start-pos end-pos source) |
---|
2998 | (%make-source-note :filename filename |
---|
2999 | :file-range (encode-file-range start-pos end-pos) |
---|
3000 | :source source)) |
---|
3001 | |
---|
3002 | (defmethod print-object ((sn source-note) stream) |
---|
3003 | (print-unreadable-object (sn stream :type t :identity nil) |
---|
3004 | (print-source-note sn stream))) |
---|
3005 | |
---|
3006 | (defun print-source-note (sn stream) |
---|
3007 | (let* ((file (source-note-filename sn)) |
---|
3008 | (text (ignore-errors (source-note-text sn)))) |
---|
3009 | ;; Should fix this when record the name. |
---|
3010 | (when (eq (pathname-version file) :newest) |
---|
3011 | (setq file (namestring (make-pathname :version nil :defaults file)))) |
---|
3012 | (when text |
---|
3013 | (setq text (string-sans-most-whitespace text 121)) |
---|
3014 | (when (> (length text) 120) |
---|
3015 | (setq text (concatenate 'string (subseq text 0 120) "...")))) |
---|
3016 | (format stream "~s:~s-~s ~s" file |
---|
3017 | (source-note-start-pos sn) (source-note-end-pos sn) |
---|
3018 | text))) |
---|
3019 | |
---|
3020 | (defun source-note-filename (source) |
---|
3021 | (if (source-note-p source) |
---|
3022 | (source-note.filename source) |
---|
3023 | ;; else null or a pathname, as in record-source-file |
---|
3024 | source)) |
---|
3025 | |
---|
3026 | (defun (setf source-note-filename) (filename source-note) |
---|
3027 | (setf (source-note.filename (require-type source-note 'source-note)) filename)) |
---|
3028 | |
---|
3029 | ;; Since source notes are optional, it simplifies a lot of code |
---|
3030 | ;; to have these accessors allow NIL. |
---|
3031 | |
---|
3032 | (defun source-note-source (source-note) |
---|
3033 | (when source-note |
---|
3034 | (source-note.source (require-type source-note 'source-note)))) |
---|
3035 | |
---|
3036 | (defun source-note-file-range (source-note) |
---|
3037 | (when source-note |
---|
3038 | (source-note.file-range (require-type source-note 'source-note)))) |
---|
3039 | |
---|
3040 | (defun source-note-start-pos (source-note) |
---|
3041 | (let ((range (source-note-file-range source-note))) |
---|
3042 | (when range |
---|
3043 | (if (consp range) (car range) (ash range -14))))) |
---|
3044 | |
---|
3045 | (defun source-note-end-pos (source-note) |
---|
3046 | (let ((range (source-note-file-range source-note))) |
---|
3047 | (when range |
---|
3048 | (if (consp range) (cdr range) (+ (ash range -14) (logand range #x3FFF)))))) |
---|
3049 | |
---|
3050 | (defun encode-file-range (start-pos end-pos) |
---|
3051 | (let ((len (- end-pos start-pos))) |
---|
3052 | (if (< len (ash 1 14)) |
---|
3053 | (+ (ash start-pos 14) len) |
---|
3054 | (cons start-pos end-pos)))) |
---|
3055 | |
---|
3056 | (defun source-note-text (source-note &optional start end) |
---|
3057 | (when source-note |
---|
3058 | (let* ((source (source-note-source source-note)) |
---|
3059 | (start-pos (source-note-start-pos source-note)) |
---|
3060 | (end-pos (source-note-end-pos source-note)) |
---|
3061 | (start (or start start-pos)) |
---|
3062 | (end (or end end-pos))) |
---|
3063 | (etypecase source |
---|
3064 | (source-note |
---|
3065 | (assert (<= (source-note-start-pos source) start end (source-note-end-pos source))) |
---|
3066 | (source-note-text source start end)) |
---|
3067 | ((simple-array (unsigned-byte 8) (*)) |
---|
3068 | (decf start start-pos) |
---|
3069 | (decf end start-pos) |
---|
3070 | (assert (and (<= 0 start end (length source)))) |
---|
3071 | (decode-string-from-octets source :start start :end end :external-format :utf-8)) |
---|
3072 | (null source))))) |
---|
3073 | |
---|
3074 | (defun source-note-toplevel-note (source-note) |
---|
3075 | (when source-note |
---|
3076 | (loop for source = (source-note-source source-note) |
---|
3077 | while (source-note-p source) |
---|
3078 | do (setq source-note source)) |
---|
3079 | source-note)) |
---|
3080 | |
---|
3081 | (defvar *recording-source-streams* ()) |
---|
3082 | |
---|
3083 | (defun record-source-note (&key form stream start-pos end-pos subform-notes) |
---|
3084 | (let ((recording (assq stream *recording-source-streams*))) |
---|
3085 | (when (and recording (not *read-suppress*)) |
---|
3086 | (destructuring-bind (map file-name stream-offset) (cdr recording) |
---|
3087 | (let* ((prev (gethash form map)) |
---|
3088 | (note (make-source-note :filename file-name |
---|
3089 | :start-pos (+ stream-offset start-pos) |
---|
3090 | :end-pos (+ stream-offset end-pos)))) |
---|
3091 | (setf (gethash form map) |
---|
3092 | (cond ((null prev) note) |
---|
3093 | ((consp prev) (cons note prev)) |
---|
3094 | (t (list note prev)))) |
---|
3095 | (loop for subnote in subform-notes |
---|
3096 | do (when (source-note-source subnote) (error "Subnote ~s already owned?" subnote)) |
---|
3097 | do (setf (source-note.source subnote) note)) |
---|
3098 | note))))) |
---|
3099 | |
---|
3100 | (defun read-recording-source (stream &key eofval file-name start-offset map save-source-text) |
---|
3101 | "Read a top-level form, perhaps recording source locations. |
---|
3102 | If MAP is NIL, just reads a form as if by READ. |
---|
3103 | If MAP is non-NIL, returns a second value of a source-note object describing the form. |
---|
3104 | In addition, if MAP is a hash table, it gets filled with source-note's for all |
---|
3105 | non-atomic nested subforms." |
---|
3106 | (when (null start-offset) (setq start-offset 0)) |
---|
3107 | (typecase map |
---|
3108 | (null (values (read-internal stream nil eofval nil) nil)) |
---|
3109 | (hash-table |
---|
3110 | (let* ((recording (list stream map file-name start-offset)) |
---|
3111 | (*recording-source-streams* (cons recording *recording-source-streams*))) |
---|
3112 | (declare (dynamic-extent recording *recording-source-streams*)) |
---|
3113 | (multiple-value-bind (form source-note) (read-internal stream nil eofval nil) |
---|
3114 | (when (and source-note (not (eq form eofval))) |
---|
3115 | (assert (null (source-note-source source-note))) |
---|
3116 | (loop for form being the hash-key using (hash-value note) of map |
---|
3117 | do (cond ((eq note source-note) nil) |
---|
3118 | ;; Remove entries with multiple source notes, which can happen |
---|
3119 | ;; for atoms. If we can't tell which instance we mean, then we |
---|
3120 | ;; don't have useful source info. |
---|
3121 | ((listp note) (remhash form map)) |
---|
3122 | ((loop for p = note then (source-note-source p) while (source-note-p p) |
---|
3123 | thereis (eq p source-note)) |
---|
3124 | ;; Flatten the backpointers so each subnote points directly |
---|
3125 | ;; to the toplevel note. |
---|
3126 | (setf (source-note.source note) source-note)))) |
---|
3127 | (when save-source-text |
---|
3128 | (setf (source-note.source source-note) |
---|
3129 | (fetch-octets-from-stream stream |
---|
3130 | (- (source-note-start-pos source-note) |
---|
3131 | start-offset) |
---|
3132 | (- (source-note-end-pos source-note) |
---|
3133 | start-offset))))) |
---|
3134 | (values form source-note)))) |
---|
3135 | (T |
---|
3136 | (let* ((start-pos (stream-position stream)) |
---|
3137 | (form (read-internal stream nil eofval nil)) |
---|
3138 | (end-pos (and start-pos (neq form eofval) (stream-position stream))) |
---|
3139 | (source-note (and end-pos |
---|
3140 | (make-source-note :filename file-name |
---|
3141 | :start-pos (+ start-offset start-pos) |
---|
3142 | :end-pos (+ start-offset end-pos))))) |
---|
3143 | (when (and source-note save-source-text) |
---|
3144 | (setf (source-note.source source-note) (fetch-octets-from-stream stream start-pos end-pos))) |
---|
3145 | (values form source-note))))) |
---|
3146 | |
---|
3147 | (defun fetch-octets-from-stream (stream start-offset end-offset) |
---|
3148 | ;; We basically want to read the bytes between two positions, but there is no |
---|
3149 | ;; direct interface for that. So we let the stream decode and then we re-encode. |
---|
3150 | ;; (Just as well, since otherwise we'd have to remember the file's encoding). |
---|
3151 | (declare (fixnum start-offset)) |
---|
3152 | (when (< start-offset end-offset) |
---|
3153 | (let* ((cur-pos (stream-position stream)) |
---|
3154 | (noctets (- end-offset start-offset)) |
---|
3155 | (vec (make-array noctets :element-type '(unsigned-byte 8))) |
---|
3156 | (index 0) |
---|
3157 | (crlfp (eq :crlf |
---|
3158 | (cdr (assoc (external-format-line-termination |
---|
3159 | (stream-external-format stream)) |
---|
3160 | *canonical-line-termination-conventions*))))) |
---|
3161 | (declare (type fixnum end-offset noctets index) |
---|
3162 | (type (simple-array (unsigned-byte 8) (*)) vec)) |
---|
3163 | (macrolet ((out (code) |
---|
3164 | `(progn |
---|
3165 | (setf (aref vec index) ,code) |
---|
3166 | (when (eql (incf index) noctets) (return))))) |
---|
3167 | (stream-position stream start-offset) |
---|
3168 | (loop |
---|
3169 | (let ((code (char-code (read-char stream)))) |
---|
3170 | (declare (fixnum code)) |
---|
3171 | (cond ((< code #x80) |
---|
3172 | (when (and crlfp (= code (char-code #\NewLine))) |
---|
3173 | (out (char-code #\Return))) |
---|
3174 | (out code)) |
---|
3175 | ((< code #x800) |
---|
3176 | (out (logior #xc0 (ldb (byte 5 6) code))) |
---|
3177 | (out (logior #x80 (ldb (byte 6 0) code)))) |
---|
3178 | ((< code #x10000) |
---|
3179 | (out (logior #xe0 (ldb (byte 4 12) code))) |
---|
3180 | (out (logior #x80 (ldb (byte 6 6) code))) |
---|
3181 | (out (logior #x80 (ldb (byte 6 0) code)))) |
---|
3182 | (t |
---|
3183 | (out (logior #xf0 (ldb (byte 3 18) code))) |
---|
3184 | (out (logior #xe0 (ldb (byte 6 12) code))) |
---|
3185 | (out (logior #x80 (ldb (byte 6 6) code))) |
---|
3186 | (out (logior #x80 (ldb (byte 6 0) code)))))))) |
---|
3187 | (stream-position stream cur-pos) |
---|
3188 | vec))) |
---|
3189 | |
---|
3190 | (defun ensure-source-note-text (source-note &key (if-does-not-exist nil)) |
---|
3191 | "Fetch source text from file if don't have it" |
---|
3192 | (setq if-does-not-exist (require-type if-does-not-exist '(member :error nil))) |
---|
3193 | (if source-note |
---|
3194 | (let ((source (source-note-source source-note)) |
---|
3195 | (filename (source-note-filename source-note))) |
---|
3196 | (etypecase source |
---|
3197 | (null |
---|
3198 | (with-open-file (stream filename :if-does-not-exist if-does-not-exist) |
---|
3199 | (when stream |
---|
3200 | (let ((start (source-note-start-pos source-note)) |
---|
3201 | (end (source-note-end-pos source-note)) |
---|
3202 | (len (file-length stream))) |
---|
3203 | (if (<= end len) |
---|
3204 | (setf (source-note.source source-note) |
---|
3205 | (fetch-octets-from-stream stream start end)) |
---|
3206 | (when if-does-not-exist |
---|
3207 | (error 'simple-file-error :pathname filename |
---|
3208 | :error-type "File ~s changed since source info recorded"))))))) |
---|
3209 | (source-note |
---|
3210 | (ensure-source-note-text source)) |
---|
3211 | ((simple-array (unsigned-byte 8) (*)) |
---|
3212 | source))) |
---|
3213 | (when if-does-not-exist |
---|
3214 | (error "Missing source note")))) |
---|
3215 | |
---|
3216 | |
---|
3217 | ;; This can be called explicitly by macros that do more complicated transforms |
---|
3218 | (defun note-source-transformation (original new) |
---|
3219 | (nx-note-source-transformation original new)) |
---|
3220 | |
---|
3221 | |
---|
3222 | |
---|
3223 | ; end |
---|