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

Last change on this file since 12371 was 12371, checked in by rme, 10 years ago

Purge extended-string, simple-extended-string.

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