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

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

Improve CL:RANDOM.

The new generator is the MRG321k3p generator described in

  1. L'Ecuyer and R. Touzin, "Fast Combined Multiple Recursive

Generators with Multipliers of the form a = +/- 2d +/- 2e"",
Proceedings of the 2000 Winter Simulation Conference, Dec. 2000,
683--689.

It has a period of about 2185 and produces output of much higher
statistical quality than the previous generator.

Performance of the new generator should generally be comparable to that
of the old generator, despite the fact that the new generator does
a lot more work.

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