source: trunk/ccl/level-1/l1-reader.lisp @ 6637

Last change on this file since 6637 was 6637, checked in by gb, 14 years ago

%TOKEN-PACKAGE generates a READER-ERROR if it can't find the package,
accepts a stream argument in order to signal that type of error. (Note
that this has never been recoverable in general, especially in the
case where the input stream is *terminal-io* or shares its input stream.)

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