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

Last change on this file was 16802, checked in by svspire, 3 years ago

Add *print-string-length* control for tracing, backtracing, and errors.
Fixes ticket:1390 in trunk.

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