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

Last change on this file since 10372 was 10372, checked in by gb, 11 years ago

Do Unicode case-folding in linear time; make the image a few 100KB (of readonly
ivectors) bigger in the process.

This is a little tricky to bootstrap, and needs some compiler macros to make it
more viable.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 106.1 KB
Line 
1;;;-*-Mode: LISP; Package: CCL -*-
2;;;
3;;;   Copyright (C) 1994-2001 Digitool, Inc
4;;;   This file is part of OpenMCL. 
5;;;
6;;;   OpenMCL is licensed under the terms of the Lisp Lesser GNU Public
7;;;   License , known as the LLGPL and distributed with OpenMCL as the
8;;;   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
9;;;   which is distributed with OpenMCL as the file "LGPL".  Where these
10;;;   conflict, the preamble takes precedence. 
11;;;
12;;;   OpenMCL is referenced in the preamble as the "LIBRARY."
13;;;
14;;;   The LLGPL is also available online at
15;;;   http://opensource.franz.com/preamble.html
16
17;; L1-aprims.lisp
18
19
20(in-package "CCL")
21
22
23(let* ((standard-initial-bindings ())
24       (standard-initial-bindings-lock (make-read-write-lock)))
25
26  (defun standard-initial-bindings ()
27    (with-read-lock (standard-initial-bindings-lock)
28      (copy-list standard-initial-bindings)))
29
30  (defun define-standard-initial-binding (symbol initform)
31    (setq symbol (require-type symbol 'symbol))
32    (%proclaim-special symbol)
33    (unless (boundp symbol)
34      (set symbol (funcall initform)))
35    (with-write-lock (standard-initial-bindings-lock)
36      (let* ((pair (assoc symbol standard-initial-bindings)))
37        (if pair
38          (setf (cdr pair) initform)
39          (push (cons symbol initform) standard-initial-bindings))))
40    (record-source-file symbol 'variable)
41    symbol))
42
43(def-standard-initial-binding *package*)
44(def-standard-initial-binding *gensym-counter* 0)
45(def-standard-initial-binding *random-state* (initialize-random-state #xFBF1 9))
46#+lock-accounting
47(progn
48(def-standard-initial-binding *locks-held* ())
49(def-standard-initial-binding *locks-pending* ())
50(def-standard-initial-binding *lock-conses* (make-list 20)))
51(def-standard-initial-binding *whostate* "Reset")
52(setq *whostate* "Reset")
53(def-standard-initial-binding *error-print-length* 20)
54(def-standard-initial-binding *error-print-level* 8)
55
56(defun %badarg (arg type)
57  (%err-disp $XWRONGTYPE arg type))
58
59(defun atom (arg)
60  "Return true if OBJECT is an ATOM, and NIL otherwise."
61  (not (consp arg)))
62
63(defun list (&rest args)
64  "Return constructs and returns a list of its arguments."
65  args)
66
67(%fhave '%temp-list #'list)
68
69(defun list* (arg &rest others)
70  "Return a list of the arguments with last cons a dotted pair"
71  (cond ((null others) arg)
72        ((null (cdr others)) (cons arg (car others)))
73        (t (do ((x others (cdr x)))
74               ((null (cddr x)) (rplacd x (cadr x))))
75           (cons arg others))))
76
77
78
79(defun funcall (fn &rest args)
80  "Call FUNCTION with the given ARGUMENTS."
81  (declare (dynamic-extent args))
82  (apply fn args))
83
84
85(defun apply (function arg &rest args)
86  "Apply FUNCTION to a list of arguments produced by evaluating ARGUMENTS in
87   the manner of LIST*. That is, a list is made of the values of all but the
88   last argument, appended to the value of the last argument, which must be a
89   list."
90  (declare (dynamic-extent args))
91  (cond ((null args)
92         (apply function arg))
93        ((null (cdr args))
94         (apply function arg (car args)))
95        (t (do* ((a1 args a2)
96                 (a2 (cdr args) (cdr a2)))
97                ((atom (cdr a2))
98                 (rplacd a1 (car a2))
99                 (apply function arg args))))))
100
101
102;;; This is not fast, but it gets the functionality that
103;;; Wood and possibly other code depend on.
104(defun applyv (function arg &rest other-args)
105  (declare (dynamic-extent other-args))
106  (let* ((other-args (cons arg other-args))
107         (last-arg (car (last other-args)))
108         (last-arg-length (length last-arg))
109         (butlast-args (nbutlast other-args))
110         (rest-args (make-list last-arg-length))
111         (rest-args-tail rest-args))
112    (declare (dynamic-extent other-args rest-args))
113    (dotimes (i last-arg-length)
114      (setf (car rest-args-tail) (aref last-arg i))
115      (pop rest-args-tail))
116    (apply function (nconc butlast-args rest-args))))
117
118;;; This is slow, and since %apply-lexpr isn't documented either,
119;;; nothing in the world should depend on it.  This is just being
120;;; anal retentive.  VERY anal retentive.
121
122(defun %apply-lexpr (function arg &rest args)
123  (cond ((null args) (%apply-lexpr function arg))
124        (t (apply function arg (nconc (nbutlast args)
125                                      (collect-lexpr-args (car (last args)) 0))))))
126
127
128(defun values-list (arg)
129  "Return all of the elements of LIST, in order, as values."
130  (apply #'values arg))
131
132
133
134
135
136
137; copy-list
138
139(defun copy-list (list)
140  "Return a new list which is EQUAL to LIST."
141  (if list
142    (let ((result (cons (car list) '()) ))
143      (do ((x (cdr list) (cdr x))
144           (splice result
145                   (%cdr (%rplacd splice (cons (%car x) '() ))) ))
146          ((atom x) (unless (null x)
147                      (%rplacd splice x)) result)))))
148
149(defun alt-list-length (l)
150  "Detect (and complain about) cirucular lists; allow any atom to
151terminate the list"
152  (do* ((n 0 (1+ n))
153        (fast l)
154        (slow l))
155       ((atom fast) n)
156    (declare (fixnum n))
157    (setq fast (cdr fast))
158    (if (logbitp 0 n)
159      (if (eq (setq slow (cdr slow)) fast)
160        (%err-disp $XIMPROPERLIST l)))))
161
162
163(defun last (list &optional (n 1))
164  "Return the last N conses (not the last element!) of a list."
165  (if (and (typep n 'fixnum)
166           (>= (the fixnum n) 0))
167    (locally (declare (fixnum n))
168      (do* ((checked-list list (cdr checked-list))
169            (returned-list list)
170            (index 0 (1+ index)))
171           ((atom checked-list) returned-list)
172        (declare (type index index))
173        (if (>= index n)
174          (pop returned-list))))
175    (if (and (typep n 'bignum)
176             (> n 0))
177      (require-type list 'list)
178      (report-bad-arg  n 'unsigned-byte))))
179
180
181
182
183
184(defun nthcdr (index list)
185  "Performs the cdr function n times on a list."
186  (setq list (require-type list 'list))
187  (if (and (typep index 'fixnum)
188           (>= (the fixnum index) 0))
189      (locally (declare (fixnum index))
190        (dotimes (i index list)
191          (when (null (setq list (cdr list))) (return))))
192      (progn
193        (unless (typep index 'unsigned-byte)
194          (report-bad-arg index 'unsigned-byte))
195        (do* ((n index (- n target::target-most-positive-fixnum)))
196             ((typep n 'fixnum) (nthcdr n list))
197          (unless (setq list (nthcdr target::target-most-positive-fixnum list))
198            (return))))))
199
200
201(defun nth (index list)
202  "Return the nth object in a list where the car is the zero-th element."
203  (car (nthcdr index list)))
204
205
206(defun nconc (&rest lists)
207  (declare (dynamic-extent lists))
208  "Concatenates the lists given as arguments (by changing them)"
209  (do* ((top lists (cdr top)))
210       ((null top) nil)
211    (let* ((top-of-top (car top)))
212      (cond
213       ((consp top-of-top)
214        (let* ((result top-of-top)
215               (splice result))
216          (do* ((elements (cdr top) (cdr elements)))
217                 ((endp elements))
218            (let ((ele (car elements)))
219              (typecase ele
220                (cons (rplacd (last splice) ele)
221                      (setf splice ele))
222                (null (rplacd (last splice) nil))
223                (atom (if (cdr elements)
224                        (report-bad-arg ele 'list)
225                        (rplacd (last splice) ele)))
226                (t (report-bad-arg ele 'list)))))
227          (return result)))
228       ((null top-of-top) nil)
229       (t
230        (if (cdr top)
231          (report-bad-arg top-of-top 'list)
232          (return top-of-top)))))))
233
234
235(defvar %setf-function-names% (make-hash-table :weak t :test 'eq))
236(defvar %setf-function-name-inverses% (make-hash-table :weak t :test 'eq))
237
238(defun setf-function-name (sym)
239   (or (gethash sym %setf-function-names%)
240       (progn
241         (let* ((setf-package-sym (construct-setf-function-name sym)))
242           (setf (gethash setf-package-sym %setf-function-name-inverses%) sym
243                 (gethash sym %setf-function-names%) setf-package-sym)))))
244
245(defun existing-setf-function-name (sym)
246  (gethash sym %setf-function-names%))
247
248(defun maybe-setf-name (sym)
249  (let* ((other (gethash sym %setf-function-name-inverses%)))
250    (if other
251      `(setf ,other)
252      sym)))
253
254                     
255
256(defconstant *setf-package* (or (find-package "SETF") (make-package "SETF" :use nil :external-size 1)))
257
258(defun construct-setf-function-name (sym)
259  (let ((pkg (symbol-package sym)))
260    (setq sym (symbol-name sym))
261    (if (null pkg)
262      (gentemp sym *setf-package*)
263      (values
264       (intern
265        ;;I wonder, if we didn't check, would anybody report it as a bug?
266        (if (not (%str-member #\: (setq pkg (package-name pkg))))
267          (%str-cat pkg "::" sym)
268          (%str-cat (prin1-to-string pkg) "::" (princ-to-string sym)))
269        *setf-package*)))))
270
271(defun setf-function-name-p (name)
272  (and (consp name)
273             (consp (%cdr name))
274             (null (%cddr name))
275             (symbolp (%cadr name))
276             (eq (car name) 'setf)))
277
278(defun valid-function-name-p (name)
279  (if (symbolp name)                    ; Nil is a valid function name.  I guess.
280    (values t name)
281    (if (setf-function-name-p name)
282      (values t (setf-function-name (%cadr name)))
283      ; What other kinds of function names do we care to support ?
284      (values nil nil))))
285
286;;; Why isn't this somewhere else ?
287(defun ensure-valid-function-name (name)
288  (multiple-value-bind (valid-p nm) (valid-function-name-p name)
289    (if valid-p nm (error "Invalid function name ~s." name))))
290
291
292;;; Returns index if char appears in string, else nil.
293
294(defun %str-member (char string &optional start end)
295  (let* ((base-string-p (typep string 'simple-base-string)))
296    (unless base-string-p
297      (setq string (require-type string 'simple-string)))
298    (unless (characterp char)
299      (setq char (require-type char 'character)))
300    (do* ((i (or start 0) (1+ i))
301            (n (or end (uvsize string))))
302           ((= i n))
303        (declare (fixnum i n) (optimize (speed 3) (safety 0)))
304        (if (eq (schar (the simple-base-string string) i) char)
305          (return i)))))
306
307
308
309;;; Returns index of elt in vector, or nil if it's not there.
310(defun %vector-member (elt vector)
311  (unless (typep vector 'simple-vector)
312    (report-bad-arg vector 'simple-vector))
313  (dotimes (i (the fixnum (length vector)))
314    (when (eq elt (%svref vector i)) (return i))))
315
316(defun logical-pathname-p (thing) (istruct-typep thing 'logical-pathname))
317
318(progn
319;;; It's back ...
320(defun list-nreverse (list)
321  (nreconc list nil))
322
323;;; We probably want to make this smarter so that less boxing
324;;; (and bignum/double-float consing!) takes place.
325
326(defun vector-nreverse (v)
327  (let* ((len (length v))
328         (middle (ash (the fixnum len) -1)))
329    (declare (fixnum middle len))
330    (do* ((left 0 (1+ left))
331          (right (1- len) (1- right)))
332         ((= left middle) v)
333      (declare (fixnum left right))
334      (rotatef (aref v left) (aref v right)))))
335   
336(defun nreverse (seq)
337  "Return a sequence of the same elements in reverse order; the argument
338   is destroyed."
339  (when seq
340    (seq-dispatch seq
341                  (list-nreverse seq)
342                  (vector-nreverse seq)))))
343
344(defun nreconc (x y)
345  "Return (NCONC (NREVERSE X) Y)."
346  (do ((1st (cdr x) (if (endp 1st) 1st (cdr 1st)))
347       (2nd x 1st)              ;2nd follows first down the list.
348       (3rd y 2nd))             ;3rd follows 2nd down the list.
349      ((atom 2nd) 3rd)
350    (rplacd 2nd 3rd)))
351
352;;; The two-arg case is maybe a bit faster.  We -don't- want to
353;;; do the two-arg case repeatedly to implement the N-arg case.
354(defun append (&rest lists)
355  (declare (dynamic-extent lists))
356  "Construct a new list by concatenating the list arguments"
357  (if lists
358    (let* ((head (cons nil nil))
359           (tail head))
360      (declare (dynamic-extent head)
361               (cons head tail))
362      (do* ()
363           ((null lists) (cdr head))
364        (let* ((list (pop lists)))
365          (if (null lists)
366            (rplacd tail list)
367            (dolist (element list)
368                (setq tail (cdr (rplacd tail (cons element nil)))))))))))
369
370
371
372                     
373
374
375
376
377
378
379
380(progn
381(defun list-reverse (l)
382  (do* ((new ()))
383       ((null l) new)
384    (push (pop l) new)))
385
386; Again, it's worth putting more work into this when the dust settles.
387(defun vector-reverse (v)
388  (let* ((len (length v))
389         (new (make-array (the fixnum len) :element-type (array-element-type v))))   ; a LOT more work ...
390    (declare (fixnum len))
391    (do* ((left 0 (1+ left))
392          (right (1- len) (1- right)))
393         ((= left len) new)
394      (declare (fixnum left right))
395      (setf (uvref new left)
396            (aref v right)))))
397
398(defun reverse (seq)
399  "Return a new sequence containing the same elements but in reverse order."
400  (seq-dispatch seq (list-reverse seq) (vector-reverse seq)))
401)
402
403
404(defun check-sequence-bounds (seq start end)
405  (flet ((bad-sequence-interval (seq start end)
406           (unless (typep start 'unsigned-byte)
407             (report-bad-arg start 'unsigned-byte))
408           (if (and end (not (typep end 'unsigned-byte)))
409             (report-bad-arg end '(or null unsigned-byte)))
410           (error "Bad interval for sequence operation on ~s : start = ~s, end = ~s" seq start end)))
411  (let* ((length (length seq)))
412    (declare (fixnum length))
413    (if (and (typep start 'fixnum)
414             (<= 0 (the fixnum start))
415             (if (null end)
416               (<= (the fixnum start) (the fixnum (setq end length)))
417               (and (typep end 'fixnum)
418                    (<= (the fixnum start) (the fixnum end))
419                    (<= (the fixnum end) (the fixnum length)))))
420
421      end
422      (bad-sequence-interval seq start end)))))
423
424 
425
426(defun byte-length (string &optional  (start 0) end)
427  (setq end (check-sequence-bounds string start end))
428  (- end start))
429
430
431
432(defun make-cstring (string)
433  (let* ((len (length string)))
434    (declare (fixnum len))
435    (let* ((s (malloc (the fixnum (1+ len)))))
436      (setf (%get-byte s len) 0)
437      (multiple-value-bind (data offset) (array-data-and-offset string)
438        (dotimes (i len s)
439          (setf (%get-unsigned-byte s i) (%scharcode data (+ offset i))))
440        s))))
441
442
443(defun extended-string-p (thing)
444  (declare (ignore thing)))
445
446(defun simple-extended-string-p (thing)
447  (declare (ignore thing)))
448
449
450
451(defun move-string-bytes (source dest off1 off2 n)
452  (declare (fixnum off1 off2 n)
453           (simple-base-string source dest)
454           (optimize (speed 3) (safety 0)))
455  (dotimes (i n dest)
456    (setf (schar dest off2) (schar source off1))
457    (incf off1)
458    (incf off2)))
459
460
461(defun %str-cat (s1 s2 &rest more)
462  (declare (dynamic-extent more))
463  (require-type s1 'simple-string)
464  (require-type s2 'simple-string)
465  (let* ((len1 (length s1))
466         (len2 (length s2))
467         (len (%i+ len2 len1)))
468    (declare (optimize (speed 3)(safety 0)))
469    (dolist (s more)
470      (require-type s 'simple-string)
471      (setq len (+ len (length s))))
472    (let ((new-string (make-string len :element-type 'base-char)))
473      (move-string-bytes s1 new-string 0 0 len1)
474      (move-string-bytes s2 new-string 0 len1 len2)
475      (dolist (s more)
476        (setq len2 (%i+ len1 len2))
477        (move-string-bytes s new-string 0 len2 (setq len1 (length s))))
478      new-string)))
479
480
481(defun %substr (str start end)
482  (require-type start 'fixnum)
483  (require-type end 'fixnum)
484  (require-type str 'string)
485  (let ((len (length str)))
486    (multiple-value-bind (str strb)(array-data-and-offset str)
487      (let ((newlen (%i- end start)))
488        (when (%i> end len)(error "End ~S exceeds length ~S." end len))
489        (when (%i< start 0)(error "Negative start"))
490        (let ((new (make-string newlen)))
491          (do* ((i 0 (1+ i))
492                (pos (%i+ start strb) (1+ pos)))
493               ((= i newlen) new)
494            (declare (fixnum i pos))
495            (setf (schar new i) (schar str pos))))))))
496
497
498
499;;; 3 callers
500(defun %list-to-uvector (subtype list)   ; subtype may be nil (meaning simple-vector
501  (let* ((n (length list))
502         (new (%alloc-misc n (or subtype target::subtag-simple-vector))))  ; yech
503    (dotimes (i n)
504      (declare (fixnum i))
505      (uvset new i (%car list))
506      (setq list (%cdr list)))
507    new))
508
509
510; appears to be unused
511(defun upgraded-array-element-type (type &optional env)
512  "Return the element type that will actually be used to implement an array
513   with the specifier :ELEMENT-TYPE Spec."
514  (declare (ignore env))
515  (element-subtype-type (element-type-subtype type)))
516
517(defun upgraded-complex-part-type (type &optional env)
518  (declare (ignore env))
519  (declare (ignore type))               ; Ok, ok.  So (upgraded-complex-part-type 'bogus) is 'REAL. So ?
520  'real)
521
522
523#+ppc32-target
524(progn
525  (defparameter array-element-subtypes
526    #(single-float 
527      (unsigned-byte 32)
528      (signed-byte 32)
529      fixnum
530      base-char                         ;ucs4
531      (unsigned-byte 8)
532      (signed-byte 8)
533      base-char
534      (unsigned-byte 16)
535      (signed-byte 16)
536      double-float
537      bit))
538 
539  ;; given uvector subtype - what is the corresponding element-type
540  (defun element-subtype-type (subtype)
541    (declare (fixnum subtype))
542    (if  (= subtype ppc32::subtag-simple-vector) t
543        (svref array-element-subtypes 
544               (ash (- subtype ppc32::min-cl-ivector-subtag) (- ppc32::ntagbits)))))
545  )
546
547#+x8632-target
548(progn
549  (defparameter array-element-subtypes
550    #(single-float 
551      (unsigned-byte 32)
552      (signed-byte 32)
553      fixnum
554      base-char                         ;ucs4
555      (unsigned-byte 8)
556      (signed-byte 8)
557      base-char
558      (unsigned-byte 16)
559      (signed-byte 16)
560      double-float
561      bit))
562 
563  ;; given uvector subtype - what is the corresponding element-type
564  (defun element-subtype-type (subtype)
565    (declare (fixnum subtype))
566    (if  (= subtype x8632::subtag-simple-vector) t
567        (svref array-element-subtypes 
568               (ash (- subtype x8632::min-cl-ivector-subtag) (- x8632::ntagbits)))))
569  )
570
571#+ppc64-target
572(progn
573
574(defparameter array-element-subtypes
575  #(bogus
576    bogus
577    bogus
578    bogus
579    (signed-byte 8)
580    (signed-byte 16)
581    (signed-byte 32)
582    (signed-byte 64)
583    (unsigned-byte 8)
584    (unsigned-byte 16)
585    (unsigned-byte 32)
586    (unsigned-byte 64)
587    bogus
588    bogus
589    single-float
590    fixnum
591    bogus
592    bogus
593    bogus
594    double-float
595    bogus
596    bogus
597    base-char
598    bogus
599    bogus
600    bogus
601    bogus
602    bogus
603    bogus
604    bit
605    bogus
606    bogus)) 
607
608 
609  ;;; given uvector subtype - what is the corresponding element-type
610  (defun element-subtype-type (subtype)
611    (declare (fixnum subtype))
612    (if  (= subtype ppc64::subtag-simple-vector)
613      t
614      (svref array-element-subtypes 
615             (ash (- subtype 128) -2))))
616  )
617
618#+x8664-target
619(progn
620
621  ;;; 1, 8, 16-bit element types
622  (defparameter *immheader-0-array-element-types*
623    #(bogus
624      bogus
625      bogus
626      bogus
627      bogus
628      bogus
629      bogus
630      bogus
631      bogus
632      bogus
633      (signed-byte 16)
634      (unsigned-byte 16)
635      base-char
636      (signed-byte 8)
637      (unsigned-byte 8)
638      bit))
639
640  ;;; 32-bit element types
641  (defparameter *immheader-1-array-element-types*
642    #(bogus
643      bogus
644      bogus
645      bogus
646      bogus
647      bogus
648      bogus
649      bogus
650      bogus
651      bogus
652      bogus
653      bogus
654      base-char
655      (signed-byte 32)
656      (unsigned-byte 32)
657      single-float))
658
659  ;;; 64-bit element types
660  (defparameter *immheader-2-array-element-types*
661    #(bogus
662      bogus
663      bogus
664      bogus
665      bogus
666      bogus
667      bogus
668      bogus
669      bogus
670      bogus
671      bogus
672      bogus
673      fixnum
674      (signed-byte 64)
675      (unsigned-byte 64)
676      double-float)) 
677     
678 
679  (defun element-subtype-type (subtype)
680    (declare (type (unsigned-byte 8) subtype))
681    (if (= subtype x8664::subtag-simple-vector)
682      t
683      (let* ((class (ash subtype (- x8664::ntagbits)))
684             (tag (logand subtype x8664::fulltagmask)))
685        (declare (type (unsigned-byte 4) class tag))
686        (cond ((= tag x8664::fulltag-immheader-0)
687               (%svref *immheader-0-array-element-types* class))
688              ((= tag x8664::fulltag-immheader-1)
689               (%svref *immheader-1-array-element-types* class))
690              ((= tag x8664::fulltag-immheader-2)
691               (%svref *immheader-2-array-element-types* class))
692              (t 'bogus)))))
693  )
694
695
696;;; %make-displaced-array assumes the following
697
698(eval-when (:compile-toplevel)
699  (assert (eql target::arrayH.flags-cell target::vectorH.flags-cell))
700  (assert (eql target::arrayH.displacement-cell target::vectorH.displacement-cell))
701  (assert (eql target::arrayH.data-vector-cell target::vectorH.data-vector-cell)))
702
703
704(defun %make-displaced-array (dimensions displaced-to
705                                         &optional fill adjustable
706                                         offset explicitp)
707  (if offset 
708    (unless (and (fixnump offset) (>= (the fixnum offset) 0))
709      (setq offset (require-type offset '(and fixnum (integer 0 *)))))
710    (setq offset 0))
711  (locally (declare (fixnum offset))
712    (let* ((disp-size (array-total-size displaced-to))
713           (rank (if (listp dimensions)(length dimensions) 1))
714           (new-size (if (fixnump dimensions)
715                       dimensions
716                       (if (listp dimensions)
717                         (if (eql rank 1)
718                           (car dimensions)
719                           (if (eql rank 0) 1 ; why not 0?
720                           (apply #'* dimensions))))))
721           (vect-subtype (typecode displaced-to))
722           (target displaced-to)
723           (real-offset offset)
724           (flags 0))
725      (declare (fixnum disp-size rank flags vect-subtype real-offset))
726      (when explicitp
727        (setq flags (bitset $arh_exp_disp_bit flags)))
728      (if (not (fixnump new-size))(error "Bad array dimensions ~s." dimensions)) 
729      (locally (declare (fixnum new-size))
730        ; (when (> (+ offset new-size) disp-size) ...), but don't cons bignums
731        (when (or (> new-size disp-size)
732                  (let ((max-offset (- disp-size new-size)))
733                    (declare (fixnum max-offset))
734                    (> offset max-offset)))
735          (%err-disp $err-disp-size displaced-to))
736        (if adjustable  (setq flags (bitset $arh_adjp_bit flags)))
737        (when fill
738          (if (eq fill t)
739            (setq fill new-size)
740            (unless (and (eql rank 1)
741                         (fixnump fill)
742                         (locally (declare (fixnum fill))
743                           (and (>= fill 0) (<= fill new-size))))
744              (error "Bad fill pointer ~s" fill)))
745          (setq flags (bitset $arh_fill_bit flags))))
746      ; If displaced-to is an array or vector header and is either
747      ; adjustable or its target is a header, then we need to set the
748      ; $arh_disp_bit. If displaced-to is not adjustable, then our
749      ; target can be its target instead of itself.
750      (when (or (eql vect-subtype target::subtag-arrayH)
751                (eql vect-subtype target::subtag-vectorH))
752        (let ((dflags (%svref displaced-to target::arrayH.flags-cell)))
753          (declare (fixnum dflags))
754          (when (or (logbitp $arh_adjp_bit dflags)
755                    t
756                    (progn
757                      #+nope
758                      (setq target (%svref displaced-to target::arrayH.data-vector-cell)
759                            real-offset (+ offset (%svref displaced-to target::arrayH.displacement-cell)))
760                      (logbitp $arh_disp_bit dflags)
761                      #-nope t))
762            (setq flags (bitset $arh_disp_bit flags))))
763        (setq vect-subtype (%array-header-subtype displaced-to)))
764      ; assumes flags is low byte
765      (setq flags (dpb vect-subtype target::arrayH.flags-cell-subtag-byte flags))
766      (if (eq rank 1)
767        (%gvector target::subtag-vectorH 
768                      (if (fixnump fill) fill new-size)
769                      new-size
770                      target
771                      real-offset
772                      flags)
773        (let ((val (%alloc-misc (+ target::arrayh.dim0-cell rank) target::subtag-arrayH)))
774          (setf (%svref val target::arrayH.rank-cell) rank)
775          (setf (%svref val target::arrayH.physsize-cell) new-size)
776          (setf (%svref val target::arrayH.data-vector-cell) target)
777          (setf (%svref val target::arrayH.displacement-cell) real-offset)
778          (setf (%svref val target::arrayH.flags-cell) flags)
779          (do* ((dims dimensions (cdr dims))
780                (i 0 (1+ i)))             
781               ((null dims))
782            (declare (fixnum i)(list dims))
783            (setf (%svref val (%i+ target::arrayH.dim0-cell i)) (car dims)))
784          val)))))
785
786(defun make-array (dims &key (element-type t element-type-p)
787                        displaced-to
788                        displaced-index-offset
789                        adjustable
790                        fill-pointer
791                        (initial-element nil initial-element-p)
792                        (initial-contents nil initial-contents-p))
793  (when (and initial-element-p initial-contents-p)
794        (error "Cannot specify both ~S and ~S" :initial-element-p :initial-contents-p))
795  (make-array-1 dims element-type element-type-p
796                displaced-to
797                displaced-index-offset
798                adjustable
799                fill-pointer
800                initial-element initial-element-p
801                initial-contents initial-contents-p
802                nil))
803
804
805
806
807
808(defun vector-pop (vector)
809  "Decrease the fill pointer by 1 and return the element pointed to by the
810  new fill pointer."
811  (let* ((fill (fill-pointer vector)))
812    (declare (fixnum fill))
813    (if (zerop fill)
814      (error "Fill pointer of ~S is 0 ." vector)
815      (progn
816        (decf fill)
817        (%set-fill-pointer vector fill)
818        (aref vector fill)))))
819
820
821
822
823(defun elt (sequence idx)
824  "Return the element of SEQUENCE specified by INDEX."
825  (seq-dispatch
826   sequence
827   (let* ((cell (nthcdr idx sequence)))
828     (if (consp cell)
829       (car (the cons cell))
830       (if cell
831         (report-bad-arg sequence '(satisfies proper-list-p))
832         (%err-disp $XACCESSNTH idx sequence))))
833       
834   (progn
835     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
836       (report-bad-arg idx 'unsigned-byte))
837     (locally 
838       (if (>= idx (length sequence))
839         (%err-disp $XACCESSNTH idx sequence)
840         (aref sequence idx))))))
841
842
843
844
845(defun set-elt (sequence idx value)
846  (seq-dispatch
847   sequence
848   (let* ((cell (nthcdr idx sequence)))
849     (if (consp cell)
850       (setf (car (the cons cell)) value)
851       (if cell
852         (report-bad-arg sequence '(satisfies proper-list-p))
853         (%err-disp $XACCESSNTH idx sequence))))
854   (progn
855     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
856       (report-bad-arg idx 'unsigned-byte))
857     (locally 
858       (declare (fixnum idx))
859       (if (>= idx (length sequence))
860         (%err-disp $XACCESSNTH idx sequence)
861         (setf (aref sequence idx) value))))))
862
863
864
865
866(%fhave 'equalp #'equal)                ; bootstrapping
867
868(defun copy-tree (tree)
869  "Recursively copy trees of conses."
870  (if (atom tree)
871    tree
872    (locally (declare (type cons tree))
873      (do* ((tail (cdr tree) (cdr tail))
874            (result (cons (copy-tree (car tree)) nil))
875            (ptr result (cdr ptr)))
876           ((atom tail)
877            (setf (cdr ptr) tail)
878            result)
879        (declare (type cons ptr result))
880        (locally 
881          (declare (type cons tail))
882          (setf (cdr ptr) (cons (copy-tree (car tail)) nil)))))))
883
884
885
886
887(defvar *periodic-task-interval* 0.3)
888(defvar *periodic-task-seconds* 0)
889(defvar *periodic-task-nanoseconds* 300000000)
890
891(defun set-periodic-task-interval (n)
892  (multiple-value-setq (*periodic-task-seconds* *periodic-task-nanoseconds*)
893    (nanoseconds n))
894  (setq *periodic-task-interval* n))
895
896(defun periodic-task-interval ()
897  *periodic-task-interval*)
898
899
900
901(defun char-downcase (c)
902  "Return CHAR converted to lower-case if that is possible."
903  (declare (optimize (speed 3))) ; open-code the %CHAR-CODE-DOWNCASE here.
904  (code-char (the valid-char-code (%char-code-downcase (char-code c)))))
905
906
907
908(defun digit-char-p (char &optional radix)
909  "If char is a digit in the specified radix, returns the fixnum for
910  which that digit stands, else returns NIL."
911  (let* ((code (char-code char))
912         (r (if radix (if (and (typep radix 'fixnum)
913                               (%i>= radix 2)
914                               (%i<= radix 36))
915                        radix
916                        (%validate-radix radix)) 10))
917         (weight (if (and (<= code (char-code #\9))
918                          (>= code (char-code #\0)))
919                   (the fixnum (- code (char-code #\0)))
920                   (if (and (<= code (char-code #\Z))
921                            (>= code (char-code #\A)))
922                     (the fixnum (+ 10 (the fixnum (- code (char-code #\A)))))
923                   (if (and (<= code (char-code #\z))
924                            (>= code (char-code #\a)))
925                     (the fixnum (+ 10 (the fixnum (- code (char-code #\a))))))))))
926    (declare (fixnum code r))
927    (and weight (< (the fixnum weight) r) weight)))
928
929
930
931
932
933
934
935(defun string-start-end (string start end)
936  (setq string (string string))
937  (let ((len (length (the string string))))
938    (flet ((are (a i)(error "Array index ~S out of bounds for ~S." i a)))   
939      (if (and end (> end len))(are string end))
940      (if (and start (or (< start 0)(> start len)))(are string start))
941      (setq start (or start 0) end (or end len))
942      (if (%i> start end)
943        (error "Start ~S exceeds end ~S." start end))
944      (if (typep string 'simple-string)
945        (values string start end)
946        (multiple-value-bind (str off)(array-data-and-offset string)
947          (values str (%i+ off start)(%i+ off end)))))))
948
949(defun get-properties (place indicator-list)
950  "Like GETF, except that INDICATOR-LIST is a list of indicators which will
951  be looked for in the property list stored in PLACE. Three values are
952  returned, see manual for details."
953  (do ((plist place (cddr plist)))
954      ((null plist) (values nil nil nil))
955    (cond ((atom (cdr plist))
956           (report-bad-arg place '(satisfies proper-list-p)))
957          ((memq (car plist) indicator-list) ;memq defined in kernel
958           (return (values (car plist) (cadr plist) plist))))))
959
960(defun string= (string1 string2 &key start1 end1 start2 end2)
961  "Given two strings (string1 and string2), and optional integers start1,
962  start2, end1 and end2, compares characters in string1 to characters in
963  string2 (using char=)."
964    (locally (declare (optimize (speed 3)(safety 0)))
965      (if (and (simple-string-p string1)(null start1)(null end1))
966        (setq start1 0 end1 (length string1))
967        (multiple-value-setq (string1 start1 end1)(string-start-end string1 start1 end1)))
968      (if (and (simple-string-p string2)(null start2)(null end2))
969        (setq start2 0 end2 (length string2))
970        (multiple-value-setq (string2 start2 end2)(string-start-end string2 start2 end2)))   
971      (%simple-string= string1 string2 start1 start2 end1 end2)))
972
973
974(defun lfun-keyvect (lfun)
975  (let ((bits (lfun-bits lfun)))
976    (declare (fixnum bits))
977    (and (logbitp $lfbits-keys-bit bits)
978         (or (logbitp $lfbits-method-bit bits)
979             (and (not (logbitp $lfbits-gfn-bit bits))
980                  (not (logbitp $lfbits-cm-bit bits))))
981         (nth-immediate lfun 1))))
982
983
984
985(defun function-lambda-expression (fn)
986  "Return (VALUES DEFINING-LAMBDA-EXPRESSION CLOSURE-P NAME), where
987  DEFINING-LAMBDA-EXPRESSION is NIL if unknown, or a suitable argument
988  to COMPILE otherwise, CLOSURE-P is non-NIL if the function's definition
989  might have been enclosed in some non-null lexical environment, and
990  NAME is some name (for debugging only) or NIL if there is no name."
991  ;(declare (values def env-p name))
992  (let* ((bits (lfun-bits (setq fn (require-type fn 'function)))))
993    (declare (fixnum bits))
994    (if (logbitp $lfbits-trampoline-bit bits)
995      (function-lambda-expression (nth-immediate fn 1))
996      (values (uncompile-function fn)
997              (logbitp $lfbits-nonnullenv-bit bits)
998              (function-name fn)))))
999
1000; env must be a lexical-environment or NIL.
1001; If env contains function or variable bindings or SPECIAL declarations, return t.
1002; Else return nil
1003(defun %non-empty-environment-p (env)
1004  (loop
1005    (when (or (null env) (istruct-typep env 'definition-environment))
1006      (return nil))
1007    (when (or (consp (lexenv.variables env))
1008              (consp (lexenv.functions env))
1009              (dolist (vdecl (lexenv.vdecls env))
1010                (when (eq (cadr vdecl) 'special)
1011                  (return t))))
1012      (return t))
1013    (setq env (lexenv.parent-env env))))
1014
1015;(coerce object 'compiled-function)
1016(defun coerce-to-compiled-function (object)
1017  (setq object (coerce-to-function object))
1018  (unless (typep object 'compiled-function)
1019    (multiple-value-bind (def envp) (function-lambda-expression object)
1020      (when (or envp (null def))
1021        (%err-disp $xcoerce object 'compiled-function))
1022      (setq object (compile-user-function def nil))))
1023  object)
1024
1025
1026
1027(defun %set-toplevel (&optional (fun nil fun-p))
1028  ;(setq fun (require-type fun '(or symbol function)))
1029  (let* ((tcr (%current-tcr)))
1030    (prog1 (%tcr-toplevel-function tcr)
1031      (when fun-p
1032        (%set-tcr-toplevel-function tcr fun)))))
1033
1034
1035(defun gccounts ()
1036  (let* ((total (%get-gc-count))
1037         (full (full-gccount))
1038         (g2-count 0)
1039         (g1-count 0)
1040         (g0-count 0))
1041    (when (egc-enabled-p)
1042      (let* ((a (%active-dynamic-area)))
1043        (setq g0-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1044        (setq g1-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1045        (setq g2-count (%fixnum-ref a target::area.gc-count))))
1046    (values total full g2-count g1-count g0-count)))
1047
1048     
1049
1050
1051
1052(defstatic %pascal-functions%
1053    #(NIL NIL NIL NIL NIL NIL NIL NIL
1054      NIL NIL NIL NIL NIL NIL NIL NIL
1055      NIL NIL NIL NIL NIL NIL NIL NIL
1056      NIL NIL NIL NIL NIL NIL NIL NIL))
1057
1058
1059(defun gc-retain-pages (arg)
1060  "Try to influence the GC to retain/recycle the pages allocated between
1061GCs if arg is true, and to release them otherwise. This is generally a
1062gtradeoff between paging and other VM considerations."
1063  (setq *gc-event-status-bits*
1064        (if arg
1065          (bitset $gc-retain-pages-bit *gc-event-status-bits*)
1066          (bitclr $gc-retain-pages-bit *gc-event-status-bits*)))
1067  (not (null arg)))
1068
1069(defun gc-retaining-pages ()
1070  "Return T if the GC tries to retain pages between full GCs and NIL if
1071it's trying to release them to improve VM paging performance."
1072  (logbitp $gc-retain-pages-bit *gc-event-status-bits*)) 
1073
1074
1075(defun gc-verbose (on-full-gc &optional (egc-too on-full-gc))
1076  "If the first (required) argument is non-NIL, configures the GC to print
1077informational messages on entry and exit to each full GC; if the first argument
1078is 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."
1079  (let* ((bits *gc-event-status-bits*))
1080    (if on-full-gc
1081      (bitsetf $gc-verbose-bit bits)
1082      (bitclrf $gc-verbose-bit bits))
1083    (if egc-too
1084      (bitsetf $egc-verbose-bit bits)
1085      (bitclrf $egc-verbose-bit bits))
1086    (setq *gc-event-status-bits* bits)
1087    (values on-full-gc egc-too)))
1088
1089
1090(defun gc-verbose-p ()
1091  "Returns two values: the first is true if the GC is configured to
1092print messages on each full GC; the second is true if the GC is configured
1093to print messages on each ephemeral GC."
1094  (let* ((bits *gc-event-status-bits*))
1095    (values (logbitp $gc-verbose-bit bits)
1096            (logbitp $egc-verbose-bit bits))))
1097
1098(defun egc-active-p ()
1099  "Return T if the EGC was active at the time of the call, NIL otherwise.
1100Since this is generally a volatile piece of information, it's not clear
1101whether this function serves a useful purpose when native threads are
1102involved."
1103  (and (egc-enabled-p)
1104       (not (eql 0 (%get-kernel-global 'oldest-ephemeral)))))
1105
1106; this IS effectively a passive way of inquiring about enabled status.
1107(defun egc-enabled-p ()
1108  "Return T if the EGC was enabled at the time of the call, NIL otherwise."
1109  (not (eql 0 (%fixnum-ref (%active-dynamic-area) target::area.older))))
1110
1111(defun egc-configuration ()
1112  "Return as multiple values the sizes in kilobytes of the thresholds
1113associated with the youngest ephemeral generation, the middle ephemeral
1114generation, and the oldest ephemeral generation."
1115  (let* ((ta (%get-kernel-global 'tenured-area))
1116         (g2 (%fixnum-ref ta target::area.younger))
1117         (g1 (%fixnum-ref g2 target::area.younger))
1118         (g0 (%fixnum-ref g1 target::area.younger)))
1119    (values (ash (the fixnum (%fixnum-ref g0 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1120            (ash (the fixnum (%fixnum-ref g1 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1121            (ash (the fixnum (%fixnum-ref g2 target::area.threshold)) (- (- 10 target::fixnum-shift))))))
1122
1123
1124(defun configure-egc (e0size e1size e2size)
1125  "If the EGC is currently disabled, put the indicated threshold sizes in
1126effect and returns T, otherwise, returns NIL. (The provided threshold sizes
1127are rounded up to a multiple of 64Kbytes in OpenMCL 0.14 and to a multiple
1128of 32KBytes in earlier versions.)"
1129  (let* ((was-enabled (egc-active-p)))
1130    (unwind-protect
1131         (progn
1132           (egc nil)
1133           (setq e2size (logand (lognot #xffff) (+ #xffff (ash (require-type e2size '(unsigned-byte 18)) 10)))
1134                 e1size (logand (lognot #xffff) (+ #xffff (ash (require-type e1size '(unsigned-byte 18)) 10)))
1135                 e0size (logand (lognot #xffff) (+ #xffff (ash (require-type e0size '(integer 1 #.(ash 1 18))) 10))))
1136           (%configure-egc e0size e1size e2size))
1137      (egc was-enabled))))
1138
1139
1140
1141(defun macptr-flags (macptr)
1142  (if (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1143    0
1144    (uvref macptr TARGET::XMACPTR.FLAGS-CELL)))
1145
1146
1147; This doesn't really make the macptr be gcable (now has to be
1148; on linked list), but we might have other reasons for setting
1149; other flag bits.
1150(defun set-macptr-flags (macptr value) 
1151  (unless (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1152    (setf (%svref macptr TARGET::XMACPTR.FLAGS-CELL) value)
1153    value))
1154
1155(defun %new-gcable-ptr (size &optional clear-p)
1156  (let ((p (make-gcable-macptr $flags_DisposPtr)))
1157    (%setf-macptr p (malloc size))
1158    (if clear-p
1159      (#_bzero p size))
1160    p))
1161
1162(defun %gcable-ptr-p (p)
1163  (and (typep p 'macptr)
1164       (= (uvsize p) target::xmacptr.element-count)))
1165
1166(defstatic *upper-to-lower* nil)
1167(defstatic *lower-to-upper*  nil)
1168
1169
1170
1171;;; This alist is automatically (and not too cleverly ...) generated.
1172;;; The (upper . lower) pairs have the property that UPPER is the
1173;;; value "simple uppercase equivalent" entry for LOWER in the
1174;;; UnicodeData.txt file and LOWER is the corresponding entry for
1175;;; UPPER,
1176(let* ((mapping
1177        '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
1178                (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
1179                (#\Latin_Capital_Letter_A_With_Circumflex
1180                 . #\Latin_Small_Letter_A_With_Circumflex)
1181                (#\Latin_Capital_Letter_A_With_Tilde . #\Latin_Small_Letter_A_With_Tilde)
1182                (#\Latin_Capital_Letter_A_With_Diaeresis
1183                 . #\Latin_Small_Letter_A_With_Diaeresis)
1184                (#\Latin_Capital_Letter_A_With_Ring_Above
1185                 . #\Latin_Small_Letter_A_With_Ring_Above)
1186         
1187                (#\Latin_Capital_Letter_Ae . #\Latin_Small_Letter_Ae)
1188         
1189                (#\Latin_Capital_Letter_C_With_Cedilla . #\Latin_Small_Letter_C_With_Cedilla)
1190         
1191                (#\Latin_Capital_Letter_E_With_Grave . #\Latin_Small_Letter_E_With_Grave)
1192         
1193                (#\Latin_Capital_Letter_E_With_Acute . #\Latin_Small_Letter_E_With_Acute)
1194         
1195                (#\Latin_Capital_Letter_E_With_Circumflex
1196                 . #\Latin_Small_Letter_E_With_Circumflex)
1197         
1198                (#\Latin_Capital_Letter_E_With_Diaeresis
1199                 . #\Latin_Small_Letter_E_With_Diaeresis)
1200         
1201                (#\Latin_Capital_Letter_I_With_Grave . #\Latin_Small_Letter_I_With_Grave)
1202         
1203                (#\Latin_Capital_Letter_I_With_Acute . #\Latin_Small_Letter_I_With_Acute)
1204         
1205                (#\Latin_Capital_Letter_I_With_Circumflex
1206                 . #\Latin_Small_Letter_I_With_Circumflex)
1207         
1208                (#\Latin_Capital_Letter_I_With_Diaeresis
1209                 . #\Latin_Small_Letter_I_With_Diaeresis)
1210         
1211                (#\Latin_Capital_Letter_Eth . #\Latin_Small_Letter_Eth)
1212         
1213                (#\Latin_Capital_Letter_N_With_Tilde . #\Latin_Small_Letter_N_With_Tilde)
1214         
1215                (#\Latin_Capital_Letter_O_With_Grave . #\Latin_Small_Letter_O_With_Grave)
1216         
1217                (#\Latin_Capital_Letter_O_With_Acute . #\Latin_Small_Letter_O_With_Acute)
1218         
1219                (#\Latin_Capital_Letter_O_With_Circumflex
1220                 . #\Latin_Small_Letter_O_With_Circumflex)
1221         
1222                (#\Latin_Capital_Letter_O_With_Tilde . #\Latin_Small_Letter_O_With_Tilde)
1223         
1224                (#\Latin_Capital_Letter_O_With_Diaeresis
1225                 . #\Latin_Small_Letter_O_With_Diaeresis)
1226         
1227                (#\Latin_Capital_Letter_O_With_Stroke . #\Latin_Small_Letter_O_With_Stroke)
1228         
1229                (#\Latin_Capital_Letter_U_With_Grave . #\Latin_Small_Letter_U_With_Grave)
1230         
1231                (#\Latin_Capital_Letter_U_With_Acute . #\Latin_Small_Letter_U_With_Acute)
1232         
1233                (#\Latin_Capital_Letter_U_With_Circumflex
1234                 . #\Latin_Small_Letter_U_With_Circumflex)
1235         
1236                (#\Latin_Capital_Letter_U_With_Diaeresis
1237                 . #\Latin_Small_Letter_U_With_Diaeresis)
1238         
1239                (#\Latin_Capital_Letter_Y_With_Acute . #\Latin_Small_Letter_Y_With_Acute)
1240         
1241                (#\Latin_Capital_Letter_Thorn . #\Latin_Small_Letter_Thorn)
1242         
1243                (#\Latin_Capital_Letter_A_With_Macron . #\Latin_Small_Letter_A_With_Macron)
1244         
1245                (#\Latin_Capital_Letter_A_With_Breve . #\Latin_Small_Letter_A_With_Breve)
1246         
1247                (#\Latin_Capital_Letter_A_With_Ogonek . #\Latin_Small_Letter_A_With_Ogonek)
1248         
1249                (#\Latin_Capital_Letter_C_With_Acute . #\Latin_Small_Letter_C_With_Acute)
1250         
1251                (#\Latin_Capital_Letter_C_With_Circumflex
1252                 . #\Latin_Small_Letter_C_With_Circumflex)
1253         
1254                (#\Latin_Capital_Letter_C_With_Dot_Above
1255                 . #\Latin_Small_Letter_C_With_Dot_Above)
1256         
1257                (#\Latin_Capital_Letter_C_With_Caron . #\Latin_Small_Letter_C_With_Caron)
1258         
1259                (#\Latin_Capital_Letter_D_With_Caron . #\Latin_Small_Letter_D_With_Caron)
1260         
1261                (#\Latin_Capital_Letter_D_With_Stroke . #\Latin_Small_Letter_D_With_Stroke)
1262         
1263                (#\Latin_Capital_Letter_E_With_Macron . #\Latin_Small_Letter_E_With_Macron)
1264         
1265                (#\Latin_Capital_Letter_E_With_Breve . #\Latin_Small_Letter_E_With_Breve)
1266         
1267                (#\Latin_Capital_Letter_E_With_Dot_Above
1268                 . #\Latin_Small_Letter_E_With_Dot_Above)
1269         
1270                (#\Latin_Capital_Letter_E_With_Ogonek . #\Latin_Small_Letter_E_With_Ogonek)
1271         
1272                (#\Latin_Capital_Letter_E_With_Caron . #\Latin_Small_Letter_E_With_Caron)
1273         
1274                (#\Latin_Capital_Letter_G_With_Circumflex
1275                 . #\Latin_Small_Letter_G_With_Circumflex)
1276         
1277                (#\Latin_Capital_Letter_G_With_Breve . #\Latin_Small_Letter_G_With_Breve)
1278         
1279                (#\Latin_Capital_Letter_G_With_Dot_Above
1280                 . #\Latin_Small_Letter_G_With_Dot_Above)
1281         
1282                (#\Latin_Capital_Letter_G_With_Cedilla . #\Latin_Small_Letter_G_With_Cedilla)
1283         
1284                (#\Latin_Capital_Letter_H_With_Circumflex
1285                 . #\Latin_Small_Letter_H_With_Circumflex)
1286         
1287                (#\Latin_Capital_Letter_H_With_Stroke . #\Latin_Small_Letter_H_With_Stroke)
1288         
1289                (#\Latin_Capital_Letter_I_With_Tilde . #\Latin_Small_Letter_I_With_Tilde)
1290         
1291                (#\Latin_Capital_Letter_I_With_Macron . #\Latin_Small_Letter_I_With_Macron)
1292         
1293                (#\Latin_Capital_Letter_I_With_Breve . #\Latin_Small_Letter_I_With_Breve)
1294         
1295                (#\Latin_Capital_Letter_I_With_Ogonek . #\Latin_Small_Letter_I_With_Ogonek)
1296         
1297                (#\Latin_Capital_Ligature_Ij . #\Latin_Small_Ligature_Ij)
1298         
1299                (#\Latin_Capital_Letter_J_With_Circumflex
1300                 . #\Latin_Small_Letter_J_With_Circumflex)
1301         
1302                (#\Latin_Capital_Letter_K_With_Cedilla . #\Latin_Small_Letter_K_With_Cedilla)
1303         
1304                (#\Latin_Capital_Letter_L_With_Acute . #\Latin_Small_Letter_L_With_Acute)
1305         
1306                (#\Latin_Capital_Letter_L_With_Cedilla . #\Latin_Small_Letter_L_With_Cedilla)
1307         
1308                (#\Latin_Capital_Letter_L_With_Caron . #\Latin_Small_Letter_L_With_Caron)
1309         
1310                (#\Latin_Capital_Letter_L_With_Middle_Dot
1311                 . #\Latin_Small_Letter_L_With_Middle_Dot)
1312         
1313                (#\Latin_Capital_Letter_L_With_Stroke . #\Latin_Small_Letter_L_With_Stroke)
1314         
1315                (#\Latin_Capital_Letter_N_With_Acute . #\Latin_Small_Letter_N_With_Acute)
1316         
1317                (#\Latin_Capital_Letter_N_With_Cedilla . #\Latin_Small_Letter_N_With_Cedilla)
1318         
1319                (#\Latin_Capital_Letter_N_With_Caron . #\Latin_Small_Letter_N_With_Caron)
1320         
1321                (#\Latin_Capital_Letter_Eng . #\Latin_Small_Letter_Eng)
1322         
1323                (#\Latin_Capital_Letter_O_With_Macron . #\Latin_Small_Letter_O_With_Macron)
1324         
1325                (#\Latin_Capital_Letter_O_With_Breve . #\Latin_Small_Letter_O_With_Breve)
1326         
1327                (#\Latin_Capital_Letter_O_With_Double_Acute
1328                 . #\Latin_Small_Letter_O_With_Double_Acute)
1329         
1330                (#\Latin_Capital_Ligature_Oe . #\Latin_Small_Ligature_Oe)
1331         
1332                (#\Latin_Capital_Letter_R_With_Acute . #\Latin_Small_Letter_R_With_Acute)
1333         
1334                (#\Latin_Capital_Letter_R_With_Cedilla . #\Latin_Small_Letter_R_With_Cedilla)
1335         
1336                (#\Latin_Capital_Letter_R_With_Caron . #\Latin_Small_Letter_R_With_Caron)
1337         
1338                (#\Latin_Capital_Letter_S_With_Acute . #\Latin_Small_Letter_S_With_Acute)
1339         
1340                (#\Latin_Capital_Letter_S_With_Circumflex
1341                 . #\Latin_Small_Letter_S_With_Circumflex)
1342         
1343                (#\Latin_Capital_Letter_S_With_Cedilla . #\Latin_Small_Letter_S_With_Cedilla)
1344         
1345                (#\Latin_Capital_Letter_S_With_Caron . #\Latin_Small_Letter_S_With_Caron)
1346         
1347                (#\Latin_Capital_Letter_T_With_Cedilla . #\Latin_Small_Letter_T_With_Cedilla)
1348         
1349                (#\Latin_Capital_Letter_T_With_Caron . #\Latin_Small_Letter_T_With_Caron)
1350         
1351                (#\Latin_Capital_Letter_T_With_Stroke . #\Latin_Small_Letter_T_With_Stroke)
1352         
1353                (#\Latin_Capital_Letter_U_With_Tilde . #\Latin_Small_Letter_U_With_Tilde)
1354         
1355                (#\Latin_Capital_Letter_U_With_Macron . #\Latin_Small_Letter_U_With_Macron)
1356         
1357                (#\Latin_Capital_Letter_U_With_Breve . #\Latin_Small_Letter_U_With_Breve)
1358         
1359                (#\Latin_Capital_Letter_U_With_Ring_Above
1360                 . #\Latin_Small_Letter_U_With_Ring_Above)
1361         
1362                (#\Latin_Capital_Letter_U_With_Double_Acute
1363                 . #\Latin_Small_Letter_U_With_Double_Acute)
1364         
1365                (#\Latin_Capital_Letter_U_With_Ogonek . #\Latin_Small_Letter_U_With_Ogonek)
1366         
1367                (#\Latin_Capital_Letter_W_With_Circumflex
1368                 . #\Latin_Small_Letter_W_With_Circumflex)
1369         
1370                (#\Latin_Capital_Letter_Y_With_Circumflex
1371                 . #\Latin_Small_Letter_Y_With_Circumflex)
1372         
1373                (#\Latin_Capital_Letter_Y_With_Diaeresis
1374                 . #\Latin_Small_Letter_Y_With_Diaeresis)
1375         
1376                (#\Latin_Capital_Letter_Z_With_Acute . #\Latin_Small_Letter_Z_With_Acute)
1377         
1378                (#\Latin_Capital_Letter_Z_With_Dot_Above
1379                 . #\Latin_Small_Letter_Z_With_Dot_Above)
1380         
1381                (#\Latin_Capital_Letter_Z_With_Caron . #\Latin_Small_Letter_Z_With_Caron)
1382         
1383                (#\Latin_Capital_Letter_B_With_Hook . #\Latin_Small_Letter_B_With_Hook)
1384         
1385                (#\Latin_Capital_Letter_B_With_Topbar . #\Latin_Small_Letter_B_With_Topbar)
1386         
1387                (#\Latin_Capital_Letter_Tone_Six . #\Latin_Small_Letter_Tone_Six)
1388         
1389                (#\Latin_Capital_Letter_Open_O . #\Latin_Small_Letter_Open_O)
1390         
1391                (#\Latin_Capital_Letter_C_With_Hook . #\Latin_Small_Letter_C_With_Hook)
1392         
1393                (#\Latin_Capital_Letter_African_D . #\Latin_Small_Letter_D_With_Tail)
1394         
1395                (#\Latin_Capital_Letter_D_With_Hook . #\Latin_Small_Letter_D_With_Hook)
1396         
1397                (#\Latin_Capital_Letter_D_With_Topbar . #\Latin_Small_Letter_D_With_Topbar)
1398         
1399                (#\Latin_Capital_Letter_Reversed_E . #\Latin_Small_Letter_Turned_E)
1400         
1401                (#\Latin_Capital_Letter_Schwa . #\Latin_Small_Letter_Schwa)
1402         
1403                (#\Latin_Capital_Letter_Open_E . #\Latin_Small_Letter_Open_E)
1404         
1405                (#\Latin_Capital_Letter_F_With_Hook . #\Latin_Small_Letter_F_With_Hook)
1406         
1407                (#\Latin_Capital_Letter_G_With_Hook . #\Latin_Small_Letter_G_With_Hook)
1408         
1409                (#\Latin_Capital_Letter_Gamma . #\Latin_Small_Letter_Gamma)
1410         
1411                (#\Latin_Capital_Letter_Iota . #\Latin_Small_Letter_Iota)
1412         
1413                (#\Latin_Capital_Letter_I_With_Stroke . #\Latin_Small_Letter_I_With_Stroke)
1414         
1415                (#\Latin_Capital_Letter_K_With_Hook . #\Latin_Small_Letter_K_With_Hook)
1416         
1417                (#\Latin_Capital_Letter_Turned_M . #\Latin_Small_Letter_Turned_M)
1418         
1419                (#\Latin_Capital_Letter_N_With_Left_Hook
1420                 . #\Latin_Small_Letter_N_With_Left_Hook)
1421         
1422                (#\Latin_Capital_Letter_O_With_Middle_Tilde . #\Latin_Small_Letter_Barred_O)
1423         
1424                (#\Latin_Capital_Letter_O_With_Horn . #\Latin_Small_Letter_O_With_Horn)
1425         
1426                (#\Latin_Capital_Letter_Oi . #\Latin_Small_Letter_Oi)
1427         
1428                (#\Latin_Capital_Letter_P_With_Hook . #\Latin_Small_Letter_P_With_Hook)
1429         
1430                (#\Latin_Letter_Yr . #\Latin_Letter_Small_Capital_R)
1431         
1432                (#\Latin_Capital_Letter_Tone_Two . #\Latin_Small_Letter_Tone_Two)
1433         
1434                (#\Latin_Capital_Letter_Esh . #\Latin_Small_Letter_Esh)
1435         
1436                (#\Latin_Capital_Letter_T_With_Hook . #\Latin_Small_Letter_T_With_Hook)
1437         
1438                (#\Latin_Capital_Letter_T_With_Retroflex_Hook
1439                 . #\Latin_Small_Letter_T_With_Retroflex_Hook)
1440         
1441                (#\Latin_Capital_Letter_U_With_Horn . #\Latin_Small_Letter_U_With_Horn)
1442         
1443                (#\Latin_Capital_Letter_Upsilon . #\Latin_Small_Letter_Upsilon)
1444         
1445                (#\Latin_Capital_Letter_V_With_Hook . #\Latin_Small_Letter_V_With_Hook)
1446         
1447                (#\Latin_Capital_Letter_Y_With_Hook . #\Latin_Small_Letter_Y_With_Hook)
1448         
1449                (#\Latin_Capital_Letter_Z_With_Stroke . #\Latin_Small_Letter_Z_With_Stroke)
1450         
1451                (#\Latin_Capital_Letter_Ezh . #\Latin_Small_Letter_Ezh)
1452         
1453                (#\Latin_Capital_Letter_Ezh_Reversed . #\Latin_Small_Letter_Ezh_Reversed)
1454         
1455                (#\Latin_Capital_Letter_Tone_Five . #\Latin_Small_Letter_Tone_Five)
1456         
1457                (#\Latin_Capital_Letter_Dz_With_Caron . #\Latin_Small_Letter_Dz_With_Caron)
1458         
1459                (#\Latin_Capital_Letter_Lj . #\Latin_Small_Letter_Lj)
1460         
1461                (#\Latin_Capital_Letter_Nj . #\Latin_Small_Letter_Nj)
1462         
1463                (#\Latin_Capital_Letter_A_With_Caron . #\Latin_Small_Letter_A_With_Caron)
1464         
1465                (#\Latin_Capital_Letter_I_With_Caron . #\Latin_Small_Letter_I_With_Caron)
1466         
1467                (#\Latin_Capital_Letter_O_With_Caron . #\Latin_Small_Letter_O_With_Caron)
1468         
1469                (#\Latin_Capital_Letter_U_With_Caron . #\Latin_Small_Letter_U_With_Caron)
1470         
1471                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Macron
1472                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Macron)
1473         
1474                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Acute
1475                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Acute)
1476         
1477                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Caron
1478                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Caron)
1479         
1480                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Grave
1481                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Grave)
1482         
1483                (#\Latin_Capital_Letter_A_With_Diaeresis_And_Macron
1484                 . #\Latin_Small_Letter_A_With_Diaeresis_And_Macron)
1485         
1486                (#\Latin_Capital_Letter_A_With_Dot_Above_And_Macron
1487                 . #\Latin_Small_Letter_A_With_Dot_Above_And_Macron)
1488         
1489                (#\Latin_Capital_Letter_Ae_With_Macron . #\Latin_Small_Letter_Ae_With_Macron)
1490         
1491                (#\Latin_Capital_Letter_G_With_Stroke . #\Latin_Small_Letter_G_With_Stroke)
1492         
1493                (#\Latin_Capital_Letter_G_With_Caron . #\Latin_Small_Letter_G_With_Caron)
1494         
1495                (#\Latin_Capital_Letter_K_With_Caron . #\Latin_Small_Letter_K_With_Caron)
1496         
1497                (#\Latin_Capital_Letter_O_With_Ogonek . #\Latin_Small_Letter_O_With_Ogonek)
1498         
1499                (#\Latin_Capital_Letter_O_With_Ogonek_And_Macron
1500                 . #\Latin_Small_Letter_O_With_Ogonek_And_Macron)
1501         
1502                (#\Latin_Capital_Letter_Ezh_With_Caron . #\Latin_Small_Letter_Ezh_With_Caron)
1503         
1504                (#\Latin_Capital_Letter_Dz . #\Latin_Small_Letter_Dz)
1505         
1506                (#\Latin_Capital_Letter_G_With_Acute . #\Latin_Small_Letter_G_With_Acute)
1507         
1508                (#\Latin_Capital_Letter_Hwair . #\Latin_Small_Letter_Hv)
1509         
1510                (#\Latin_Capital_Letter_Wynn . #\Latin_Letter_Wynn)
1511         
1512                (#\Latin_Capital_Letter_N_With_Grave . #\Latin_Small_Letter_N_With_Grave)
1513         
1514                (#\Latin_Capital_Letter_A_With_Ring_Above_And_Acute
1515                 . #\Latin_Small_Letter_A_With_Ring_Above_And_Acute)
1516         
1517                (#\Latin_Capital_Letter_Ae_With_Acute . #\Latin_Small_Letter_Ae_With_Acute)
1518         
1519                (#\Latin_Capital_Letter_O_With_Stroke_And_Acute
1520                 . #\Latin_Small_Letter_O_With_Stroke_And_Acute)
1521         
1522                (#\Latin_Capital_Letter_A_With_Double_Grave
1523                 . #\Latin_Small_Letter_A_With_Double_Grave)
1524         
1525                (#\Latin_Capital_Letter_A_With_Inverted_Breve
1526                 . #\Latin_Small_Letter_A_With_Inverted_Breve)
1527         
1528                (#\Latin_Capital_Letter_E_With_Double_Grave
1529                 . #\Latin_Small_Letter_E_With_Double_Grave)
1530         
1531                (#\Latin_Capital_Letter_E_With_Inverted_Breve
1532                 . #\Latin_Small_Letter_E_With_Inverted_Breve)
1533         
1534                (#\Latin_Capital_Letter_I_With_Double_Grave
1535                 . #\Latin_Small_Letter_I_With_Double_Grave)
1536         
1537                (#\Latin_Capital_Letter_I_With_Inverted_Breve
1538                 . #\Latin_Small_Letter_I_With_Inverted_Breve)
1539         
1540                (#\Latin_Capital_Letter_O_With_Double_Grave
1541                 . #\Latin_Small_Letter_O_With_Double_Grave)
1542         
1543                (#\Latin_Capital_Letter_O_With_Inverted_Breve
1544                 . #\Latin_Small_Letter_O_With_Inverted_Breve)
1545         
1546                (#\Latin_Capital_Letter_R_With_Double_Grave
1547                 . #\Latin_Small_Letter_R_With_Double_Grave)
1548         
1549                (#\Latin_Capital_Letter_R_With_Inverted_Breve
1550                 . #\Latin_Small_Letter_R_With_Inverted_Breve)
1551         
1552                (#\Latin_Capital_Letter_U_With_Double_Grave
1553                 . #\Latin_Small_Letter_U_With_Double_Grave)
1554         
1555                (#\Latin_Capital_Letter_U_With_Inverted_Breve
1556                 . #\Latin_Small_Letter_U_With_Inverted_Breve)
1557         
1558                (#\Latin_Capital_Letter_S_With_Comma_Below
1559                 . #\Latin_Small_Letter_S_With_Comma_Below)
1560         
1561                (#\Latin_Capital_Letter_T_With_Comma_Below
1562                 . #\Latin_Small_Letter_T_With_Comma_Below)
1563         
1564                (#\Latin_Capital_Letter_Yogh . #\Latin_Small_Letter_Yogh)
1565         
1566                (#\Latin_Capital_Letter_H_With_Caron . #\Latin_Small_Letter_H_With_Caron)
1567         
1568                (#\Latin_Capital_Letter_N_With_Long_Right_Leg
1569                 . #\Latin_Small_Letter_N_With_Long_Right_Leg)
1570         
1571                (#\Latin_Capital_Letter_Ou . #\Latin_Small_Letter_Ou)
1572         
1573                (#\Latin_Capital_Letter_Z_With_Hook . #\Latin_Small_Letter_Z_With_Hook)
1574         
1575                (#\Latin_Capital_Letter_A_With_Dot_Above
1576                 . #\Latin_Small_Letter_A_With_Dot_Above)
1577         
1578                (#\Latin_Capital_Letter_E_With_Cedilla . #\Latin_Small_Letter_E_With_Cedilla)
1579         
1580                (#\Latin_Capital_Letter_O_With_Diaeresis_And_Macron
1581                 . #\Latin_Small_Letter_O_With_Diaeresis_And_Macron)
1582         
1583                (#\Latin_Capital_Letter_O_With_Tilde_And_Macron
1584                 . #\Latin_Small_Letter_O_With_Tilde_And_Macron)
1585         
1586                (#\Latin_Capital_Letter_O_With_Dot_Above
1587                 . #\Latin_Small_Letter_O_With_Dot_Above)
1588         
1589                (#\Latin_Capital_Letter_O_With_Dot_Above_And_Macron
1590                 . #\Latin_Small_Letter_O_With_Dot_Above_And_Macron)
1591         
1592                (#\Latin_Capital_Letter_Y_With_Macron . #\Latin_Small_Letter_Y_With_Macron)
1593         
1594                (#\Latin_Capital_Letter_A_With_Stroke . #\U+2C65)
1595         
1596                (#\Latin_Capital_Letter_C_With_Stroke . #\Latin_Small_Letter_C_With_Stroke)
1597         
1598                (#\Latin_Capital_Letter_L_With_Bar . #\Latin_Small_Letter_L_With_Bar)
1599         
1600                (#\Latin_Capital_Letter_T_With_Diagonal_Stroke . #\U+2C66)
1601         
1602                (#\Latin_Capital_Letter_Glottal_Stop . #\Latin_Small_Letter_Glottal_Stop)
1603         
1604                (#\Latin_Capital_Letter_B_With_Stroke . #\Latin_Small_Letter_B_With_Stroke)
1605         
1606                (#\Latin_Capital_Letter_U_Bar . #\Latin_Small_Letter_U_Bar)
1607         
1608                (#\Latin_Capital_Letter_Turned_V . #\Latin_Small_Letter_Turned_V)
1609         
1610                (#\Latin_Capital_Letter_E_With_Stroke . #\Latin_Small_Letter_E_With_Stroke)
1611         
1612                (#\Latin_Capital_Letter_J_With_Stroke . #\Latin_Small_Letter_J_With_Stroke)
1613         
1614                (#\Latin_Capital_Letter_Small_Q_With_Hook_Tail
1615                 . #\Latin_Small_Letter_Q_With_Hook_Tail)
1616         
1617                (#\Latin_Capital_Letter_R_With_Stroke . #\Latin_Small_Letter_R_With_Stroke)
1618         
1619                (#\Latin_Capital_Letter_Y_With_Stroke . #\Latin_Small_Letter_Y_With_Stroke)
1620         
1621                (#\Greek_Capital_Letter_Alpha_With_Tonos
1622                 . #\Greek_Small_Letter_Alpha_With_Tonos)
1623         
1624                (#\Greek_Capital_Letter_Epsilon_With_Tonos
1625                 . #\Greek_Small_Letter_Epsilon_With_Tonos)
1626         
1627                (#\Greek_Capital_Letter_Eta_With_Tonos . #\Greek_Small_Letter_Eta_With_Tonos)
1628         
1629                (#\Greek_Capital_Letter_Iota_With_Tonos
1630                 . #\Greek_Small_Letter_Iota_With_Tonos)
1631         
1632                (#\Greek_Capital_Letter_Omicron_With_Tonos
1633                 . #\Greek_Small_Letter_Omicron_With_Tonos)
1634         
1635                (#\Greek_Capital_Letter_Upsilon_With_Tonos
1636                 . #\Greek_Small_Letter_Upsilon_With_Tonos)
1637         
1638                (#\Greek_Capital_Letter_Omega_With_Tonos
1639                 . #\Greek_Small_Letter_Omega_With_Tonos)
1640         
1641                (#\Greek_Capital_Letter_Alpha . #\Greek_Small_Letter_Alpha)
1642         
1643                (#\Greek_Capital_Letter_Beta . #\Greek_Small_Letter_Beta)
1644         
1645                (#\Greek_Capital_Letter_Gamma . #\Greek_Small_Letter_Gamma)
1646         
1647                (#\Greek_Capital_Letter_Delta . #\Greek_Small_Letter_Delta)
1648         
1649                (#\Greek_Capital_Letter_Epsilon . #\Greek_Small_Letter_Epsilon)
1650         
1651                (#\Greek_Capital_Letter_Zeta . #\Greek_Small_Letter_Zeta)
1652         
1653                (#\Greek_Capital_Letter_Eta . #\Greek_Small_Letter_Eta)
1654         
1655                (#\Greek_Capital_Letter_Theta . #\Greek_Small_Letter_Theta)
1656         
1657                (#\Greek_Capital_Letter_Iota . #\Greek_Small_Letter_Iota)
1658         
1659                (#\Greek_Capital_Letter_Kappa . #\Greek_Small_Letter_Kappa)
1660         
1661                (#\Greek_Capital_Letter_Lamda . #\Greek_Small_Letter_Lamda)
1662         
1663                (#\Greek_Capital_Letter_Mu . #\Greek_Small_Letter_Mu)
1664         
1665                (#\Greek_Capital_Letter_Nu . #\Greek_Small_Letter_Nu)
1666         
1667                (#\Greek_Capital_Letter_Xi . #\Greek_Small_Letter_Xi)
1668         
1669                (#\Greek_Capital_Letter_Omicron . #\Greek_Small_Letter_Omicron)
1670         
1671                (#\Greek_Capital_Letter_Pi . #\Greek_Small_Letter_Pi)
1672         
1673                (#\Greek_Capital_Letter_Rho . #\Greek_Small_Letter_Rho)
1674         
1675                (#\Greek_Capital_Letter_Sigma . #\Greek_Small_Letter_Sigma)
1676         
1677                (#\Greek_Capital_Letter_Tau . #\Greek_Small_Letter_Tau)
1678         
1679                (#\Greek_Capital_Letter_Upsilon . #\Greek_Small_Letter_Upsilon)
1680         
1681                (#\Greek_Capital_Letter_Phi . #\Greek_Small_Letter_Phi)
1682         
1683                (#\Greek_Capital_Letter_Chi . #\Greek_Small_Letter_Chi)
1684         
1685                (#\Greek_Capital_Letter_Psi . #\Greek_Small_Letter_Psi)
1686         
1687                (#\Greek_Capital_Letter_Omega . #\Greek_Small_Letter_Omega)
1688         
1689                (#\Greek_Capital_Letter_Iota_With_Dialytika
1690                 . #\Greek_Small_Letter_Iota_With_Dialytika)
1691         
1692                (#\Greek_Capital_Letter_Upsilon_With_Dialytika
1693                 . #\Greek_Small_Letter_Upsilon_With_Dialytika)
1694         
1695                (#\Greek_Letter_Archaic_Koppa . #\Greek_Small_Letter_Archaic_Koppa)
1696         
1697                (#\Greek_Letter_Stigma . #\Greek_Small_Letter_Stigma)
1698         
1699                (#\Greek_Letter_Digamma . #\Greek_Small_Letter_Digamma)
1700         
1701                (#\Greek_Letter_Koppa . #\Greek_Small_Letter_Koppa)
1702         
1703                (#\Greek_Letter_Sampi . #\Greek_Small_Letter_Sampi)
1704         
1705                (#\Coptic_Capital_Letter_Shei . #\Coptic_Small_Letter_Shei)
1706         
1707                (#\Coptic_Capital_Letter_Fei . #\Coptic_Small_Letter_Fei)
1708         
1709                (#\Coptic_Capital_Letter_Khei . #\Coptic_Small_Letter_Khei)
1710         
1711                (#\Coptic_Capital_Letter_Hori . #\Coptic_Small_Letter_Hori)
1712         
1713                (#\Coptic_Capital_Letter_Gangia . #\Coptic_Small_Letter_Gangia)
1714         
1715                (#\Coptic_Capital_Letter_Shima . #\Coptic_Small_Letter_Shima)
1716         
1717                (#\Coptic_Capital_Letter_Dei . #\Coptic_Small_Letter_Dei)
1718         
1719                (#\Greek_Capital_Letter_Sho . #\Greek_Small_Letter_Sho)
1720         
1721                (#\Greek_Capital_Lunate_Sigma_Symbol . #\Greek_Lunate_Sigma_Symbol)
1722         
1723                (#\Greek_Capital_Letter_San . #\Greek_Small_Letter_San)
1724         
1725                (#\Greek_Capital_Reversed_Lunate_Sigma_Symbol
1726                 . #\Greek_Small_Reversed_Lunate_Sigma_Symbol)
1727         
1728                (#\Greek_Capital_Dotted_Lunate_Sigma_Symbol
1729                 . #\Greek_Small_Dotted_Lunate_Sigma_Symbol)
1730         
1731                (#\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol
1732                 . #\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol)
1733         
1734                (#\Cyrillic_Capital_Letter_Ie_With_Grave
1735                 . #\Cyrillic_Small_Letter_Ie_With_Grave)
1736         
1737                (#\Cyrillic_Capital_Letter_Io . #\Cyrillic_Small_Letter_Io)
1738         
1739                (#\Cyrillic_Capital_Letter_Dje . #\Cyrillic_Small_Letter_Dje)
1740         
1741                (#\Cyrillic_Capital_Letter_Gje . #\Cyrillic_Small_Letter_Gje)
1742         
1743                (#\Cyrillic_Capital_Letter_Ukrainian_Ie
1744                 . #\Cyrillic_Small_Letter_Ukrainian_Ie)
1745         
1746                (#\Cyrillic_Capital_Letter_Dze . #\Cyrillic_Small_Letter_Dze)
1747         
1748                (#\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I
1749                 . #\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I)
1750         
1751                (#\Cyrillic_Capital_Letter_Yi . #\Cyrillic_Small_Letter_Yi)
1752         
1753                (#\Cyrillic_Capital_Letter_Je . #\Cyrillic_Small_Letter_Je)
1754         
1755                (#\Cyrillic_Capital_Letter_Lje . #\Cyrillic_Small_Letter_Lje)
1756         
1757                (#\Cyrillic_Capital_Letter_Nje . #\Cyrillic_Small_Letter_Nje)
1758         
1759                (#\Cyrillic_Capital_Letter_Tshe . #\Cyrillic_Small_Letter_Tshe)
1760         
1761                (#\Cyrillic_Capital_Letter_Kje . #\Cyrillic_Small_Letter_Kje)
1762         
1763                (#\Cyrillic_Capital_Letter_I_With_Grave
1764                 . #\Cyrillic_Small_Letter_I_With_Grave)
1765         
1766                (#\Cyrillic_Capital_Letter_Short_U . #\Cyrillic_Small_Letter_Short_U)
1767         
1768                (#\Cyrillic_Capital_Letter_Dzhe . #\Cyrillic_Small_Letter_Dzhe)
1769         
1770                (#\Cyrillic_Capital_Letter_A . #\Cyrillic_Small_Letter_A)
1771         
1772                (#\Cyrillic_Capital_Letter_Be . #\Cyrillic_Small_Letter_Be)
1773         
1774                (#\Cyrillic_Capital_Letter_Ve . #\Cyrillic_Small_Letter_Ve)
1775         
1776                (#\Cyrillic_Capital_Letter_Ghe . #\Cyrillic_Small_Letter_Ghe)
1777         
1778                (#\Cyrillic_Capital_Letter_De . #\Cyrillic_Small_Letter_De)
1779         
1780                (#\Cyrillic_Capital_Letter_Ie . #\Cyrillic_Small_Letter_Ie)
1781         
1782                (#\Cyrillic_Capital_Letter_Zhe . #\Cyrillic_Small_Letter_Zhe)
1783         
1784                (#\Cyrillic_Capital_Letter_Ze . #\Cyrillic_Small_Letter_Ze)
1785         
1786                (#\Cyrillic_Capital_Letter_I . #\Cyrillic_Small_Letter_I)
1787         
1788                (#\Cyrillic_Capital_Letter_Short_I . #\Cyrillic_Small_Letter_Short_I)
1789         
1790                (#\Cyrillic_Capital_Letter_Ka . #\Cyrillic_Small_Letter_Ka)
1791         
1792                (#\Cyrillic_Capital_Letter_El . #\Cyrillic_Small_Letter_El)
1793         
1794                (#\Cyrillic_Capital_Letter_Em . #\Cyrillic_Small_Letter_Em)
1795         
1796                (#\Cyrillic_Capital_Letter_En . #\Cyrillic_Small_Letter_En)
1797         
1798                (#\Cyrillic_Capital_Letter_O . #\Cyrillic_Small_Letter_O)
1799         
1800                (#\Cyrillic_Capital_Letter_Pe . #\Cyrillic_Small_Letter_Pe)
1801         
1802                (#\Cyrillic_Capital_Letter_Er . #\Cyrillic_Small_Letter_Er)
1803         
1804                (#\Cyrillic_Capital_Letter_Es . #\Cyrillic_Small_Letter_Es)
1805         
1806                (#\Cyrillic_Capital_Letter_Te . #\Cyrillic_Small_Letter_Te)
1807         
1808                (#\Cyrillic_Capital_Letter_U . #\Cyrillic_Small_Letter_U)
1809         
1810                (#\Cyrillic_Capital_Letter_Ef . #\Cyrillic_Small_Letter_Ef)
1811         
1812                (#\Cyrillic_Capital_Letter_Ha . #\Cyrillic_Small_Letter_Ha)
1813         
1814                (#\Cyrillic_Capital_Letter_Tse . #\Cyrillic_Small_Letter_Tse)
1815         
1816                (#\Cyrillic_Capital_Letter_Che . #\Cyrillic_Small_Letter_Che)
1817         
1818                (#\Cyrillic_Capital_Letter_Sha . #\Cyrillic_Small_Letter_Sha)
1819         
1820                (#\Cyrillic_Capital_Letter_Shcha . #\Cyrillic_Small_Letter_Shcha)
1821         
1822                (#\Cyrillic_Capital_Letter_Hard_Sign . #\Cyrillic_Small_Letter_Hard_Sign)
1823         
1824                (#\Cyrillic_Capital_Letter_Yeru . #\Cyrillic_Small_Letter_Yeru)
1825         
1826                (#\Cyrillic_Capital_Letter_Soft_Sign . #\Cyrillic_Small_Letter_Soft_Sign)
1827         
1828                (#\Cyrillic_Capital_Letter_E . #\Cyrillic_Small_Letter_E)
1829         
1830                (#\Cyrillic_Capital_Letter_Yu . #\Cyrillic_Small_Letter_Yu)
1831         
1832                (#\Cyrillic_Capital_Letter_Ya . #\Cyrillic_Small_Letter_Ya)
1833         
1834                (#\Cyrillic_Capital_Letter_Omega . #\Cyrillic_Small_Letter_Omega)
1835         
1836                (#\Cyrillic_Capital_Letter_Yat . #\Cyrillic_Small_Letter_Yat)
1837         
1838                (#\Cyrillic_Capital_Letter_Iotified_E . #\Cyrillic_Small_Letter_Iotified_E)
1839         
1840                (#\Cyrillic_Capital_Letter_Little_Yus . #\Cyrillic_Small_Letter_Little_Yus)
1841         
1842                (#\Cyrillic_Capital_Letter_Iotified_Little_Yus
1843                 . #\Cyrillic_Small_Letter_Iotified_Little_Yus)
1844         
1845                (#\Cyrillic_Capital_Letter_Big_Yus . #\Cyrillic_Small_Letter_Big_Yus)
1846         
1847                (#\Cyrillic_Capital_Letter_Iotified_Big_Yus
1848                 . #\Cyrillic_Small_Letter_Iotified_Big_Yus)
1849         
1850                (#\Cyrillic_Capital_Letter_Ksi . #\Cyrillic_Small_Letter_Ksi)
1851         
1852                (#\Cyrillic_Capital_Letter_Psi . #\Cyrillic_Small_Letter_Psi)
1853         
1854                (#\Cyrillic_Capital_Letter_Fita . #\Cyrillic_Small_Letter_Fita)
1855         
1856                (#\Cyrillic_Capital_Letter_Izhitsa . #\Cyrillic_Small_Letter_Izhitsa)
1857         
1858                (#\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent
1859                 . #\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent)
1860         
1861                (#\Cyrillic_Capital_Letter_Uk . #\Cyrillic_Small_Letter_Uk)
1862         
1863                (#\Cyrillic_Capital_Letter_Round_Omega . #\Cyrillic_Small_Letter_Round_Omega)
1864         
1865                (#\Cyrillic_Capital_Letter_Omega_With_Titlo
1866                 . #\Cyrillic_Small_Letter_Omega_With_Titlo)
1867         
1868                (#\Cyrillic_Capital_Letter_Ot . #\Cyrillic_Small_Letter_Ot)
1869         
1870                (#\Cyrillic_Capital_Letter_Koppa . #\Cyrillic_Small_Letter_Koppa)
1871         
1872                (#\Cyrillic_Capital_Letter_Short_I_With_Tail
1873                 . #\Cyrillic_Small_Letter_Short_I_With_Tail)
1874         
1875                (#\Cyrillic_Capital_Letter_Semisoft_Sign
1876                 . #\Cyrillic_Small_Letter_Semisoft_Sign)
1877         
1878                (#\Cyrillic_Capital_Letter_Er_With_Tick
1879                 . #\Cyrillic_Small_Letter_Er_With_Tick)
1880         
1881                (#\Cyrillic_Capital_Letter_Ghe_With_Upturn
1882                 . #\Cyrillic_Small_Letter_Ghe_With_Upturn)
1883         
1884                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke
1885                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke)
1886         
1887                (#\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook
1888                 . #\Cyrillic_Small_Letter_Ghe_With_Middle_Hook)
1889         
1890                (#\Cyrillic_Capital_Letter_Zhe_With_Descender
1891                 . #\Cyrillic_Small_Letter_Zhe_With_Descender)
1892         
1893                (#\Cyrillic_Capital_Letter_Ze_With_Descender
1894                 . #\Cyrillic_Small_Letter_Ze_With_Descender)
1895         
1896                (#\Cyrillic_Capital_Letter_Ka_With_Descender
1897                 . #\Cyrillic_Small_Letter_Ka_With_Descender)
1898         
1899                (#\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke
1900                 . #\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke)
1901         
1902                (#\Cyrillic_Capital_Letter_Ka_With_Stroke
1903                 . #\Cyrillic_Small_Letter_Ka_With_Stroke)
1904         
1905                (#\Cyrillic_Capital_Letter_Bashkir_Ka . #\Cyrillic_Small_Letter_Bashkir_Ka)
1906         
1907                (#\Cyrillic_Capital_Letter_En_With_Descender
1908                 . #\Cyrillic_Small_Letter_En_With_Descender)
1909         
1910                (#\Cyrillic_Capital_Ligature_En_Ghe . #\Cyrillic_Small_Ligature_En_Ghe)
1911         
1912                (#\Cyrillic_Capital_Letter_Pe_With_Middle_Hook
1913                 . #\Cyrillic_Small_Letter_Pe_With_Middle_Hook)
1914         
1915                (#\Cyrillic_Capital_Letter_Abkhasian_Ha
1916                 . #\Cyrillic_Small_Letter_Abkhasian_Ha)
1917         
1918                (#\Cyrillic_Capital_Letter_Es_With_Descender
1919                 . #\Cyrillic_Small_Letter_Es_With_Descender)
1920         
1921                (#\Cyrillic_Capital_Letter_Te_With_Descender
1922                 . #\Cyrillic_Small_Letter_Te_With_Descender)
1923         
1924                (#\Cyrillic_Capital_Letter_Straight_U . #\Cyrillic_Small_Letter_Straight_U)
1925         
1926                (#\Cyrillic_Capital_Letter_Straight_U_With_Stroke
1927                 . #\Cyrillic_Small_Letter_Straight_U_With_Stroke)
1928         
1929                (#\Cyrillic_Capital_Letter_Ha_With_Descender
1930                 . #\Cyrillic_Small_Letter_Ha_With_Descender)
1931         
1932                (#\Cyrillic_Capital_Ligature_Te_Tse . #\Cyrillic_Small_Ligature_Te_Tse)
1933         
1934                (#\Cyrillic_Capital_Letter_Che_With_Descender
1935                 . #\Cyrillic_Small_Letter_Che_With_Descender)
1936         
1937                (#\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke
1938                 . #\Cyrillic_Small_Letter_Che_With_Vertical_Stroke)
1939         
1940                (#\Cyrillic_Capital_Letter_Shha . #\Cyrillic_Small_Letter_Shha)
1941         
1942                (#\Cyrillic_Capital_Letter_Abkhasian_Che
1943                 . #\Cyrillic_Small_Letter_Abkhasian_Che)
1944         
1945                (#\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender
1946                 . #\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender)
1947         
1948                (#\Cyrillic_Letter_Palochka . #\Cyrillic_Small_Letter_Palochka)
1949         
1950                (#\Cyrillic_Capital_Letter_Zhe_With_Breve
1951                 . #\Cyrillic_Small_Letter_Zhe_With_Breve)
1952         
1953                (#\Cyrillic_Capital_Letter_Ka_With_Hook
1954                 . #\Cyrillic_Small_Letter_Ka_With_Hook)
1955         
1956                (#\Cyrillic_Capital_Letter_El_With_Tail
1957                 . #\Cyrillic_Small_Letter_El_With_Tail)
1958         
1959                (#\Cyrillic_Capital_Letter_En_With_Hook
1960                 . #\Cyrillic_Small_Letter_En_With_Hook)
1961         
1962                (#\Cyrillic_Capital_Letter_En_With_Tail
1963                 . #\Cyrillic_Small_Letter_En_With_Tail)
1964         
1965                (#\Cyrillic_Capital_Letter_Khakassian_Che
1966                 . #\Cyrillic_Small_Letter_Khakassian_Che)
1967         
1968                (#\Cyrillic_Capital_Letter_Em_With_Tail
1969                 . #\Cyrillic_Small_Letter_Em_With_Tail)
1970         
1971                (#\Cyrillic_Capital_Letter_A_With_Breve
1972                 . #\Cyrillic_Small_Letter_A_With_Breve)
1973         
1974                (#\Cyrillic_Capital_Letter_A_With_Diaeresis
1975                 . #\Cyrillic_Small_Letter_A_With_Diaeresis)
1976         
1977                (#\Cyrillic_Capital_Ligature_A_Ie . #\Cyrillic_Small_Ligature_A_Ie)
1978         
1979                (#\Cyrillic_Capital_Letter_Ie_With_Breve
1980                 . #\Cyrillic_Small_Letter_Ie_With_Breve)
1981         
1982                (#\Cyrillic_Capital_Letter_Schwa . #\Cyrillic_Small_Letter_Schwa)
1983         
1984                (#\Cyrillic_Capital_Letter_Schwa_With_Diaeresis
1985                 . #\Cyrillic_Small_Letter_Schwa_With_Diaeresis)
1986         
1987                (#\Cyrillic_Capital_Letter_Zhe_With_Diaeresis
1988                 . #\Cyrillic_Small_Letter_Zhe_With_Diaeresis)
1989         
1990                (#\Cyrillic_Capital_Letter_Ze_With_Diaeresis
1991                 . #\Cyrillic_Small_Letter_Ze_With_Diaeresis)
1992         
1993                (#\Cyrillic_Capital_Letter_Abkhasian_Dze
1994                 . #\Cyrillic_Small_Letter_Abkhasian_Dze)
1995         
1996                (#\Cyrillic_Capital_Letter_I_With_Macron
1997                 . #\Cyrillic_Small_Letter_I_With_Macron)
1998         
1999                (#\Cyrillic_Capital_Letter_I_With_Diaeresis
2000                 . #\Cyrillic_Small_Letter_I_With_Diaeresis)
2001         
2002                (#\Cyrillic_Capital_Letter_O_With_Diaeresis
2003                 . #\Cyrillic_Small_Letter_O_With_Diaeresis)
2004         
2005                (#\Cyrillic_Capital_Letter_Barred_O . #\Cyrillic_Small_Letter_Barred_O)
2006         
2007                (#\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis
2008                 . #\Cyrillic_Small_Letter_Barred_O_With_Diaeresis)
2009         
2010                (#\Cyrillic_Capital_Letter_E_With_Diaeresis
2011                 . #\Cyrillic_Small_Letter_E_With_Diaeresis)
2012         
2013                (#\Cyrillic_Capital_Letter_U_With_Macron
2014                 . #\Cyrillic_Small_Letter_U_With_Macron)
2015         
2016                (#\Cyrillic_Capital_Letter_U_With_Diaeresis
2017                 . #\Cyrillic_Small_Letter_U_With_Diaeresis)
2018         
2019                (#\Cyrillic_Capital_Letter_U_With_Double_Acute
2020                 . #\Cyrillic_Small_Letter_U_With_Double_Acute)
2021         
2022                (#\Cyrillic_Capital_Letter_Che_With_Diaeresis
2023                 . #\Cyrillic_Small_Letter_Che_With_Diaeresis)
2024         
2025                (#\Cyrillic_Capital_Letter_Ghe_With_Descender
2026                 . #\Cyrillic_Small_Letter_Ghe_With_Descender)
2027         
2028                (#\Cyrillic_Capital_Letter_Yeru_With_Diaeresis
2029                 . #\Cyrillic_Small_Letter_Yeru_With_Diaeresis)
2030         
2031                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook
2032                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook)
2033         
2034                (#\Cyrillic_Capital_Letter_Ha_With_Hook
2035                 . #\Cyrillic_Small_Letter_Ha_With_Hook)
2036         
2037                (#\Cyrillic_Capital_Letter_Ha_With_Stroke
2038                 . #\Cyrillic_Small_Letter_Ha_With_Stroke)
2039         
2040                (#\Cyrillic_Capital_Letter_Komi_De . #\Cyrillic_Small_Letter_Komi_De)
2041         
2042                (#\Cyrillic_Capital_Letter_Komi_Dje . #\Cyrillic_Small_Letter_Komi_Dje)
2043         
2044                (#\Cyrillic_Capital_Letter_Komi_Zje . #\Cyrillic_Small_Letter_Komi_Zje)
2045         
2046                (#\Cyrillic_Capital_Letter_Komi_Dzje . #\Cyrillic_Small_Letter_Komi_Dzje)
2047         
2048                (#\Cyrillic_Capital_Letter_Komi_Lje . #\Cyrillic_Small_Letter_Komi_Lje)
2049         
2050                (#\Cyrillic_Capital_Letter_Komi_Nje . #\Cyrillic_Small_Letter_Komi_Nje)
2051         
2052                (#\Cyrillic_Capital_Letter_Komi_Sje . #\Cyrillic_Small_Letter_Komi_Sje)
2053         
2054                (#\Cyrillic_Capital_Letter_Komi_Tje . #\Cyrillic_Small_Letter_Komi_Tje)
2055         
2056                (#\Cyrillic_Capital_Letter_Reversed_Ze . #\Cyrillic_Small_Letter_Reversed_Ze)
2057         
2058                (#\Cyrillic_Capital_Letter_El_With_Hook
2059                 . #\Cyrillic_Small_Letter_El_With_Hook)
2060         
2061                (#\Armenian_Capital_Letter_Ayb . #\Armenian_Small_Letter_Ayb)
2062         
2063                (#\Armenian_Capital_Letter_Ben . #\Armenian_Small_Letter_Ben)
2064         
2065                (#\Armenian_Capital_Letter_Gim . #\Armenian_Small_Letter_Gim)
2066         
2067                (#\Armenian_Capital_Letter_Da . #\Armenian_Small_Letter_Da)
2068         
2069                (#\Armenian_Capital_Letter_Ech . #\Armenian_Small_Letter_Ech)
2070         
2071                (#\Armenian_Capital_Letter_Za . #\Armenian_Small_Letter_Za)
2072         
2073                (#\Armenian_Capital_Letter_Eh . #\Armenian_Small_Letter_Eh)
2074         
2075                (#\Armenian_Capital_Letter_Et . #\Armenian_Small_Letter_Et)
2076         
2077                (#\Armenian_Capital_Letter_To . #\Armenian_Small_Letter_To)
2078         
2079                (#\Armenian_Capital_Letter_Zhe . #\Armenian_Small_Letter_Zhe)
2080         
2081                (#\Armenian_Capital_Letter_Ini . #\Armenian_Small_Letter_Ini)
2082         
2083                (#\Armenian_Capital_Letter_Liwn . #\Armenian_Small_Letter_Liwn)
2084         
2085                (#\Armenian_Capital_Letter_Xeh . #\Armenian_Small_Letter_Xeh)
2086         
2087                (#\Armenian_Capital_Letter_Ca . #\Armenian_Small_Letter_Ca)
2088         
2089                (#\Armenian_Capital_Letter_Ken . #\Armenian_Small_Letter_Ken)
2090         
2091                (#\Armenian_Capital_Letter_Ho . #\Armenian_Small_Letter_Ho)
2092         
2093                (#\Armenian_Capital_Letter_Ja . #\Armenian_Small_Letter_Ja)
2094         
2095                (#\Armenian_Capital_Letter_Ghad . #\Armenian_Small_Letter_Ghad)
2096         
2097                (#\Armenian_Capital_Letter_Cheh . #\Armenian_Small_Letter_Cheh)
2098         
2099                (#\Armenian_Capital_Letter_Men . #\Armenian_Small_Letter_Men)
2100         
2101                (#\Armenian_Capital_Letter_Yi . #\Armenian_Small_Letter_Yi)
2102         
2103                (#\Armenian_Capital_Letter_Now . #\Armenian_Small_Letter_Now)
2104         
2105                (#\Armenian_Capital_Letter_Sha . #\Armenian_Small_Letter_Sha)
2106         
2107                (#\Armenian_Capital_Letter_Vo . #\Armenian_Small_Letter_Vo)
2108         
2109                (#\Armenian_Capital_Letter_Cha . #\Armenian_Small_Letter_Cha)
2110         
2111                (#\Armenian_Capital_Letter_Peh . #\Armenian_Small_Letter_Peh)
2112         
2113                (#\Armenian_Capital_Letter_Jheh . #\Armenian_Small_Letter_Jheh)
2114         
2115                (#\Armenian_Capital_Letter_Ra . #\Armenian_Small_Letter_Ra)
2116         
2117                (#\Armenian_Capital_Letter_Seh . #\Armenian_Small_Letter_Seh)
2118         
2119                (#\Armenian_Capital_Letter_Vew . #\Armenian_Small_Letter_Vew)
2120         
2121                (#\Armenian_Capital_Letter_Tiwn . #\Armenian_Small_Letter_Tiwn)
2122         
2123                (#\Armenian_Capital_Letter_Reh . #\Armenian_Small_Letter_Reh)
2124         
2125                (#\Armenian_Capital_Letter_Co . #\Armenian_Small_Letter_Co)
2126         
2127                (#\Armenian_Capital_Letter_Yiwn . #\Armenian_Small_Letter_Yiwn)
2128         
2129                (#\Armenian_Capital_Letter_Piwr . #\Armenian_Small_Letter_Piwr)
2130         
2131                (#\Armenian_Capital_Letter_Keh . #\Armenian_Small_Letter_Keh)
2132         
2133                (#\Armenian_Capital_Letter_Oh . #\Armenian_Small_Letter_Oh)
2134         
2135                (#\Armenian_Capital_Letter_Feh . #\Armenian_Small_Letter_Feh)
2136         
2137                (#\U+10A0 . #\U+2D00)
2138          (#\U+10A1 . #\U+2D01)
2139          (#\U+10A2 . #\U+2D02)
2140         
2141                (#\U+10A3 . #\U+2D03)
2142          (#\U+10A4 . #\U+2D04)
2143          (#\U+10A5 . #\U+2D05)
2144         
2145                (#\U+10A6 . #\U+2D06)
2146          (#\U+10A7 . #\U+2D07)
2147          (#\U+10A8 . #\U+2D08)
2148         
2149                (#\U+10A9 . #\U+2D09)
2150          (#\U+10AA . #\U+2D0A)
2151          (#\U+10AB . #\U+2D0B)
2152         
2153                (#\U+10AC . #\U+2D0C)
2154          (#\U+10AD . #\U+2D0D)
2155          (#\U+10AE . #\U+2D0E)
2156         
2157                (#\U+10AF . #\U+2D0F)
2158          (#\U+10B0 . #\U+2D10)
2159          (#\U+10B1 . #\U+2D11)
2160         
2161                (#\U+10B2 . #\U+2D12)
2162          (#\U+10B3 . #\U+2D13)
2163          (#\U+10B4 . #\U+2D14)
2164         
2165                (#\U+10B5 . #\U+2D15)
2166          (#\U+10B6 . #\U+2D16)
2167          (#\U+10B7 . #\U+2D17)
2168         
2169                (#\U+10B8 . #\U+2D18)
2170          (#\U+10B9 . #\U+2D19)
2171          (#\U+10BA . #\U+2D1A)
2172         
2173                (#\U+10BB . #\U+2D1B)
2174          (#\U+10BC . #\U+2D1C)
2175          (#\U+10BD . #\U+2D1D)
2176         
2177                (#\U+10BE . #\U+2D1E)
2178          (#\U+10BF . #\U+2D1F)
2179          (#\U+10C0 . #\U+2D20)
2180         
2181                (#\U+10C1 . #\U+2D21)
2182          (#\U+10C2 . #\U+2D22)
2183          (#\U+10C3 . #\U+2D23)
2184         
2185                (#\U+10C4 . #\U+2D24)
2186          (#\U+10C5 . #\U+2D25)
2187          (#\U+1E00 . #\U+1E01)
2188         
2189                (#\U+1E02 . #\U+1E03)
2190          (#\U+1E04 . #\U+1E05)
2191          (#\U+1E06 . #\U+1E07)
2192         
2193                (#\U+1E08 . #\U+1E09)
2194          (#\U+1E0A . #\U+1E0B)
2195          (#\U+1E0C . #\U+1E0D)
2196         
2197                (#\U+1E0E . #\U+1E0F)
2198          (#\U+1E10 . #\U+1E11)
2199          (#\U+1E12 . #\U+1E13)
2200         
2201                (#\U+1E14 . #\U+1E15)
2202          (#\U+1E16 . #\U+1E17)
2203          (#\U+1E18 . #\U+1E19)
2204         
2205                (#\U+1E1A . #\U+1E1B)
2206          (#\U+1E1C . #\U+1E1D)
2207          (#\U+1E1E . #\U+1E1F)
2208         
2209                (#\U+1E20 . #\U+1E21)
2210          (#\U+1E22 . #\U+1E23)
2211          (#\U+1E24 . #\U+1E25)
2212         
2213                (#\U+1E26 . #\U+1E27)
2214          (#\U+1E28 . #\U+1E29)
2215          (#\U+1E2A . #\U+1E2B)
2216         
2217                (#\U+1E2C . #\U+1E2D)
2218          (#\U+1E2E . #\U+1E2F)
2219          (#\U+1E30 . #\U+1E31)
2220         
2221                (#\U+1E32 . #\U+1E33)
2222          (#\U+1E34 . #\U+1E35)
2223          (#\U+1E36 . #\U+1E37)
2224         
2225                (#\U+1E38 . #\U+1E39)
2226          (#\U+1E3A . #\U+1E3B)
2227          (#\U+1E3C . #\U+1E3D)
2228         
2229                (#\U+1E3E . #\U+1E3F)
2230          (#\U+1E40 . #\U+1E41)
2231          (#\U+1E42 . #\U+1E43)
2232         
2233                (#\U+1E44 . #\U+1E45)
2234          (#\U+1E46 . #\U+1E47)
2235          (#\U+1E48 . #\U+1E49)
2236         
2237                (#\U+1E4A . #\U+1E4B)
2238          (#\U+1E4C . #\U+1E4D)
2239          (#\U+1E4E . #\U+1E4F)
2240         
2241                (#\U+1E50 . #\U+1E51)
2242          (#\U+1E52 . #\U+1E53)
2243          (#\U+1E54 . #\U+1E55)
2244         
2245                (#\U+1E56 . #\U+1E57)
2246          (#\U+1E58 . #\U+1E59)
2247          (#\U+1E5A . #\U+1E5B)
2248         
2249                (#\U+1E5C . #\U+1E5D)
2250          (#\U+1E5E . #\U+1E5F)
2251          (#\U+1E60 . #\U+1E61)
2252         
2253                (#\U+1E62 . #\U+1E63)
2254          (#\U+1E64 . #\U+1E65)
2255          (#\U+1E66 . #\U+1E67)
2256         
2257                (#\U+1E68 . #\U+1E69)
2258          (#\U+1E6A . #\U+1E6B)
2259          (#\U+1E6C . #\U+1E6D)
2260         
2261                (#\U+1E6E . #\U+1E6F)
2262          (#\U+1E70 . #\U+1E71)
2263          (#\U+1E72 . #\U+1E73)
2264         
2265                (#\U+1E74 . #\U+1E75)
2266          (#\U+1E76 . #\U+1E77)
2267          (#\U+1E78 . #\U+1E79)
2268         
2269                (#\U+1E7A . #\U+1E7B)
2270          (#\U+1E7C . #\U+1E7D)
2271          (#\U+1E7E . #\U+1E7F)
2272         
2273                (#\U+1E80 . #\U+1E81)
2274          (#\U+1E82 . #\U+1E83)
2275          (#\U+1E84 . #\U+1E85)
2276         
2277                (#\U+1E86 . #\U+1E87)
2278          (#\U+1E88 . #\U+1E89)
2279          (#\U+1E8A . #\U+1E8B)
2280         
2281                (#\U+1E8C . #\U+1E8D)
2282          (#\U+1E8E . #\U+1E8F)
2283          (#\U+1E90 . #\U+1E91)
2284         
2285                (#\U+1E92 . #\U+1E93)
2286          (#\U+1E94 . #\U+1E95)
2287          (#\U+1EA0 . #\U+1EA1)
2288         
2289                (#\U+1EA2 . #\U+1EA3)
2290          (#\U+1EA4 . #\U+1EA5)
2291          (#\U+1EA6 . #\U+1EA7)
2292         
2293                (#\U+1EA8 . #\U+1EA9)
2294          (#\U+1EAA . #\U+1EAB)
2295          (#\U+1EAC . #\U+1EAD)
2296         
2297                (#\U+1EAE . #\U+1EAF)
2298          (#\U+1EB0 . #\U+1EB1)
2299          (#\U+1EB2 . #\U+1EB3)
2300         
2301                (#\U+1EB4 . #\U+1EB5)
2302          (#\U+1EB6 . #\U+1EB7)
2303          (#\U+1EB8 . #\U+1EB9)
2304         
2305                (#\U+1EBA . #\U+1EBB)
2306          (#\U+1EBC . #\U+1EBD)
2307          (#\U+1EBE . #\U+1EBF)
2308         
2309                (#\U+1EC0 . #\U+1EC1)
2310          (#\U+1EC2 . #\U+1EC3)
2311          (#\U+1EC4 . #\U+1EC5)
2312         
2313                (#\U+1EC6 . #\U+1EC7)
2314          (#\U+1EC8 . #\U+1EC9)
2315          (#\U+1ECA . #\U+1ECB)
2316         
2317                (#\U+1ECC . #\U+1ECD)
2318          (#\U+1ECE . #\U+1ECF)
2319          (#\U+1ED0 . #\U+1ED1)
2320         
2321                (#\U+1ED2 . #\U+1ED3)
2322          (#\U+1ED4 . #\U+1ED5)
2323          (#\U+1ED6 . #\U+1ED7)
2324         
2325                (#\U+1ED8 . #\U+1ED9)
2326          (#\U+1EDA . #\U+1EDB)
2327          (#\U+1EDC . #\U+1EDD)
2328         
2329                (#\U+1EDE . #\U+1EDF)
2330          (#\U+1EE0 . #\U+1EE1)
2331          (#\U+1EE2 . #\U+1EE3)
2332         
2333                (#\U+1EE4 . #\U+1EE5)
2334          (#\U+1EE6 . #\U+1EE7)
2335          (#\U+1EE8 . #\U+1EE9)
2336         
2337                (#\U+1EEA . #\U+1EEB)
2338          (#\U+1EEC . #\U+1EED)
2339          (#\U+1EEE . #\U+1EEF)
2340         
2341                (#\U+1EF0 . #\U+1EF1)
2342          (#\U+1EF2 . #\U+1EF3)
2343          (#\U+1EF4 . #\U+1EF5)
2344         
2345                (#\U+1EF6 . #\U+1EF7)
2346          (#\U+1EF8 . #\U+1EF9)
2347          (#\U+1F08 . #\U+1F00)
2348         
2349                (#\U+1F09 . #\U+1F01)
2350          (#\U+1F0A . #\U+1F02)
2351          (#\U+1F0B . #\U+1F03)
2352         
2353                (#\U+1F0C . #\U+1F04)
2354          (#\U+1F0D . #\U+1F05)
2355          (#\U+1F0E . #\U+1F06)
2356         
2357                (#\U+1F0F . #\U+1F07)
2358          (#\U+1F18 . #\U+1F10)
2359          (#\U+1F19 . #\U+1F11)
2360         
2361                (#\U+1F1A . #\U+1F12)
2362          (#\U+1F1B . #\U+1F13)
2363          (#\U+1F1C . #\U+1F14)
2364         
2365                (#\U+1F1D . #\U+1F15)
2366          (#\U+1F28 . #\U+1F20)
2367          (#\U+1F29 . #\U+1F21)
2368         
2369                (#\U+1F2A . #\U+1F22)
2370          (#\U+1F2B . #\U+1F23)
2371          (#\U+1F2C . #\U+1F24)
2372         
2373                (#\U+1F2D . #\U+1F25)
2374          (#\U+1F2E . #\U+1F26)
2375          (#\U+1F2F . #\U+1F27)
2376         
2377                (#\U+1F38 . #\U+1F30)
2378          (#\U+1F39 . #\U+1F31)
2379          (#\U+1F3A . #\U+1F32)
2380         
2381                (#\U+1F3B . #\U+1F33)
2382          (#\U+1F3C . #\U+1F34)
2383          (#\U+1F3D . #\U+1F35)
2384         
2385                (#\U+1F3E . #\U+1F36)
2386          (#\U+1F3F . #\U+1F37)
2387          (#\U+1F48 . #\U+1F40)
2388         
2389                (#\U+1F49 . #\U+1F41)
2390          (#\U+1F4A . #\U+1F42)
2391          (#\U+1F4B . #\U+1F43)
2392         
2393                (#\U+1F4C . #\U+1F44)
2394          (#\U+1F4D . #\U+1F45)
2395          (#\U+1F59 . #\U+1F51)
2396         
2397                (#\U+1F5B . #\U+1F53)
2398          (#\U+1F5D . #\U+1F55)
2399          (#\U+1F5F . #\U+1F57)
2400         
2401                (#\U+1F68 . #\U+1F60)
2402          (#\U+1F69 . #\U+1F61)
2403          (#\U+1F6A . #\U+1F62)
2404         
2405                (#\U+1F6B . #\U+1F63)
2406          (#\U+1F6C . #\U+1F64)
2407          (#\U+1F6D . #\U+1F65)
2408         
2409                (#\U+1F6E . #\U+1F66)
2410          (#\U+1F6F . #\U+1F67)
2411          (#\U+1F88 . #\U+1F80)
2412         
2413                (#\U+1F89 . #\U+1F81)
2414          (#\U+1F8A . #\U+1F82)
2415          (#\U+1F8B . #\U+1F83)
2416         
2417                (#\U+1F8C . #\U+1F84)
2418          (#\U+1F8D . #\U+1F85)
2419          (#\U+1F8E . #\U+1F86)
2420         
2421                (#\U+1F8F . #\U+1F87)
2422          (#\U+1F98 . #\U+1F90)
2423          (#\U+1F99 . #\U+1F91)
2424         
2425                (#\U+1F9A . #\U+1F92)
2426          (#\U+1F9B . #\U+1F93)
2427          (#\U+1F9C . #\U+1F94)
2428         
2429                (#\U+1F9D . #\U+1F95)
2430          (#\U+1F9E . #\U+1F96)
2431          (#\U+1F9F . #\U+1F97)
2432         
2433                (#\U+1FA8 . #\U+1FA0)
2434          (#\U+1FA9 . #\U+1FA1)
2435          (#\U+1FAA . #\U+1FA2)
2436         
2437                (#\U+1FAB . #\U+1FA3)
2438          (#\U+1FAC . #\U+1FA4)
2439          (#\U+1FAD . #\U+1FA5)
2440         
2441                (#\U+1FAE . #\U+1FA6)
2442          (#\U+1FAF . #\U+1FA7)
2443          (#\U+1FB8 . #\U+1FB0)
2444         
2445                (#\U+1FB9 . #\U+1FB1)
2446          (#\U+1FBA . #\U+1F70)
2447          (#\U+1FBB . #\U+1F71)
2448         
2449                (#\U+1FBC . #\U+1FB3)
2450          (#\U+1FC8 . #\U+1F72)
2451          (#\U+1FC9 . #\U+1F73)
2452         
2453                (#\U+1FCA . #\U+1F74)
2454          (#\U+1FCB . #\U+1F75)
2455          (#\U+1FCC . #\U+1FC3)
2456         
2457                (#\U+1FD8 . #\U+1FD0)
2458          (#\U+1FD9 . #\U+1FD1)
2459          (#\U+1FDA . #\U+1F76)
2460         
2461                (#\U+1FDB . #\U+1F77)
2462          (#\U+1FE8 . #\U+1FE0)
2463          (#\U+1FE9 . #\U+1FE1)
2464         
2465                (#\U+1FEA . #\U+1F7A)
2466          (#\U+1FEB . #\U+1F7B)
2467          (#\U+1FEC . #\U+1FE5)
2468         
2469                (#\U+1FF8 . #\U+1F78)
2470          (#\U+1FF9 . #\U+1F79)
2471          (#\U+1FFA . #\U+1F7C)
2472         
2473                (#\U+1FFB . #\U+1F7D)
2474          (#\U+1FFC . #\U+1FF3)
2475          (#\U+2132 . #\U+214E)
2476         
2477                (#\U+2160 . #\U+2170)
2478          (#\U+2161 . #\U+2171)
2479          (#\U+2162 . #\U+2172)
2480         
2481                (#\U+2163 . #\U+2173)
2482          (#\U+2164 . #\U+2174)
2483          (#\U+2165 . #\U+2175)
2484         
2485                (#\U+2166 . #\U+2176)
2486          (#\U+2167 . #\U+2177)
2487          (#\U+2168 . #\U+2178)
2488         
2489                (#\U+2169 . #\U+2179)
2490          (#\U+216A . #\U+217A)
2491          (#\U+216B . #\U+217B)
2492         
2493                (#\U+216C . #\U+217C)
2494          (#\U+216D . #\U+217D)
2495          (#\U+216E . #\U+217E)
2496         
2497                (#\U+216F . #\U+217F)
2498          (#\U+2183 . #\U+2184)
2499          (#\U+24B6 . #\U+24D0)
2500         
2501                (#\U+24B7 . #\U+24D1)
2502          (#\U+24B8 . #\U+24D2)
2503          (#\U+24B9 . #\U+24D3)
2504         
2505                (#\U+24BA . #\U+24D4)
2506          (#\U+24BB . #\U+24D5)
2507          (#\U+24BC . #\U+24D6)
2508         
2509                (#\U+24BD . #\U+24D7)
2510          (#\U+24BE . #\U+24D8)
2511          (#\U+24BF . #\U+24D9)
2512         
2513                (#\U+24C0 . #\U+24DA)
2514          (#\U+24C1 . #\U+24DB)
2515          (#\U+24C2 . #\U+24DC)
2516         
2517                (#\U+24C3 . #\U+24DD)
2518          (#\U+24C4 . #\U+24DE)
2519          (#\U+24C5 . #\U+24DF)
2520         
2521                (#\U+24C6 . #\U+24E0)
2522          (#\U+24C7 . #\U+24E1)
2523          (#\U+24C8 . #\U+24E2)
2524         
2525                (#\U+24C9 . #\U+24E3)
2526          (#\U+24CA . #\U+24E4)
2527          (#\U+24CB . #\U+24E5)
2528         
2529                (#\U+24CC . #\U+24E6)
2530          (#\U+24CD . #\U+24E7)
2531          (#\U+24CE . #\U+24E8)
2532         
2533                (#\U+24CF . #\U+24E9)
2534          (#\U+2C00 . #\U+2C30)
2535          (#\U+2C01 . #\U+2C31)
2536         
2537                (#\U+2C02 . #\U+2C32)
2538          (#\U+2C03 . #\U+2C33)
2539          (#\U+2C04 . #\U+2C34)
2540         
2541                (#\U+2C05 . #\U+2C35)
2542          (#\U+2C06 . #\U+2C36)
2543          (#\U+2C07 . #\U+2C37)
2544         
2545                (#\U+2C08 . #\U+2C38)
2546          (#\U+2C09 . #\U+2C39)
2547          (#\U+2C0A . #\U+2C3A)
2548         
2549                (#\U+2C0B . #\U+2C3B)
2550          (#\U+2C0C . #\U+2C3C)
2551          (#\U+2C0D . #\U+2C3D)
2552         
2553                (#\U+2C0E . #\U+2C3E)
2554          (#\U+2C0F . #\U+2C3F)
2555          (#\U+2C10 . #\U+2C40)
2556         
2557                (#\U+2C11 . #\U+2C41)
2558          (#\U+2C12 . #\U+2C42)
2559          (#\U+2C13 . #\U+2C43)
2560         
2561                (#\U+2C14 . #\U+2C44)
2562          (#\U+2C15 . #\U+2C45)
2563          (#\U+2C16 . #\U+2C46)
2564         
2565                (#\U+2C17 . #\U+2C47)
2566          (#\U+2C18 . #\U+2C48)
2567          (#\U+2C19 . #\U+2C49)
2568         
2569                (#\U+2C1A . #\U+2C4A)
2570          (#\U+2C1B . #\U+2C4B)
2571          (#\U+2C1C . #\U+2C4C)
2572         
2573                (#\U+2C1D . #\U+2C4D)
2574          (#\U+2C1E . #\U+2C4E)
2575          (#\U+2C1F . #\U+2C4F)
2576         
2577                (#\U+2C20 . #\U+2C50)
2578          (#\U+2C21 . #\U+2C51)
2579          (#\U+2C22 . #\U+2C52)
2580         
2581                (#\U+2C23 . #\U+2C53)
2582          (#\U+2C24 . #\U+2C54)
2583          (#\U+2C25 . #\U+2C55)
2584         
2585                (#\U+2C26 . #\U+2C56)
2586          (#\U+2C27 . #\U+2C57)
2587          (#\U+2C28 . #\U+2C58)
2588         
2589                (#\U+2C29 . #\U+2C59)
2590          (#\U+2C2A . #\U+2C5A)
2591          (#\U+2C2B . #\U+2C5B)
2592         
2593                (#\U+2C2C . #\U+2C5C)
2594          (#\U+2C2D . #\U+2C5D)
2595          (#\U+2C2E . #\U+2C5E)
2596         
2597                (#\U+2C60 . #\U+2C61)
2598          (#\U+2C62 . #\Latin_Small_Letter_L_With_Middle_Tilde)
2599         
2600                (#\U+2C63 . #\U+1D7D)
2601          (#\U+2C64 . #\Latin_Small_Letter_R_With_Tail)
2602         
2603                (#\U+2C67 . #\U+2C68)
2604          (#\U+2C69 . #\U+2C6A)
2605          (#\U+2C6B . #\U+2C6C)
2606         
2607                (#\U+2C75 . #\U+2C76)
2608          (#\U+2C80 . #\U+2C81)
2609          (#\U+2C82 . #\U+2C83)
2610         
2611                (#\U+2C84 . #\U+2C85)
2612          (#\U+2C86 . #\U+2C87)
2613          (#\U+2C88 . #\U+2C89)
2614         
2615                (#\U+2C8A . #\U+2C8B)
2616          (#\U+2C8C . #\U+2C8D)
2617          (#\U+2C8E . #\U+2C8F)
2618         
2619                (#\U+2C90 . #\U+2C91)
2620          (#\U+2C92 . #\U+2C93)
2621          (#\U+2C94 . #\U+2C95)
2622         
2623                (#\U+2C96 . #\U+2C97)
2624          (#\U+2C98 . #\U+2C99)
2625          (#\U+2C9A . #\U+2C9B)
2626         
2627                (#\U+2C9C . #\U+2C9D)
2628          (#\U+2C9E . #\U+2C9F)
2629          (#\U+2CA0 . #\U+2CA1)
2630         
2631                (#\U+2CA2 . #\U+2CA3)
2632          (#\U+2CA4 . #\U+2CA5)
2633          (#\U+2CA6 . #\U+2CA7)
2634         
2635                (#\U+2CA8 . #\U+2CA9)
2636          (#\U+2CAA . #\U+2CAB)
2637          (#\U+2CAC . #\U+2CAD)
2638         
2639                (#\U+2CAE . #\U+2CAF)
2640          (#\U+2CB0 . #\U+2CB1)
2641          (#\U+2CB2 . #\U+2CB3)
2642         
2643                (#\U+2CB4 . #\U+2CB5)
2644          (#\U+2CB6 . #\U+2CB7)
2645          (#\U+2CB8 . #\U+2CB9)
2646         
2647                (#\U+2CBA . #\U+2CBB)
2648          (#\U+2CBC . #\U+2CBD)
2649          (#\U+2CBE . #\U+2CBF)
2650         
2651                (#\U+2CC0 . #\U+2CC1)
2652          (#\U+2CC2 . #\U+2CC3)
2653          (#\U+2CC4 . #\U+2CC5)
2654         
2655                (#\U+2CC6 . #\U+2CC7)
2656          (#\U+2CC8 . #\U+2CC9)
2657          (#\U+2CCA . #\U+2CCB)
2658         
2659                (#\U+2CCC . #\U+2CCD)
2660          (#\U+2CCE . #\U+2CCF)
2661          (#\U+2CD0 . #\U+2CD1)
2662         
2663                (#\U+2CD2 . #\U+2CD3)
2664          (#\U+2CD4 . #\U+2CD5)
2665          (#\U+2CD6 . #\U+2CD7)
2666         
2667                (#\U+2CD8 . #\U+2CD9)
2668          (#\U+2CDA . #\U+2CDB)
2669          (#\U+2CDC . #\U+2CDD)
2670         
2671                (#\U+2CDE . #\U+2CDF)
2672          (#\U+2CE0 . #\U+2CE1)
2673          (#\U+2CE2 . #\U+2CE3)
2674         
2675                (#\U+FF21 . #\U+FF41)
2676          (#\U+FF22 . #\U+FF42)
2677          (#\U+FF23 . #\U+FF43)
2678         
2679                (#\U+FF24 . #\U+FF44)
2680          (#\U+FF25 . #\U+FF45)
2681          (#\U+FF26 . #\U+FF46)
2682         
2683                (#\U+FF27 . #\U+FF47)
2684          (#\U+FF28 . #\U+FF48)
2685          (#\U+FF29 . #\U+FF49)
2686         
2687                (#\U+FF2A . #\U+FF4A)
2688          (#\U+FF2B . #\U+FF4B)
2689          (#\U+FF2C . #\U+FF4C)
2690         
2691                (#\U+FF2D . #\U+FF4D)
2692          (#\U+FF2E . #\U+FF4E)
2693          (#\U+FF2F . #\U+FF4F)
2694         
2695                (#\U+FF30 . #\U+FF50)
2696          (#\U+FF31 . #\U+FF51)
2697          (#\U+FF32 . #\U+FF52)
2698         
2699                (#\U+FF33 . #\U+FF53)
2700          (#\U+FF34 . #\U+FF54)
2701          (#\U+FF35 . #\U+FF55)
2702         
2703                (#\U+FF36 . #\U+FF56)
2704          (#\U+FF37 . #\U+FF57)
2705          (#\U+FF38 . #\U+FF58)
2706         
2707                (#\U+FF39 . #\U+FF59)
2708          (#\U+FF3A . #\U+FF5A)
2709          (#\U+10400 . #\U+10428)
2710         
2711                (#\U+10401 . #\U+10429)
2712          (#\U+10402 . #\U+1042A)
2713          (#\U+10403 . #\U+1042B)
2714         
2715                (#\U+10404 . #\U+1042C)
2716          (#\U+10405 . #\U+1042D)
2717          (#\U+10406 . #\U+1042E)
2718         
2719                (#\U+10407 . #\U+1042F)
2720          (#\U+10408 . #\U+10430)
2721          (#\U+10409 . #\U+10431)
2722         
2723                (#\U+1040A . #\U+10432)
2724          (#\U+1040B . #\U+10433)
2725          (#\U+1040C . #\U+10434)
2726         
2727                (#\U+1040D . #\U+10435)
2728          (#\U+1040E . #\U+10436)
2729          (#\U+1040F . #\U+10437)
2730         
2731                (#\U+10410 . #\U+10438)
2732          (#\U+10411 . #\U+10439)
2733          (#\U+10412 . #\U+1043A)
2734         
2735                (#\U+10413 . #\U+1043B)
2736          (#\U+10414 . #\U+1043C)
2737          (#\U+10415 . #\U+1043D)
2738         
2739                (#\U+10416 . #\U+1043E)
2740          (#\U+10417 . #\U+1043F)
2741          (#\U+10418 . #\U+10440)
2742         
2743                (#\U+10419 . #\U+10441)
2744          (#\U+1041A . #\U+10442)
2745          (#\U+1041B . #\U+10443)
2746         
2747                (#\U+1041C . #\U+10444)
2748          (#\U+1041D . #\U+10445)
2749          (#\U+1041E . #\U+10446)
2750         
2751                (#\U+1041F . #\U+10447)
2752          (#\U+10420 . #\U+10448)
2753          (#\U+10421 . #\U+10449)
2754         
2755                (#\U+10422 . #\U+1044A)
2756          (#\U+10423 . #\U+1044B)
2757          (#\U+10424 . #\U+1044C)
2758         
2759                (#\U+10425 . #\U+1044D)
2760          (#\U+10426 . #\U+1044E)
2761          (#\U+10427 . #\U+1044F)
2762          ))
2763       (max-upper #\u+0000)
2764       (max-lower #\u+0000))
2765  (dolist (pair mapping)
2766    (destructuring-bind (upper . lower) pair
2767      (when (char> upper max-upper)
2768        (setq max-upper upper))
2769      (when (char> lower max-lower)
2770        (setq max-lower lower))))
2771  (let* ((upper-to-lower (make-array (the fixnum (1+ (the fixnum (char-code max-upper)))) :element-type '(signed-byte 16)))
2772         (lower-to-upper (make-array (the fixnum (1+ (the fixnum (char-code max-lower)))) :element-type '(signed-byte 16))))
2773  (dolist (pair mapping)
2774    (destructuring-bind (upper . lower) pair
2775      (let* ((upper-code (char-code upper))
2776             (lower-code (char-code lower))
2777             (diff (- lower-code upper-code)))
2778        (declare (type (mod #x110000) upper-code lower-code)
2779                 (type (signed-byte 16) diff))
2780        (setf (aref upper-to-lower upper-code) diff
2781              (aref lower-to-upper lower-code) (the fixnum (- diff))))))
2782  (do* ((upper (char-code #\A) (1+ upper))
2783        (lower (char-code #\a) (1+ lower)))
2784       ((> upper (char-code #\Z)))
2785    (setf (aref upper-to-lower upper) (- lower upper)
2786          (aref lower-to-upper lower) (- upper lower)))
2787  (setq *lower-to-upper* lower-to-upper
2788        *upper-to-lower* upper-to-lower)
2789  nil))
2790
2791(eval-when (:compile-toplevel)
2792  (declaim (inline %char-code-case-fold)))
2793
2794(defun %char-code-case-fold (code table)
2795  (declare (type (mod #x110000) code)
2796           (type (simple-array (signed-byte 16) (*)) table))
2797  (if (>= code (length table))
2798    code
2799    (locally (declare (optimize (speed 3) (safety 0)))
2800      (the fixnum (+ code (the (signed-byte 16) (aref table code)))))))
2801
2802(defun %char-code-upcase (code)
2803  (%char-code-case-fold code *lower-to-upper*))
2804
2805(defun char-upcase (c)
2806  "Return CHAR converted to upper-case if that is possible.  Don't convert
2807   lowercase eszet (U+DF)."
2808  (declare (optimize speed))            ; so that %char-code-case-fold inlines
2809  (code-char (the valid-char-code (%char-code-case-fold (char-code c) *lower-to-upper*))))
2810
2811(defun %non-standard-char-code-upcase (code)
2812  (declare (type (mod #x110000) code))
2813  (%char-code-upcase code))
2814
2815
2816(defun %char-code-downcase (code)
2817  (declare (type (mod #x110000) code))
2818  (let* ((table *upper-to-lower*))
2819    (declare (type (simple-array (signed-byte 16) (*)) table))
2820    (if (>= code (length table))
2821      code
2822      (locally (declare (optimize (speed 3) (safety 0)))
2823        (the fixnum (+ code (the (signed-byte 16) (aref table code))))))))
2824
2825
2826(defun %non-standard-upper-case-equivalent (char)
2827  (let* ((code (char-code char))
2828         (table *lower-to-upper*)
2829         (disp 0))
2830    (declare (type (mod #x110000) code)
2831             (type (simple-array (signed-byte 16) (*)))
2832             (type (signed-byte 16) disp))
2833    (if (< code (length table))
2834      (setq disp (aref table code)))
2835    (unless (zerop disp)
2836      (code-char (+ code disp)))))
2837   
2838
2839
2840(defun %non-standard-lower-case-equivalent (char)
2841  (let* ((code (char-code char))
2842         (table *upper-to-lower*)
2843         (disp 0))
2844    (declare (type (mod #x110000) code)
2845             (type (simple-array (signed-byte 16) (*)))
2846             (type (signed-byte 16) disp))
2847    (if (< code (length table))
2848      (setq disp (aref table code)))
2849    (unless (zerop disp)
2850      (code-char (+ code disp)))))
2851
2852;;;True for a-z, and maybe other things.
2853(defun lower-case-p (c)
2854  "The argument must be a character object; LOWER-CASE-P returns T if the
2855   argument is a lower-case character, NIL otherwise."
2856  (let* ((code (char-code c))
2857         (table *lower-to-upper*))
2858    (declare (type (mod #x110000) code)
2859             (type (simple-array (signed-byte 16) (*)) table))
2860    (if (< code (length table))
2861      (not (eql 0 (the (signed-byte 16) (aref table code)))))))
2862
2863
2864
2865;;;True for a-z A-Z, others.
2866
2867
2868(defun alpha-char-p (c)
2869  "The argument must be a character object. ALPHA-CHAR-P returns T if the
2870   argument is an alphabetic character; otherwise NIL."
2871  (let* ((code (char-code c))
2872         (upper *upper-to-lower*)
2873         (lower *lower-to-upper*))
2874    (declare (type (mod #x110000 code))
2875             (type (simple-array (signed-byte 16) (*)) upper lower))
2876    (or (and (< code (length upper))
2877             (not (zerop (the (signed-byte 16) (aref upper code)))))
2878        (and (< code (length lower))
2879             (not (zerop (the (signed-byte 16) (aref lower code))))))))
2880
2881
2882
2883
2884;;; def-accessors type-tracking stuff.  Used by inspector
2885(defvar *def-accessor-types* nil)
2886
2887(defun add-accessor-types (types names)
2888  (dolist (type types)
2889    (let ((cell (or (assq type *def-accessor-types*)
2890                    (car (push (cons type nil) *def-accessor-types*)))))
2891      (setf (cdr cell) (if (vectorp names) names (%list-to-uvector nil names))))))
2892
2893
2894;;; Some simple explicit storage management for cons cells
2895
2896(def-standard-initial-binding *cons-pool* (%cons-pool nil))
2897
2898(defun cheap-cons (car cdr)
2899  (let* ((pool *cons-pool*)
2900         (cons (pool.data pool)))
2901    (if cons
2902      (locally (declare (type cons cons))
2903        (setf (pool.data pool) (cdr cons)
2904              (car cons) car
2905              (cdr cons) cdr)
2906        cons)
2907      (cons car cdr))))
2908
2909(defun free-cons (cons)
2910  (when (consp cons)
2911    (locally (declare (type cons cons))
2912      (setf (car cons) nil
2913            (cdr cons) nil)
2914      (let* ((pool *cons-pool*)
2915             (freelist (pool.data pool)))
2916        (setf (pool.data pool) cons
2917              (cdr cons) freelist)))))
2918
2919(defun cheap-copy-list (list)
2920  (let ((l list)
2921        res)
2922    (loop
2923      (when (atom l)
2924        (return (nreconc res l)))
2925      (setq res (cheap-cons (pop l) res)))))
2926
2927(defun cheap-list (&rest args)
2928  (declare (dynamic-extent args))
2929  (cheap-copy-list args))
2930
2931;;; Works for dotted lists
2932(defun cheap-free-list (list)
2933  (let ((l list)
2934        next-l)
2935    (loop
2936      (setq next-l (cdr l))
2937      (free-cons l)
2938      (when (atom (setq l next-l))
2939        (return)))))
2940
2941(defmacro pop-and-free (place)
2942  (setq place (require-type place 'symbol))     ; all I need for now.
2943  (let ((list (gensym))
2944        (cdr (gensym)))
2945    `(let* ((,list ,place)
2946            (,cdr (cdr ,list)))
2947       (prog1
2948         (car ,list)
2949         (setf ,place ,cdr)
2950         (free-cons ,list)))))
2951
2952;;; Support for defresource & using-resource macros
2953(defun make-resource (constructor &key destructor initializer)
2954  (%cons-resource constructor destructor initializer))
2955
2956(defun allocate-resource (resource)
2957  (setq resource (require-type resource 'resource))
2958  (with-lock-grabbed ((resource.lock resource))
2959    (let ((pool (resource.pool resource))
2960          res)
2961      (let ((data (pool.data pool)))
2962        (when data
2963          (setf res (car data)
2964                (pool.data pool) (cdr (the cons data)))
2965          (free-cons data)))
2966      (if res
2967        (let ((initializer (resource.initializer resource)))
2968          (when initializer
2969            (funcall initializer res)))
2970        (setq res (funcall (resource.constructor resource))))
2971      res)))
2972
2973(defun free-resource (resource instance)
2974  (setq resource (require-type resource 'resource))
2975  (with-lock-grabbed ((resource.lock resource))
2976    (let ((pool (resource.pool resource))
2977          (destructor (resource.destructor resource)))
2978      (when destructor
2979        (funcall destructor instance))
2980      (setf (pool.data pool)
2981            (cheap-cons instance (pool.data pool)))))
2982  resource)
2983
2984(defun valid-char-code-p (code)
2985  (and (typep code 'fixnum)
2986       (locally (declare (fixnum code))
2987         (and 
2988          (>= code 0)
2989          (< code #x110000)
2990          (or (< code #xfffe)
2991              (> code #xffff))
2992          (or (< code #xd800)
2993              (> code #xdfff))))))
2994
2995
2996(defpackage #.(ftd-interface-package-name
2997               (backend-target-foreign-type-data *target-backend*))
2998  (:nicknames "OS")
2999  (:use "COMMON-LISP"))
3000
3001
3002
Note: See TracBrowser for help on using the repository browser.