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

Last change on this file since 12300 was 12300, checked in by gz, 10 years ago

Code coverage support

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