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

Last change on this file since 15109 was 14790, checked in by rme, 8 years ago

Get rid of a pair of (apparently) pointless top-level progns wrapping
the implementation of reverse and nreverse.

(Yes, I suppose this falls into the pointlessly obsessive tidying
category.)

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