source: trunk/source/level-1/l1-aprims.lisp @ 14553

Last change on this file since 14553 was 14553, checked in by gz, 9 years ago

Make *GENSYM-COUNTER* global. This means (GENSYM) will generate
globally unique pnames, though it also means multi-threaded code that
explicitly modifies *GENSYM-COUNTER* may need to do appropriate locking
or binding to achieve whatever effect it is hoping to achieve. See
ticket:799 for discussion.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 125.8 KB
Line 
1;;;-*-Mode: LISP; Package: CCL -*-
2;;;
3;;;   Copyright (C) 2009 Clozure Associates
4;;;   Copyright (C) 1994-2001 Digitool, Inc
5;;;   This file is part of Clozure CL. 
6;;;
7;;;   Clozure CL is licensed under the terms of the Lisp Lesser GNU Public
8;;;   License , known as the LLGPL and distributed with Clozure CL as the
9;;;   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
10;;;   which is distributed with Clozure CL as the file "LGPL".  Where these
11;;;   conflict, the preamble takes precedence. 
12;;;
13;;;   Clozure CL is referenced in the preamble as the "LIBRARY."
14;;;
15;;;   The LLGPL is also available online at
16;;;   http://opensource.franz.com/preamble.html
17
18;; L1-aprims.lisp
19
20
21(in-package "CCL")
22
23
24(let* ((standard-initial-bindings ())
25       (standard-initial-bindings-lock (make-read-write-lock)))
26
27  (defun standard-initial-bindings ()
28    (with-read-lock (standard-initial-bindings-lock)
29      (copy-list standard-initial-bindings)))
30
31  (defun define-standard-initial-binding (symbol initform)
32    (setq symbol (require-type symbol 'symbol))
33    (%proclaim-special symbol)
34    (unless (boundp symbol)
35      (set symbol (funcall initform)))
36    (with-write-lock (standard-initial-bindings-lock)
37      (let* ((pair (assoc symbol standard-initial-bindings)))
38        (if pair
39          (setf (cdr pair) initform)
40          (push (cons symbol initform) standard-initial-bindings))))
41    (record-source-file symbol 'variable)
42    symbol))
43
44(defstatic *kernel-tcr-area-lock* (%make-lock (%null-ptr) "Kernel tcr-area-lock"))
45
46(defstatic *kernel-exception-lock* (%make-lock (%null-ptr) "Kernel exception-lock"))
47 
48(def-ccl-pointers kernel-locks ()
49  (let* ((p (recursive-lock-ptr *kernel-tcr-area-lock*))
50         (q (recursive-lock-ptr *kernel-exception-lock*)))
51    (%revive-macptr p)
52    (%revive-macptr q)
53    (%get-kernel-global-ptr area-lock p)
54    (%get-kernel-global-ptr exception-lock q)))
55
56(def-standard-initial-binding *package*)
57(def-standard-initial-binding *random-state* (initial-random-state))
58(def-standard-initial-binding *whostate* "Reset")
59(setq *whostate* "Reset")
60(def-standard-initial-binding *error-print-length* 20)
61(def-standard-initial-binding *error-print-level* 8)
62
63(defun %badarg (arg type)
64  (%err-disp $XWRONGTYPE arg type))
65
66(defun atom (arg)
67  "Return true if OBJECT is an ATOM, and NIL otherwise."
68  (not (consp arg)))
69
70(defun list (&rest args)
71  "Return constructs and returns a list of its arguments."
72  args)
73
74(%fhave '%temp-list #'list)
75
76(defun list* (arg &rest others)
77  "Return a list of the arguments with last cons a dotted pair"
78  (cond ((null others) arg)
79        ((null (cdr others)) (cons arg (car others)))
80        (t (do ((x others (cdr x)))
81               ((null (cddr x)) (rplacd x (cadr x))))
82           (cons arg others))))
83
84
85
86(defun funcall (fn &rest args)
87  "Call FUNCTION with the given ARGUMENTS."
88  (declare (dynamic-extent args))
89  (apply fn args))
90
91
92(defun apply (function arg &rest args)
93  "Apply FUNCTION to a list of arguments produced by evaluating ARGUMENTS in
94   the manner of LIST*. That is, a list is made of the values of all but the
95   last argument, appended to the value of the last argument, which must be a
96   list."
97  (declare (dynamic-extent args))
98  (cond ((null args)
99         (apply function arg))
100        ((null (cdr args))
101         (apply function arg (car args)))
102        (t (do* ((a1 args a2)
103                 (a2 (cdr args) (cdr a2)))
104                ((atom (cdr a2))
105                 (rplacd a1 (car a2))
106                 (apply function arg args))))))
107
108
109;;; This is not fast, but it gets the functionality that
110;;; Wood and possibly other code depend on.
111(defun applyv (function arg &rest other-args)
112  (declare (dynamic-extent other-args))
113  (let* ((other-args (cons arg other-args))
114         (last-arg (car (last other-args)))
115         (last-arg-length (length last-arg))
116         (butlast-args (nbutlast other-args))
117         (rest-args (make-list last-arg-length))
118         (rest-args-tail rest-args))
119    (declare (dynamic-extent other-args rest-args))
120    (dotimes (i last-arg-length)
121      (setf (car rest-args-tail) (aref last-arg i))
122      (pop rest-args-tail))
123    (apply function (nconc butlast-args rest-args))))
124
125;;; This is slow, and since %apply-lexpr isn't documented either,
126;;; nothing in the world should depend on it.  This is just being
127;;; anal retentive.  VERY anal retentive.
128
129(defun %apply-lexpr (function arg &rest args)
130  (cond ((null args) (%apply-lexpr function arg))
131        (t (apply function arg (nconc (nbutlast args)
132                                      (collect-lexpr-args (car (last args)) 0))))))
133
134
135(defun values-list (arg)
136  "Return all of the elements of LIST, in order, as values."
137  (apply #'values arg))
138
139
140
141
142
143
144; copy-list
145
146(defun copy-list (list)
147  "Return a new list which is EQUAL to LIST."
148  (if list
149    (let ((result (cons (car list) '()) ))
150      (do ((x (cdr list) (cdr x))
151           (splice result
152                   (%cdr (%rplacd splice (cons (%car x) '() ))) ))
153          ((atom x) (unless (null x)
154                      (%rplacd splice x)) result)))))
155
156(defun alt-list-length (l)
157  "Detect (and complain about) cirucular lists; allow any atom to
158terminate the list"
159  (do* ((n 0 (1+ n))
160        (fast l)
161        (slow l))
162       ((atom fast) n)
163    (declare (fixnum n))
164    (setq fast (cdr fast))
165    (if (logbitp 0 n)
166      (if (eq (setq slow (cdr slow)) fast)
167        (%err-disp $XIMPROPERLIST l)))))
168
169
170(defun last (list &optional (n 1))
171  "Return the last N conses (not the last element!) of a list."
172  (if (and (typep n 'fixnum)
173           (>= (the fixnum n) 0))
174    (locally (declare (fixnum n))
175      (do* ((checked-list list (cdr checked-list))
176            (returned-list list)
177            (index 0 (1+ index)))
178           ((atom checked-list) returned-list)
179        (declare (type fixnum index))
180        (if (>= index n)
181          (pop returned-list))))
182    (if (and (typep n 'bignum)
183             (> n 0))
184      (require-type list 'list)
185      (report-bad-arg  n 'unsigned-byte))))
186
187
188
189
190
191(defun nthcdr (index list)
192  "Performs the cdr function n times on a list."
193  (setq list (require-type list 'list))
194  (if (and (typep index 'fixnum)
195           (>= (the fixnum index) 0))
196      (locally (declare (fixnum index))
197        (dotimes (i index list)
198          (when (null (setq list (cdr list))) (return))))
199      (progn
200        (unless (typep index 'unsigned-byte)
201          (report-bad-arg index 'unsigned-byte))
202        (do* ((n index (- n target::target-most-positive-fixnum)))
203             ((typep n 'fixnum) (nthcdr n list))
204          (unless (setq list (nthcdr target::target-most-positive-fixnum list))
205            (return))))))
206
207
208(defun nth (index list)
209  "Return the nth object in a list where the car is the zero-th element."
210  (car (nthcdr index list)))
211
212
213(defun nconc (&rest lists)
214  (declare (dynamic-extent lists))
215  "Concatenates the lists given as arguments (by changing them)"
216  (do* ((top lists (cdr top)))
217       ((null top) nil)
218    (let* ((top-of-top (car top)))
219      (cond
220       ((consp top-of-top)
221        (let* ((result top-of-top)
222               (splice result))
223          (do* ((elements (cdr top) (cdr elements)))
224                 ((endp elements))
225            (let ((ele (car elements)))
226              (typecase ele
227                (cons (rplacd (last splice) ele)
228                      (setf splice ele))
229                (null (rplacd (last splice) nil))
230                (atom (if (cdr elements)
231                        (report-bad-arg ele 'list)
232                        (rplacd (last splice) ele)))
233                (t (report-bad-arg ele 'list)))))
234          (return result)))
235       ((null top-of-top) nil)
236       (t
237        (if (cdr top)
238          (report-bad-arg top-of-top 'list)
239          (return top-of-top)))))))
240
241
242(defvar %setf-function-names% (make-hash-table :weak t :test 'eq))
243(defvar %setf-function-name-inverses% (make-hash-table :weak t :test 'eq))
244
245(defun setf-function-name (sym)
246  "Returns the symbol in the SETF package that holds the binding of (SETF sym)"
247   (or (gethash sym %setf-function-names%)
248       (progn
249         (let* ((setf-package-sym (construct-setf-function-name sym)))
250           (setf (gethash setf-package-sym %setf-function-name-inverses%) sym
251                 (gethash sym %setf-function-names%) setf-package-sym)))))
252
253(defun existing-setf-function-name (sym)
254  (gethash sym %setf-function-names%))
255
256(defun maybe-setf-name (sym)
257  (let* ((other (gethash sym %setf-function-name-inverses%)))
258    (if other
259      `(setf ,other)
260      sym)))
261
262                     
263
264(defconstant *setf-package* (or (find-package "SETF") (make-package "SETF" :use nil :external-size 1)))
265
266(defun construct-setf-function-name (sym)
267  (let ((pkg (symbol-package sym)))
268    (setq sym (symbol-name sym))
269    (if (null pkg)
270      (gentemp sym *setf-package*)
271      (values
272       (intern
273        ;;I wonder, if we didn't check, would anybody report it as a bug?
274        (if (not (%str-member #\: (setq pkg (package-name pkg))))
275          (%str-cat pkg "::" sym)
276          (%str-cat (prin1-to-string pkg) "::" (princ-to-string sym)))
277        *setf-package*)))))
278
279(defun setf-function-name-p (name)
280  (and (consp name)
281             (consp (%cdr name))
282             (null (%cddr name))
283             (symbolp (%cadr name))
284             (eq (car name) 'setf)))
285
286(defun valid-function-name-p (name)
287  (if (symbolp name)                    ; Nil is a valid function name.  I guess.
288    (values t name)
289    (if (setf-function-name-p name)
290      (values t (setf-function-name (%cadr name)))
291      ; What other kinds of function names do we care to support ?
292      (values nil nil))))
293
294;;; Why isn't this somewhere else ?
295(defun ensure-valid-function-name (name)
296  (multiple-value-bind (valid-p nm) (valid-function-name-p name)
297    (if valid-p nm (error "Invalid function name ~s." name))))
298
299
300(defun maybe-setf-function-name (name)
301  (if (setf-function-name-p name)
302    (setf-function-name (cadr name))
303    name))
304
305
306;;; Returns index if char appears in string, else nil.
307
308(defun %str-member (char string &optional start end)
309  (let* ((base-string-p (typep string 'simple-base-string)))
310    (unless base-string-p
311      (setq string (require-type string 'simple-string)))
312    (unless (characterp char)
313      (setq char (require-type char 'character)))
314    (do* ((i (or start 0) (1+ i))
315            (n (or end (uvsize string))))
316           ((= i n))
317        (declare (fixnum i n) (optimize (speed 3) (safety 0)))
318        (if (eq (schar (the simple-base-string string) i) char)
319          (return i)))))
320
321
322
323;;; Returns index of elt in vector, or nil if it's not there.
324(defun %vector-member (elt vector)
325  (unless (typep vector 'simple-vector)
326    (report-bad-arg vector 'simple-vector))
327  (dotimes (i (the fixnum (length vector)))
328    (when (eq elt (%svref vector i)) (return i))))
329
330(defun logical-pathname-p (thing) (istruct-typep thing 'logical-pathname))
331
332(progn
333;;; It's back ...
334(defun list-nreverse (list)
335  (nreconc list nil))
336
337;;; We probably want to make this smarter so that less boxing
338;;; (and bignum/double-float consing!) takes place.
339
340(defun vector-nreverse (v)
341  (let* ((len (length v))
342         (middle (ash (the fixnum len) -1)))
343    (declare (fixnum middle len))
344    (do* ((left 0 (1+ left))
345          (right (1- len) (1- right)))
346         ((= left middle) v)
347      (declare (fixnum left right))
348      (rotatef (aref v left) (aref v right)))))
349   
350(defun nreverse (seq)
351  "Return a sequence of the same elements in reverse order; the argument
352   is destroyed."
353  (when seq
354    (seq-dispatch seq
355                  (list-nreverse seq)
356                  (vector-nreverse seq)))))
357
358(defun nreconc (x y)
359  "Return (NCONC (NREVERSE X) Y)."
360  (do ((1st (cdr x) (if (endp 1st) 1st (cdr 1st)))
361       (2nd x 1st)              ;2nd follows first down the list.
362       (3rd y 2nd))             ;3rd follows 2nd down the list.
363      ((atom 2nd) 3rd)
364    (rplacd 2nd 3rd)))
365
366;;; The two-arg case is maybe a bit faster.  We -don't- want to
367;;; do the two-arg case repeatedly to implement the N-arg case.
368(defun append (&rest lists)
369  (declare (dynamic-extent lists))
370  "Construct a new list by concatenating the list arguments"
371  (if lists
372    (let* ((head (cons nil nil))
373           (tail head))
374      (declare (dynamic-extent head)
375               (cons head tail))
376      (do* ()
377           ((null lists) (cdr head))
378        (let* ((list (pop lists)))
379          (if (null lists)
380            (rplacd tail list)
381            (dolist (element list)
382                (setq tail (cdr (rplacd tail (cons element nil)))))))))))
383
384
385
386                     
387
388
389
390
391
392
393
394(progn
395(defun list-reverse (l)
396  (do* ((new ()))
397       ((null l) new)
398    (push (pop l) new)))
399
400; Again, it's worth putting more work into this when the dust settles.
401(defun vector-reverse (v)
402  (let* ((len (length v))
403         (new (make-array (the fixnum len) :element-type (array-element-type v))))   ; a LOT more work ...
404    (declare (fixnum len))
405    (do* ((left 0 (1+ left))
406          (right (1- len) (1- right)))
407         ((= left len) new)
408      (declare (fixnum left right))
409      (setf (uvref new left)
410            (aref v right)))))
411
412(defun reverse (seq)
413  "Return a new sequence containing the same elements but in reverse order."
414  (seq-dispatch seq (list-reverse seq) (vector-reverse seq)))
415)
416
417
418(defun check-sequence-bounds (seq start end)
419  (flet ((bad-sequence-interval (seq start end)
420           (unless (typep start 'unsigned-byte)
421             (report-bad-arg start 'unsigned-byte))
422           (if (and end (not (typep end 'unsigned-byte)))
423             (report-bad-arg end '(or null unsigned-byte)))
424           (error "Bad interval for sequence operation on ~s : start = ~s, end = ~s" seq start end)))
425  (let* ((length (length seq)))
426    (declare (fixnum length))
427    (if (and (typep start 'fixnum)
428             (<= 0 (the fixnum start))
429             (if (null end)
430               (<= (the fixnum start) (the fixnum (setq end length)))
431               (and (typep end 'fixnum)
432                    (<= (the fixnum start) (the fixnum end))
433                    (<= (the fixnum end) (the fixnum length)))))
434
435      end
436      (bad-sequence-interval seq start end)))))
437
438 
439
440(defun byte-length (string &optional  (start 0) end)
441  (setq end (check-sequence-bounds string start end))
442  (- end start))
443
444
445
446(defun make-cstring (string)
447  (let* ((len (length string)))
448    (declare (fixnum len))
449    (let* ((s (malloc (the fixnum (1+ len)))))
450      (setf (%get-byte s len) 0)
451      (multiple-value-bind (data offset) (array-data-and-offset string)
452        (dotimes (i len s)
453          (setf (%get-unsigned-byte s i) (%scharcode data (+ offset i))))
454        s))))
455
456(defun move-string-bytes (source dest off1 off2 n)
457  (declare (fixnum off1 off2 n)
458           (simple-base-string source dest)
459           (optimize (speed 3) (safety 0)))
460  (dotimes (i n dest)
461    (setf (schar dest off2) (schar source off1))
462    (incf off1)
463    (incf off2)))
464
465
466(defun %str-cat (s1 s2 &rest more)
467  (declare (dynamic-extent more))
468  (require-type s1 'simple-string)
469  (require-type s2 'simple-string)
470  (let* ((len1 (length s1))
471         (len2 (length s2))
472         (len (%i+ len2 len1)))
473    (declare (optimize (speed 3)(safety 0)))
474    (dolist (s more)
475      (require-type s 'simple-string)
476      (setq len (+ len (length s))))
477    (let ((new-string (make-string len :element-type 'base-char)))
478      (move-string-bytes s1 new-string 0 0 len1)
479      (move-string-bytes s2 new-string 0 len1 len2)
480      (dolist (s more)
481        (setq len2 (%i+ len1 len2))
482        (move-string-bytes s new-string 0 len2 (setq len1 (length s))))
483      new-string)))
484
485
486(defun %substr (str start end)
487  (require-type start 'fixnum)
488  (require-type end 'fixnum)
489  (require-type str 'string)
490  (let ((len (length str)))
491    (multiple-value-bind (str strb)(array-data-and-offset str)
492      (let ((newlen (%i- end start)))
493        (when (%i> end len)(error "End ~S exceeds length ~S." end len))
494        (when (%i< start 0)(error "Negative start"))
495        (let ((new (make-string newlen)))
496          (do* ((i 0 (1+ i))
497                (pos (%i+ start strb) (1+ pos)))
498               ((= i newlen) new)
499            (declare (fixnum i pos))
500            (setf (schar new i) (schar str pos))))))))
501
502
503
504;;; 3 callers
505(defun %list-to-uvector (subtype list)   ; subtype may be nil (meaning simple-vector
506  (let* ((n (length list))
507         (new (%alloc-misc n (or subtype target::subtag-simple-vector))))  ; yech
508    (dotimes (i n)
509      (declare (fixnum i))
510      (uvset new i (%car list))
511      (setq list (%cdr list)))
512    new))
513
514
515; appears to be unused
516(defun upgraded-array-element-type (type &optional env)
517  "Return the element type that will actually be used to implement an array
518   with the specifier :ELEMENT-TYPE Spec."
519  (declare (ignore env))
520  (element-subtype-type (element-type-subtype type)))
521
522(defun upgraded-complex-part-type (type &optional env)
523  (declare (ignore env))
524  (declare (ignore type))               ; Ok, ok.  So (upgraded-complex-part-type 'bogus) is 'REAL. So ?
525  'real)
526
527
528#+ppc32-target
529(progn
530  (defparameter array-element-subtypes
531    #(single-float 
532      (unsigned-byte 32)
533      (signed-byte 32)
534      fixnum
535      base-char                         ;ucs4
536      (unsigned-byte 8)
537      (signed-byte 8)
538      base-char
539      (unsigned-byte 16)
540      (signed-byte 16)
541      double-float
542      bit))
543 
544  ;; given uvector subtype - what is the corresponding element-type
545  (defun element-subtype-type (subtype)
546    (declare (fixnum subtype))
547    (if  (= subtype ppc32::subtag-simple-vector) t
548        (svref array-element-subtypes 
549               (ash (- subtype ppc32::min-cl-ivector-subtag) (- ppc32::ntagbits)))))
550  )
551
552#+x8632-target
553(progn
554  (defparameter array-element-subtypes
555    #(single-float 
556      (unsigned-byte 32)
557      (signed-byte 32)
558      fixnum
559      base-char                         ;ucs4
560      (unsigned-byte 8)
561      (signed-byte 8)
562      base-char
563      (unsigned-byte 16)
564      (signed-byte 16)
565      double-float
566      bit))
567 
568  ;; given uvector subtype - what is the corresponding element-type
569  (defun element-subtype-type (subtype)
570    (declare (fixnum subtype))
571    (if  (= subtype x8632::subtag-simple-vector) t
572        (svref array-element-subtypes 
573               (ash (- subtype x8632::min-cl-ivector-subtag) (- x8632::ntagbits)))))
574  )
575
576#+ppc64-target
577(progn
578
579(defparameter array-element-subtypes
580  #(bogus
581    bogus
582    bogus
583    bogus
584    (signed-byte 8)
585    (signed-byte 16)
586    (signed-byte 32)
587    (signed-byte 64)
588    (unsigned-byte 8)
589    (unsigned-byte 16)
590    (unsigned-byte 32)
591    (unsigned-byte 64)
592    bogus
593    bogus
594    single-float
595    fixnum
596    bogus
597    bogus
598    bogus
599    double-float
600    bogus
601    bogus
602    base-char
603    bogus
604    bogus
605    bogus
606    bogus
607    bogus
608    bogus
609    bit
610    bogus
611    bogus)) 
612
613 
614  ;;; given uvector subtype - what is the corresponding element-type
615  (defun element-subtype-type (subtype)
616    (declare (fixnum subtype))
617    (if  (= subtype ppc64::subtag-simple-vector)
618      t
619      (svref array-element-subtypes 
620             (ash (- subtype 128) -2))))
621  )
622
623#+x8664-target
624(progn
625
626  ;;; 1, 8, 16-bit element types
627  (defparameter *immheader-0-array-element-types*
628    #(bogus
629      bogus
630      bogus
631      bogus
632      bogus
633      bogus
634      bogus
635      bogus
636      bogus
637      bogus
638      (signed-byte 16)
639      (unsigned-byte 16)
640      base-char
641      (signed-byte 8)
642      (unsigned-byte 8)
643      bit))
644
645  ;;; 32-bit element types
646  (defparameter *immheader-1-array-element-types*
647    #(bogus
648      bogus
649      bogus
650      bogus
651      bogus
652      bogus
653      bogus
654      bogus
655      bogus
656      bogus
657      bogus
658      bogus
659      base-char
660      (signed-byte 32)
661      (unsigned-byte 32)
662      single-float))
663
664  ;;; 64-bit element types
665  (defparameter *immheader-2-array-element-types*
666    #(bogus
667      bogus
668      bogus
669      bogus
670      bogus
671      bogus
672      bogus
673      bogus
674      bogus
675      bogus
676      bogus
677      bogus
678      fixnum
679      (signed-byte 64)
680      (unsigned-byte 64)
681      double-float)) 
682     
683 
684  (defun element-subtype-type (subtype)
685    (declare (type (unsigned-byte 8) subtype))
686    (if (= subtype x8664::subtag-simple-vector)
687      t
688      (let* ((class (ash subtype (- x8664::ntagbits)))
689             (tag (logand subtype x8664::fulltagmask)))
690        (declare (type (unsigned-byte 4) class tag))
691        (cond ((= tag x8664::fulltag-immheader-0)
692               (%svref *immheader-0-array-element-types* class))
693              ((= tag x8664::fulltag-immheader-1)
694               (%svref *immheader-1-array-element-types* class))
695              ((= tag x8664::fulltag-immheader-2)
696               (%svref *immheader-2-array-element-types* class))
697              (t 'bogus)))))
698  )
699
700#+arm-target
701(progn
702  (defparameter array-element-subtypes
703    #(single-float 
704      (unsigned-byte 32)
705      (signed-byte 32)
706      fixnum
707      base-char                         ;ucs4
708      (unsigned-byte 8)
709      (signed-byte 8)
710      base-char
711      (unsigned-byte 16)
712      (signed-byte 16)
713      double-float
714      bit))
715 
716  ;; given uvector subtype - what is the corresponding element-type
717  (defun element-subtype-type (subtype)
718    (declare (fixnum subtype))
719    (if  (= subtype arm::subtag-simple-vector) t
720        (svref array-element-subtypes 
721               (ash (- subtype arm::min-cl-ivector-subtag) (- arm::ntagbits)))))
722  )
723
724
725;;; %make-displaced-array assumes the following
726
727(eval-when (:compile-toplevel)
728  (assert (eql target::arrayH.flags-cell target::vectorH.flags-cell))
729  (assert (eql target::arrayH.displacement-cell target::vectorH.displacement-cell))
730  (assert (eql target::arrayH.data-vector-cell target::vectorH.data-vector-cell)))
731
732
733(defun %make-displaced-array (dimensions displaced-to
734                                         &optional fill adjustable
735                                         offset explicitp)
736  (if offset 
737    (unless (and (fixnump offset) (>= (the fixnum offset) 0))
738      (setq offset (require-type offset '(and fixnum (integer 0 *)))))
739    (setq offset 0))
740  (locally (declare (fixnum offset))
741    (let* ((disp-size (array-total-size displaced-to))
742           (rank (if (listp dimensions)(length dimensions) 1))
743           (new-size (if (fixnump dimensions)
744                       dimensions
745                       (if (listp dimensions)
746                         (if (eql rank 1)
747                           (car dimensions)
748                           (if (eql rank 0) 1 ; why not 0?
749                           (apply #'* dimensions))))))
750           (vect-subtype (typecode displaced-to))
751           (target displaced-to)
752           (real-offset offset)
753           (flags 0))
754      (declare (fixnum disp-size rank flags vect-subtype real-offset))
755      (when explicitp
756        (setq flags (bitset $arh_exp_disp_bit flags)))
757      (if (not (fixnump new-size))(error "Bad array dimensions ~s." dimensions)) 
758      (locally (declare (fixnum new-size))
759        ; (when (> (+ offset new-size) disp-size) ...), but don't cons bignums
760        (when (or (> new-size disp-size)
761                  (let ((max-offset (- disp-size new-size)))
762                    (declare (fixnum max-offset))
763                    (> offset max-offset)))
764          (%err-disp $err-disp-size displaced-to))
765        (if adjustable  (setq flags (bitset $arh_adjp_bit flags)))
766        (when fill
767          (if (eq fill t)
768            (setq fill new-size)
769            (unless (and (eql rank 1)
770                         (fixnump fill)
771                         (locally (declare (fixnum fill))
772                           (and (>= fill 0) (<= fill new-size))))
773              (error "Bad fill pointer ~s" fill)))
774          (setq flags (bitset $arh_fill_bit flags))))
775      ; If displaced-to is an array or vector header and is either
776      ; adjustable or its target is a header, then we need to set the
777      ; $arh_disp_bit. If displaced-to is not adjustable, then our
778      ; target can be its target instead of itself.
779      (when (or (eql vect-subtype target::subtag-arrayH)
780                (eql vect-subtype target::subtag-vectorH))
781        (let ((dflags (%svref displaced-to target::arrayH.flags-cell)))
782          (declare (fixnum dflags))
783          (when (or (logbitp $arh_adjp_bit dflags)
784                    t
785                    (progn
786                      #+nope
787                      (setq target (%svref displaced-to target::arrayH.data-vector-cell)
788                            real-offset (+ offset (%svref displaced-to target::arrayH.displacement-cell)))
789                      (logbitp $arh_disp_bit dflags)
790                      #-nope t))
791            (setq flags (bitset $arh_disp_bit flags))))
792        (setq vect-subtype (%array-header-subtype displaced-to)))
793      ; assumes flags is low byte
794      (setq flags (dpb vect-subtype target::arrayH.flags-cell-subtag-byte flags))
795      (if (eq rank 1)
796        (%gvector target::subtag-vectorH 
797                      (if (fixnump fill) fill new-size)
798                      new-size
799                      target
800                      real-offset
801                      flags)
802        (let ((val (%alloc-misc (+ target::arrayh.dim0-cell rank) target::subtag-arrayH)))
803          (setf (%svref val target::arrayH.rank-cell) rank)
804          (setf (%svref val target::arrayH.physsize-cell) new-size)
805          (setf (%svref val target::arrayH.data-vector-cell) target)
806          (setf (%svref val target::arrayH.displacement-cell) real-offset)
807          (setf (%svref val target::arrayH.flags-cell) flags)
808          (do* ((dims dimensions (cdr dims))
809                (i 0 (1+ i)))             
810               ((null dims))
811            (declare (fixnum i)(list dims))
812            (setf (%svref val (%i+ target::arrayH.dim0-cell i)) (car dims)))
813          val)))))
814
815(defun make-array (dims &key (element-type t element-type-p)
816                        displaced-to
817                        displaced-index-offset
818                        adjustable
819                        fill-pointer
820                        (initial-element nil initial-element-p)
821                        (initial-contents nil initial-contents-p))
822  (when (and initial-element-p initial-contents-p)
823        (error "Cannot specify both ~S and ~S" :initial-element-p :initial-contents-p))
824  (make-array-1 dims element-type element-type-p
825                displaced-to
826                displaced-index-offset
827                adjustable
828                fill-pointer
829                initial-element initial-element-p
830                initial-contents initial-contents-p
831                nil))
832
833
834
835
836
837(defun vector-pop (vector)
838  "Decrease the fill pointer by 1 and return the element pointed to by the
839  new fill pointer."
840  (let* ((fill (fill-pointer vector)))
841    (declare (fixnum fill))
842    (if (zerop fill)
843      (error "Fill pointer of ~S is 0 ." vector)
844      (progn
845        (decf fill)
846        (%set-fill-pointer vector fill)
847        (aref vector fill)))))
848
849
850
851
852(defun elt (sequence idx)
853  "Return the element of SEQUENCE specified by INDEX."
854  (seq-dispatch
855   sequence
856   (let* ((cell (nthcdr idx sequence)))
857     (if (consp cell)
858       (car (the cons cell))
859       (if cell
860         (report-bad-arg sequence '(satisfies proper-list-p))
861         (%err-disp $XACCESSNTH idx sequence))))
862       
863   (progn
864     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
865       (report-bad-arg idx 'unsigned-byte))
866     (locally 
867       (if (>= idx (length sequence))
868         (%err-disp $XACCESSNTH idx sequence)
869         (aref sequence idx))))))
870
871
872
873
874(defun set-elt (sequence idx value)
875  (seq-dispatch
876   sequence
877   (let* ((cell (nthcdr idx sequence)))
878     (if (consp cell)
879       (setf (car (the cons cell)) value)
880       (if cell
881         (report-bad-arg sequence '(satisfies proper-list-p))
882         (%err-disp $XACCESSNTH idx sequence))))
883   (progn
884     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
885       (report-bad-arg idx 'unsigned-byte))
886     (locally 
887       (declare (fixnum idx))
888       (if (>= idx (length sequence))
889         (%err-disp $XACCESSNTH idx sequence)
890         (setf (aref sequence idx) value))))))
891
892
893
894
895(%fhave 'equalp #'equal)                ; bootstrapping
896
897(defun copy-tree (tree)
898  "Recursively copy trees of conses."
899  (if (atom tree)
900    tree
901    (locally (declare (type cons tree))
902      (do* ((tail (cdr tree) (cdr tail))
903            (result (cons (copy-tree (car tree)) nil))
904            (ptr result (cdr ptr)))
905           ((atom tail)
906            (setf (cdr ptr) tail)
907            result)
908        (declare (type cons ptr result))
909        (locally 
910          (declare (type cons tail))
911          (setf (cdr ptr) (cons (copy-tree (car tail)) nil)))))))
912
913
914
915
916(defvar *periodic-task-interval* 0.3)
917(defvar *periodic-task-seconds* 0)
918(defvar *periodic-task-nanoseconds* 300000000)
919
920(defun set-periodic-task-interval (n)
921  (multiple-value-setq (*periodic-task-seconds* *periodic-task-nanoseconds*)
922    (nanoseconds n))
923  (setq *periodic-task-interval* n))
924
925(defun periodic-task-interval ()
926  *periodic-task-interval*)
927
928
929
930(defun char-downcase (c)
931  "Return CHAR converted to lower-case if that is possible."
932  (declare (optimize (speed 3))) ; open-code the %CHAR-CODE-DOWNCASE here.
933  (code-char (the valid-char-code (%char-code-downcase (char-code c)))))
934
935
936
937(defun digit-char-p (char &optional radix)
938  "If char is a digit in the specified radix, returns the fixnum for
939  which that digit stands, else returns NIL."
940  (let* ((code (char-code char))
941         (r (if radix (if (and (typep radix 'fixnum)
942                               (%i>= radix 2)
943                               (%i<= radix 36))
944                        radix
945                        (%validate-radix radix)) 10))
946         (weight (if (and (<= code (char-code #\9))
947                          (>= code (char-code #\0)))
948                   (the fixnum (- code (char-code #\0)))
949                   (if (and (<= code (char-code #\Z))
950                            (>= code (char-code #\A)))
951                     (the fixnum (+ 10 (the fixnum (- code (char-code #\A)))))
952                   (if (and (<= code (char-code #\z))
953                            (>= code (char-code #\a)))
954                     (the fixnum (+ 10 (the fixnum (- code (char-code #\a))))))))))
955    (declare (fixnum code r))
956    (and weight (< (the fixnum weight) r) weight)))
957
958
959
960
961
962
963
964(defun string-start-end (string start end)
965  (setq string (string string))
966  (let ((len (length (the string string))))
967    (flet ((are (a i)(error "Array index ~S out of bounds for ~S." i a)))   
968      (if (and end (> end len))(are string end))
969      (if (and start (or (< start 0)(> start len)))(are string start))
970      (setq start (or start 0) end (or end len))
971      (if (%i> start end)
972        (error "Start ~S exceeds end ~S." start end))
973      (if (typep string 'simple-string)
974        (values string start end)
975        (multiple-value-bind (str off)(array-data-and-offset string)
976          (values str (%i+ off start)(%i+ off end)))))))
977
978(defun get-properties (place indicator-list)
979  "Like GETF, except that INDICATOR-LIST is a list of indicators which will
980  be looked for in the property list stored in PLACE. Three values are
981  returned, see manual for details."
982  (do ((plist place (cddr plist)))
983      ((null plist) (values nil nil nil))
984    (cond ((atom (cdr plist))
985           (report-bad-arg place '(satisfies proper-list-p)))
986          ((memq (car plist) indicator-list) ;memq defined in kernel
987           (return (values (car plist) (cadr plist) plist))))))
988
989(defun string= (string1 string2 &key start1 end1 start2 end2)
990  "Given two strings (string1 and string2), and optional integers start1,
991  start2, end1 and end2, compares characters in string1 to characters in
992  string2 (using char=)."
993    (locally (declare (optimize (speed 3)(safety 0)))
994      (if (and (simple-string-p string1)(null start1)(null end1))
995        (setq start1 0 end1 (length string1))
996        (multiple-value-setq (string1 start1 end1)(string-start-end string1 start1 end1)))
997      (if (and (simple-string-p string2)(null start2)(null end2))
998        (setq start2 0 end2 (length string2))
999        (multiple-value-setq (string2 start2 end2)(string-start-end string2 start2 end2)))   
1000      (%simple-string= string1 string2 start1 start2 end1 end2)))
1001
1002
1003(defun lfun-keyvect (lfun)
1004  (let ((bits (lfun-bits lfun)))
1005    (declare (fixnum bits))
1006    (and (logbitp $lfbits-keys-bit bits)
1007         (or (logbitp $lfbits-method-bit bits)
1008             (and (not (logbitp $lfbits-gfn-bit bits))
1009                  (not (logbitp $lfbits-cm-bit bits))))
1010         (nth-immediate lfun 1))))
1011
1012
1013(defun function-entry-code-note (fn)
1014  (let ((bits (lfun-bits (setq fn (require-type fn 'function)))))
1015    (declare (fixnum bits))
1016    (and (logbitp $lfbits-code-coverage-bit bits)
1017         (loop for i upfrom 1 as imm = (nth-immediate fn i)
1018               when (code-note-p imm) do (return imm)))))
1019
1020
1021(defun function-lambda-expression (fn)
1022  "Return (VALUES DEFINING-LAMBDA-EXPRESSION CLOSURE-P NAME), where
1023  DEFINING-LAMBDA-EXPRESSION is NIL if unknown, or a suitable argument
1024  to COMPILE otherwise, CLOSURE-P is non-NIL if the function's definition
1025  might have been enclosed in some non-null lexical environment, and
1026  NAME is some name (for debugging only) or NIL if there is no name."
1027  ;(declare (values def env-p name))
1028  (let* ((bits (lfun-bits (setq fn (require-type fn 'function)))))
1029    (declare (fixnum bits))
1030    (if (logbitp $lfbits-trampoline-bit bits)
1031      (function-lambda-expression (nth-immediate fn 1))
1032      (values (uncompile-function fn)
1033              (logbitp $lfbits-nonnullenv-bit bits)
1034              (function-name fn)))))
1035
1036; env must be a lexical-environment or NIL.
1037; If env contains function or variable bindings or SPECIAL declarations, return t.
1038; Else return nil
1039(defun %non-empty-environment-p (env)
1040  (loop
1041    (when (or (null env) (istruct-typep env 'definition-environment))
1042      (return nil))
1043    (when (or (consp (lexenv.variables env))
1044              (consp (lexenv.functions env))
1045              (dolist (vdecl (lexenv.vdecls env))
1046                (when (eq (cadr vdecl) 'special)
1047                  (return t))))
1048      (return t))
1049    (setq env (lexenv.parent-env env))))
1050
1051;(coerce object 'compiled-function)
1052(defun coerce-to-compiled-function (object)
1053  (setq object (coerce-to-function object))
1054  (unless (typep object 'compiled-function)
1055    (multiple-value-bind (def envp) (function-lambda-expression object)
1056      (when (or envp (null def))
1057        (%err-disp $xcoerce object 'compiled-function))
1058      (setq object (compile-user-function def nil))))
1059  object)
1060
1061
1062
1063(defun %set-toplevel (&optional (fun nil fun-p))
1064  ;(setq fun (require-type fun '(or symbol function)))
1065  (let* ((tcr (%current-tcr)))
1066    (prog1 (%tcr-toplevel-function tcr)
1067      (when fun-p
1068        (%set-tcr-toplevel-function tcr fun)))))
1069
1070
1071(defun gccounts ()
1072  (let* ((total (%get-gc-count))
1073         (full (full-gccount))
1074         (g2-count 0)
1075         (g1-count 0)
1076         (g0-count 0))
1077    (when (egc-enabled-p)
1078      (let* ((a (%active-dynamic-area)))
1079        (setq g0-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1080        (setq g1-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1081        (setq g2-count (%fixnum-ref a target::area.gc-count))))
1082    (values total full g2-count g1-count g0-count)))
1083
1084     
1085
1086
1087
1088(defstatic %pascal-functions%
1089    #(NIL NIL NIL NIL NIL NIL NIL NIL
1090      NIL NIL NIL NIL NIL NIL NIL NIL
1091      NIL NIL NIL NIL NIL NIL NIL NIL
1092      NIL NIL NIL NIL NIL NIL NIL NIL))
1093
1094
1095(defun gc-retain-pages (arg)
1096  "Try to influence the GC to retain/recycle the pages allocated between
1097GCs if arg is true, and to release them otherwise. This is generally a
1098gtradeoff between paging and other VM considerations."
1099  (setq *gc-event-status-bits*
1100        (if arg
1101          (bitset $gc-retain-pages-bit *gc-event-status-bits*)
1102          (bitclr $gc-retain-pages-bit *gc-event-status-bits*)))
1103  (not (null arg)))
1104
1105(defun gc-retaining-pages ()
1106  "Return T if the GC tries to retain pages between full GCs and NIL if
1107it's trying to release them to improve VM paging performance."
1108  (logbitp $gc-retain-pages-bit *gc-event-status-bits*)) 
1109
1110
1111(defun gc-verbose (on-full-gc &optional (egc-too on-full-gc))
1112  "If the first (required) argument is non-NIL, configures the GC to print
1113informational messages on entry and exit to each full GC; if the first argument
1114is NIL, suppresses those messages.  The second (optional) argument controls printing of messages on entry and exit to an ephemeral GC.  Returns values as per GC-VERBOSE-P."
1115  (let* ((bits *gc-event-status-bits*))
1116    (if on-full-gc
1117      (bitsetf $gc-verbose-bit bits)
1118      (bitclrf $gc-verbose-bit bits))
1119    (if egc-too
1120      (bitsetf $egc-verbose-bit bits)
1121      (bitclrf $egc-verbose-bit bits))
1122    (setq *gc-event-status-bits* bits)
1123    (values on-full-gc egc-too)))
1124
1125
1126(defun gc-verbose-p ()
1127  "Returns two values: the first is true if the GC is configured to
1128print messages on each full GC; the second is true if the GC is configured
1129to print messages on each ephemeral GC."
1130  (let* ((bits *gc-event-status-bits*))
1131    (values (logbitp $gc-verbose-bit bits)
1132            (logbitp $egc-verbose-bit bits))))
1133
1134(defun egc-active-p ()
1135  "Return T if the EGC was active at the time of the call, NIL otherwise.
1136Since this is generally a volatile piece of information, it's not clear
1137whether this function serves a useful purpose when native threads are
1138involved."
1139  (and (egc-enabled-p)
1140       (not (eql 0 (%get-kernel-global 'oldest-ephemeral)))))
1141
1142; this IS effectively a passive way of inquiring about enabled status.
1143(defun egc-enabled-p ()
1144  "Return T if the EGC was enabled at the time of the call, NIL otherwise."
1145  (not (eql 0 (%fixnum-ref (%active-dynamic-area) target::area.older))))
1146
1147(defun egc-configuration ()
1148  "Return as multiple values the sizes in kilobytes of the thresholds
1149associated with the youngest ephemeral generation, the middle ephemeral
1150generation, and the oldest ephemeral generation."
1151  (let* ((ta (%get-kernel-global 'tenured-area))
1152         (g2 (%fixnum-ref ta target::area.younger))
1153         (g1 (%fixnum-ref g2 target::area.younger))
1154         (g0 (%fixnum-ref g1 target::area.younger)))
1155    (values (ash (the fixnum (%fixnum-ref g0 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1156            (ash (the fixnum (%fixnum-ref g1 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1157            (ash (the fixnum (%fixnum-ref g2 target::area.threshold)) (- (- 10 target::fixnum-shift))))))
1158
1159
1160(defun configure-egc (e0size e1size e2size)
1161  "If the EGC is currently disabled, put the indicated threshold sizes in
1162effect and returns T, otherwise, returns NIL.  The provided threshold sizes
1163are rounded up to a multiple of 64Kbytes."
1164  (let* ((was-enabled (egc-active-p))
1165         (e2size (require-type e2size '(unsigned-byte 18)))
1166         (e1size (require-type e1size '(unsigned-byte 18)))
1167         (e0size (require-type e0size '(integer 1 #.(ash 1 18)))))
1168    (unless (<= e0size e1size e2size)
1169      (error "Generation ~s threshold cannot be smaller than generation ~s threshold"
1170             (if (> e0size e1size) 1 2) (if (> e0size e1size) 0 1)))
1171    (unwind-protect
1172         (progn
1173           (egc nil)
1174           (setq e2size (logand (lognot #xffff) (+ #xffff (ash e2size 10)))
1175                 e1size (logand (lognot #xffff) (+ #xffff (ash e1size 10)))
1176                 e0size (logand (lognot #xffff) (+ #xffff (ash e0size 10))))
1177           (%configure-egc e0size e1size e2size))
1178      (egc was-enabled))))
1179
1180
1181
1182(defun macptr-flags (macptr)
1183  (if (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1184    0
1185    (uvref macptr TARGET::XMACPTR.FLAGS-CELL)))
1186
1187
1188; This doesn't really make the macptr be gcable (now has to be
1189; on linked list), but we might have other reasons for setting
1190; other flag bits.
1191(defun set-macptr-flags (macptr value) 
1192  (unless (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1193    (setf (%svref macptr TARGET::XMACPTR.FLAGS-CELL) value)
1194    value))
1195
1196(defun %new-gcable-ptr (size &optional clear-p)
1197  (let ((p (make-gcable-macptr $flags_DisposPtr)))
1198    (%setf-macptr p (malloc size))
1199    (if clear-p
1200      (#_memset p 0 size))
1201    p))
1202
1203(defun %gcable-ptr-p (p)
1204  (and (typep p 'macptr)
1205       (= (uvsize p) target::xmacptr.element-count)))
1206
1207(defstatic *upper-to-lower* nil)
1208(defstatic *lower-to-upper*  nil)
1209
1210;;; "address" should be the address (as returned by FOREIGN-SYMBOL-ADDRESS)
1211;;; of a foreign function that accepts a pointer as an argument and does
1212;;; whatever's needed to dispose of it.  That function can be called from
1213;;; the GC, so it shouldn't call back into lisp.
1214(defun register-xmacptr-dispose-function (address)
1215  (ff-call (%kernel-import target::kernel-import-register-xmacptr-dispose-function)
1216           :address address
1217           :int))
1218
1219
1220;;; This alist is automatically (and not too cleverly ...) generated.
1221;;;
1222;;; NB: it was generated from Unicode 5.0 character tables, check to
1223;;; see if anything's changed in 5.1 or later versions.
1224;;;
1225;;; The (upper . lower) pairs have the property that UPPER is the
1226;;; value "simple uppercase equivalent" entry for LOWER in the
1227;;; UnicodeData.txt file and LOWER is the corresponding entry for
1228;;; UPPER,
1229(let* ((mapping
1230        '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
1231          (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
1232          (#\Latin_Capital_Letter_A_With_Circumflex
1233           . #\Latin_Small_Letter_A_With_Circumflex)
1234          (#\Latin_Capital_Letter_A_With_Tilde . #\Latin_Small_Letter_A_With_Tilde)
1235          (#\Latin_Capital_Letter_A_With_Diaeresis
1236           . #\Latin_Small_Letter_A_With_Diaeresis)
1237          (#\Latin_Capital_Letter_A_With_Ring_Above
1238           . #\Latin_Small_Letter_A_With_Ring_Above)
1239         
1240          (#\Latin_Capital_Letter_Ae . #\Latin_Small_Letter_Ae)
1241         
1242          (#\Latin_Capital_Letter_C_With_Cedilla . #\Latin_Small_Letter_C_With_Cedilla)
1243         
1244          (#\Latin_Capital_Letter_E_With_Grave . #\Latin_Small_Letter_E_With_Grave)
1245         
1246          (#\Latin_Capital_Letter_E_With_Acute . #\Latin_Small_Letter_E_With_Acute)
1247         
1248          (#\Latin_Capital_Letter_E_With_Circumflex
1249           . #\Latin_Small_Letter_E_With_Circumflex)
1250         
1251          (#\Latin_Capital_Letter_E_With_Diaeresis
1252           . #\Latin_Small_Letter_E_With_Diaeresis)
1253         
1254          (#\Latin_Capital_Letter_I_With_Grave . #\Latin_Small_Letter_I_With_Grave)
1255         
1256          (#\Latin_Capital_Letter_I_With_Acute . #\Latin_Small_Letter_I_With_Acute)
1257         
1258          (#\Latin_Capital_Letter_I_With_Circumflex
1259           . #\Latin_Small_Letter_I_With_Circumflex)
1260         
1261          (#\Latin_Capital_Letter_I_With_Diaeresis
1262           . #\Latin_Small_Letter_I_With_Diaeresis)
1263         
1264          (#\Latin_Capital_Letter_Eth . #\Latin_Small_Letter_Eth)
1265         
1266          (#\Latin_Capital_Letter_N_With_Tilde . #\Latin_Small_Letter_N_With_Tilde)
1267         
1268          (#\Latin_Capital_Letter_O_With_Grave . #\Latin_Small_Letter_O_With_Grave)
1269         
1270          (#\Latin_Capital_Letter_O_With_Acute . #\Latin_Small_Letter_O_With_Acute)
1271         
1272          (#\Latin_Capital_Letter_O_With_Circumflex
1273           . #\Latin_Small_Letter_O_With_Circumflex)
1274         
1275          (#\Latin_Capital_Letter_O_With_Tilde . #\Latin_Small_Letter_O_With_Tilde)
1276         
1277          (#\Latin_Capital_Letter_O_With_Diaeresis
1278           . #\Latin_Small_Letter_O_With_Diaeresis)
1279         
1280          (#\Latin_Capital_Letter_O_With_Stroke . #\Latin_Small_Letter_O_With_Stroke)
1281         
1282          (#\Latin_Capital_Letter_U_With_Grave . #\Latin_Small_Letter_U_With_Grave)
1283         
1284          (#\Latin_Capital_Letter_U_With_Acute . #\Latin_Small_Letter_U_With_Acute)
1285         
1286          (#\Latin_Capital_Letter_U_With_Circumflex
1287           . #\Latin_Small_Letter_U_With_Circumflex)
1288         
1289          (#\Latin_Capital_Letter_U_With_Diaeresis
1290           . #\Latin_Small_Letter_U_With_Diaeresis)
1291         
1292          (#\Latin_Capital_Letter_Y_With_Acute . #\Latin_Small_Letter_Y_With_Acute)
1293         
1294          (#\Latin_Capital_Letter_Thorn . #\Latin_Small_Letter_Thorn)
1295         
1296          (#\Latin_Capital_Letter_A_With_Macron . #\Latin_Small_Letter_A_With_Macron)
1297         
1298          (#\Latin_Capital_Letter_A_With_Breve . #\Latin_Small_Letter_A_With_Breve)
1299         
1300          (#\Latin_Capital_Letter_A_With_Ogonek . #\Latin_Small_Letter_A_With_Ogonek)
1301         
1302          (#\Latin_Capital_Letter_C_With_Acute . #\Latin_Small_Letter_C_With_Acute)
1303         
1304          (#\Latin_Capital_Letter_C_With_Circumflex
1305           . #\Latin_Small_Letter_C_With_Circumflex)
1306         
1307          (#\Latin_Capital_Letter_C_With_Dot_Above
1308           . #\Latin_Small_Letter_C_With_Dot_Above)
1309         
1310          (#\Latin_Capital_Letter_C_With_Caron . #\Latin_Small_Letter_C_With_Caron)
1311         
1312          (#\Latin_Capital_Letter_D_With_Caron . #\Latin_Small_Letter_D_With_Caron)
1313         
1314          (#\Latin_Capital_Letter_D_With_Stroke . #\Latin_Small_Letter_D_With_Stroke)
1315         
1316          (#\Latin_Capital_Letter_E_With_Macron . #\Latin_Small_Letter_E_With_Macron)
1317         
1318          (#\Latin_Capital_Letter_E_With_Breve . #\Latin_Small_Letter_E_With_Breve)
1319         
1320          (#\Latin_Capital_Letter_E_With_Dot_Above
1321           . #\Latin_Small_Letter_E_With_Dot_Above)
1322         
1323          (#\Latin_Capital_Letter_E_With_Ogonek . #\Latin_Small_Letter_E_With_Ogonek)
1324         
1325          (#\Latin_Capital_Letter_E_With_Caron . #\Latin_Small_Letter_E_With_Caron)
1326         
1327          (#\Latin_Capital_Letter_G_With_Circumflex
1328           . #\Latin_Small_Letter_G_With_Circumflex)
1329         
1330          (#\Latin_Capital_Letter_G_With_Breve . #\Latin_Small_Letter_G_With_Breve)
1331         
1332          (#\Latin_Capital_Letter_G_With_Dot_Above
1333           . #\Latin_Small_Letter_G_With_Dot_Above)
1334         
1335          (#\Latin_Capital_Letter_G_With_Cedilla . #\Latin_Small_Letter_G_With_Cedilla)
1336         
1337          (#\Latin_Capital_Letter_H_With_Circumflex
1338           . #\Latin_Small_Letter_H_With_Circumflex)
1339         
1340          (#\Latin_Capital_Letter_H_With_Stroke . #\Latin_Small_Letter_H_With_Stroke)
1341         
1342          (#\Latin_Capital_Letter_I_With_Tilde . #\Latin_Small_Letter_I_With_Tilde)
1343         
1344          (#\Latin_Capital_Letter_I_With_Macron . #\Latin_Small_Letter_I_With_Macron)
1345         
1346          (#\Latin_Capital_Letter_I_With_Breve . #\Latin_Small_Letter_I_With_Breve)
1347         
1348          (#\Latin_Capital_Letter_I_With_Ogonek . #\Latin_Small_Letter_I_With_Ogonek)
1349         
1350          (#\Latin_Capital_Ligature_Ij . #\Latin_Small_Ligature_Ij)
1351         
1352          (#\Latin_Capital_Letter_J_With_Circumflex
1353           . #\Latin_Small_Letter_J_With_Circumflex)
1354         
1355          (#\Latin_Capital_Letter_K_With_Cedilla . #\Latin_Small_Letter_K_With_Cedilla)
1356         
1357          (#\Latin_Capital_Letter_L_With_Acute . #\Latin_Small_Letter_L_With_Acute)
1358         
1359          (#\Latin_Capital_Letter_L_With_Cedilla . #\Latin_Small_Letter_L_With_Cedilla)
1360         
1361          (#\Latin_Capital_Letter_L_With_Caron . #\Latin_Small_Letter_L_With_Caron)
1362         
1363          (#\Latin_Capital_Letter_L_With_Middle_Dot
1364           . #\Latin_Small_Letter_L_With_Middle_Dot)
1365         
1366          (#\Latin_Capital_Letter_L_With_Stroke . #\Latin_Small_Letter_L_With_Stroke)
1367         
1368          (#\Latin_Capital_Letter_N_With_Acute . #\Latin_Small_Letter_N_With_Acute)
1369         
1370          (#\Latin_Capital_Letter_N_With_Cedilla . #\Latin_Small_Letter_N_With_Cedilla)
1371         
1372          (#\Latin_Capital_Letter_N_With_Caron . #\Latin_Small_Letter_N_With_Caron)
1373         
1374          (#\Latin_Capital_Letter_Eng . #\Latin_Small_Letter_Eng)
1375         
1376          (#\Latin_Capital_Letter_O_With_Macron . #\Latin_Small_Letter_O_With_Macron)
1377         
1378          (#\Latin_Capital_Letter_O_With_Breve . #\Latin_Small_Letter_O_With_Breve)
1379         
1380          (#\Latin_Capital_Letter_O_With_Double_Acute
1381           . #\Latin_Small_Letter_O_With_Double_Acute)
1382         
1383          (#\Latin_Capital_Ligature_Oe . #\Latin_Small_Ligature_Oe)
1384         
1385          (#\Latin_Capital_Letter_R_With_Acute . #\Latin_Small_Letter_R_With_Acute)
1386         
1387          (#\Latin_Capital_Letter_R_With_Cedilla . #\Latin_Small_Letter_R_With_Cedilla)
1388         
1389          (#\Latin_Capital_Letter_R_With_Caron . #\Latin_Small_Letter_R_With_Caron)
1390         
1391          (#\Latin_Capital_Letter_S_With_Acute . #\Latin_Small_Letter_S_With_Acute)
1392         
1393          (#\Latin_Capital_Letter_S_With_Circumflex
1394           . #\Latin_Small_Letter_S_With_Circumflex)
1395         
1396          (#\Latin_Capital_Letter_S_With_Cedilla . #\Latin_Small_Letter_S_With_Cedilla)
1397         
1398          (#\Latin_Capital_Letter_S_With_Caron . #\Latin_Small_Letter_S_With_Caron)
1399         
1400          (#\Latin_Capital_Letter_T_With_Cedilla . #\Latin_Small_Letter_T_With_Cedilla)
1401         
1402          (#\Latin_Capital_Letter_T_With_Caron . #\Latin_Small_Letter_T_With_Caron)
1403         
1404          (#\Latin_Capital_Letter_T_With_Stroke . #\Latin_Small_Letter_T_With_Stroke)
1405         
1406          (#\Latin_Capital_Letter_U_With_Tilde . #\Latin_Small_Letter_U_With_Tilde)
1407         
1408          (#\Latin_Capital_Letter_U_With_Macron . #\Latin_Small_Letter_U_With_Macron)
1409         
1410          (#\Latin_Capital_Letter_U_With_Breve . #\Latin_Small_Letter_U_With_Breve)
1411         
1412          (#\Latin_Capital_Letter_U_With_Ring_Above
1413           . #\Latin_Small_Letter_U_With_Ring_Above)
1414         
1415          (#\Latin_Capital_Letter_U_With_Double_Acute
1416           . #\Latin_Small_Letter_U_With_Double_Acute)
1417         
1418          (#\Latin_Capital_Letter_U_With_Ogonek . #\Latin_Small_Letter_U_With_Ogonek)
1419         
1420          (#\Latin_Capital_Letter_W_With_Circumflex
1421           . #\Latin_Small_Letter_W_With_Circumflex)
1422         
1423          (#\Latin_Capital_Letter_Y_With_Circumflex
1424           . #\Latin_Small_Letter_Y_With_Circumflex)
1425         
1426          (#\Latin_Capital_Letter_Y_With_Diaeresis
1427           . #\Latin_Small_Letter_Y_With_Diaeresis)
1428         
1429          (#\Latin_Capital_Letter_Z_With_Acute . #\Latin_Small_Letter_Z_With_Acute)
1430         
1431          (#\Latin_Capital_Letter_Z_With_Dot_Above
1432           . #\Latin_Small_Letter_Z_With_Dot_Above)
1433         
1434          (#\Latin_Capital_Letter_Z_With_Caron . #\Latin_Small_Letter_Z_With_Caron)
1435         
1436          (#\Latin_Capital_Letter_B_With_Hook . #\Latin_Small_Letter_B_With_Hook)
1437         
1438          (#\Latin_Capital_Letter_B_With_Topbar . #\Latin_Small_Letter_B_With_Topbar)
1439         
1440          (#\Latin_Capital_Letter_Tone_Six . #\Latin_Small_Letter_Tone_Six)
1441         
1442          (#\Latin_Capital_Letter_Open_O . #\Latin_Small_Letter_Open_O)
1443         
1444          (#\Latin_Capital_Letter_C_With_Hook . #\Latin_Small_Letter_C_With_Hook)
1445         
1446          (#\Latin_Capital_Letter_African_D . #\Latin_Small_Letter_D_With_Tail)
1447         
1448          (#\Latin_Capital_Letter_D_With_Hook . #\Latin_Small_Letter_D_With_Hook)
1449         
1450          (#\Latin_Capital_Letter_D_With_Topbar . #\Latin_Small_Letter_D_With_Topbar)
1451         
1452          (#\Latin_Capital_Letter_Reversed_E . #\Latin_Small_Letter_Turned_E)
1453         
1454          (#\Latin_Capital_Letter_Schwa . #\Latin_Small_Letter_Schwa)
1455         
1456          (#\Latin_Capital_Letter_Open_E . #\Latin_Small_Letter_Open_E)
1457         
1458          (#\Latin_Capital_Letter_F_With_Hook . #\Latin_Small_Letter_F_With_Hook)
1459         
1460          (#\Latin_Capital_Letter_G_With_Hook . #\Latin_Small_Letter_G_With_Hook)
1461         
1462          (#\Latin_Capital_Letter_Gamma . #\Latin_Small_Letter_Gamma)
1463         
1464          (#\Latin_Capital_Letter_Iota . #\Latin_Small_Letter_Iota)
1465         
1466          (#\Latin_Capital_Letter_I_With_Stroke . #\Latin_Small_Letter_I_With_Stroke)
1467         
1468          (#\Latin_Capital_Letter_K_With_Hook . #\Latin_Small_Letter_K_With_Hook)
1469         
1470          (#\Latin_Capital_Letter_Turned_M . #\Latin_Small_Letter_Turned_M)
1471         
1472          (#\Latin_Capital_Letter_N_With_Left_Hook
1473           . #\Latin_Small_Letter_N_With_Left_Hook)
1474         
1475          (#\Latin_Capital_Letter_O_With_Middle_Tilde . #\Latin_Small_Letter_Barred_O)
1476         
1477          (#\Latin_Capital_Letter_O_With_Horn . #\Latin_Small_Letter_O_With_Horn)
1478         
1479          (#\Latin_Capital_Letter_Oi . #\Latin_Small_Letter_Oi)
1480         
1481          (#\Latin_Capital_Letter_P_With_Hook . #\Latin_Small_Letter_P_With_Hook)
1482         
1483          (#\Latin_Letter_Yr . #\Latin_Letter_Small_Capital_R)
1484         
1485          (#\Latin_Capital_Letter_Tone_Two . #\Latin_Small_Letter_Tone_Two)
1486         
1487          (#\Latin_Capital_Letter_Esh . #\Latin_Small_Letter_Esh)
1488         
1489          (#\Latin_Capital_Letter_T_With_Hook . #\Latin_Small_Letter_T_With_Hook)
1490         
1491          (#\Latin_Capital_Letter_T_With_Retroflex_Hook
1492           . #\Latin_Small_Letter_T_With_Retroflex_Hook)
1493         
1494          (#\Latin_Capital_Letter_U_With_Horn . #\Latin_Small_Letter_U_With_Horn)
1495         
1496          (#\Latin_Capital_Letter_Upsilon . #\Latin_Small_Letter_Upsilon)
1497         
1498          (#\Latin_Capital_Letter_V_With_Hook . #\Latin_Small_Letter_V_With_Hook)
1499         
1500          (#\Latin_Capital_Letter_Y_With_Hook . #\Latin_Small_Letter_Y_With_Hook)
1501         
1502          (#\Latin_Capital_Letter_Z_With_Stroke . #\Latin_Small_Letter_Z_With_Stroke)
1503         
1504          (#\Latin_Capital_Letter_Ezh . #\Latin_Small_Letter_Ezh)
1505         
1506          (#\Latin_Capital_Letter_Ezh_Reversed . #\Latin_Small_Letter_Ezh_Reversed)
1507         
1508          (#\Latin_Capital_Letter_Tone_Five . #\Latin_Small_Letter_Tone_Five)
1509         
1510          (#\Latin_Capital_Letter_Dz_With_Caron . #\Latin_Small_Letter_Dz_With_Caron)
1511         
1512          (#\Latin_Capital_Letter_Lj . #\Latin_Small_Letter_Lj)
1513         
1514          (#\Latin_Capital_Letter_Nj . #\Latin_Small_Letter_Nj)
1515         
1516          (#\Latin_Capital_Letter_A_With_Caron . #\Latin_Small_Letter_A_With_Caron)
1517         
1518          (#\Latin_Capital_Letter_I_With_Caron . #\Latin_Small_Letter_I_With_Caron)
1519         
1520          (#\Latin_Capital_Letter_O_With_Caron . #\Latin_Small_Letter_O_With_Caron)
1521         
1522          (#\Latin_Capital_Letter_U_With_Caron . #\Latin_Small_Letter_U_With_Caron)
1523         
1524          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Macron
1525           . #\Latin_Small_Letter_U_With_Diaeresis_And_Macron)
1526         
1527          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Acute
1528           . #\Latin_Small_Letter_U_With_Diaeresis_And_Acute)
1529         
1530          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Caron
1531           . #\Latin_Small_Letter_U_With_Diaeresis_And_Caron)
1532         
1533          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Grave
1534           . #\Latin_Small_Letter_U_With_Diaeresis_And_Grave)
1535         
1536          (#\Latin_Capital_Letter_A_With_Diaeresis_And_Macron
1537           . #\Latin_Small_Letter_A_With_Diaeresis_And_Macron)
1538         
1539          (#\Latin_Capital_Letter_A_With_Dot_Above_And_Macron
1540           . #\Latin_Small_Letter_A_With_Dot_Above_And_Macron)
1541         
1542          (#\Latin_Capital_Letter_Ae_With_Macron . #\Latin_Small_Letter_Ae_With_Macron)
1543         
1544          (#\Latin_Capital_Letter_G_With_Stroke . #\Latin_Small_Letter_G_With_Stroke)
1545         
1546          (#\Latin_Capital_Letter_G_With_Caron . #\Latin_Small_Letter_G_With_Caron)
1547         
1548          (#\Latin_Capital_Letter_K_With_Caron . #\Latin_Small_Letter_K_With_Caron)
1549         
1550          (#\Latin_Capital_Letter_O_With_Ogonek . #\Latin_Small_Letter_O_With_Ogonek)
1551         
1552          (#\Latin_Capital_Letter_O_With_Ogonek_And_Macron
1553           . #\Latin_Small_Letter_O_With_Ogonek_And_Macron)
1554         
1555          (#\Latin_Capital_Letter_Ezh_With_Caron . #\Latin_Small_Letter_Ezh_With_Caron)
1556         
1557          (#\Latin_Capital_Letter_Dz . #\Latin_Small_Letter_Dz)
1558         
1559          (#\Latin_Capital_Letter_G_With_Acute . #\Latin_Small_Letter_G_With_Acute)
1560         
1561          (#\Latin_Capital_Letter_Hwair . #\Latin_Small_Letter_Hv)
1562         
1563          (#\Latin_Capital_Letter_Wynn . #\Latin_Letter_Wynn)
1564         
1565          (#\Latin_Capital_Letter_N_With_Grave . #\Latin_Small_Letter_N_With_Grave)
1566         
1567          (#\Latin_Capital_Letter_A_With_Ring_Above_And_Acute
1568           . #\Latin_Small_Letter_A_With_Ring_Above_And_Acute)
1569         
1570          (#\Latin_Capital_Letter_Ae_With_Acute . #\Latin_Small_Letter_Ae_With_Acute)
1571         
1572          (#\Latin_Capital_Letter_O_With_Stroke_And_Acute
1573           . #\Latin_Small_Letter_O_With_Stroke_And_Acute)
1574         
1575          (#\Latin_Capital_Letter_A_With_Double_Grave
1576           . #\Latin_Small_Letter_A_With_Double_Grave)
1577         
1578          (#\Latin_Capital_Letter_A_With_Inverted_Breve
1579           . #\Latin_Small_Letter_A_With_Inverted_Breve)
1580         
1581          (#\Latin_Capital_Letter_E_With_Double_Grave
1582           . #\Latin_Small_Letter_E_With_Double_Grave)
1583         
1584          (#\Latin_Capital_Letter_E_With_Inverted_Breve
1585           . #\Latin_Small_Letter_E_With_Inverted_Breve)
1586         
1587          (#\Latin_Capital_Letter_I_With_Double_Grave
1588           . #\Latin_Small_Letter_I_With_Double_Grave)
1589         
1590          (#\Latin_Capital_Letter_I_With_Inverted_Breve
1591           . #\Latin_Small_Letter_I_With_Inverted_Breve)
1592         
1593          (#\Latin_Capital_Letter_O_With_Double_Grave
1594           . #\Latin_Small_Letter_O_With_Double_Grave)
1595         
1596          (#\Latin_Capital_Letter_O_With_Inverted_Breve
1597           . #\Latin_Small_Letter_O_With_Inverted_Breve)
1598         
1599          (#\Latin_Capital_Letter_R_With_Double_Grave
1600           . #\Latin_Small_Letter_R_With_Double_Grave)
1601         
1602          (#\Latin_Capital_Letter_R_With_Inverted_Breve
1603           . #\Latin_Small_Letter_R_With_Inverted_Breve)
1604         
1605          (#\Latin_Capital_Letter_U_With_Double_Grave
1606           . #\Latin_Small_Letter_U_With_Double_Grave)
1607         
1608          (#\Latin_Capital_Letter_U_With_Inverted_Breve
1609           . #\Latin_Small_Letter_U_With_Inverted_Breve)
1610         
1611          (#\Latin_Capital_Letter_S_With_Comma_Below
1612           . #\Latin_Small_Letter_S_With_Comma_Below)
1613         
1614          (#\Latin_Capital_Letter_T_With_Comma_Below
1615           . #\Latin_Small_Letter_T_With_Comma_Below)
1616         
1617          (#\Latin_Capital_Letter_Yogh . #\Latin_Small_Letter_Yogh)
1618         
1619          (#\Latin_Capital_Letter_H_With_Caron . #\Latin_Small_Letter_H_With_Caron)
1620         
1621          (#\Latin_Capital_Letter_N_With_Long_Right_Leg
1622           . #\Latin_Small_Letter_N_With_Long_Right_Leg)
1623         
1624          (#\Latin_Capital_Letter_Ou . #\Latin_Small_Letter_Ou)
1625         
1626          (#\Latin_Capital_Letter_Z_With_Hook . #\Latin_Small_Letter_Z_With_Hook)
1627         
1628          (#\Latin_Capital_Letter_A_With_Dot_Above
1629           . #\Latin_Small_Letter_A_With_Dot_Above)
1630         
1631          (#\Latin_Capital_Letter_E_With_Cedilla . #\Latin_Small_Letter_E_With_Cedilla)
1632         
1633          (#\Latin_Capital_Letter_O_With_Diaeresis_And_Macron
1634           . #\Latin_Small_Letter_O_With_Diaeresis_And_Macron)
1635         
1636          (#\Latin_Capital_Letter_O_With_Tilde_And_Macron
1637           . #\Latin_Small_Letter_O_With_Tilde_And_Macron)
1638         
1639          (#\Latin_Capital_Letter_O_With_Dot_Above
1640           . #\Latin_Small_Letter_O_With_Dot_Above)
1641         
1642          (#\Latin_Capital_Letter_O_With_Dot_Above_And_Macron
1643           . #\Latin_Small_Letter_O_With_Dot_Above_And_Macron)
1644         
1645          (#\Latin_Capital_Letter_Y_With_Macron . #\Latin_Small_Letter_Y_With_Macron)
1646         
1647          (#\Latin_Capital_Letter_A_With_Stroke . #\U+2C65)
1648         
1649          (#\Latin_Capital_Letter_C_With_Stroke . #\Latin_Small_Letter_C_With_Stroke)
1650         
1651          (#\Latin_Capital_Letter_L_With_Bar . #\Latin_Small_Letter_L_With_Bar)
1652         
1653          (#\Latin_Capital_Letter_T_With_Diagonal_Stroke . #\U+2C66)
1654         
1655          (#\Latin_Capital_Letter_Glottal_Stop . #\Latin_Small_Letter_Glottal_Stop)
1656         
1657          (#\Latin_Capital_Letter_B_With_Stroke . #\Latin_Small_Letter_B_With_Stroke)
1658         
1659          (#\Latin_Capital_Letter_U_Bar . #\Latin_Small_Letter_U_Bar)
1660         
1661          (#\Latin_Capital_Letter_Turned_V . #\Latin_Small_Letter_Turned_V)
1662         
1663          (#\Latin_Capital_Letter_E_With_Stroke . #\Latin_Small_Letter_E_With_Stroke)
1664         
1665          (#\Latin_Capital_Letter_J_With_Stroke . #\Latin_Small_Letter_J_With_Stroke)
1666         
1667          (#\Latin_Capital_Letter_Small_Q_With_Hook_Tail
1668           . #\Latin_Small_Letter_Q_With_Hook_Tail)
1669         
1670          (#\Latin_Capital_Letter_R_With_Stroke . #\Latin_Small_Letter_R_With_Stroke)
1671         
1672          (#\Latin_Capital_Letter_Y_With_Stroke . #\Latin_Small_Letter_Y_With_Stroke)
1673         
1674          (#\Greek_Capital_Letter_Alpha_With_Tonos
1675           . #\Greek_Small_Letter_Alpha_With_Tonos)
1676         
1677          (#\Greek_Capital_Letter_Epsilon_With_Tonos
1678           . #\Greek_Small_Letter_Epsilon_With_Tonos)
1679         
1680          (#\Greek_Capital_Letter_Eta_With_Tonos . #\Greek_Small_Letter_Eta_With_Tonos)
1681         
1682          (#\Greek_Capital_Letter_Iota_With_Tonos
1683           . #\Greek_Small_Letter_Iota_With_Tonos)
1684         
1685          (#\Greek_Capital_Letter_Omicron_With_Tonos
1686           . #\Greek_Small_Letter_Omicron_With_Tonos)
1687         
1688          (#\Greek_Capital_Letter_Upsilon_With_Tonos
1689           . #\Greek_Small_Letter_Upsilon_With_Tonos)
1690         
1691          (#\Greek_Capital_Letter_Omega_With_Tonos
1692           . #\Greek_Small_Letter_Omega_With_Tonos)
1693         
1694          (#\Greek_Capital_Letter_Alpha . #\Greek_Small_Letter_Alpha)
1695         
1696          (#\Greek_Capital_Letter_Beta . #\Greek_Small_Letter_Beta)
1697         
1698          (#\Greek_Capital_Letter_Gamma . #\Greek_Small_Letter_Gamma)
1699         
1700          (#\Greek_Capital_Letter_Delta . #\Greek_Small_Letter_Delta)
1701         
1702          (#\Greek_Capital_Letter_Epsilon . #\Greek_Small_Letter_Epsilon)
1703         
1704          (#\Greek_Capital_Letter_Zeta . #\Greek_Small_Letter_Zeta)
1705         
1706          (#\Greek_Capital_Letter_Eta . #\Greek_Small_Letter_Eta)
1707         
1708          (#\Greek_Capital_Letter_Theta . #\Greek_Small_Letter_Theta)
1709         
1710          (#\Greek_Capital_Letter_Iota . #\Greek_Small_Letter_Iota)
1711         
1712          (#\Greek_Capital_Letter_Kappa . #\Greek_Small_Letter_Kappa)
1713         
1714          (#\Greek_Capital_Letter_Lamda . #\Greek_Small_Letter_Lamda)
1715         
1716          (#\Greek_Capital_Letter_Mu . #\Greek_Small_Letter_Mu)
1717         
1718          (#\Greek_Capital_Letter_Nu . #\Greek_Small_Letter_Nu)
1719         
1720          (#\Greek_Capital_Letter_Xi . #\Greek_Small_Letter_Xi)
1721         
1722          (#\Greek_Capital_Letter_Omicron . #\Greek_Small_Letter_Omicron)
1723         
1724          (#\Greek_Capital_Letter_Pi . #\Greek_Small_Letter_Pi)
1725         
1726          (#\Greek_Capital_Letter_Rho . #\Greek_Small_Letter_Rho)
1727         
1728          (#\Greek_Capital_Letter_Sigma . #\Greek_Small_Letter_Sigma)
1729         
1730          (#\Greek_Capital_Letter_Tau . #\Greek_Small_Letter_Tau)
1731         
1732          (#\Greek_Capital_Letter_Upsilon . #\Greek_Small_Letter_Upsilon)
1733         
1734          (#\Greek_Capital_Letter_Phi . #\Greek_Small_Letter_Phi)
1735         
1736          (#\Greek_Capital_Letter_Chi . #\Greek_Small_Letter_Chi)
1737         
1738          (#\Greek_Capital_Letter_Psi . #\Greek_Small_Letter_Psi)
1739         
1740          (#\Greek_Capital_Letter_Omega . #\Greek_Small_Letter_Omega)
1741         
1742          (#\Greek_Capital_Letter_Iota_With_Dialytika
1743           . #\Greek_Small_Letter_Iota_With_Dialytika)
1744         
1745          (#\Greek_Capital_Letter_Upsilon_With_Dialytika
1746           . #\Greek_Small_Letter_Upsilon_With_Dialytika)
1747         
1748          (#\Greek_Letter_Archaic_Koppa . #\Greek_Small_Letter_Archaic_Koppa)
1749         
1750          (#\Greek_Letter_Stigma . #\Greek_Small_Letter_Stigma)
1751         
1752          (#\Greek_Letter_Digamma . #\Greek_Small_Letter_Digamma)
1753         
1754          (#\Greek_Letter_Koppa . #\Greek_Small_Letter_Koppa)
1755         
1756          (#\Greek_Letter_Sampi . #\Greek_Small_Letter_Sampi)
1757         
1758          (#\Coptic_Capital_Letter_Shei . #\Coptic_Small_Letter_Shei)
1759         
1760          (#\Coptic_Capital_Letter_Fei . #\Coptic_Small_Letter_Fei)
1761         
1762          (#\Coptic_Capital_Letter_Khei . #\Coptic_Small_Letter_Khei)
1763         
1764          (#\Coptic_Capital_Letter_Hori . #\Coptic_Small_Letter_Hori)
1765         
1766          (#\Coptic_Capital_Letter_Gangia . #\Coptic_Small_Letter_Gangia)
1767         
1768          (#\Coptic_Capital_Letter_Shima . #\Coptic_Small_Letter_Shima)
1769         
1770          (#\Coptic_Capital_Letter_Dei . #\Coptic_Small_Letter_Dei)
1771         
1772          (#\Greek_Capital_Letter_Sho . #\Greek_Small_Letter_Sho)
1773         
1774          (#\Greek_Capital_Lunate_Sigma_Symbol . #\Greek_Lunate_Sigma_Symbol)
1775         
1776          (#\Greek_Capital_Letter_San . #\Greek_Small_Letter_San)
1777         
1778          (#\Greek_Capital_Reversed_Lunate_Sigma_Symbol
1779           . #\Greek_Small_Reversed_Lunate_Sigma_Symbol)
1780         
1781          (#\Greek_Capital_Dotted_Lunate_Sigma_Symbol
1782           . #\Greek_Small_Dotted_Lunate_Sigma_Symbol)
1783         
1784          (#\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol
1785           . #\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol)
1786         
1787          (#\Cyrillic_Capital_Letter_Ie_With_Grave
1788           . #\Cyrillic_Small_Letter_Ie_With_Grave)
1789         
1790          (#\Cyrillic_Capital_Letter_Io . #\Cyrillic_Small_Letter_Io)
1791         
1792          (#\Cyrillic_Capital_Letter_Dje . #\Cyrillic_Small_Letter_Dje)
1793         
1794          (#\Cyrillic_Capital_Letter_Gje . #\Cyrillic_Small_Letter_Gje)
1795         
1796          (#\Cyrillic_Capital_Letter_Ukrainian_Ie
1797           . #\Cyrillic_Small_Letter_Ukrainian_Ie)
1798         
1799          (#\Cyrillic_Capital_Letter_Dze . #\Cyrillic_Small_Letter_Dze)
1800         
1801          (#\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I
1802           . #\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I)
1803         
1804          (#\Cyrillic_Capital_Letter_Yi . #\Cyrillic_Small_Letter_Yi)
1805         
1806          (#\Cyrillic_Capital_Letter_Je . #\Cyrillic_Small_Letter_Je)
1807         
1808          (#\Cyrillic_Capital_Letter_Lje . #\Cyrillic_Small_Letter_Lje)
1809         
1810          (#\Cyrillic_Capital_Letter_Nje . #\Cyrillic_Small_Letter_Nje)
1811         
1812          (#\Cyrillic_Capital_Letter_Tshe . #\Cyrillic_Small_Letter_Tshe)
1813         
1814          (#\Cyrillic_Capital_Letter_Kje . #\Cyrillic_Small_Letter_Kje)
1815         
1816          (#\Cyrillic_Capital_Letter_I_With_Grave
1817           . #\Cyrillic_Small_Letter_I_With_Grave)
1818         
1819          (#\Cyrillic_Capital_Letter_Short_U . #\Cyrillic_Small_Letter_Short_U)
1820         
1821          (#\Cyrillic_Capital_Letter_Dzhe . #\Cyrillic_Small_Letter_Dzhe)
1822         
1823          (#\Cyrillic_Capital_Letter_A . #\Cyrillic_Small_Letter_A)
1824         
1825          (#\Cyrillic_Capital_Letter_Be . #\Cyrillic_Small_Letter_Be)
1826         
1827          (#\Cyrillic_Capital_Letter_Ve . #\Cyrillic_Small_Letter_Ve)
1828         
1829          (#\Cyrillic_Capital_Letter_Ghe . #\Cyrillic_Small_Letter_Ghe)
1830         
1831          (#\Cyrillic_Capital_Letter_De . #\Cyrillic_Small_Letter_De)
1832         
1833          (#\Cyrillic_Capital_Letter_Ie . #\Cyrillic_Small_Letter_Ie)
1834         
1835          (#\Cyrillic_Capital_Letter_Zhe . #\Cyrillic_Small_Letter_Zhe)
1836         
1837          (#\Cyrillic_Capital_Letter_Ze . #\Cyrillic_Small_Letter_Ze)
1838         
1839          (#\Cyrillic_Capital_Letter_I . #\Cyrillic_Small_Letter_I)
1840         
1841          (#\Cyrillic_Capital_Letter_Short_I . #\Cyrillic_Small_Letter_Short_I)
1842         
1843          (#\Cyrillic_Capital_Letter_Ka . #\Cyrillic_Small_Letter_Ka)
1844         
1845          (#\Cyrillic_Capital_Letter_El . #\Cyrillic_Small_Letter_El)
1846         
1847          (#\Cyrillic_Capital_Letter_Em . #\Cyrillic_Small_Letter_Em)
1848         
1849          (#\Cyrillic_Capital_Letter_En . #\Cyrillic_Small_Letter_En)
1850         
1851          (#\Cyrillic_Capital_Letter_O . #\Cyrillic_Small_Letter_O)
1852         
1853          (#\Cyrillic_Capital_Letter_Pe . #\Cyrillic_Small_Letter_Pe)
1854         
1855          (#\Cyrillic_Capital_Letter_Er . #\Cyrillic_Small_Letter_Er)
1856         
1857          (#\Cyrillic_Capital_Letter_Es . #\Cyrillic_Small_Letter_Es)
1858         
1859          (#\Cyrillic_Capital_Letter_Te . #\Cyrillic_Small_Letter_Te)
1860         
1861          (#\Cyrillic_Capital_Letter_U . #\Cyrillic_Small_Letter_U)
1862         
1863          (#\Cyrillic_Capital_Letter_Ef . #\Cyrillic_Small_Letter_Ef)
1864         
1865          (#\Cyrillic_Capital_Letter_Ha . #\Cyrillic_Small_Letter_Ha)
1866         
1867          (#\Cyrillic_Capital_Letter_Tse . #\Cyrillic_Small_Letter_Tse)
1868         
1869          (#\Cyrillic_Capital_Letter_Che . #\Cyrillic_Small_Letter_Che)
1870         
1871          (#\Cyrillic_Capital_Letter_Sha . #\Cyrillic_Small_Letter_Sha)
1872         
1873          (#\Cyrillic_Capital_Letter_Shcha . #\Cyrillic_Small_Letter_Shcha)
1874         
1875          (#\Cyrillic_Capital_Letter_Hard_Sign . #\Cyrillic_Small_Letter_Hard_Sign)
1876         
1877          (#\Cyrillic_Capital_Letter_Yeru . #\Cyrillic_Small_Letter_Yeru)
1878         
1879          (#\Cyrillic_Capital_Letter_Soft_Sign . #\Cyrillic_Small_Letter_Soft_Sign)
1880         
1881          (#\Cyrillic_Capital_Letter_E . #\Cyrillic_Small_Letter_E)
1882         
1883          (#\Cyrillic_Capital_Letter_Yu . #\Cyrillic_Small_Letter_Yu)
1884         
1885          (#\Cyrillic_Capital_Letter_Ya . #\Cyrillic_Small_Letter_Ya)
1886         
1887          (#\Cyrillic_Capital_Letter_Omega . #\Cyrillic_Small_Letter_Omega)
1888         
1889          (#\Cyrillic_Capital_Letter_Yat . #\Cyrillic_Small_Letter_Yat)
1890         
1891          (#\Cyrillic_Capital_Letter_Iotified_E . #\Cyrillic_Small_Letter_Iotified_E)
1892         
1893          (#\Cyrillic_Capital_Letter_Little_Yus . #\Cyrillic_Small_Letter_Little_Yus)
1894         
1895          (#\Cyrillic_Capital_Letter_Iotified_Little_Yus
1896           . #\Cyrillic_Small_Letter_Iotified_Little_Yus)
1897         
1898          (#\Cyrillic_Capital_Letter_Big_Yus . #\Cyrillic_Small_Letter_Big_Yus)
1899         
1900          (#\Cyrillic_Capital_Letter_Iotified_Big_Yus
1901           . #\Cyrillic_Small_Letter_Iotified_Big_Yus)
1902         
1903          (#\Cyrillic_Capital_Letter_Ksi . #\Cyrillic_Small_Letter_Ksi)
1904         
1905          (#\Cyrillic_Capital_Letter_Psi . #\Cyrillic_Small_Letter_Psi)
1906         
1907          (#\Cyrillic_Capital_Letter_Fita . #\Cyrillic_Small_Letter_Fita)
1908         
1909          (#\Cyrillic_Capital_Letter_Izhitsa . #\Cyrillic_Small_Letter_Izhitsa)
1910         
1911          (#\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent
1912           . #\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent)
1913         
1914          (#\Cyrillic_Capital_Letter_Uk . #\Cyrillic_Small_Letter_Uk)
1915         
1916          (#\Cyrillic_Capital_Letter_Round_Omega . #\Cyrillic_Small_Letter_Round_Omega)
1917         
1918          (#\Cyrillic_Capital_Letter_Omega_With_Titlo
1919           . #\Cyrillic_Small_Letter_Omega_With_Titlo)
1920         
1921          (#\Cyrillic_Capital_Letter_Ot . #\Cyrillic_Small_Letter_Ot)
1922         
1923          (#\Cyrillic_Capital_Letter_Koppa . #\Cyrillic_Small_Letter_Koppa)
1924         
1925          (#\Cyrillic_Capital_Letter_Short_I_With_Tail
1926           . #\Cyrillic_Small_Letter_Short_I_With_Tail)
1927         
1928          (#\Cyrillic_Capital_Letter_Semisoft_Sign
1929           . #\Cyrillic_Small_Letter_Semisoft_Sign)
1930         
1931          (#\Cyrillic_Capital_Letter_Er_With_Tick
1932           . #\Cyrillic_Small_Letter_Er_With_Tick)
1933         
1934          (#\Cyrillic_Capital_Letter_Ghe_With_Upturn
1935           . #\Cyrillic_Small_Letter_Ghe_With_Upturn)
1936         
1937          (#\Cyrillic_Capital_Letter_Ghe_With_Stroke
1938           . #\Cyrillic_Small_Letter_Ghe_With_Stroke)
1939         
1940          (#\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook
1941           . #\Cyrillic_Small_Letter_Ghe_With_Middle_Hook)
1942         
1943          (#\Cyrillic_Capital_Letter_Zhe_With_Descender
1944           . #\Cyrillic_Small_Letter_Zhe_With_Descender)
1945         
1946          (#\Cyrillic_Capital_Letter_Ze_With_Descender
1947           . #\Cyrillic_Small_Letter_Ze_With_Descender)
1948         
1949          (#\Cyrillic_Capital_Letter_Ka_With_Descender
1950           . #\Cyrillic_Small_Letter_Ka_With_Descender)
1951         
1952          (#\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke
1953           . #\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke)
1954         
1955          (#\Cyrillic_Capital_Letter_Ka_With_Stroke
1956           . #\Cyrillic_Small_Letter_Ka_With_Stroke)
1957         
1958          (#\Cyrillic_Capital_Letter_Bashkir_Ka . #\Cyrillic_Small_Letter_Bashkir_Ka)
1959         
1960          (#\Cyrillic_Capital_Letter_En_With_Descender
1961           . #\Cyrillic_Small_Letter_En_With_Descender)
1962         
1963          (#\Cyrillic_Capital_Ligature_En_Ghe . #\Cyrillic_Small_Ligature_En_Ghe)
1964         
1965          (#\Cyrillic_Capital_Letter_Pe_With_Middle_Hook
1966           . #\Cyrillic_Small_Letter_Pe_With_Middle_Hook)
1967         
1968          (#\Cyrillic_Capital_Letter_Abkhasian_Ha
1969           . #\Cyrillic_Small_Letter_Abkhasian_Ha)
1970         
1971          (#\Cyrillic_Capital_Letter_Es_With_Descender
1972           . #\Cyrillic_Small_Letter_Es_With_Descender)
1973         
1974          (#\Cyrillic_Capital_Letter_Te_With_Descender
1975           . #\Cyrillic_Small_Letter_Te_With_Descender)
1976         
1977          (#\Cyrillic_Capital_Letter_Straight_U . #\Cyrillic_Small_Letter_Straight_U)
1978         
1979          (#\Cyrillic_Capital_Letter_Straight_U_With_Stroke
1980           . #\Cyrillic_Small_Letter_Straight_U_With_Stroke)
1981         
1982          (#\Cyrillic_Capital_Letter_Ha_With_Descender
1983           . #\Cyrillic_Small_Letter_Ha_With_Descender)
1984         
1985          (#\Cyrillic_Capital_Ligature_Te_Tse . #\Cyrillic_Small_Ligature_Te_Tse)
1986         
1987          (#\Cyrillic_Capital_Letter_Che_With_Descender
1988           . #\Cyrillic_Small_Letter_Che_With_Descender)
1989         
1990          (#\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke
1991           . #\Cyrillic_Small_Letter_Che_With_Vertical_Stroke)
1992         
1993          (#\Cyrillic_Capital_Letter_Shha . #\Cyrillic_Small_Letter_Shha)
1994         
1995          (#\Cyrillic_Capital_Letter_Abkhasian_Che
1996           . #\Cyrillic_Small_Letter_Abkhasian_Che)
1997         
1998          (#\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender
1999           . #\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender)
2000         
2001          (#\Cyrillic_Letter_Palochka . #\Cyrillic_Small_Letter_Palochka)
2002         
2003          (#\Cyrillic_Capital_Letter_Zhe_With_Breve
2004           . #\Cyrillic_Small_Letter_Zhe_With_Breve)
2005         
2006          (#\Cyrillic_Capital_Letter_Ka_With_Hook
2007           . #\Cyrillic_Small_Letter_Ka_With_Hook)
2008         
2009          (#\Cyrillic_Capital_Letter_El_With_Tail
2010           . #\Cyrillic_Small_Letter_El_With_Tail)
2011         
2012          (#\Cyrillic_Capital_Letter_En_With_Hook
2013           . #\Cyrillic_Small_Letter_En_With_Hook)
2014         
2015          (#\Cyrillic_Capital_Letter_En_With_Tail
2016           . #\Cyrillic_Small_Letter_En_With_Tail)
2017         
2018          (#\Cyrillic_Capital_Letter_Khakassian_Che
2019           . #\Cyrillic_Small_Letter_Khakassian_Che)
2020         
2021          (#\Cyrillic_Capital_Letter_Em_With_Tail
2022           . #\Cyrillic_Small_Letter_Em_With_Tail)
2023         
2024          (#\Cyrillic_Capital_Letter_A_With_Breve
2025           . #\Cyrillic_Small_Letter_A_With_Breve)
2026         
2027          (#\Cyrillic_Capital_Letter_A_With_Diaeresis
2028           . #\Cyrillic_Small_Letter_A_With_Diaeresis)
2029         
2030          (#\Cyrillic_Capital_Ligature_A_Ie . #\Cyrillic_Small_Ligature_A_Ie)
2031         
2032          (#\Cyrillic_Capital_Letter_Ie_With_Breve
2033           . #\Cyrillic_Small_Letter_Ie_With_Breve)
2034         
2035          (#\Cyrillic_Capital_Letter_Schwa . #\Cyrillic_Small_Letter_Schwa)
2036         
2037          (#\Cyrillic_Capital_Letter_Schwa_With_Diaeresis
2038           . #\Cyrillic_Small_Letter_Schwa_With_Diaeresis)
2039         
2040          (#\Cyrillic_Capital_Letter_Zhe_With_Diaeresis
2041           . #\Cyrillic_Small_Letter_Zhe_With_Diaeresis)
2042         
2043          (#\Cyrillic_Capital_Letter_Ze_With_Diaeresis
2044           . #\Cyrillic_Small_Letter_Ze_With_Diaeresis)
2045         
2046          (#\Cyrillic_Capital_Letter_Abkhasian_Dze
2047           . #\Cyrillic_Small_Letter_Abkhasian_Dze)
2048         
2049          (#\Cyrillic_Capital_Letter_I_With_Macron
2050           . #\Cyrillic_Small_Letter_I_With_Macron)
2051         
2052          (#\Cyrillic_Capital_Letter_I_With_Diaeresis
2053           . #\Cyrillic_Small_Letter_I_With_Diaeresis)
2054         
2055          (#\Cyrillic_Capital_Letter_O_With_Diaeresis
2056           . #\Cyrillic_Small_Letter_O_With_Diaeresis)
2057         
2058          (#\Cyrillic_Capital_Letter_Barred_O . #\Cyrillic_Small_Letter_Barred_O)
2059         
2060          (#\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis
2061           . #\Cyrillic_Small_Letter_Barred_O_With_Diaeresis)
2062         
2063          (#\Cyrillic_Capital_Letter_E_With_Diaeresis
2064           . #\Cyrillic_Small_Letter_E_With_Diaeresis)
2065         
2066          (#\Cyrillic_Capital_Letter_U_With_Macron
2067           . #\Cyrillic_Small_Letter_U_With_Macron)
2068         
2069          (#\Cyrillic_Capital_Letter_U_With_Diaeresis
2070           . #\Cyrillic_Small_Letter_U_With_Diaeresis)
2071         
2072          (#\Cyrillic_Capital_Letter_U_With_Double_Acute
2073           . #\Cyrillic_Small_Letter_U_With_Double_Acute)
2074         
2075          (#\Cyrillic_Capital_Letter_Che_With_Diaeresis
2076           . #\Cyrillic_Small_Letter_Che_With_Diaeresis)
2077         
2078          (#\Cyrillic_Capital_Letter_Ghe_With_Descender
2079           . #\Cyrillic_Small_Letter_Ghe_With_Descender)
2080         
2081          (#\Cyrillic_Capital_Letter_Yeru_With_Diaeresis
2082           . #\Cyrillic_Small_Letter_Yeru_With_Diaeresis)
2083         
2084          (#\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook
2085           . #\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook)
2086         
2087          (#\Cyrillic_Capital_Letter_Ha_With_Hook
2088           . #\Cyrillic_Small_Letter_Ha_With_Hook)
2089         
2090          (#\Cyrillic_Capital_Letter_Ha_With_Stroke
2091           . #\Cyrillic_Small_Letter_Ha_With_Stroke)
2092         
2093          (#\Cyrillic_Capital_Letter_Komi_De . #\Cyrillic_Small_Letter_Komi_De)
2094         
2095          (#\Cyrillic_Capital_Letter_Komi_Dje . #\Cyrillic_Small_Letter_Komi_Dje)
2096         
2097          (#\Cyrillic_Capital_Letter_Komi_Zje . #\Cyrillic_Small_Letter_Komi_Zje)
2098         
2099          (#\Cyrillic_Capital_Letter_Komi_Dzje . #\Cyrillic_Small_Letter_Komi_Dzje)
2100         
2101          (#\Cyrillic_Capital_Letter_Komi_Lje . #\Cyrillic_Small_Letter_Komi_Lje)
2102         
2103          (#\Cyrillic_Capital_Letter_Komi_Nje . #\Cyrillic_Small_Letter_Komi_Nje)
2104         
2105          (#\Cyrillic_Capital_Letter_Komi_Sje . #\Cyrillic_Small_Letter_Komi_Sje)
2106         
2107          (#\Cyrillic_Capital_Letter_Komi_Tje . #\Cyrillic_Small_Letter_Komi_Tje)
2108         
2109          (#\Cyrillic_Capital_Letter_Reversed_Ze . #\Cyrillic_Small_Letter_Reversed_Ze)
2110         
2111          (#\Cyrillic_Capital_Letter_El_With_Hook
2112           . #\Cyrillic_Small_Letter_El_With_Hook)
2113         
2114          (#\Armenian_Capital_Letter_Ayb . #\Armenian_Small_Letter_Ayb)
2115         
2116          (#\Armenian_Capital_Letter_Ben . #\Armenian_Small_Letter_Ben)
2117         
2118          (#\Armenian_Capital_Letter_Gim . #\Armenian_Small_Letter_Gim)
2119         
2120          (#\Armenian_Capital_Letter_Da . #\Armenian_Small_Letter_Da)
2121         
2122          (#\Armenian_Capital_Letter_Ech . #\Armenian_Small_Letter_Ech)
2123         
2124          (#\Armenian_Capital_Letter_Za . #\Armenian_Small_Letter_Za)
2125         
2126          (#\Armenian_Capital_Letter_Eh . #\Armenian_Small_Letter_Eh)
2127         
2128          (#\Armenian_Capital_Letter_Et . #\Armenian_Small_Letter_Et)
2129         
2130          (#\Armenian_Capital_Letter_To . #\Armenian_Small_Letter_To)
2131         
2132          (#\Armenian_Capital_Letter_Zhe . #\Armenian_Small_Letter_Zhe)
2133         
2134          (#\Armenian_Capital_Letter_Ini . #\Armenian_Small_Letter_Ini)
2135         
2136          (#\Armenian_Capital_Letter_Liwn . #\Armenian_Small_Letter_Liwn)
2137         
2138          (#\Armenian_Capital_Letter_Xeh . #\Armenian_Small_Letter_Xeh)
2139         
2140          (#\Armenian_Capital_Letter_Ca . #\Armenian_Small_Letter_Ca)
2141         
2142          (#\Armenian_Capital_Letter_Ken . #\Armenian_Small_Letter_Ken)
2143         
2144          (#\Armenian_Capital_Letter_Ho . #\Armenian_Small_Letter_Ho)
2145         
2146          (#\Armenian_Capital_Letter_Ja . #\Armenian_Small_Letter_Ja)
2147         
2148          (#\Armenian_Capital_Letter_Ghad . #\Armenian_Small_Letter_Ghad)
2149         
2150          (#\Armenian_Capital_Letter_Cheh . #\Armenian_Small_Letter_Cheh)
2151         
2152          (#\Armenian_Capital_Letter_Men . #\Armenian_Small_Letter_Men)
2153         
2154          (#\Armenian_Capital_Letter_Yi . #\Armenian_Small_Letter_Yi)
2155         
2156          (#\Armenian_Capital_Letter_Now . #\Armenian_Small_Letter_Now)
2157         
2158          (#\Armenian_Capital_Letter_Sha . #\Armenian_Small_Letter_Sha)
2159         
2160          (#\Armenian_Capital_Letter_Vo . #\Armenian_Small_Letter_Vo)
2161         
2162          (#\Armenian_Capital_Letter_Cha . #\Armenian_Small_Letter_Cha)
2163         
2164          (#\Armenian_Capital_Letter_Peh . #\Armenian_Small_Letter_Peh)
2165         
2166          (#\Armenian_Capital_Letter_Jheh . #\Armenian_Small_Letter_Jheh)
2167         
2168          (#\Armenian_Capital_Letter_Ra . #\Armenian_Small_Letter_Ra)
2169         
2170          (#\Armenian_Capital_Letter_Seh . #\Armenian_Small_Letter_Seh)
2171         
2172          (#\Armenian_Capital_Letter_Vew . #\Armenian_Small_Letter_Vew)
2173         
2174          (#\Armenian_Capital_Letter_Tiwn . #\Armenian_Small_Letter_Tiwn)
2175         
2176          (#\Armenian_Capital_Letter_Reh . #\Armenian_Small_Letter_Reh)
2177         
2178          (#\Armenian_Capital_Letter_Co . #\Armenian_Small_Letter_Co)
2179         
2180          (#\Armenian_Capital_Letter_Yiwn . #\Armenian_Small_Letter_Yiwn)
2181         
2182          (#\Armenian_Capital_Letter_Piwr . #\Armenian_Small_Letter_Piwr)
2183         
2184          (#\Armenian_Capital_Letter_Keh . #\Armenian_Small_Letter_Keh)
2185         
2186          (#\Armenian_Capital_Letter_Oh . #\Armenian_Small_Letter_Oh)
2187         
2188          (#\Armenian_Capital_Letter_Feh . #\Armenian_Small_Letter_Feh)
2189         
2190          (#\U+10A0 . #\U+2D00)
2191          (#\U+10A1 . #\U+2D01)
2192          (#\U+10A2 . #\U+2D02)
2193         
2194          (#\U+10A3 . #\U+2D03)
2195          (#\U+10A4 . #\U+2D04)
2196          (#\U+10A5 . #\U+2D05)
2197         
2198          (#\U+10A6 . #\U+2D06)
2199          (#\U+10A7 . #\U+2D07)
2200          (#\U+10A8 . #\U+2D08)
2201         
2202          (#\U+10A9 . #\U+2D09)
2203          (#\U+10AA . #\U+2D0A)
2204          (#\U+10AB . #\U+2D0B)
2205         
2206          (#\U+10AC . #\U+2D0C)
2207          (#\U+10AD . #\U+2D0D)
2208          (#\U+10AE . #\U+2D0E)
2209         
2210          (#\U+10AF . #\U+2D0F)
2211          (#\U+10B0 . #\U+2D10)
2212          (#\U+10B1 . #\U+2D11)
2213         
2214          (#\U+10B2 . #\U+2D12)
2215          (#\U+10B3 . #\U+2D13)
2216          (#\U+10B4 . #\U+2D14)
2217         
2218          (#\U+10B5 . #\U+2D15)
2219          (#\U+10B6 . #\U+2D16)
2220          (#\U+10B7 . #\U+2D17)
2221         
2222          (#\U+10B8 . #\U+2D18)
2223          (#\U+10B9 . #\U+2D19)
2224          (#\U+10BA . #\U+2D1A)
2225         
2226          (#\U+10BB . #\U+2D1B)
2227          (#\U+10BC . #\U+2D1C)
2228          (#\U+10BD . #\U+2D1D)
2229         
2230          (#\U+10BE . #\U+2D1E)
2231          (#\U+10BF . #\U+2D1F)
2232          (#\U+10C0 . #\U+2D20)
2233         
2234          (#\U+10C1 . #\U+2D21)
2235          (#\U+10C2 . #\U+2D22)
2236          (#\U+10C3 . #\U+2D23)
2237         
2238          (#\U+10C4 . #\U+2D24)
2239          (#\U+10C5 . #\U+2D25)
2240          (#\U+1E00 . #\U+1E01)
2241         
2242          (#\U+1E02 . #\U+1E03)
2243          (#\U+1E04 . #\U+1E05)
2244          (#\U+1E06 . #\U+1E07)
2245         
2246          (#\U+1E08 . #\U+1E09)
2247          (#\U+1E0A . #\U+1E0B)
2248          (#\U+1E0C . #\U+1E0D)
2249         
2250          (#\U+1E0E . #\U+1E0F)
2251          (#\U+1E10 . #\U+1E11)
2252          (#\U+1E12 . #\U+1E13)
2253         
2254          (#\U+1E14 . #\U+1E15)
2255          (#\U+1E16 . #\U+1E17)
2256          (#\U+1E18 . #\U+1E19)
2257         
2258          (#\U+1E1A . #\U+1E1B)
2259          (#\U+1E1C . #\U+1E1D)
2260          (#\U+1E1E . #\U+1E1F)
2261         
2262          (#\U+1E20 . #\U+1E21)
2263          (#\U+1E22 . #\U+1E23)
2264          (#\U+1E24 . #\U+1E25)
2265         
2266          (#\U+1E26 . #\U+1E27)
2267          (#\U+1E28 . #\U+1E29)
2268          (#\U+1E2A . #\U+1E2B)
2269         
2270          (#\U+1E2C . #\U+1E2D)
2271          (#\U+1E2E . #\U+1E2F)
2272          (#\U+1E30 . #\U+1E31)
2273         
2274          (#\U+1E32 . #\U+1E33)
2275          (#\U+1E34 . #\U+1E35)
2276          (#\U+1E36 . #\U+1E37)
2277         
2278          (#\U+1E38 . #\U+1E39)
2279          (#\U+1E3A . #\U+1E3B)
2280          (#\U+1E3C . #\U+1E3D)
2281         
2282          (#\U+1E3E . #\U+1E3F)
2283          (#\U+1E40 . #\U+1E41)
2284          (#\U+1E42 . #\U+1E43)
2285         
2286          (#\U+1E44 . #\U+1E45)
2287          (#\U+1E46 . #\U+1E47)
2288          (#\U+1E48 . #\U+1E49)
2289         
2290          (#\U+1E4A . #\U+1E4B)
2291          (#\U+1E4C . #\U+1E4D)
2292          (#\U+1E4E . #\U+1E4F)
2293         
2294          (#\U+1E50 . #\U+1E51)
2295          (#\U+1E52 . #\U+1E53)
2296          (#\U+1E54 . #\U+1E55)
2297         
2298          (#\U+1E56 . #\U+1E57)
2299          (#\U+1E58 . #\U+1E59)
2300          (#\U+1E5A . #\U+1E5B)
2301         
2302          (#\U+1E5C . #\U+1E5D)
2303          (#\U+1E5E . #\U+1E5F)
2304          (#\U+1E60 . #\U+1E61)
2305         
2306          (#\U+1E62 . #\U+1E63)
2307          (#\U+1E64 . #\U+1E65)
2308          (#\U+1E66 . #\U+1E67)
2309         
2310          (#\U+1E68 . #\U+1E69)
2311          (#\U+1E6A . #\U+1E6B)
2312          (#\U+1E6C . #\U+1E6D)
2313         
2314          (#\U+1E6E . #\U+1E6F)
2315          (#\U+1E70 . #\U+1E71)
2316          (#\U+1E72 . #\U+1E73)
2317         
2318          (#\U+1E74 . #\U+1E75)
2319          (#\U+1E76 . #\U+1E77)
2320          (#\U+1E78 . #\U+1E79)
2321         
2322          (#\U+1E7A . #\U+1E7B)
2323          (#\U+1E7C . #\U+1E7D)
2324          (#\U+1E7E . #\U+1E7F)
2325         
2326          (#\U+1E80 . #\U+1E81)
2327          (#\U+1E82 . #\U+1E83)
2328          (#\U+1E84 . #\U+1E85)
2329         
2330          (#\U+1E86 . #\U+1E87)
2331          (#\U+1E88 . #\U+1E89)
2332          (#\U+1E8A . #\U+1E8B)
2333         
2334          (#\U+1E8C . #\U+1E8D)
2335          (#\U+1E8E . #\U+1E8F)
2336          (#\U+1E90 . #\U+1E91)
2337         
2338          (#\U+1E92 . #\U+1E93)
2339          (#\U+1E94 . #\U+1E95)
2340          (#\U+1EA0 . #\U+1EA1)
2341         
2342          (#\U+1EA2 . #\U+1EA3)
2343          (#\U+1EA4 . #\U+1EA5)
2344          (#\U+1EA6 . #\U+1EA7)
2345         
2346          (#\U+1EA8 . #\U+1EA9)
2347          (#\U+1EAA . #\U+1EAB)
2348          (#\U+1EAC . #\U+1EAD)
2349         
2350          (#\U+1EAE . #\U+1EAF)
2351          (#\U+1EB0 . #\U+1EB1)
2352          (#\U+1EB2 . #\U+1EB3)
2353         
2354          (#\U+1EB4 . #\U+1EB5)
2355          (#\U+1EB6 . #\U+1EB7)
2356          (#\U+1EB8 . #\U+1EB9)
2357         
2358          (#\U+1EBA . #\U+1EBB)
2359          (#\U+1EBC . #\U+1EBD)
2360          (#\U+1EBE . #\U+1EBF)
2361         
2362          (#\U+1EC0 . #\U+1EC1)
2363          (#\U+1EC2 . #\U+1EC3)
2364          (#\U+1EC4 . #\U+1EC5)
2365         
2366          (#\U+1EC6 . #\U+1EC7)
2367          (#\U+1EC8 . #\U+1EC9)
2368          (#\U+1ECA . #\U+1ECB)
2369         
2370          (#\U+1ECC . #\U+1ECD)
2371          (#\U+1ECE . #\U+1ECF)
2372          (#\U+1ED0 . #\U+1ED1)
2373         
2374          (#\U+1ED2 . #\U+1ED3)
2375          (#\U+1ED4 . #\U+1ED5)
2376          (#\U+1ED6 . #\U+1ED7)
2377         
2378          (#\U+1ED8 . #\U+1ED9)
2379          (#\U+1EDA . #\U+1EDB)
2380          (#\U+1EDC . #\U+1EDD)
2381         
2382          (#\U+1EDE . #\U+1EDF)
2383          (#\U+1EE0 . #\U+1EE1)
2384          (#\U+1EE2 . #\U+1EE3)
2385         
2386          (#\U+1EE4 . #\U+1EE5)
2387          (#\U+1EE6 . #\U+1EE7)
2388          (#\U+1EE8 . #\U+1EE9)
2389         
2390          (#\U+1EEA . #\U+1EEB)
2391          (#\U+1EEC . #\U+1EED)
2392          (#\U+1EEE . #\U+1EEF)
2393         
2394          (#\U+1EF0 . #\U+1EF1)
2395          (#\U+1EF2 . #\U+1EF3)
2396          (#\U+1EF4 . #\U+1EF5)
2397         
2398          (#\U+1EF6 . #\U+1EF7)
2399          (#\U+1EF8 . #\U+1EF9)
2400          (#\U+1F08 . #\U+1F00)
2401         
2402          (#\U+1F09 . #\U+1F01)
2403          (#\U+1F0A . #\U+1F02)
2404          (#\U+1F0B . #\U+1F03)
2405         
2406          (#\U+1F0C . #\U+1F04)
2407          (#\U+1F0D . #\U+1F05)
2408          (#\U+1F0E . #\U+1F06)
2409         
2410          (#\U+1F0F . #\U+1F07)
2411          (#\U+1F18 . #\U+1F10)
2412          (#\U+1F19 . #\U+1F11)
2413         
2414          (#\U+1F1A . #\U+1F12)
2415          (#\U+1F1B . #\U+1F13)
2416          (#\U+1F1C . #\U+1F14)
2417         
2418          (#\U+1F1D . #\U+1F15)
2419          (#\U+1F28 . #\U+1F20)
2420          (#\U+1F29 . #\U+1F21)
2421         
2422          (#\U+1F2A . #\U+1F22)
2423          (#\U+1F2B . #\U+1F23)
2424          (#\U+1F2C . #\U+1F24)
2425         
2426          (#\U+1F2D . #\U+1F25)
2427          (#\U+1F2E . #\U+1F26)
2428          (#\U+1F2F . #\U+1F27)
2429         
2430          (#\U+1F38 . #\U+1F30)
2431          (#\U+1F39 . #\U+1F31)
2432          (#\U+1F3A . #\U+1F32)
2433         
2434          (#\U+1F3B . #\U+1F33)
2435          (#\U+1F3C . #\U+1F34)
2436          (#\U+1F3D . #\U+1F35)
2437         
2438          (#\U+1F3E . #\U+1F36)
2439          (#\U+1F3F . #\U+1F37)
2440          (#\U+1F48 . #\U+1F40)
2441         
2442          (#\U+1F49 . #\U+1F41)
2443          (#\U+1F4A . #\U+1F42)
2444          (#\U+1F4B . #\U+1F43)
2445         
2446          (#\U+1F4C . #\U+1F44)
2447          (#\U+1F4D . #\U+1F45)
2448          (#\U+1F59 . #\U+1F51)
2449         
2450          (#\U+1F5B . #\U+1F53)
2451          (#\U+1F5D . #\U+1F55)
2452          (#\U+1F5F . #\U+1F57)
2453         
2454          (#\U+1F68 . #\U+1F60)
2455          (#\U+1F69 . #\U+1F61)
2456          (#\U+1F6A . #\U+1F62)
2457         
2458          (#\U+1F6B . #\U+1F63)
2459          (#\U+1F6C . #\U+1F64)
2460          (#\U+1F6D . #\U+1F65)
2461         
2462          (#\U+1F6E . #\U+1F66)
2463          (#\U+1F6F . #\U+1F67)
2464          (#\U+1F88 . #\U+1F80)
2465         
2466          (#\U+1F89 . #\U+1F81)
2467          (#\U+1F8A . #\U+1F82)
2468          (#\U+1F8B . #\U+1F83)
2469         
2470          (#\U+1F8C . #\U+1F84)
2471          (#\U+1F8D . #\U+1F85)
2472          (#\U+1F8E . #\U+1F86)
2473         
2474          (#\U+1F8F . #\U+1F87)
2475          (#\U+1F98 . #\U+1F90)
2476          (#\U+1F99 . #\U+1F91)
2477         
2478          (#\U+1F9A . #\U+1F92)
2479          (#\U+1F9B . #\U+1F93)
2480          (#\U+1F9C . #\U+1F94)
2481         
2482          (#\U+1F9D . #\U+1F95)
2483          (#\U+1F9E . #\U+1F96)
2484          (#\U+1F9F . #\U+1F97)
2485         
2486          (#\U+1FA8 . #\U+1FA0)
2487          (#\U+1FA9 . #\U+1FA1)
2488          (#\U+1FAA . #\U+1FA2)
2489         
2490          (#\U+1FAB . #\U+1FA3)
2491          (#\U+1FAC . #\U+1FA4)
2492          (#\U+1FAD . #\U+1FA5)
2493         
2494          (#\U+1FAE . #\U+1FA6)
2495          (#\U+1FAF . #\U+1FA7)
2496          (#\U+1FB8 . #\U+1FB0)
2497         
2498          (#\U+1FB9 . #\U+1FB1)
2499          (#\U+1FBA . #\U+1F70)
2500          (#\U+1FBB . #\U+1F71)
2501         
2502          (#\U+1FBC . #\U+1FB3)
2503          (#\U+1FC8 . #\U+1F72)
2504          (#\U+1FC9 . #\U+1F73)
2505         
2506          (#\U+1FCA . #\U+1F74)
2507          (#\U+1FCB . #\U+1F75)
2508          (#\U+1FCC . #\U+1FC3)
2509         
2510          (#\U+1FD8 . #\U+1FD0)
2511          (#\U+1FD9 . #\U+1FD1)
2512          (#\U+1FDA . #\U+1F76)
2513         
2514          (#\U+1FDB . #\U+1F77)
2515          (#\U+1FE8 . #\U+1FE0)
2516          (#\U+1FE9 . #\U+1FE1)
2517         
2518          (#\U+1FEA . #\U+1F7A)
2519          (#\U+1FEB . #\U+1F7B)
2520          (#\U+1FEC . #\U+1FE5)
2521         
2522          (#\U+1FF8 . #\U+1F78)
2523          (#\U+1FF9 . #\U+1F79)
2524          (#\U+1FFA . #\U+1F7C)
2525         
2526          (#\U+1FFB . #\U+1F7D)
2527          (#\U+1FFC . #\U+1FF3)
2528          (#\U+2132 . #\U+214E)
2529         
2530          (#\U+2160 . #\U+2170)
2531          (#\U+2161 . #\U+2171)
2532          (#\U+2162 . #\U+2172)
2533         
2534          (#\U+2163 . #\U+2173)
2535          (#\U+2164 . #\U+2174)
2536          (#\U+2165 . #\U+2175)
2537         
2538          (#\U+2166 . #\U+2176)
2539          (#\U+2167 . #\U+2177)
2540          (#\U+2168 . #\U+2178)
2541         
2542          (#\U+2169 . #\U+2179)
2543          (#\U+216A . #\U+217A)
2544          (#\U+216B . #\U+217B)
2545         
2546          (#\U+216C . #\U+217C)
2547          (#\U+216D . #\U+217D)
2548          (#\U+216E . #\U+217E)
2549         
2550          (#\U+216F . #\U+217F)
2551          (#\U+2183 . #\U+2184)
2552          (#\U+24B6 . #\U+24D0)
2553         
2554          (#\U+24B7 . #\U+24D1)
2555          (#\U+24B8 . #\U+24D2)
2556          (#\U+24B9 . #\U+24D3)
2557         
2558          (#\U+24BA . #\U+24D4)
2559          (#\U+24BB . #\U+24D5)
2560          (#\U+24BC . #\U+24D6)
2561         
2562          (#\U+24BD . #\U+24D7)
2563          (#\U+24BE . #\U+24D8)
2564          (#\U+24BF . #\U+24D9)
2565         
2566          (#\U+24C0 . #\U+24DA)
2567          (#\U+24C1 . #\U+24DB)
2568          (#\U+24C2 . #\U+24DC)
2569         
2570          (#\U+24C3 . #\U+24DD)
2571          (#\U+24C4 . #\U+24DE)
2572          (#\U+24C5 . #\U+24DF)
2573         
2574          (#\U+24C6 . #\U+24E0)
2575          (#\U+24C7 . #\U+24E1)
2576          (#\U+24C8 . #\U+24E2)
2577         
2578          (#\U+24C9 . #\U+24E3)
2579          (#\U+24CA . #\U+24E4)
2580          (#\U+24CB . #\U+24E5)
2581         
2582          (#\U+24CC . #\U+24E6)
2583          (#\U+24CD . #\U+24E7)
2584          (#\U+24CE . #\U+24E8)
2585         
2586          (#\U+24CF . #\U+24E9)
2587          (#\U+2C00 . #\U+2C30)
2588          (#\U+2C01 . #\U+2C31)
2589         
2590          (#\U+2C02 . #\U+2C32)
2591          (#\U+2C03 . #\U+2C33)
2592          (#\U+2C04 . #\U+2C34)
2593         
2594          (#\U+2C05 . #\U+2C35)
2595          (#\U+2C06 . #\U+2C36)
2596          (#\U+2C07 . #\U+2C37)
2597         
2598          (#\U+2C08 . #\U+2C38)
2599          (#\U+2C09 . #\U+2C39)
2600          (#\U+2C0A . #\U+2C3A)
2601         
2602          (#\U+2C0B . #\U+2C3B)
2603          (#\U+2C0C . #\U+2C3C)
2604          (#\U+2C0D . #\U+2C3D)
2605         
2606          (#\U+2C0E . #\U+2C3E)
2607          (#\U+2C0F . #\U+2C3F)
2608          (#\U+2C10 . #\U+2C40)
2609         
2610          (#\U+2C11 . #\U+2C41)
2611          (#\U+2C12 . #\U+2C42)
2612          (#\U+2C13 . #\U+2C43)
2613         
2614          (#\U+2C14 . #\U+2C44)
2615          (#\U+2C15 . #\U+2C45)
2616          (#\U+2C16 . #\U+2C46)
2617         
2618          (#\U+2C17 . #\U+2C47)
2619          (#\U+2C18 . #\U+2C48)
2620          (#\U+2C19 . #\U+2C49)
2621         
2622          (#\U+2C1A . #\U+2C4A)
2623          (#\U+2C1B . #\U+2C4B)
2624          (#\U+2C1C . #\U+2C4C)
2625         
2626          (#\U+2C1D . #\U+2C4D)
2627          (#\U+2C1E . #\U+2C4E)
2628          (#\U+2C1F . #\U+2C4F)
2629         
2630          (#\U+2C20 . #\U+2C50)
2631          (#\U+2C21 . #\U+2C51)
2632          (#\U+2C22 . #\U+2C52)
2633         
2634          (#\U+2C23 . #\U+2C53)
2635          (#\U+2C24 . #\U+2C54)
2636          (#\U+2C25 . #\U+2C55)
2637         
2638          (#\U+2C26 . #\U+2C56)
2639          (#\U+2C27 . #\U+2C57)
2640          (#\U+2C28 . #\U+2C58)
2641         
2642          (#\U+2C29 . #\U+2C59)
2643          (#\U+2C2A . #\U+2C5A)
2644          (#\U+2C2B . #\U+2C5B)
2645         
2646          (#\U+2C2C . #\U+2C5C)
2647          (#\U+2C2D . #\U+2C5D)
2648          (#\U+2C2E . #\U+2C5E)
2649         
2650          (#\U+2C60 . #\U+2C61)
2651          (#\U+2C62 . #\Latin_Small_Letter_L_With_Middle_Tilde)
2652         
2653          (#\U+2C63 . #\U+1D7D)
2654          (#\U+2C64 . #\Latin_Small_Letter_R_With_Tail)
2655         
2656          (#\U+2C67 . #\U+2C68)
2657          (#\U+2C69 . #\U+2C6A)
2658          (#\U+2C6B . #\U+2C6C)
2659         
2660          (#\U+2C75 . #\U+2C76)
2661          (#\U+2C80 . #\U+2C81)
2662          (#\U+2C82 . #\U+2C83)
2663         
2664          (#\U+2C84 . #\U+2C85)
2665          (#\U+2C86 . #\U+2C87)
2666          (#\U+2C88 . #\U+2C89)
2667         
2668          (#\U+2C8A . #\U+2C8B)
2669          (#\U+2C8C . #\U+2C8D)
2670          (#\U+2C8E . #\U+2C8F)
2671         
2672          (#\U+2C90 . #\U+2C91)
2673          (#\U+2C92 . #\U+2C93)
2674          (#\U+2C94 . #\U+2C95)
2675         
2676          (#\U+2C96 . #\U+2C97)
2677          (#\U+2C98 . #\U+2C99)
2678          (#\U+2C9A . #\U+2C9B)
2679         
2680          (#\U+2C9C . #\U+2C9D)
2681          (#\U+2C9E . #\U+2C9F)
2682          (#\U+2CA0 . #\U+2CA1)
2683         
2684          (#\U+2CA2 . #\U+2CA3)
2685          (#\U+2CA4 . #\U+2CA5)
2686          (#\U+2CA6 . #\U+2CA7)
2687         
2688          (#\U+2CA8 . #\U+2CA9)
2689          (#\U+2CAA . #\U+2CAB)
2690          (#\U+2CAC . #\U+2CAD)
2691         
2692          (#\U+2CAE . #\U+2CAF)
2693          (#\U+2CB0 . #\U+2CB1)
2694          (#\U+2CB2 . #\U+2CB3)
2695         
2696          (#\U+2CB4 . #\U+2CB5)
2697          (#\U+2CB6 . #\U+2CB7)
2698          (#\U+2CB8 . #\U+2CB9)
2699         
2700          (#\U+2CBA . #\U+2CBB)
2701          (#\U+2CBC . #\U+2CBD)
2702          (#\U+2CBE . #\U+2CBF)
2703         
2704          (#\U+2CC0 . #\U+2CC1)
2705          (#\U+2CC2 . #\U+2CC3)
2706          (#\U+2CC4 . #\U+2CC5)
2707         
2708          (#\U+2CC6 . #\U+2CC7)
2709          (#\U+2CC8 . #\U+2CC9)
2710          (#\U+2CCA . #\U+2CCB)
2711         
2712          (#\U+2CCC . #\U+2CCD)
2713          (#\U+2CCE . #\U+2CCF)
2714          (#\U+2CD0 . #\U+2CD1)
2715         
2716          (#\U+2CD2 . #\U+2CD3)
2717          (#\U+2CD4 . #\U+2CD5)
2718          (#\U+2CD6 . #\U+2CD7)
2719         
2720          (#\U+2CD8 . #\U+2CD9)
2721          (#\U+2CDA . #\U+2CDB)
2722          (#\U+2CDC . #\U+2CDD)
2723         
2724          (#\U+2CDE . #\U+2CDF)
2725          (#\U+2CE0 . #\U+2CE1)
2726          (#\U+2CE2 . #\U+2CE3)
2727         
2728          (#\U+FF21 . #\U+FF41)
2729          (#\U+FF22 . #\U+FF42)
2730          (#\U+FF23 . #\U+FF43)
2731         
2732          (#\U+FF24 . #\U+FF44)
2733          (#\U+FF25 . #\U+FF45)
2734          (#\U+FF26 . #\U+FF46)
2735         
2736          (#\U+FF27 . #\U+FF47)
2737          (#\U+FF28 . #\U+FF48)
2738          (#\U+FF29 . #\U+FF49)
2739         
2740          (#\U+FF2A . #\U+FF4A)
2741          (#\U+FF2B . #\U+FF4B)
2742          (#\U+FF2C . #\U+FF4C)
2743         
2744          (#\U+FF2D . #\U+FF4D)
2745          (#\U+FF2E . #\U+FF4E)
2746          (#\U+FF2F . #\U+FF4F)
2747         
2748          (#\U+FF30 . #\U+FF50)
2749          (#\U+FF31 . #\U+FF51)
2750          (#\U+FF32 . #\U+FF52)
2751         
2752          (#\U+FF33 . #\U+FF53)
2753          (#\U+FF34 . #\U+FF54)
2754          (#\U+FF35 . #\U+FF55)
2755         
2756          (#\U+FF36 . #\U+FF56)
2757          (#\U+FF37 . #\U+FF57)
2758          (#\U+FF38 . #\U+FF58)
2759         
2760          (#\U+FF39 . #\U+FF59)
2761          (#\U+FF3A . #\U+FF5A)
2762          (#\U+10400 . #\U+10428)
2763         
2764          (#\U+10401 . #\U+10429)
2765          (#\U+10402 . #\U+1042A)
2766          (#\U+10403 . #\U+1042B)
2767         
2768          (#\U+10404 . #\U+1042C)
2769          (#\U+10405 . #\U+1042D)
2770          (#\U+10406 . #\U+1042E)
2771         
2772          (#\U+10407 . #\U+1042F)
2773          (#\U+10408 . #\U+10430)
2774          (#\U+10409 . #\U+10431)
2775         
2776          (#\U+1040A . #\U+10432)
2777          (#\U+1040B . #\U+10433)
2778          (#\U+1040C . #\U+10434)
2779         
2780          (#\U+1040D . #\U+10435)
2781          (#\U+1040E . #\U+10436)
2782          (#\U+1040F . #\U+10437)
2783         
2784          (#\U+10410 . #\U+10438)
2785          (#\U+10411 . #\U+10439)
2786          (#\U+10412 . #\U+1043A)
2787         
2788          (#\U+10413 . #\U+1043B)
2789          (#\U+10414 . #\U+1043C)
2790          (#\U+10415 . #\U+1043D)
2791         
2792          (#\U+10416 . #\U+1043E)
2793          (#\U+10417 . #\U+1043F)
2794          (#\U+10418 . #\U+10440)
2795         
2796          (#\U+10419 . #\U+10441)
2797          (#\U+1041A . #\U+10442)
2798          (#\U+1041B . #\U+10443)
2799         
2800          (#\U+1041C . #\U+10444)
2801          (#\U+1041D . #\U+10445)
2802          (#\U+1041E . #\U+10446)
2803         
2804          (#\U+1041F . #\U+10447)
2805          (#\U+10420 . #\U+10448)
2806          (#\U+10421 . #\U+10449)
2807         
2808          (#\U+10422 . #\U+1044A)
2809          (#\U+10423 . #\U+1044B)
2810          (#\U+10424 . #\U+1044C)
2811         
2812          (#\U+10425 . #\U+1044D)
2813          (#\U+10426 . #\U+1044E)
2814          (#\U+10427 . #\U+1044F)
2815          ))
2816       (max-upper #\u+0000)
2817       (max-lower #\u+0000))
2818  (declare (optimize speed)) ;; make sure everything gets inlined that needs to be.
2819  (dolist (pair mapping)
2820    (destructuring-bind (upper . lower) pair
2821      (when (char> upper max-upper)
2822        (setq max-upper upper))
2823      (when (char> lower max-lower)
2824        (setq max-lower lower))))
2825  (let* ((upper-to-lower (make-array (the fixnum (1+ (the fixnum (char-code max-upper)))) :element-type '(signed-byte 16)))
2826         (lower-to-upper (make-array (the fixnum (1+ (the fixnum (char-code max-lower)))) :element-type '(signed-byte 16))))
2827    (dolist (pair mapping)
2828      (destructuring-bind (upper . lower) pair
2829        (let* ((upper-code (char-code upper))
2830               (lower-code (char-code lower))
2831               (diff (- lower-code upper-code)))
2832          (declare (type (mod #x110000) upper-code lower-code)
2833                   (type (signed-byte 16) diff))
2834          (setf (aref upper-to-lower upper-code) diff
2835                (aref lower-to-upper lower-code) (the fixnum (- diff))))))
2836    (do* ((upper (char-code #\A) (1+ upper))
2837          (lower (char-code #\a) (1+ lower)))
2838         ((> upper (char-code #\Z)))
2839      (setf (aref upper-to-lower upper) (- lower upper)
2840            (aref lower-to-upper lower) (- upper lower)))
2841    (setq *lower-to-upper* lower-to-upper
2842          *upper-to-lower* upper-to-lower)
2843    nil))
2844
2845(eval-when (:compile-toplevel)
2846  (declaim (inline %char-code-case-fold)))
2847
2848(defun %char-code-case-fold (code table)
2849  (declare (type (mod #x110000) code)
2850           (type (simple-array (signed-byte 16) (*)) table))
2851  (if (>= code (length table))
2852    code
2853    (locally (declare (optimize (speed 3) (safety 0)))
2854      (the fixnum (+ code (the (signed-byte 16) (aref table code)))))))
2855
2856(defun %char-code-upcase (code)
2857  (%char-code-case-fold code *lower-to-upper*))
2858
2859(defun char-upcase (c)
2860  "Return CHAR converted to upper-case if that is possible.  Don't convert
2861   lowercase eszet (U+DF)."
2862  (declare (optimize speed))            ; so that %char-code-case-fold inlines
2863  (code-char (the valid-char-code (%char-code-case-fold (char-code c) *lower-to-upper*))))
2864
2865
2866
2867
2868(defun %char-code-downcase (code)
2869  (declare (type (mod #x110000) code))
2870  (let* ((table *upper-to-lower*))
2871    (declare (type (simple-array (signed-byte 16) (*)) table))
2872    (if (>= code (length table))
2873      code
2874      (locally (declare (optimize (speed 3) (safety 0)))
2875        (the fixnum (+ code (the (signed-byte 16) (aref table code))))))))
2876
2877
2878;;;True for a-z, and maybe other things.
2879(defun lower-case-p (c)
2880  "The argument must be a character object; LOWER-CASE-P returns T if the
2881   argument is a lower-case character, NIL otherwise."
2882  (let* ((code (char-code c))
2883         (table *lower-to-upper*))
2884    (declare (type (mod #x110000) code)
2885             (type (simple-array (signed-byte 16) (*)) table))
2886    (if (< code (length table))
2887      (not (eql 0 (the (signed-byte 16) (aref table code)))))))
2888
2889
2890
2891(defstatic *alpha-char-bits*
2892  (let* ((bits (make-array #x2fa1e :element-type 'bit)))
2893    (declare (optimize speed)) ;; make sure everything gets inlined that needs to be.
2894    (dolist (range '((#x0041 . #x005A)
2895                     (#x0061 . #x007A)
2896                     #x00AA
2897                     #x00B5
2898                     #x00BA
2899                     (#x00C0 . #x00D6)
2900                     (#x00D8 . #x00F6)
2901                     (#x00F8 . #x01BA)
2902                     #x01BB
2903                     (#x01BC . #x01BF)
2904                     (#x01C0 . #x01C3)
2905                     (#x01C4 . #x0293)
2906                     #x0294
2907                     (#x0295 . #x02AF)
2908                     (#x02B0 . #x02C1)
2909                     (#x02C6 . #x02D1)
2910                     (#x02E0 . #x02E4)
2911                     #x02EC
2912                     #x02EE
2913                     #x0345
2914                     (#x0370 . #x0373)
2915                     #x0374
2916                     (#x0376 . #x0377)
2917                     #x037A
2918                     (#x037B . #x037D)
2919                     #x0386
2920                     (#x0388 . #x038A)
2921                     #x038C
2922                     (#x038E . #x03A1)
2923                     (#x03A3 . #x03F5)
2924                     (#x03F7 . #x0481)
2925                     (#x048A . #x0523)
2926                     (#x0531 . #x0556)
2927                     #x0559
2928                     (#x0561 . #x0587)
2929                     (#x05B0 . #x05BD)
2930                     #x05BF
2931                     (#x05C1 . #x05C2)
2932                     (#x05C4 . #x05C5)
2933                     #x05C7
2934                     (#x05D0 . #x05EA)
2935                     (#x05F0 . #x05F2)
2936                     (#x0610 . #x061A)
2937                     (#x0621 . #x063F)
2938                     #x0640
2939                     (#x0641 . #x064A)
2940                     (#x064B . #x0657)
2941                     (#x0659 . #x065E)
2942                     (#x066E . #x066F)
2943                     #x0670
2944                     (#x0671 . #x06D3)
2945                     #x06D5
2946                     (#x06D6 . #x06DC)
2947                     (#x06E1 . #x06E4)
2948                     (#x06E5 . #x06E6)
2949                     (#x06E7 . #x06E8)
2950                     #x06ED
2951                     (#x06EE . #x06EF)
2952                     (#x06FA . #x06FC)
2953                     #x06FF
2954                     #x0710
2955                     #x0711
2956                     (#x0712 . #x072F)
2957                     (#x0730 . #x073F)
2958                     (#x074D . #x07A5)
2959                     (#x07A6 . #x07B0)
2960                     #x07B1
2961                     (#x07CA . #x07EA)
2962                     (#x07F4 . #x07F5)
2963                     #x07FA
2964                     (#x0901 . #x0902)
2965                     #x0903
2966                     (#x0904 . #x0939)
2967                     #x093D
2968                     (#x093E . #x0940)
2969                     (#x0941 . #x0948)
2970                     (#x0949 . #x094C)
2971                     #x0950
2972                     (#x0958 . #x0961)
2973                     (#x0962 . #x0963)
2974                     #x0971
2975                     #x0972
2976                     (#x097B . #x097F)
2977                     #x0981
2978                     (#x0982 . #x0983)
2979                     (#x0985 . #x098C)
2980                     (#x098F . #x0990)
2981                     (#x0993 . #x09A8)
2982                     (#x09AA . #x09B0)
2983                     #x09B2
2984                     (#x09B6 . #x09B9)
2985                     #x09BD
2986                     (#x09BE . #x09C0)
2987                     (#x09C1 . #x09C4)
2988                     (#x09C7 . #x09C8)
2989                     (#x09CB . #x09CC)
2990                     #x09CE
2991                     #x09D7
2992                     (#x09DC . #x09DD)
2993                     (#x09DF . #x09E1)
2994                     (#x09E2 . #x09E3)
2995                     (#x09F0 . #x09F1)
2996                     (#x0A01 . #x0A02)
2997                     #x0A03
2998                     (#x0A05 . #x0A0A)
2999                     (#x0A0F . #x0A10)
3000                     (#x0A13 . #x0A28)
3001                     (#x0A2A . #x0A30)
3002                     (#x0A32 . #x0A33)
3003                     (#x0A35 . #x0A36)
3004                     (#x0A38 . #x0A39)
3005                     (#x0A3E . #x0A40)
3006                     (#x0A41 . #x0A42)
3007                     (#x0A47 . #x0A48)
3008                     (#x0A4B . #x0A4C)
3009                     #x0A51
3010                     (#x0A59 . #x0A5C)
3011                     #x0A5E
3012                     (#x0A70 . #x0A71)
3013                     (#x0A72 . #x0A74)
3014                     #x0A75
3015                     (#x0A81 . #x0A82)
3016                     #x0A83
3017                     (#x0A85 . #x0A8D)
3018                     (#x0A8F . #x0A91)
3019                     (#x0A93 . #x0AA8)
3020                     (#x0AAA . #x0AB0)
3021                     (#x0AB2 . #x0AB3)
3022                     (#x0AB5 . #x0AB9)
3023                     #x0ABD
3024                     (#x0ABE . #x0AC0)
3025                     (#x0AC1 . #x0AC5)
3026                     (#x0AC7 . #x0AC8)
3027                     #x0AC9
3028                     (#x0ACB . #x0ACC)
3029                     #x0AD0
3030                     (#x0AE0 . #x0AE1)
3031                     (#x0AE2 . #x0AE3)
3032                     #x0B01
3033                     (#x0B02 . #x0B03)
3034                     (#x0B05 . #x0B0C)
3035                     (#x0B0F . #x0B10)
3036                     (#x0B13 . #x0B28)
3037                     (#x0B2A . #x0B30)
3038                     (#x0B32 . #x0B33)
3039                     (#x0B35 . #x0B39)
3040                     #x0B3D
3041                     #x0B3E
3042                     #x0B3F
3043                     #x0B40
3044                     (#x0B41 . #x0B44)
3045                     (#x0B47 . #x0B48)
3046                     (#x0B4B . #x0B4C)
3047                     #x0B56
3048                     #x0B57
3049                     (#x0B5C . #x0B5D)
3050                     (#x0B5F . #x0B61)
3051                     (#x0B62 . #x0B63)
3052                     #x0B71
3053                     #x0B82
3054                     #x0B83
3055                     (#x0B85 . #x0B8A)
3056                     (#x0B8E . #x0B90)
3057                     (#x0B92 . #x0B95)
3058                     (#x0B99 . #x0B9A)
3059                     #x0B9C
3060                     (#x0B9E . #x0B9F)
3061                     (#x0BA3 . #x0BA4)
3062                     (#x0BA8 . #x0BAA)
3063                     (#x0BAE . #x0BB9)
3064                     (#x0BBE . #x0BBF)
3065                     #x0BC0
3066                     (#x0BC1 . #x0BC2)
3067                     (#x0BC6 . #x0BC8)
3068                     (#x0BCA . #x0BCC)
3069                     #x0BD0
3070                     #x0BD7
3071                     (#x0C01 . #x0C03)
3072                     (#x0C05 . #x0C0C)
3073                     (#x0C0E . #x0C10)
3074                     (#x0C12 . #x0C28)
3075                     (#x0C2A . #x0C33)
3076                     (#x0C35 . #x0C39)
3077                     #x0C3D
3078                     (#x0C3E . #x0C40)
3079                     (#x0C41 . #x0C44)
3080                     (#x0C46 . #x0C48)
3081                     (#x0C4A . #x0C4C)
3082                     (#x0C55 . #x0C56)
3083                     (#x0C58 . #x0C59)
3084                     (#x0C60 . #x0C61)
3085                     (#x0C62 . #x0C63)
3086                     (#x0C82 . #x0C83)
3087                     (#x0C85 . #x0C8C)
3088                     (#x0C8E . #x0C90)
3089                     (#x0C92 . #x0CA8)
3090                     (#x0CAA . #x0CB3)
3091                     (#x0CB5 . #x0CB9)
3092                     #x0CBD
3093                     #x0CBE
3094                     #x0CBF
3095                     (#x0CC0 . #x0CC4)
3096                     #x0CC6
3097                     (#x0CC7 . #x0CC8)
3098                     (#x0CCA . #x0CCB)
3099                     #x0CCC
3100                     (#x0CD5 . #x0CD6)
3101                     #x0CDE
3102                     (#x0CE0 . #x0CE1)
3103                     (#x0CE2 . #x0CE3)
3104                     (#x0D02 . #x0D03)
3105                     (#x0D05 . #x0D0C)
3106                     (#x0D0E . #x0D10)
3107                     (#x0D12 . #x0D28)
3108                     (#x0D2A . #x0D39)
3109                     #x0D3D
3110                     (#x0D3E . #x0D40)
3111                     (#x0D41 . #x0D44)
3112                     (#x0D46 . #x0D48)
3113                     (#x0D4A . #x0D4C)
3114                     #x0D57
3115                     (#x0D60 . #x0D61)
3116                     (#x0D62 . #x0D63)
3117                     (#x0D7A . #x0D7F)
3118                     (#x0D82 . #x0D83)
3119                     (#x0D85 . #x0D96)
3120                     (#x0D9A . #x0DB1)
3121                     (#x0DB3 . #x0DBB)
3122                     #x0DBD
3123                     (#x0DC0 . #x0DC6)
3124                     (#x0DCF . #x0DD1)
3125                     (#x0DD2 . #x0DD4)
3126                     #x0DD6
3127                     (#x0DD8 . #x0DDF)
3128                     (#x0DF2 . #x0DF3)
3129                     (#x0E01 . #x0E30)
3130                     #x0E31
3131                     (#x0E32 . #x0E33)
3132                     (#x0E34 . #x0E3A)
3133                     (#x0E40 . #x0E45)
3134                     #x0E46
3135                     #x0E4D
3136                     (#x0E81 . #x0E82)
3137                     #x0E84
3138                     (#x0E87 . #x0E88)
3139                     #x0E8A
3140                     #x0E8D
3141                     (#x0E94 . #x0E97)
3142                     (#x0E99 . #x0E9F)
3143                     (#x0EA1 . #x0EA3)
3144                     #x0EA5
3145                     #x0EA7
3146                     (#x0EAA . #x0EAB)
3147                     (#x0EAD . #x0EB0)
3148                     #x0EB1
3149                     (#x0EB2 . #x0EB3)
3150                     (#x0EB4 . #x0EB9)
3151                     (#x0EBB . #x0EBC)
3152                     #x0EBD
3153                     (#x0EC0 . #x0EC4)
3154                     #x0EC6
3155                     #x0ECD
3156                     (#x0EDC . #x0EDD)
3157                     #x0F00
3158                     (#x0F40 . #x0F47)
3159                     (#x0F49 . #x0F6C)
3160                     (#x0F71 . #x0F7E)
3161                     #x0F7F
3162                     (#x0F80 . #x0F81)
3163                     (#x0F88 . #x0F8B)
3164                     (#x0F90 . #x0F97)
3165                     (#x0F99 . #x0FBC)
3166                     (#x1000 . #x102A)
3167                     (#x102B . #x102C)
3168                     (#x102D . #x1030)
3169                     #x1031
3170                     (#x1032 . #x1036)
3171                     #x1038
3172                     (#x103B . #x103C)
3173                     (#x103D . #x103E)
3174                     #x103F
3175                     (#x1050 . #x1055)
3176                     (#x1056 . #x1057)
3177                     (#x1058 . #x1059)
3178                     (#x105A . #x105D)
3179                     (#x105E . #x1060)
3180                     #x1061
3181                     #x1062
3182                     (#x1065 . #x1066)
3183                     (#x1067 . #x1068)
3184                     (#x106E . #x1070)
3185                     (#x1071 . #x1074)
3186                     (#x1075 . #x1081)
3187                     #x1082
3188                     (#x1083 . #x1084)
3189                     (#x1085 . #x1086)
3190                     #x108E
3191                     (#x10A0 . #x10C5)
3192                     (#x10D0 . #x10FA)
3193                     #x10FC
3194                     (#x1100 . #x1159)
3195                     (#x115F . #x11A2)
3196                     (#x11A8 . #x11F9)
3197                     (#x1200 . #x1248)
3198                     (#x124A . #x124D)
3199                     (#x1250 . #x1256)
3200                     #x1258
3201                     (#x125A . #x125D)
3202                     (#x1260 . #x1288)
3203                     (#x128A . #x128D)
3204                     (#x1290 . #x12B0)
3205                     (#x12B2 . #x12B5)
3206                     (#x12B8 . #x12BE)
3207                     #x12C0
3208                     (#x12C2 . #x12C5)
3209                     (#x12C8 . #x12D6)
3210                     (#x12D8 . #x1310)
3211                     (#x1312 . #x1315)
3212                     (#x1318 . #x135A)
3213                     #x135F
3214                     (#x1380 . #x138F)
3215                     (#x13A0 . #x13F4)
3216                     (#x1401 . #x166C)
3217                     (#x166F . #x1676)
3218                     (#x1681 . #x169A)
3219                     (#x16A0 . #x16EA)
3220                     (#x16EE . #x16F0)
3221                     (#x1700 . #x170C)
3222                     (#x170E . #x1711)
3223                     (#x1712 . #x1713)
3224                     (#x1720 . #x1731)
3225                     (#x1732 . #x1733)
3226                     (#x1740 . #x1751)
3227                     (#x1752 . #x1753)
3228                     (#x1760 . #x176C)
3229                     (#x176E . #x1770)
3230                     (#x1772 . #x1773)
3231                     (#x1780 . #x17B3)
3232                     #x17B6
3233                     (#x17B7 . #x17BD)
3234                     (#x17BE . #x17C5)
3235                     #x17C6
3236                     (#x17C7 . #x17C8)
3237                     #x17D7
3238                     #x17DC
3239                     (#x1820 . #x1842)
3240                     #x1843
3241                     (#x1844 . #x1877)
3242                     (#x1880 . #x18A8)
3243                     #x18A9
3244                     #x18AA
3245                     (#x1900 . #x191C)
3246                     (#x1920 . #x1922)
3247                     (#x1923 . #x1926)
3248                     (#x1927 . #x1928)
3249                     (#x1929 . #x192B)
3250                     (#x1930 . #x1931)
3251                     #x1932
3252                     (#x1933 . #x1938)
3253                     (#x1950 . #x196D)
3254                     (#x1970 . #x1974)
3255                     (#x1980 . #x19A9)
3256                     (#x19B0 . #x19C0)
3257                     (#x19C1 . #x19C7)
3258                     (#x19C8 . #x19C9)
3259                     (#x1A00 . #x1A16)
3260                     (#x1A17 . #x1A18)
3261                     (#x1A19 . #x1A1B)
3262                     (#x1B00 . #x1B03)
3263                     #x1B04
3264                     (#x1B05 . #x1B33)
3265                     #x1B35
3266                     (#x1B36 . #x1B3A)
3267                     #x1B3B
3268                     #x1B3C
3269                     (#x1B3D . #x1B41)
3270                     #x1B42
3271                     #x1B43
3272                     (#x1B45 . #x1B4B)
3273                     (#x1B80 . #x1B81)
3274                     #x1B82
3275                     (#x1B83 . #x1BA0)
3276                     #x1BA1
3277                     (#x1BA2 . #x1BA5)
3278                     (#x1BA6 . #x1BA7)
3279                     (#x1BA8 . #x1BA9)
3280                     (#x1BAE . #x1BAF)
3281                     (#x1C00 . #x1C23)
3282                     (#x1C24 . #x1C2B)
3283                     (#x1C2C . #x1C33)
3284                     (#x1C34 . #x1C35)
3285                     (#x1C4D . #x1C4F)
3286                     (#x1C5A . #x1C77)
3287                     (#x1C78 . #x1C7D)
3288                     (#x1D00 . #x1D2B)
3289                     (#x1D2C . #x1D61)
3290                     (#x1D62 . #x1D77)
3291                     #x1D78
3292                     (#x1D79 . #x1D9A)
3293                     (#x1D9B . #x1DBF)
3294                     (#x1E00 . #x1F15)
3295                     (#x1F18 . #x1F1D)
3296                     (#x1F20 . #x1F45)
3297                     (#x1F48 . #x1F4D)
3298                     (#x1F50 . #x1F57)
3299                     #x1F59
3300                     #x1F5B
3301                     #x1F5D
3302                     (#x1F5F . #x1F7D)
3303                     (#x1F80 . #x1FB4)
3304                     (#x1FB6 . #x1FBC)
3305                     #x1FBE
3306                     (#x1FC2 . #x1FC4)
3307                     (#x1FC6 . #x1FCC)
3308                     (#x1FD0 . #x1FD3)
3309                     (#x1FD6 . #x1FDB)
3310                     (#x1FE0 . #x1FEC)
3311                     (#x1FF2 . #x1FF4)
3312                     (#x1FF6 . #x1FFC)
3313                     #x2071
3314                     #x207F
3315                     (#x2090 . #x2094)
3316                     #x2102
3317                     #x2107
3318                     (#x210A . #x2113)
3319                     #x2115
3320                     (#x2119 . #x211D)
3321                     #x2124
3322                     #x2126
3323                     #x2128
3324                     (#x212A . #x212D)
3325                     (#x212F . #x2134)
3326                     (#x2135 . #x2138)
3327                     #x2139
3328                     (#x213C . #x213F)
3329                     (#x2145 . #x2149)
3330                     #x214E
3331                     (#x2160 . #x2182)
3332                     (#x2183 . #x2184)
3333                     (#x2185 . #x2188)
3334                     (#x24B6 . #x24E9)
3335                     (#x2C00 . #x2C2E)
3336                     (#x2C30 . #x2C5E)
3337                     (#x2C60 . #x2C6F)
3338                     (#x2C71 . #x2C7C)
3339                     #x2C7D
3340                     (#x2C80 . #x2CE4)
3341                     (#x2D00 . #x2D25)
3342                     (#x2D30 . #x2D65)
3343                     #x2D6F
3344                     (#x2D80 . #x2D96)
3345                     (#x2DA0 . #x2DA6)
3346                     (#x2DA8 . #x2DAE)
3347                     (#x2DB0 . #x2DB6)
3348                     (#x2DB8 . #x2DBE)
3349                     (#x2DC0 . #x2DC6)
3350                     (#x2DC8 . #x2DCE)
3351                     (#x2DD0 . #x2DD6)
3352                     (#x2DD8 . #x2DDE)
3353                     (#x2DE0 . #x2DFF)
3354                     #x2E2F
3355                     #x3005
3356                     #x3006
3357                     #x3007
3358                     (#x3021 . #x3029)
3359                     (#x3031 . #x3035)
3360                     (#x3038 . #x303A)
3361                     #x303B
3362                     #x303C
3363                     (#x3041 . #x3096)
3364                     (#x309D . #x309E)
3365                     #x309F
3366                     (#x30A1 . #x30FA)
3367                     (#x30FC . #x30FE)
3368                     #x30FF
3369                     (#x3105 . #x312D)
3370                     (#x3131 . #x318E)
3371                     (#x31A0 . #x31B7)
3372                     (#x31F0 . #x31FF)
3373                     (#x3400 . #x4DB5)
3374                     (#x4E00 . #x9FC3)
3375                     (#xA000 . #xA014)
3376                     #xA015
3377                     (#xA016 . #xA48C)
3378                     (#xA500 . #xA60B)
3379                     #xA60C
3380                     (#xA610 . #xA61F)
3381                     (#xA62A . #xA62B)
3382                     (#xA640 . #xA65F)
3383                     (#xA662 . #xA66D)
3384                     #xA66E
3385                     #xA67F
3386                     (#xA680 . #xA697)
3387                     (#xA717 . #xA71F)
3388                     (#xA722 . #xA76F)
3389                     #xA770
3390                     (#xA771 . #xA787)
3391                     #xA788
3392                     (#xA78B . #xA78C)
3393                     (#xA7FB . #xA801)
3394                     (#xA803 . #xA805)
3395                     (#xA807 . #xA80A)
3396                     (#xA80C . #xA822)
3397                     (#xA823 . #xA824)
3398                     (#xA825 . #xA826)
3399                     #xA827
3400                     (#xA840 . #xA873)
3401                     (#xA880 . #xA881)
3402                     (#xA882 . #xA8B3)
3403                     (#xA8B4 . #xA8C3)
3404                     (#xA90A . #xA925)
3405                     (#xA926 . #xA92A)
3406                     (#xA930 . #xA946)
3407                     (#xA947 . #xA951)
3408                     #xA952
3409                     (#xAA00 . #xAA28)
3410                     (#xAA29 . #xAA2E)
3411                     (#xAA2F . #xAA30)
3412                     (#xAA31 . #xAA32)
3413                     (#xAA33 . #xAA34)
3414                     (#xAA35 . #xAA36)
3415                     (#xAA40 . #xAA42)
3416                     #xAA43
3417                     (#xAA44 . #xAA4B)
3418                     #xAA4C
3419                     #xAA4D
3420                     (#xAC00 . #xD7A3)
3421                     (#xF900 . #xFA2D)
3422                     (#xFA30 . #xFA6A)
3423                     (#xFA70 . #xFAD9)
3424                     (#xFB00 . #xFB06)
3425                     (#xFB13 . #xFB17)
3426                     #xFB1D
3427                     #xFB1E
3428                     (#xFB1F . #xFB28)
3429                     (#xFB2A . #xFB36)
3430                     (#xFB38 . #xFB3C)
3431                     #xFB3E
3432                     (#xFB40 . #xFB41)
3433                     (#xFB43 . #xFB44)
3434                     (#xFB46 . #xFBB1)
3435                     (#xFBD3 . #xFD3D)
3436                     (#xFD50 . #xFD8F)
3437                     (#xFD92 . #xFDC7)
3438                     (#xFDF0 . #xFDFB)
3439                     (#xFE70 . #xFE74)
3440                     (#xFE76 . #xFEFC)
3441                     (#xFF21 . #xFF3A)
3442                     (#xFF41 . #xFF5A)
3443                     (#xFF66 . #xFF6F)
3444                     #xFF70
3445                     (#xFF71 . #xFF9D)
3446                     (#xFF9E . #xFF9F)
3447                     (#xFFA0 . #xFFBE)
3448                     (#xFFC2 . #xFFC7)
3449                     (#xFFCA . #xFFCF)
3450                     (#xFFD2 . #xFFD7)
3451                     (#xFFDA . #xFFDC)
3452                     (#x10000 . #x1000B)
3453                     (#x1000D . #x10026)
3454                     (#x10028 . #x1003A)
3455                     (#x1003C . #x1003D)
3456                     (#x1003F . #x1004D)
3457                     (#x10050 . #x1005D)
3458                     (#x10080 . #x100FA)
3459                     (#x10140 . #x10174)
3460                     (#x10280 . #x1029C)
3461                     (#x102A0 . #x102D0)
3462                     (#x10300 . #x1031E)
3463                     (#x10330 . #x10340)
3464                     #x10341
3465                     (#x10342 . #x10349)
3466                     #x1034A
3467                     (#x10380 . #x1039D)
3468                     (#x103A0 . #x103C3)
3469                     (#x103C8 . #x103CF)
3470                     (#x103D1 . #x103D5)
3471                     (#x10400 . #x1044F)
3472                     (#x10450 . #x1049D)
3473                     (#x10800 . #x10805)
3474                     #x10808
3475                     (#x1080A . #x10835)
3476                     (#x10837 . #x10838)
3477                     #x1083C
3478                     #x1083F
3479                     (#x10900 . #x10915)
3480                     (#x10920 . #x10939)
3481                     #x10A00
3482                     (#x10A01 . #x10A03)
3483                     (#x10A05 . #x10A06)
3484                     (#x10A0C . #x10A0F)
3485                     (#x10A10 . #x10A13)
3486                     (#x10A15 . #x10A17)
3487                     (#x10A19 . #x10A33)
3488                     (#x12000 . #x1236E)
3489                     (#x12400 . #x12462)
3490                     (#x1D400 . #x1D454)
3491                     (#x1D456 . #x1D49C)
3492                     (#x1D49E . #x1D49F)
3493                     #x1D4A2
3494                     (#x1D4A5 . #x1D4A6)
3495                     (#x1D4A9 . #x1D4AC)
3496                     (#x1D4AE . #x1D4B9)
3497                     #x1D4BB
3498                     (#x1D4BD . #x1D4C3)
3499                     (#x1D4C5 . #x1D505)
3500                     (#x1D507 . #x1D50A)
3501                     (#x1D50D . #x1D514)
3502                     (#x1D516 . #x1D51C)
3503                     (#x1D51E . #x1D539)
3504                     (#x1D53B . #x1D53E)
3505                     (#x1D540 . #x1D544)
3506                     #x1D546
3507                     (#x1D54A . #x1D550)
3508                     (#x1D552 . #x1D6A5)
3509                     (#x1D6A8 . #x1D6C0)
3510                     (#x1D6C2 . #x1D6DA)
3511                     (#x1D6DC . #x1D6FA)
3512                     (#x1D6FC . #x1D714)
3513                     (#x1D716 . #x1D734)
3514                     (#x1D736 . #x1D74E)
3515                     (#x1D750 . #x1D76E)
3516                     (#x1D770 . #x1D788)
3517                     (#x1D78A . #x1D7A8)
3518                     (#x1D7AA . #x1D7C2)
3519                     (#x1D7C4 . #x1D7CB)
3520                     (#x20000 . #x2A6D6)
3521                     (#x2F800 . #x2FA1D))
3522             bits)
3523      (let* ((low (if (atom range) range (car range)))
3524             (high (1+ (if (atom range) range (cdr range)))))
3525        (do* ((i low (1+ i)))
3526             ((= i high))
3527          (setf (sbit bits i) 1))))))
3528
3529
3530(defun alpha-char-p (c)
3531  "The argument must be a character object. ALPHA-CHAR-P returns T if the
3532   argument is an alphabetic character; otherwise NIL."
3533  (let* ((code (char-code c))
3534         (bits *alpha-char-bits*))
3535    (declare (type (mod #x110000) code)
3536             (simple-bit-vector bits))
3537    (and (< code (length bits))
3538         (not (eql 0 (sbit bits code))))))
3539
3540
3541;;; def-accessors type-tracking stuff.  Used by inspector
3542(defvar *def-accessor-types* nil)
3543
3544(defun add-accessor-types (types names)
3545  (dolist (type types)
3546    (let ((cell (or (assq type *def-accessor-types*)
3547                    (car (push (cons type nil) *def-accessor-types*)))))
3548      (setf (cdr cell) (if (vectorp names) names (%list-to-uvector nil names))))))
3549
3550
3551;;; Some simple explicit storage management for cons cells
3552
3553(def-standard-initial-binding *cons-pool* (%cons-pool nil))
3554
3555(defun cheap-cons (car cdr)
3556  (let* ((pool *cons-pool*)
3557         (cons (pool.data pool)))
3558    (if cons
3559      (locally (declare (type cons cons))
3560        (setf (pool.data pool) (cdr cons)
3561              (car cons) car
3562              (cdr cons) cdr)
3563        cons)
3564      (cons car cdr))))
3565
3566(defun free-cons (cons)
3567  (when (consp cons)
3568    (locally (declare (type cons cons))
3569      (setf (car cons) nil
3570            (cdr cons) nil)
3571      (let* ((pool *cons-pool*)
3572             (freelist (pool.data pool)))
3573        (setf (pool.data pool) cons
3574              (cdr cons) freelist)))))
3575
3576(defun cheap-copy-list (list)
3577  (let ((l list)
3578        res)
3579    (loop
3580      (when (atom l)
3581        (return (nreconc res l)))
3582      (setq res (cheap-cons (pop l) res)))))
3583
3584(defun cheap-list (&rest args)
3585  (declare (dynamic-extent args))
3586  (cheap-copy-list args))
3587
3588;;; Works for dotted lists
3589(defun cheap-free-list (list)
3590  (let ((l list)
3591        next-l)
3592    (loop
3593      (setq next-l (cdr l))
3594      (free-cons l)
3595      (when (atom (setq l next-l))
3596        (return)))))
3597
3598(defmacro pop-and-free (place)
3599  (setq place (require-type place 'symbol))     ; all I need for now.
3600  (let ((list (gensym))
3601        (cdr (gensym)))
3602    `(let* ((,list ,place)
3603            (,cdr (cdr ,list)))
3604       (prog1
3605         (car ,list)
3606         (setf ,place ,cdr)
3607         (free-cons ,list)))))
3608
3609;;; Support for defresource & using-resource macros
3610(defun make-resource (constructor &key destructor initializer)
3611  (%cons-resource constructor destructor initializer))
3612
3613(defun allocate-resource (resource)
3614  (setq resource (require-type resource 'resource))
3615  (with-lock-grabbed ((resource.lock resource))
3616    (let ((pool (resource.pool resource))
3617          res)
3618      (let ((data (pool.data pool)))
3619        (when data
3620          (setf res (car data)
3621                (pool.data pool) (cdr (the cons data)))
3622          (free-cons data)))
3623      (if res
3624        (let ((initializer (resource.initializer resource)))
3625          (when initializer
3626            (funcall initializer res)))
3627        (setq res (funcall (resource.constructor resource))))
3628      res)))
3629
3630(defun free-resource (resource instance)
3631  (setq resource (require-type resource 'resource))
3632  (with-lock-grabbed ((resource.lock resource))
3633    (let ((pool (resource.pool resource))
3634          (destructor (resource.destructor resource)))
3635      (when destructor
3636        (funcall destructor instance))
3637      (setf (pool.data pool)
3638            (cheap-cons instance (pool.data pool)))))
3639  resource)
3640
3641(defun valid-char-code-p (code)
3642  (and (typep code 'fixnum)
3643       (locally (declare (fixnum code))
3644         (and 
3645          (>= code 0)
3646          (< code #x110000)
3647          (or (< code #xfffe)
3648              (> code #xffff))
3649          (or (< code #xd800)
3650              (> code #xdfff))))))
3651
3652
3653(defpackage #.(ftd-interface-package-name
3654               (backend-target-foreign-type-data *target-backend*))
3655  (:nicknames "OS")
3656  (:use "COMMON-LISP"))
3657
3658
3659
3660
3661
3662
Note: See TracBrowser for help on using the repository browser.