Changeset 9508


Ignore:
Timestamp:
May 16, 2008, 1:03:56 AM (11 years ago)
Author:
gb
Message:

CHECK-SEQUENCE-BOUNDS has to signal TYPE-ERRORs in some cases.

New support for case folding: the maximum Unicode char-code for which
either CHAR-UPCASE or CHAR-DOWNCASE returns something other than its
arg is <70K. Those codes wouldn't all fit in a vector with 16-bit
elements, but the maximum difference between any char-code and its
equivalent is ~10K (the vast majority of differences are actually
of type (SIGNED-BYTE 8), but there are some outliers.) So, two
sparse ~70K-element vectors of (signed-byte 16) can map from any
character that can be case-folded to the difference between that
code and its equivalent, which means that we can do case folding
as comparison, aref, and add.

Update char-upcase/downcase and friends to exploit this; they
generally get faster as a result.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711-perf/ccl/level-1/l1-aprims.lisp

    r9419 r9508  
    401401
    402402(defun check-sequence-bounds (seq start end)
    403   (flet ((bsi (seq start end)
     403  (flet ((bad-sequence-interval (seq start end)
     404           (unless (typep start 'unsigned-byte)
     405             (report-bad-arg start 'unsigned-byte))
     406           (if (and end (not (typep end 'unsigned-byte)))
     407             (report-bad-arg end '(or null unsigned-byte)))
    404408           (error "Bad interval for sequence operation on ~s : start = ~s, end = ~s" seq start end)))
    405     (let* ((length (length seq)))
    406       (declare (fixnum length))
    407       (if (not end)
    408         (setq end length)
    409         (progn
    410           (unless (typep end 'fixnum)
    411             (bsi seq start end))
    412           (when (> (the fixnum end) length)
    413             (bsi seq start end))))
    414       (unless (typep start 'fixnum)
    415         (bsi seq start end))
    416       (locally (declare (fixnum start end))
    417         (cond ((< start 0)
    418                (bsi seq start end))
    419               ((< end 0)
    420                (bsi seq start end))
    421               ((> start end)
    422                (bsi seq start end))
    423               (t end))))))
     409  (let* ((length (length seq)))
     410    (declare (fixnum length))
     411    (if (and (typep start 'fixnum)
     412             (<= 0 (the fixnum start))
     413             (if (null end)
     414               (<= (the fixnum start) (the fixnum (setq end length)))
     415               (and (typep end 'fixnum)
     416                    (<= (the fixnum start) (the fixnum end))
     417                    (<= (the fixnum end) (the fixnum length)))))
     418
     419      end
     420      (bad-sequence-interval seq start end)))))
     421
    424422 
    425423
     
    877875(defun char-downcase (c)
    878876  "Return CHAR converted to lower-case if that is possible."
    879   (let* ((code (char-code c)))
    880     (declare (type (mod #x110000) code))
    881     (if (and (>= code (char-code #\A))(<= code (char-code #\Z)))
    882       (%code-char (%i+ code #.(- (char-code #\a)(char-code #\A))))
    883       (or (and (>= code #x80)
    884                (%non-standard-lower-case-equivalent c))
    885           c))))
     877  (declare (optimize (speed 3))) ; open-code the %CHAR-CODE-DOWNCASE here.
     878  (code-char (the valid-char-code (%char-code-downcase (char-code c)))))
    886879
    887880
     
    912905
    913906
    914 (defun char-upcase (c)
    915   "Return CHAR converted to upper-case if that is possible.  Don't convert
    916    lowercase eszet (U+DF)."
    917   (let* ((code (char-code c)))
    918     (declare (type (mod #x110000) code))
    919     (if (and (>= code (char-code #\a))(<= code (char-code #\z)))
    920       (%code-char (%i- code #.(- (char-code #\a)(char-code #\A))))
    921       (or (and (>= code #x80) (%non-standard-upper-case-equivalent c))
    922           c))))
    923 
    924 (defun %non-standard-char-code-upcase (code)
    925   (declare (type (mod #x110000) code))
    926   (if (>= code #x80)
    927     (let* ((upper (%non-standard-upper-case-equivalent (code-char code))))
    928       (if upper
    929         (char-code upper)
    930         code))
    931     code))
    932907
    933908
     
    11701145       (= (uvsize p) target::xmacptr.element-count)))
    11711146
    1172 (defstatic *non-standard-upper-case-characters* nil)
    1173 (defstatic *non-standard-lower-case-equivalents* nil)
    1174 (defstatic *non-standard-lower-case-characters* nil)
    1175 (defstatic *non-standard-upper-case-equivalents* nil)
    1176 
    1177 
    1178 ;;; These alists are automatically (and not too cleverly ...) generated.
     1147(defstatic *upper-to-lower* nil)
     1148(defstatic *lower-to-upper*  nil)
     1149
     1150
     1151
     1152;;; This alist is automatically (and not too cleverly ...) generated.
    11791153;;; The (upper . lower) pairs have the property that UPPER is the
    11801154;;; value "simple uppercase equivalent" entry for LOWER in the
    11811155;;; UnicodeData.txt file and LOWER is the corresponding entry for
    11821156;;; UPPER,
    1183 (let* ((upper-to-lower
     1157(let* ((mapping
    11841158        '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
    11851159                (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
     
    27682742          (#\U+10427 . #\U+1044F)
    27692743          ))
    2770          (lower-to-upper
    2771           '((#\Latin_Small_Letter_A_With_Grave . #\Latin_Capital_Letter_A_With_Grave)
    2772             (#\Latin_Small_Letter_A_With_Acute . #\Latin_Capital_Letter_A_With_Acute)
    2773             (#\Latin_Small_Letter_A_With_Circumflex . #\Latin_Capital_Letter_A_With_Circumflex)
    2774             (#\Latin_Small_Letter_A_With_Tilde . #\Latin_Capital_Letter_A_With_Tilde)
    2775             (#\Latin_Small_Letter_A_With_Diaeresis . #\Latin_Capital_Letter_A_With_Diaeresis)
    2776             (#\Latin_Small_Letter_A_With_Ring_Above . #\Latin_Capital_Letter_A_With_Ring_Above)
    2777             (#\Latin_Small_Letter_Ae . #\Latin_Capital_Letter_Ae)
    2778             (#\Latin_Small_Letter_C_With_Cedilla . #\Latin_Capital_Letter_C_With_Cedilla)
    2779             (#\Latin_Small_Letter_E_With_Grave . #\Latin_Capital_Letter_E_With_Grave)
    2780             (#\Latin_Small_Letter_E_With_Acute . #\Latin_Capital_Letter_E_With_Acute)
    2781             (#\Latin_Small_Letter_E_With_Circumflex . #\Latin_Capital_Letter_E_With_Circumflex)
    2782             (#\Latin_Small_Letter_E_With_Diaeresis . #\Latin_Capital_Letter_E_With_Diaeresis)
    2783             (#\Latin_Small_Letter_I_With_Grave . #\Latin_Capital_Letter_I_With_Grave)
    2784             (#\Latin_Small_Letter_I_With_Acute . #\Latin_Capital_Letter_I_With_Acute)
    2785             (#\Latin_Small_Letter_I_With_Circumflex . #\Latin_Capital_Letter_I_With_Circumflex)
    2786             (#\Latin_Small_Letter_I_With_Diaeresis . #\Latin_Capital_Letter_I_With_Diaeresis)
    2787             (#\Latin_Small_Letter_Eth . #\Latin_Capital_Letter_Eth)
    2788             (#\Latin_Small_Letter_N_With_Tilde . #\Latin_Capital_Letter_N_With_Tilde)
    2789             (#\Latin_Small_Letter_O_With_Grave . #\Latin_Capital_Letter_O_With_Grave)
    2790             (#\Latin_Small_Letter_O_With_Acute . #\Latin_Capital_Letter_O_With_Acute)
    2791             (#\Latin_Small_Letter_O_With_Circumflex . #\Latin_Capital_Letter_O_With_Circumflex)
    2792             (#\Latin_Small_Letter_O_With_Tilde . #\Latin_Capital_Letter_O_With_Tilde)
    2793             (#\Latin_Small_Letter_O_With_Diaeresis . #\Latin_Capital_Letter_O_With_Diaeresis)
    2794             (#\Latin_Small_Letter_O_With_Stroke . #\Latin_Capital_Letter_O_With_Stroke)
    2795             (#\Latin_Small_Letter_U_With_Grave . #\Latin_Capital_Letter_U_With_Grave)
    2796             (#\Latin_Small_Letter_U_With_Acute . #\Latin_Capital_Letter_U_With_Acute)
    2797             (#\Latin_Small_Letter_U_With_Circumflex . #\Latin_Capital_Letter_U_With_Circumflex)
    2798             (#\Latin_Small_Letter_U_With_Diaeresis . #\Latin_Capital_Letter_U_With_Diaeresis)
    2799             (#\Latin_Small_Letter_Y_With_Acute . #\Latin_Capital_Letter_Y_With_Acute)
    2800             (#\Latin_Small_Letter_Thorn . #\Latin_Capital_Letter_Thorn)
    2801             (#\Latin_Small_Letter_Y_With_Diaeresis . #\Latin_Capital_Letter_Y_With_Diaeresis)
    2802             (#\Latin_Small_Letter_A_With_Macron . #\Latin_Capital_Letter_A_With_Macron)
    2803             (#\Latin_Small_Letter_A_With_Breve . #\Latin_Capital_Letter_A_With_Breve)
    2804             (#\Latin_Small_Letter_A_With_Ogonek . #\Latin_Capital_Letter_A_With_Ogonek)
    2805             (#\Latin_Small_Letter_C_With_Acute . #\Latin_Capital_Letter_C_With_Acute)
    2806             (#\Latin_Small_Letter_C_With_Circumflex . #\Latin_Capital_Letter_C_With_Circumflex)
    2807             (#\Latin_Small_Letter_C_With_Dot_Above . #\Latin_Capital_Letter_C_With_Dot_Above)
    2808             (#\Latin_Small_Letter_C_With_Caron . #\Latin_Capital_Letter_C_With_Caron)
    2809             (#\Latin_Small_Letter_D_With_Caron . #\Latin_Capital_Letter_D_With_Caron)
    2810             (#\Latin_Small_Letter_D_With_Stroke . #\Latin_Capital_Letter_D_With_Stroke)
    2811             (#\Latin_Small_Letter_E_With_Macron . #\Latin_Capital_Letter_E_With_Macron)
    2812             (#\Latin_Small_Letter_E_With_Breve . #\Latin_Capital_Letter_E_With_Breve)
    2813             (#\Latin_Small_Letter_E_With_Dot_Above . #\Latin_Capital_Letter_E_With_Dot_Above)
    2814             (#\Latin_Small_Letter_E_With_Ogonek . #\Latin_Capital_Letter_E_With_Ogonek)
    2815             (#\Latin_Small_Letter_E_With_Caron . #\Latin_Capital_Letter_E_With_Caron)
    2816             (#\Latin_Small_Letter_G_With_Circumflex . #\Latin_Capital_Letter_G_With_Circumflex)
    2817             (#\Latin_Small_Letter_G_With_Breve . #\Latin_Capital_Letter_G_With_Breve)
    2818             (#\Latin_Small_Letter_G_With_Dot_Above . #\Latin_Capital_Letter_G_With_Dot_Above)
    2819             (#\Latin_Small_Letter_G_With_Cedilla . #\Latin_Capital_Letter_G_With_Cedilla)
    2820             (#\Latin_Small_Letter_H_With_Circumflex . #\Latin_Capital_Letter_H_With_Circumflex)
    2821             (#\Latin_Small_Letter_H_With_Stroke . #\Latin_Capital_Letter_H_With_Stroke)
    2822             (#\Latin_Small_Letter_I_With_Tilde . #\Latin_Capital_Letter_I_With_Tilde)
    2823             (#\Latin_Small_Letter_I_With_Macron . #\Latin_Capital_Letter_I_With_Macron)
    2824             (#\Latin_Small_Letter_I_With_Breve . #\Latin_Capital_Letter_I_With_Breve)
    2825             (#\Latin_Small_Letter_I_With_Ogonek . #\Latin_Capital_Letter_I_With_Ogonek)
    2826             (#\Latin_Small_Ligature_Ij . #\Latin_Capital_Ligature_Ij)
    2827             (#\Latin_Small_Letter_J_With_Circumflex . #\Latin_Capital_Letter_J_With_Circumflex)
    2828             (#\Latin_Small_Letter_K_With_Cedilla . #\Latin_Capital_Letter_K_With_Cedilla)
    2829             (#\Latin_Small_Letter_L_With_Acute . #\Latin_Capital_Letter_L_With_Acute)
    2830             (#\Latin_Small_Letter_L_With_Cedilla . #\Latin_Capital_Letter_L_With_Cedilla)
    2831             (#\Latin_Small_Letter_L_With_Caron . #\Latin_Capital_Letter_L_With_Caron)
    2832             (#\Latin_Small_Letter_L_With_Middle_Dot . #\Latin_Capital_Letter_L_With_Middle_Dot)
    2833             (#\Latin_Small_Letter_L_With_Stroke . #\Latin_Capital_Letter_L_With_Stroke)
    2834             (#\Latin_Small_Letter_N_With_Acute . #\Latin_Capital_Letter_N_With_Acute)
    2835             (#\Latin_Small_Letter_N_With_Cedilla . #\Latin_Capital_Letter_N_With_Cedilla)
    2836             (#\Latin_Small_Letter_N_With_Caron . #\Latin_Capital_Letter_N_With_Caron)
    2837             (#\Latin_Small_Letter_Eng . #\Latin_Capital_Letter_Eng)
    2838             (#\Latin_Small_Letter_O_With_Macron . #\Latin_Capital_Letter_O_With_Macron)
    2839             (#\Latin_Small_Letter_O_With_Breve . #\Latin_Capital_Letter_O_With_Breve)
    2840             (#\Latin_Small_Letter_O_With_Double_Acute . #\Latin_Capital_Letter_O_With_Double_Acute)
    2841             (#\Latin_Small_Ligature_Oe . #\Latin_Capital_Ligature_Oe)
    2842             (#\Latin_Small_Letter_R_With_Acute . #\Latin_Capital_Letter_R_With_Acute)
    2843             (#\Latin_Small_Letter_R_With_Cedilla . #\Latin_Capital_Letter_R_With_Cedilla)
    2844             (#\Latin_Small_Letter_R_With_Caron . #\Latin_Capital_Letter_R_With_Caron)
    2845             (#\Latin_Small_Letter_S_With_Acute . #\Latin_Capital_Letter_S_With_Acute)
    2846             (#\Latin_Small_Letter_S_With_Circumflex . #\Latin_Capital_Letter_S_With_Circumflex)
    2847             (#\Latin_Small_Letter_S_With_Cedilla . #\Latin_Capital_Letter_S_With_Cedilla)
    2848             (#\Latin_Small_Letter_S_With_Caron . #\Latin_Capital_Letter_S_With_Caron)
    2849             (#\Latin_Small_Letter_T_With_Cedilla . #\Latin_Capital_Letter_T_With_Cedilla)
    2850             (#\Latin_Small_Letter_T_With_Caron . #\Latin_Capital_Letter_T_With_Caron)
    2851             (#\Latin_Small_Letter_T_With_Stroke . #\Latin_Capital_Letter_T_With_Stroke)
    2852             (#\Latin_Small_Letter_U_With_Tilde . #\Latin_Capital_Letter_U_With_Tilde)
    2853             (#\Latin_Small_Letter_U_With_Macron . #\Latin_Capital_Letter_U_With_Macron)
    2854             (#\Latin_Small_Letter_U_With_Breve . #\Latin_Capital_Letter_U_With_Breve)
    2855             (#\Latin_Small_Letter_U_With_Ring_Above . #\Latin_Capital_Letter_U_With_Ring_Above)
    2856             (#\Latin_Small_Letter_U_With_Double_Acute . #\Latin_Capital_Letter_U_With_Double_Acute)
    2857             (#\Latin_Small_Letter_U_With_Ogonek . #\Latin_Capital_Letter_U_With_Ogonek)
    2858             (#\Latin_Small_Letter_W_With_Circumflex . #\Latin_Capital_Letter_W_With_Circumflex)
    2859             (#\Latin_Small_Letter_Y_With_Circumflex . #\Latin_Capital_Letter_Y_With_Circumflex)
    2860             (#\Latin_Small_Letter_Z_With_Acute . #\Latin_Capital_Letter_Z_With_Acute)
    2861             (#\Latin_Small_Letter_Z_With_Dot_Above . #\Latin_Capital_Letter_Z_With_Dot_Above)
    2862             (#\Latin_Small_Letter_Z_With_Caron . #\Latin_Capital_Letter_Z_With_Caron)
    2863             (#\Latin_Small_Letter_B_With_Stroke . #\Latin_Capital_Letter_B_With_Stroke)
    2864             (#\Latin_Small_Letter_B_With_Topbar . #\Latin_Capital_Letter_B_With_Topbar)
    2865             (#\Latin_Small_Letter_Tone_Six . #\Latin_Capital_Letter_Tone_Six)
    2866             (#\Latin_Small_Letter_C_With_Hook . #\Latin_Capital_Letter_C_With_Hook)
    2867             (#\Latin_Small_Letter_D_With_Topbar . #\Latin_Capital_Letter_D_With_Topbar)
    2868             (#\Latin_Small_Letter_F_With_Hook . #\Latin_Capital_Letter_F_With_Hook)
    2869             (#\Latin_Small_Letter_Hv . #\Latin_Capital_Letter_Hwair)
    2870             (#\Latin_Small_Letter_K_With_Hook . #\Latin_Capital_Letter_K_With_Hook)
    2871             (#\Latin_Small_Letter_L_With_Bar . #\Latin_Capital_Letter_L_With_Bar)
    2872             (#\Latin_Small_Letter_N_With_Long_Right_Leg . #\Latin_Capital_Letter_N_With_Long_Right_Leg)
    2873             (#\Latin_Small_Letter_O_With_Horn . #\Latin_Capital_Letter_O_With_Horn)
    2874             (#\Latin_Small_Letter_Oi . #\Latin_Capital_Letter_Oi)
    2875             (#\Latin_Small_Letter_P_With_Hook . #\Latin_Capital_Letter_P_With_Hook)
    2876             (#\Latin_Small_Letter_Tone_Two . #\Latin_Capital_Letter_Tone_Two)
    2877             (#\Latin_Small_Letter_T_With_Hook . #\Latin_Capital_Letter_T_With_Hook)
    2878             (#\Latin_Small_Letter_U_With_Horn . #\Latin_Capital_Letter_U_With_Horn)
    2879             (#\Latin_Small_Letter_Y_With_Hook . #\Latin_Capital_Letter_Y_With_Hook)
    2880             (#\Latin_Small_Letter_Z_With_Stroke . #\Latin_Capital_Letter_Z_With_Stroke)
    2881             (#\Latin_Small_Letter_Ezh_Reversed . #\Latin_Capital_Letter_Ezh_Reversed)
    2882             (#\Latin_Small_Letter_Tone_Five . #\Latin_Capital_Letter_Tone_Five)
    2883             (#\Latin_Letter_Wynn . #\Latin_Capital_Letter_Wynn)
    2884             (#\Latin_Small_Letter_Dz_With_Caron . #\Latin_Capital_Letter_Dz_With_Caron)
    2885             (#\Latin_Small_Letter_Lj . #\Latin_Capital_Letter_Lj)
    2886             (#\Latin_Small_Letter_Nj . #\Latin_Capital_Letter_Nj)
    2887             (#\Latin_Small_Letter_A_With_Caron . #\Latin_Capital_Letter_A_With_Caron)
    2888             (#\Latin_Small_Letter_I_With_Caron . #\Latin_Capital_Letter_I_With_Caron)
    2889             (#\Latin_Small_Letter_O_With_Caron . #\Latin_Capital_Letter_O_With_Caron)
    2890             (#\Latin_Small_Letter_U_With_Caron . #\Latin_Capital_Letter_U_With_Caron)
    2891             (#\Latin_Small_Letter_U_With_Diaeresis_And_Macron . #\Latin_Capital_Letter_U_With_Diaeresis_And_Macron)
    2892             (#\Latin_Small_Letter_U_With_Diaeresis_And_Acute . #\Latin_Capital_Letter_U_With_Diaeresis_And_Acute)
    2893             (#\Latin_Small_Letter_U_With_Diaeresis_And_Caron . #\Latin_Capital_Letter_U_With_Diaeresis_And_Caron)
    2894             (#\Latin_Small_Letter_U_With_Diaeresis_And_Grave . #\Latin_Capital_Letter_U_With_Diaeresis_And_Grave)
    2895             (#\Latin_Small_Letter_Turned_E . #\Latin_Capital_Letter_Reversed_E)
    2896             (#\Latin_Small_Letter_A_With_Diaeresis_And_Macron . #\Latin_Capital_Letter_A_With_Diaeresis_And_Macron)
    2897             (#\Latin_Small_Letter_A_With_Dot_Above_And_Macron . #\Latin_Capital_Letter_A_With_Dot_Above_And_Macron)
    2898             (#\Latin_Small_Letter_Ae_With_Macron . #\Latin_Capital_Letter_Ae_With_Macron)
    2899             (#\Latin_Small_Letter_G_With_Stroke . #\Latin_Capital_Letter_G_With_Stroke)
    2900             (#\Latin_Small_Letter_G_With_Caron . #\Latin_Capital_Letter_G_With_Caron)
    2901             (#\Latin_Small_Letter_K_With_Caron . #\Latin_Capital_Letter_K_With_Caron)
    2902             (#\Latin_Small_Letter_O_With_Ogonek . #\Latin_Capital_Letter_O_With_Ogonek)
    2903             (#\Latin_Small_Letter_O_With_Ogonek_And_Macron . #\Latin_Capital_Letter_O_With_Ogonek_And_Macron)
    2904             (#\Latin_Small_Letter_Ezh_With_Caron . #\Latin_Capital_Letter_Ezh_With_Caron)
    2905             (#\Latin_Small_Letter_Dz . #\Latin_Capital_Letter_Dz)
    2906             (#\Latin_Small_Letter_G_With_Acute . #\Latin_Capital_Letter_G_With_Acute)
    2907             (#\Latin_Small_Letter_N_With_Grave . #\Latin_Capital_Letter_N_With_Grave)
    2908             (#\Latin_Small_Letter_A_With_Ring_Above_And_Acute . #\Latin_Capital_Letter_A_With_Ring_Above_And_Acute)
    2909             (#\Latin_Small_Letter_Ae_With_Acute . #\Latin_Capital_Letter_Ae_With_Acute)
    2910             (#\Latin_Small_Letter_O_With_Stroke_And_Acute . #\Latin_Capital_Letter_O_With_Stroke_And_Acute)
    2911             (#\Latin_Small_Letter_A_With_Double_Grave . #\Latin_Capital_Letter_A_With_Double_Grave)
    2912             (#\Latin_Small_Letter_A_With_Inverted_Breve . #\Latin_Capital_Letter_A_With_Inverted_Breve)
    2913             (#\Latin_Small_Letter_E_With_Double_Grave . #\Latin_Capital_Letter_E_With_Double_Grave)
    2914             (#\Latin_Small_Letter_E_With_Inverted_Breve . #\Latin_Capital_Letter_E_With_Inverted_Breve)
    2915             (#\Latin_Small_Letter_I_With_Double_Grave . #\Latin_Capital_Letter_I_With_Double_Grave)
    2916             (#\Latin_Small_Letter_I_With_Inverted_Breve . #\Latin_Capital_Letter_I_With_Inverted_Breve)
    2917             (#\Latin_Small_Letter_O_With_Double_Grave . #\Latin_Capital_Letter_O_With_Double_Grave)
    2918             (#\Latin_Small_Letter_O_With_Inverted_Breve . #\Latin_Capital_Letter_O_With_Inverted_Breve)
    2919             (#\Latin_Small_Letter_R_With_Double_Grave . #\Latin_Capital_Letter_R_With_Double_Grave)
    2920             (#\Latin_Small_Letter_R_With_Inverted_Breve . #\Latin_Capital_Letter_R_With_Inverted_Breve)
    2921             (#\Latin_Small_Letter_U_With_Double_Grave . #\Latin_Capital_Letter_U_With_Double_Grave)
    2922             (#\Latin_Small_Letter_U_With_Inverted_Breve . #\Latin_Capital_Letter_U_With_Inverted_Breve)
    2923             (#\Latin_Small_Letter_S_With_Comma_Below . #\Latin_Capital_Letter_S_With_Comma_Below)
    2924             (#\Latin_Small_Letter_T_With_Comma_Below . #\Latin_Capital_Letter_T_With_Comma_Below)
    2925             (#\Latin_Small_Letter_Yogh . #\Latin_Capital_Letter_Yogh)
    2926             (#\Latin_Small_Letter_H_With_Caron . #\Latin_Capital_Letter_H_With_Caron)
    2927             (#\Latin_Small_Letter_Ou . #\Latin_Capital_Letter_Ou)
    2928             (#\Latin_Small_Letter_Z_With_Hook . #\Latin_Capital_Letter_Z_With_Hook)
    2929             (#\Latin_Small_Letter_A_With_Dot_Above . #\Latin_Capital_Letter_A_With_Dot_Above)
    2930             (#\Latin_Small_Letter_E_With_Cedilla . #\Latin_Capital_Letter_E_With_Cedilla)
    2931             (#\Latin_Small_Letter_O_With_Diaeresis_And_Macron . #\Latin_Capital_Letter_O_With_Diaeresis_And_Macron)
    2932             (#\Latin_Small_Letter_O_With_Tilde_And_Macron . #\Latin_Capital_Letter_O_With_Tilde_And_Macron)
    2933             (#\Latin_Small_Letter_O_With_Dot_Above . #\Latin_Capital_Letter_O_With_Dot_Above)
    2934             (#\Latin_Small_Letter_O_With_Dot_Above_And_Macron . #\Latin_Capital_Letter_O_With_Dot_Above_And_Macron)
    2935             (#\Latin_Small_Letter_Y_With_Macron . #\Latin_Capital_Letter_Y_With_Macron)
    2936             (#\Latin_Small_Letter_C_With_Stroke . #\Latin_Capital_Letter_C_With_Stroke)
    2937             (#\Latin_Small_Letter_Glottal_Stop . #\Latin_Capital_Letter_Glottal_Stop)
    2938             (#\Latin_Small_Letter_E_With_Stroke . #\Latin_Capital_Letter_E_With_Stroke)
    2939             (#\Latin_Small_Letter_J_With_Stroke . #\Latin_Capital_Letter_J_With_Stroke)
    2940             (#\Latin_Small_Letter_Q_With_Hook_Tail . #\Latin_Capital_Letter_Small_Q_With_Hook_Tail)
    2941             (#\Latin_Small_Letter_R_With_Stroke . #\Latin_Capital_Letter_R_With_Stroke)
    2942             (#\Latin_Small_Letter_Y_With_Stroke . #\Latin_Capital_Letter_Y_With_Stroke)
    2943             (#\Latin_Small_Letter_B_With_Hook . #\Latin_Capital_Letter_B_With_Hook)
    2944             (#\Latin_Small_Letter_Open_O . #\Latin_Capital_Letter_Open_O)
    2945             (#\Latin_Small_Letter_D_With_Tail . #\Latin_Capital_Letter_African_D)
    2946             (#\Latin_Small_Letter_D_With_Hook . #\Latin_Capital_Letter_D_With_Hook)
    2947             (#\Latin_Small_Letter_Schwa . #\Latin_Capital_Letter_Schwa)
    2948             (#\Latin_Small_Letter_Open_E . #\Latin_Capital_Letter_Open_E)
    2949             (#\Latin_Small_Letter_G_With_Hook . #\Latin_Capital_Letter_G_With_Hook)
    2950             (#\Latin_Small_Letter_Gamma . #\Latin_Capital_Letter_Gamma)
    2951             (#\Latin_Small_Letter_I_With_Stroke . #\Latin_Capital_Letter_I_With_Stroke)
    2952             (#\Latin_Small_Letter_Iota . #\Latin_Capital_Letter_Iota)
    2953             (#\Latin_Small_Letter_L_With_Middle_Tilde . #\U+2C62)
    2954             (#\Latin_Small_Letter_Turned_M . #\Latin_Capital_Letter_Turned_M)
    2955             (#\Latin_Small_Letter_N_With_Left_Hook . #\Latin_Capital_Letter_N_With_Left_Hook)
    2956             (#\Latin_Small_Letter_Barred_O . #\Latin_Capital_Letter_O_With_Middle_Tilde)
    2957             (#\Latin_Small_Letter_R_With_Tail . #\U+2C64)
    2958             (#\Latin_Letter_Small_Capital_R . #\Latin_Letter_Yr)
    2959             (#\Latin_Small_Letter_Esh . #\Latin_Capital_Letter_Esh)
    2960             (#\Latin_Small_Letter_T_With_Retroflex_Hook . #\Latin_Capital_Letter_T_With_Retroflex_Hook)
    2961             (#\Latin_Small_Letter_U_Bar . #\Latin_Capital_Letter_U_Bar)
    2962             (#\Latin_Small_Letter_Upsilon . #\Latin_Capital_Letter_Upsilon)
    2963             (#\Latin_Small_Letter_V_With_Hook . #\Latin_Capital_Letter_V_With_Hook)
    2964             (#\Latin_Small_Letter_Turned_V . #\Latin_Capital_Letter_Turned_V)
    2965             (#\Latin_Small_Letter_Ezh . #\Latin_Capital_Letter_Ezh)
    2966             (#\Greek_Small_Reversed_Lunate_Sigma_Symbol . #\Greek_Capital_Reversed_Lunate_Sigma_Symbol)
    2967             (#\Greek_Small_Dotted_Lunate_Sigma_Symbol . #\Greek_Capital_Dotted_Lunate_Sigma_Symbol)
    2968             (#\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol . #\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol)
    2969             (#\Greek_Small_Letter_Alpha_With_Tonos . #\Greek_Capital_Letter_Alpha_With_Tonos)
    2970             (#\Greek_Small_Letter_Epsilon_With_Tonos . #\Greek_Capital_Letter_Epsilon_With_Tonos)
    2971             (#\Greek_Small_Letter_Eta_With_Tonos . #\Greek_Capital_Letter_Eta_With_Tonos)
    2972             (#\Greek_Small_Letter_Iota_With_Tonos . #\Greek_Capital_Letter_Iota_With_Tonos)
    2973             (#\Greek_Small_Letter_Alpha . #\Greek_Capital_Letter_Alpha)
    2974             (#\Greek_Small_Letter_Beta . #\Greek_Capital_Letter_Beta)
    2975             (#\Greek_Small_Letter_Gamma . #\Greek_Capital_Letter_Gamma)
    2976             (#\Greek_Small_Letter_Delta . #\Greek_Capital_Letter_Delta)
    2977             (#\Greek_Small_Letter_Epsilon . #\Greek_Capital_Letter_Epsilon)
    2978             (#\Greek_Small_Letter_Zeta . #\Greek_Capital_Letter_Zeta)
    2979             (#\Greek_Small_Letter_Eta . #\Greek_Capital_Letter_Eta)
    2980             (#\Greek_Small_Letter_Theta . #\Greek_Capital_Letter_Theta)
    2981             (#\Greek_Small_Letter_Iota . #\Greek_Capital_Letter_Iota)
    2982             (#\Greek_Small_Letter_Kappa . #\Greek_Capital_Letter_Kappa)
    2983             (#\Greek_Small_Letter_Lamda . #\Greek_Capital_Letter_Lamda)
    2984             (#\Greek_Small_Letter_Mu . #\Greek_Capital_Letter_Mu)
    2985             (#\Greek_Small_Letter_Nu . #\Greek_Capital_Letter_Nu)
    2986             (#\Greek_Small_Letter_Xi . #\Greek_Capital_Letter_Xi)
    2987             (#\Greek_Small_Letter_Omicron . #\Greek_Capital_Letter_Omicron)
    2988             (#\Greek_Small_Letter_Pi . #\Greek_Capital_Letter_Pi)
    2989             (#\Greek_Small_Letter_Rho . #\Greek_Capital_Letter_Rho)
    2990             (#\Greek_Small_Letter_Sigma . #\Greek_Capital_Letter_Sigma)
    2991             (#\Greek_Small_Letter_Tau . #\Greek_Capital_Letter_Tau)
    2992             (#\Greek_Small_Letter_Upsilon . #\Greek_Capital_Letter_Upsilon)
    2993             (#\Greek_Small_Letter_Phi . #\Greek_Capital_Letter_Phi)
    2994             (#\Greek_Small_Letter_Chi . #\Greek_Capital_Letter_Chi)
    2995             (#\Greek_Small_Letter_Psi . #\Greek_Capital_Letter_Psi)
    2996             (#\Greek_Small_Letter_Omega . #\Greek_Capital_Letter_Omega)
    2997             (#\Greek_Small_Letter_Iota_With_Dialytika . #\Greek_Capital_Letter_Iota_With_Dialytika)
    2998             (#\Greek_Small_Letter_Upsilon_With_Dialytika . #\Greek_Capital_Letter_Upsilon_With_Dialytika)
    2999             (#\Greek_Small_Letter_Omicron_With_Tonos . #\Greek_Capital_Letter_Omicron_With_Tonos)
    3000             (#\Greek_Small_Letter_Upsilon_With_Tonos . #\Greek_Capital_Letter_Upsilon_With_Tonos)
    3001             (#\Greek_Small_Letter_Omega_With_Tonos . #\Greek_Capital_Letter_Omega_With_Tonos)
    3002             (#\Greek_Small_Letter_Archaic_Koppa . #\Greek_Letter_Archaic_Koppa)
    3003             (#\Greek_Small_Letter_Stigma . #\Greek_Letter_Stigma)
    3004             (#\Greek_Small_Letter_Digamma . #\Greek_Letter_Digamma)
    3005             (#\Greek_Small_Letter_Koppa . #\Greek_Letter_Koppa)
    3006             (#\Greek_Small_Letter_Sampi . #\Greek_Letter_Sampi)
    3007             (#\Coptic_Small_Letter_Shei . #\Coptic_Capital_Letter_Shei)
    3008             (#\Coptic_Small_Letter_Fei . #\Coptic_Capital_Letter_Fei)
    3009             (#\Coptic_Small_Letter_Khei . #\Coptic_Capital_Letter_Khei)
    3010             (#\Coptic_Small_Letter_Hori . #\Coptic_Capital_Letter_Hori)
    3011             (#\Coptic_Small_Letter_Gangia . #\Coptic_Capital_Letter_Gangia)
    3012             (#\Coptic_Small_Letter_Shima . #\Coptic_Capital_Letter_Shima)
    3013             (#\Coptic_Small_Letter_Dei . #\Coptic_Capital_Letter_Dei)
    3014             (#\Greek_Lunate_Sigma_Symbol . #\Greek_Capital_Lunate_Sigma_Symbol)
    3015             (#\Greek_Small_Letter_Sho . #\Greek_Capital_Letter_Sho)
    3016             (#\Greek_Small_Letter_San . #\Greek_Capital_Letter_San)
    3017             (#\Cyrillic_Small_Letter_A . #\Cyrillic_Capital_Letter_A)
    3018             (#\Cyrillic_Small_Letter_Be . #\Cyrillic_Capital_Letter_Be)
    3019             (#\Cyrillic_Small_Letter_Ve . #\Cyrillic_Capital_Letter_Ve)
    3020             (#\Cyrillic_Small_Letter_Ghe . #\Cyrillic_Capital_Letter_Ghe)
    3021             (#\Cyrillic_Small_Letter_De . #\Cyrillic_Capital_Letter_De)
    3022             (#\Cyrillic_Small_Letter_Ie . #\Cyrillic_Capital_Letter_Ie)
    3023             (#\Cyrillic_Small_Letter_Zhe . #\Cyrillic_Capital_Letter_Zhe)
    3024             (#\Cyrillic_Small_Letter_Ze . #\Cyrillic_Capital_Letter_Ze)
    3025             (#\Cyrillic_Small_Letter_I . #\Cyrillic_Capital_Letter_I)
    3026             (#\Cyrillic_Small_Letter_Short_I . #\Cyrillic_Capital_Letter_Short_I)
    3027             (#\Cyrillic_Small_Letter_Ka . #\Cyrillic_Capital_Letter_Ka)
    3028             (#\Cyrillic_Small_Letter_El . #\Cyrillic_Capital_Letter_El)
    3029             (#\Cyrillic_Small_Letter_Em . #\Cyrillic_Capital_Letter_Em)
    3030             (#\Cyrillic_Small_Letter_En . #\Cyrillic_Capital_Letter_En)
    3031             (#\Cyrillic_Small_Letter_O . #\Cyrillic_Capital_Letter_O)
    3032             (#\Cyrillic_Small_Letter_Pe . #\Cyrillic_Capital_Letter_Pe)
    3033             (#\Cyrillic_Small_Letter_Er . #\Cyrillic_Capital_Letter_Er)
    3034             (#\Cyrillic_Small_Letter_Es . #\Cyrillic_Capital_Letter_Es)
    3035             (#\Cyrillic_Small_Letter_Te . #\Cyrillic_Capital_Letter_Te)
    3036             (#\Cyrillic_Small_Letter_U . #\Cyrillic_Capital_Letter_U)
    3037             (#\Cyrillic_Small_Letter_Ef . #\Cyrillic_Capital_Letter_Ef)
    3038             (#\Cyrillic_Small_Letter_Ha . #\Cyrillic_Capital_Letter_Ha)
    3039             (#\Cyrillic_Small_Letter_Tse . #\Cyrillic_Capital_Letter_Tse)
    3040             (#\Cyrillic_Small_Letter_Che . #\Cyrillic_Capital_Letter_Che)
    3041             (#\Cyrillic_Small_Letter_Sha . #\Cyrillic_Capital_Letter_Sha)
    3042             (#\Cyrillic_Small_Letter_Shcha . #\Cyrillic_Capital_Letter_Shcha)
    3043             (#\Cyrillic_Small_Letter_Hard_Sign . #\Cyrillic_Capital_Letter_Hard_Sign)
    3044             (#\Cyrillic_Small_Letter_Yeru . #\Cyrillic_Capital_Letter_Yeru)
    3045             (#\Cyrillic_Small_Letter_Soft_Sign . #\Cyrillic_Capital_Letter_Soft_Sign)
    3046             (#\Cyrillic_Small_Letter_E . #\Cyrillic_Capital_Letter_E)
    3047             (#\Cyrillic_Small_Letter_Yu . #\Cyrillic_Capital_Letter_Yu)
    3048             (#\Cyrillic_Small_Letter_Ya . #\Cyrillic_Capital_Letter_Ya)
    3049             (#\Cyrillic_Small_Letter_Ie_With_Grave . #\Cyrillic_Capital_Letter_Ie_With_Grave)
    3050             (#\Cyrillic_Small_Letter_Io . #\Cyrillic_Capital_Letter_Io)
    3051             (#\Cyrillic_Small_Letter_Dje . #\Cyrillic_Capital_Letter_Dje)
    3052             (#\Cyrillic_Small_Letter_Gje . #\Cyrillic_Capital_Letter_Gje)
    3053             (#\Cyrillic_Small_Letter_Ukrainian_Ie . #\Cyrillic_Capital_Letter_Ukrainian_Ie)
    3054             (#\Cyrillic_Small_Letter_Dze . #\Cyrillic_Capital_Letter_Dze)
    3055             (#\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I . #\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I)
    3056             (#\Cyrillic_Small_Letter_Yi . #\Cyrillic_Capital_Letter_Yi)
    3057             (#\Cyrillic_Small_Letter_Je . #\Cyrillic_Capital_Letter_Je)
    3058             (#\Cyrillic_Small_Letter_Lje . #\Cyrillic_Capital_Letter_Lje)
    3059             (#\Cyrillic_Small_Letter_Nje . #\Cyrillic_Capital_Letter_Nje)
    3060             (#\Cyrillic_Small_Letter_Tshe . #\Cyrillic_Capital_Letter_Tshe)
    3061             (#\Cyrillic_Small_Letter_Kje . #\Cyrillic_Capital_Letter_Kje)
    3062             (#\Cyrillic_Small_Letter_I_With_Grave . #\Cyrillic_Capital_Letter_I_With_Grave)
    3063             (#\Cyrillic_Small_Letter_Short_U . #\Cyrillic_Capital_Letter_Short_U)
    3064             (#\Cyrillic_Small_Letter_Dzhe . #\Cyrillic_Capital_Letter_Dzhe)
    3065             (#\Cyrillic_Small_Letter_Omega . #\Cyrillic_Capital_Letter_Omega)
    3066             (#\Cyrillic_Small_Letter_Yat . #\Cyrillic_Capital_Letter_Yat)
    3067             (#\Cyrillic_Small_Letter_Iotified_E . #\Cyrillic_Capital_Letter_Iotified_E)
    3068             (#\Cyrillic_Small_Letter_Little_Yus . #\Cyrillic_Capital_Letter_Little_Yus)
    3069             (#\Cyrillic_Small_Letter_Iotified_Little_Yus . #\Cyrillic_Capital_Letter_Iotified_Little_Yus)
    3070             (#\Cyrillic_Small_Letter_Big_Yus . #\Cyrillic_Capital_Letter_Big_Yus)
    3071             (#\Cyrillic_Small_Letter_Iotified_Big_Yus . #\Cyrillic_Capital_Letter_Iotified_Big_Yus)
    3072             (#\Cyrillic_Small_Letter_Ksi . #\Cyrillic_Capital_Letter_Ksi)
    3073             (#\Cyrillic_Small_Letter_Psi . #\Cyrillic_Capital_Letter_Psi)
    3074             (#\Cyrillic_Small_Letter_Fita . #\Cyrillic_Capital_Letter_Fita)
    3075             (#\Cyrillic_Small_Letter_Izhitsa . #\Cyrillic_Capital_Letter_Izhitsa)
    3076             (#\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent . #\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent)
    3077             (#\Cyrillic_Small_Letter_Uk . #\Cyrillic_Capital_Letter_Uk)
    3078             (#\Cyrillic_Small_Letter_Round_Omega . #\Cyrillic_Capital_Letter_Round_Omega)
    3079             (#\Cyrillic_Small_Letter_Omega_With_Titlo . #\Cyrillic_Capital_Letter_Omega_With_Titlo)
    3080             (#\Cyrillic_Small_Letter_Ot . #\Cyrillic_Capital_Letter_Ot)
    3081             (#\Cyrillic_Small_Letter_Koppa . #\Cyrillic_Capital_Letter_Koppa)
    3082             (#\Cyrillic_Small_Letter_Short_I_With_Tail . #\Cyrillic_Capital_Letter_Short_I_With_Tail)
    3083             (#\Cyrillic_Small_Letter_Semisoft_Sign . #\Cyrillic_Capital_Letter_Semisoft_Sign)
    3084             (#\Cyrillic_Small_Letter_Er_With_Tick . #\Cyrillic_Capital_Letter_Er_With_Tick)
    3085             (#\Cyrillic_Small_Letter_Ghe_With_Upturn . #\Cyrillic_Capital_Letter_Ghe_With_Upturn)
    3086             (#\Cyrillic_Small_Letter_Ghe_With_Stroke . #\Cyrillic_Capital_Letter_Ghe_With_Stroke)
    3087             (#\Cyrillic_Small_Letter_Ghe_With_Middle_Hook . #\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook)
    3088             (#\Cyrillic_Small_Letter_Zhe_With_Descender . #\Cyrillic_Capital_Letter_Zhe_With_Descender)
    3089             (#\Cyrillic_Small_Letter_Ze_With_Descender . #\Cyrillic_Capital_Letter_Ze_With_Descender)
    3090             (#\Cyrillic_Small_Letter_Ka_With_Descender . #\Cyrillic_Capital_Letter_Ka_With_Descender)
    3091             (#\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke . #\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke)
    3092             (#\Cyrillic_Small_Letter_Ka_With_Stroke . #\Cyrillic_Capital_Letter_Ka_With_Stroke)
    3093             (#\Cyrillic_Small_Letter_Bashkir_Ka . #\Cyrillic_Capital_Letter_Bashkir_Ka)
    3094             (#\Cyrillic_Small_Letter_En_With_Descender . #\Cyrillic_Capital_Letter_En_With_Descender)
    3095             (#\Cyrillic_Small_Ligature_En_Ghe . #\Cyrillic_Capital_Ligature_En_Ghe)
    3096             (#\Cyrillic_Small_Letter_Pe_With_Middle_Hook . #\Cyrillic_Capital_Letter_Pe_With_Middle_Hook)
    3097             (#\Cyrillic_Small_Letter_Abkhasian_Ha . #\Cyrillic_Capital_Letter_Abkhasian_Ha)
    3098             (#\Cyrillic_Small_Letter_Es_With_Descender . #\Cyrillic_Capital_Letter_Es_With_Descender)
    3099             (#\Cyrillic_Small_Letter_Te_With_Descender . #\Cyrillic_Capital_Letter_Te_With_Descender)
    3100             (#\Cyrillic_Small_Letter_Straight_U . #\Cyrillic_Capital_Letter_Straight_U)
    3101             (#\Cyrillic_Small_Letter_Straight_U_With_Stroke . #\Cyrillic_Capital_Letter_Straight_U_With_Stroke)
    3102             (#\Cyrillic_Small_Letter_Ha_With_Descender . #\Cyrillic_Capital_Letter_Ha_With_Descender)
    3103             (#\Cyrillic_Small_Ligature_Te_Tse . #\Cyrillic_Capital_Ligature_Te_Tse)
    3104             (#\Cyrillic_Small_Letter_Che_With_Descender . #\Cyrillic_Capital_Letter_Che_With_Descender)
    3105             (#\Cyrillic_Small_Letter_Che_With_Vertical_Stroke . #\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke)
    3106             (#\Cyrillic_Small_Letter_Shha . #\Cyrillic_Capital_Letter_Shha)
    3107             (#\Cyrillic_Small_Letter_Abkhasian_Che . #\Cyrillic_Capital_Letter_Abkhasian_Che)
    3108             (#\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender . #\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender)
    3109             (#\Cyrillic_Small_Letter_Zhe_With_Breve . #\Cyrillic_Capital_Letter_Zhe_With_Breve)
    3110             (#\Cyrillic_Small_Letter_Ka_With_Hook . #\Cyrillic_Capital_Letter_Ka_With_Hook)
    3111             (#\Cyrillic_Small_Letter_El_With_Tail . #\Cyrillic_Capital_Letter_El_With_Tail)
    3112             (#\Cyrillic_Small_Letter_En_With_Hook . #\Cyrillic_Capital_Letter_En_With_Hook)
    3113             (#\Cyrillic_Small_Letter_En_With_Tail . #\Cyrillic_Capital_Letter_En_With_Tail)
    3114             (#\Cyrillic_Small_Letter_Khakassian_Che . #\Cyrillic_Capital_Letter_Khakassian_Che)
    3115             (#\Cyrillic_Small_Letter_Em_With_Tail . #\Cyrillic_Capital_Letter_Em_With_Tail)
    3116             (#\Cyrillic_Small_Letter_Palochka . #\Cyrillic_Letter_Palochka)
    3117             (#\Cyrillic_Small_Letter_A_With_Breve . #\Cyrillic_Capital_Letter_A_With_Breve)
    3118             (#\Cyrillic_Small_Letter_A_With_Diaeresis . #\Cyrillic_Capital_Letter_A_With_Diaeresis)
    3119             (#\Cyrillic_Small_Ligature_A_Ie . #\Cyrillic_Capital_Ligature_A_Ie)
    3120             (#\Cyrillic_Small_Letter_Ie_With_Breve . #\Cyrillic_Capital_Letter_Ie_With_Breve)
    3121             (#\Cyrillic_Small_Letter_Schwa . #\Cyrillic_Capital_Letter_Schwa)
    3122             (#\Cyrillic_Small_Letter_Schwa_With_Diaeresis . #\Cyrillic_Capital_Letter_Schwa_With_Diaeresis)
    3123             (#\Cyrillic_Small_Letter_Zhe_With_Diaeresis . #\Cyrillic_Capital_Letter_Zhe_With_Diaeresis)
    3124             (#\Cyrillic_Small_Letter_Ze_With_Diaeresis . #\Cyrillic_Capital_Letter_Ze_With_Diaeresis)
    3125             (#\Cyrillic_Small_Letter_Abkhasian_Dze . #\Cyrillic_Capital_Letter_Abkhasian_Dze)
    3126             (#\Cyrillic_Small_Letter_I_With_Macron . #\Cyrillic_Capital_Letter_I_With_Macron)
    3127             (#\Cyrillic_Small_Letter_I_With_Diaeresis . #\Cyrillic_Capital_Letter_I_With_Diaeresis)
    3128             (#\Cyrillic_Small_Letter_O_With_Diaeresis . #\Cyrillic_Capital_Letter_O_With_Diaeresis)
    3129             (#\Cyrillic_Small_Letter_Barred_O . #\Cyrillic_Capital_Letter_Barred_O)
    3130             (#\Cyrillic_Small_Letter_Barred_O_With_Diaeresis . #\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis)
    3131             (#\Cyrillic_Small_Letter_E_With_Diaeresis . #\Cyrillic_Capital_Letter_E_With_Diaeresis)
    3132             (#\Cyrillic_Small_Letter_U_With_Macron . #\Cyrillic_Capital_Letter_U_With_Macron)
    3133             (#\Cyrillic_Small_Letter_U_With_Diaeresis . #\Cyrillic_Capital_Letter_U_With_Diaeresis)
    3134             (#\Cyrillic_Small_Letter_U_With_Double_Acute . #\Cyrillic_Capital_Letter_U_With_Double_Acute)
    3135             (#\Cyrillic_Small_Letter_Che_With_Diaeresis . #\Cyrillic_Capital_Letter_Che_With_Diaeresis)
    3136             (#\Cyrillic_Small_Letter_Ghe_With_Descender . #\Cyrillic_Capital_Letter_Ghe_With_Descender)
    3137             (#\Cyrillic_Small_Letter_Yeru_With_Diaeresis . #\Cyrillic_Capital_Letter_Yeru_With_Diaeresis)
    3138             (#\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook . #\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook)
    3139             (#\Cyrillic_Small_Letter_Ha_With_Hook . #\Cyrillic_Capital_Letter_Ha_With_Hook)
    3140             (#\Cyrillic_Small_Letter_Ha_With_Stroke . #\Cyrillic_Capital_Letter_Ha_With_Stroke)
    3141             (#\Cyrillic_Small_Letter_Komi_De . #\Cyrillic_Capital_Letter_Komi_De)
    3142             (#\Cyrillic_Small_Letter_Komi_Dje . #\Cyrillic_Capital_Letter_Komi_Dje)
    3143             (#\Cyrillic_Small_Letter_Komi_Zje . #\Cyrillic_Capital_Letter_Komi_Zje)
    3144             (#\Cyrillic_Small_Letter_Komi_Dzje . #\Cyrillic_Capital_Letter_Komi_Dzje)
    3145             (#\Cyrillic_Small_Letter_Komi_Lje . #\Cyrillic_Capital_Letter_Komi_Lje)
    3146             (#\Cyrillic_Small_Letter_Komi_Nje . #\Cyrillic_Capital_Letter_Komi_Nje)
    3147             (#\Cyrillic_Small_Letter_Komi_Sje . #\Cyrillic_Capital_Letter_Komi_Sje)
    3148             (#\Cyrillic_Small_Letter_Komi_Tje . #\Cyrillic_Capital_Letter_Komi_Tje)
    3149             (#\Cyrillic_Small_Letter_Reversed_Ze . #\Cyrillic_Capital_Letter_Reversed_Ze)
    3150             (#\Cyrillic_Small_Letter_El_With_Hook . #\Cyrillic_Capital_Letter_El_With_Hook)
    3151             (#\Armenian_Small_Letter_Ayb . #\Armenian_Capital_Letter_Ayb)
    3152             (#\Armenian_Small_Letter_Ben . #\Armenian_Capital_Letter_Ben)
    3153             (#\Armenian_Small_Letter_Gim . #\Armenian_Capital_Letter_Gim)
    3154             (#\Armenian_Small_Letter_Da . #\Armenian_Capital_Letter_Da)
    3155             (#\Armenian_Small_Letter_Ech . #\Armenian_Capital_Letter_Ech)
    3156             (#\Armenian_Small_Letter_Za . #\Armenian_Capital_Letter_Za)
    3157             (#\Armenian_Small_Letter_Eh . #\Armenian_Capital_Letter_Eh)
    3158             (#\Armenian_Small_Letter_Et . #\Armenian_Capital_Letter_Et)
    3159             (#\Armenian_Small_Letter_To . #\Armenian_Capital_Letter_To)
    3160             (#\Armenian_Small_Letter_Zhe . #\Armenian_Capital_Letter_Zhe)
    3161             (#\Armenian_Small_Letter_Ini . #\Armenian_Capital_Letter_Ini)
    3162             (#\Armenian_Small_Letter_Liwn . #\Armenian_Capital_Letter_Liwn)
    3163             (#\Armenian_Small_Letter_Xeh . #\Armenian_Capital_Letter_Xeh)
    3164             (#\Armenian_Small_Letter_Ca . #\Armenian_Capital_Letter_Ca)
    3165             (#\Armenian_Small_Letter_Ken . #\Armenian_Capital_Letter_Ken)
    3166             (#\Armenian_Small_Letter_Ho . #\Armenian_Capital_Letter_Ho)
    3167             (#\Armenian_Small_Letter_Ja . #\Armenian_Capital_Letter_Ja)
    3168             (#\Armenian_Small_Letter_Ghad . #\Armenian_Capital_Letter_Ghad)
    3169             (#\Armenian_Small_Letter_Cheh . #\Armenian_Capital_Letter_Cheh)
    3170             (#\Armenian_Small_Letter_Men . #\Armenian_Capital_Letter_Men)
    3171             (#\Armenian_Small_Letter_Yi . #\Armenian_Capital_Letter_Yi)
    3172             (#\Armenian_Small_Letter_Now . #\Armenian_Capital_Letter_Now)
    3173             (#\Armenian_Small_Letter_Sha . #\Armenian_Capital_Letter_Sha)
    3174             (#\Armenian_Small_Letter_Vo . #\Armenian_Capital_Letter_Vo)
    3175             (#\Armenian_Small_Letter_Cha . #\Armenian_Capital_Letter_Cha)
    3176             (#\Armenian_Small_Letter_Peh . #\Armenian_Capital_Letter_Peh)
    3177             (#\Armenian_Small_Letter_Jheh . #\Armenian_Capital_Letter_Jheh)
    3178             (#\Armenian_Small_Letter_Ra . #\Armenian_Capital_Letter_Ra)
    3179             (#\Armenian_Small_Letter_Seh . #\Armenian_Capital_Letter_Seh)
    3180             (#\Armenian_Small_Letter_Vew . #\Armenian_Capital_Letter_Vew)
    3181             (#\Armenian_Small_Letter_Tiwn . #\Armenian_Capital_Letter_Tiwn)
    3182             (#\Armenian_Small_Letter_Reh . #\Armenian_Capital_Letter_Reh)
    3183             (#\Armenian_Small_Letter_Co . #\Armenian_Capital_Letter_Co)
    3184             (#\Armenian_Small_Letter_Yiwn . #\Armenian_Capital_Letter_Yiwn)
    3185             (#\Armenian_Small_Letter_Piwr . #\Armenian_Capital_Letter_Piwr)
    3186             (#\Armenian_Small_Letter_Keh . #\Armenian_Capital_Letter_Keh)
    3187             (#\Armenian_Small_Letter_Oh . #\Armenian_Capital_Letter_Oh)
    3188             (#\Armenian_Small_Letter_Feh . #\Armenian_Capital_Letter_Feh)
    3189             (#\U+1D7D . #\U+2C63)
    3190             (#\U+1E01 . #\U+1E00)
    3191             (#\U+1E03 . #\U+1E02)
    3192             (#\U+1E05 . #\U+1E04)
    3193             (#\U+1E07 . #\U+1E06)
    3194             (#\U+1E09 . #\U+1E08)
    3195             (#\U+1E0B . #\U+1E0A)
    3196             (#\U+1E0D . #\U+1E0C)
    3197             (#\U+1E0F . #\U+1E0E)
    3198             (#\U+1E11 . #\U+1E10)
    3199             (#\U+1E13 . #\U+1E12)
    3200             (#\U+1E15 . #\U+1E14)
    3201             (#\U+1E17 . #\U+1E16)
    3202             (#\U+1E19 . #\U+1E18)
    3203             (#\U+1E1B . #\U+1E1A)
    3204             (#\U+1E1D . #\U+1E1C)
    3205             (#\U+1E1F . #\U+1E1E)
    3206             (#\U+1E21 . #\U+1E20)
    3207             (#\U+1E23 . #\U+1E22)
    3208             (#\U+1E25 . #\U+1E24)
    3209             (#\U+1E27 . #\U+1E26)
    3210             (#\U+1E29 . #\U+1E28)
    3211             (#\U+1E2B . #\U+1E2A)
    3212             (#\U+1E2D . #\U+1E2C)
    3213             (#\U+1E2F . #\U+1E2E)
    3214             (#\U+1E31 . #\U+1E30)
    3215             (#\U+1E33 . #\U+1E32)
    3216             (#\U+1E35 . #\U+1E34)
    3217             (#\U+1E37 . #\U+1E36)
    3218             (#\U+1E39 . #\U+1E38)
    3219             (#\U+1E3B . #\U+1E3A)
    3220             (#\U+1E3D . #\U+1E3C)
    3221             (#\U+1E3F . #\U+1E3E)
    3222             (#\U+1E41 . #\U+1E40)
    3223             (#\U+1E43 . #\U+1E42)
    3224             (#\U+1E45 . #\U+1E44)
    3225             (#\U+1E47 . #\U+1E46)
    3226             (#\U+1E49 . #\U+1E48)
    3227             (#\U+1E4B . #\U+1E4A)
    3228             (#\U+1E4D . #\U+1E4C)
    3229             (#\U+1E4F . #\U+1E4E)
    3230             (#\U+1E51 . #\U+1E50)
    3231             (#\U+1E53 . #\U+1E52)
    3232             (#\U+1E55 . #\U+1E54)
    3233             (#\U+1E57 . #\U+1E56)
    3234             (#\U+1E59 . #\U+1E58)
    3235             (#\U+1E5B . #\U+1E5A)
    3236             (#\U+1E5D . #\U+1E5C)
    3237             (#\U+1E5F . #\U+1E5E)
    3238             (#\U+1E61 . #\U+1E60)
    3239             (#\U+1E63 . #\U+1E62)
    3240             (#\U+1E65 . #\U+1E64)
    3241             (#\U+1E67 . #\U+1E66)
    3242             (#\U+1E69 . #\U+1E68)
    3243             (#\U+1E6B . #\U+1E6A)
    3244             (#\U+1E6D . #\U+1E6C)
    3245             (#\U+1E6F . #\U+1E6E)
    3246             (#\U+1E71 . #\U+1E70)
    3247             (#\U+1E73 . #\U+1E72)
    3248             (#\U+1E75 . #\U+1E74)
    3249             (#\U+1E77 . #\U+1E76)
    3250             (#\U+1E79 . #\U+1E78)
    3251             (#\U+1E7B . #\U+1E7A)
    3252             (#\U+1E7D . #\U+1E7C)
    3253             (#\U+1E7F . #\U+1E7E)
    3254             (#\U+1E81 . #\U+1E80)
    3255             (#\U+1E83 . #\U+1E82)
    3256             (#\U+1E85 . #\U+1E84)
    3257             (#\U+1E87 . #\U+1E86)
    3258             (#\U+1E89 . #\U+1E88)
    3259             (#\U+1E8B . #\U+1E8A)
    3260             (#\U+1E8D . #\U+1E8C)
    3261             (#\U+1E8F . #\U+1E8E)
    3262             (#\U+1E91 . #\U+1E90)
    3263             (#\U+1E93 . #\U+1E92)
    3264             (#\U+1E95 . #\U+1E94)
    3265             (#\U+1EA1 . #\U+1EA0)
    3266             (#\U+1EA3 . #\U+1EA2)
    3267             (#\U+1EA5 . #\U+1EA4)
    3268             (#\U+1EA7 . #\U+1EA6)
    3269             (#\U+1EA9 . #\U+1EA8)
    3270             (#\U+1EAB . #\U+1EAA)
    3271             (#\U+1EAD . #\U+1EAC)
    3272             (#\U+1EAF . #\U+1EAE)
    3273             (#\U+1EB1 . #\U+1EB0)
    3274             (#\U+1EB3 . #\U+1EB2)
    3275             (#\U+1EB5 . #\U+1EB4)
    3276             (#\U+1EB7 . #\U+1EB6)
    3277             (#\U+1EB9 . #\U+1EB8)
    3278             (#\U+1EBB . #\U+1EBA)
    3279             (#\U+1EBD . #\U+1EBC)
    3280             (#\U+1EBF . #\U+1EBE)
    3281             (#\U+1EC1 . #\U+1EC0)
    3282             (#\U+1EC3 . #\U+1EC2)
    3283             (#\U+1EC5 . #\U+1EC4)
    3284             (#\U+1EC7 . #\U+1EC6)
    3285             (#\U+1EC9 . #\U+1EC8)
    3286             (#\U+1ECB . #\U+1ECA)
    3287             (#\U+1ECD . #\U+1ECC)
    3288             (#\U+1ECF . #\U+1ECE)
    3289             (#\U+1ED1 . #\U+1ED0)
    3290             (#\U+1ED3 . #\U+1ED2)
    3291             (#\U+1ED5 . #\U+1ED4)
    3292             (#\U+1ED7 . #\U+1ED6)
    3293             (#\U+1ED9 . #\U+1ED8)
    3294             (#\U+1EDB . #\U+1EDA)
    3295             (#\U+1EDD . #\U+1EDC)
    3296             (#\U+1EDF . #\U+1EDE)
    3297             (#\U+1EE1 . #\U+1EE0)
    3298             (#\U+1EE3 . #\U+1EE2)
    3299             (#\U+1EE5 . #\U+1EE4)
    3300             (#\U+1EE7 . #\U+1EE6)
    3301             (#\U+1EE9 . #\U+1EE8)
    3302             (#\U+1EEB . #\U+1EEA)
    3303             (#\U+1EED . #\U+1EEC)
    3304             (#\U+1EEF . #\U+1EEE)
    3305             (#\U+1EF1 . #\U+1EF0)
    3306             (#\U+1EF3 . #\U+1EF2)
    3307             (#\U+1EF5 . #\U+1EF4)
    3308             (#\U+1EF7 . #\U+1EF6)
    3309             (#\U+1EF9 . #\U+1EF8)
    3310             (#\U+1F00 . #\U+1F08)
    3311             (#\U+1F01 . #\U+1F09)
    3312             (#\U+1F02 . #\U+1F0A)
    3313             (#\U+1F03 . #\U+1F0B)
    3314             (#\U+1F04 . #\U+1F0C)
    3315             (#\U+1F05 . #\U+1F0D)
    3316             (#\U+1F06 . #\U+1F0E)
    3317             (#\U+1F07 . #\U+1F0F)
    3318             (#\U+1F10 . #\U+1F18)
    3319             (#\U+1F11 . #\U+1F19)
    3320             (#\U+1F12 . #\U+1F1A)
    3321             (#\U+1F13 . #\U+1F1B)
    3322             (#\U+1F14 . #\U+1F1C)
    3323             (#\U+1F15 . #\U+1F1D)
    3324             (#\U+1F20 . #\U+1F28)
    3325             (#\U+1F21 . #\U+1F29)
    3326             (#\U+1F22 . #\U+1F2A)
    3327             (#\U+1F23 . #\U+1F2B)
    3328             (#\U+1F24 . #\U+1F2C)
    3329             (#\U+1F25 . #\U+1F2D)
    3330             (#\U+1F26 . #\U+1F2E)
    3331             (#\U+1F27 . #\U+1F2F)
    3332             (#\U+1F30 . #\U+1F38)
    3333             (#\U+1F31 . #\U+1F39)
    3334             (#\U+1F32 . #\U+1F3A)
    3335             (#\U+1F33 . #\U+1F3B)
    3336             (#\U+1F34 . #\U+1F3C)
    3337             (#\U+1F35 . #\U+1F3D)
    3338             (#\U+1F36 . #\U+1F3E)
    3339             (#\U+1F37 . #\U+1F3F)
    3340             (#\U+1F40 . #\U+1F48)
    3341             (#\U+1F41 . #\U+1F49)
    3342             (#\U+1F42 . #\U+1F4A)
    3343             (#\U+1F43 . #\U+1F4B)
    3344             (#\U+1F44 . #\U+1F4C)
    3345             (#\U+1F45 . #\U+1F4D)
    3346             (#\U+1F51 . #\U+1F59)
    3347             (#\U+1F53 . #\U+1F5B)
    3348             (#\U+1F55 . #\U+1F5D)
    3349             (#\U+1F57 . #\U+1F5F)
    3350             (#\U+1F60 . #\U+1F68)
    3351             (#\U+1F61 . #\U+1F69)
    3352             (#\U+1F62 . #\U+1F6A)
    3353             (#\U+1F63 . #\U+1F6B)
    3354             (#\U+1F64 . #\U+1F6C)
    3355             (#\U+1F65 . #\U+1F6D)
    3356             (#\U+1F66 . #\U+1F6E)
    3357             (#\U+1F67 . #\U+1F6F)
    3358             (#\U+1F70 . #\U+1FBA)
    3359             (#\U+1F71 . #\U+1FBB)
    3360             (#\U+1F72 . #\U+1FC8)
    3361             (#\U+1F73 . #\U+1FC9)
    3362             (#\U+1F74 . #\U+1FCA)
    3363             (#\U+1F75 . #\U+1FCB)
    3364             (#\U+1F76 . #\U+1FDA)
    3365             (#\U+1F77 . #\U+1FDB)
    3366             (#\U+1F78 . #\U+1FF8)
    3367             (#\U+1F79 . #\U+1FF9)
    3368             (#\U+1F7A . #\U+1FEA)
    3369             (#\U+1F7B . #\U+1FEB)
    3370             (#\U+1F7C . #\U+1FFA)
    3371             (#\U+1F7D . #\U+1FFB)
    3372             (#\U+1F80 . #\U+1F88)
    3373             (#\U+1F81 . #\U+1F89)
    3374             (#\U+1F82 . #\U+1F8A)
    3375             (#\U+1F83 . #\U+1F8B)
    3376             (#\U+1F84 . #\U+1F8C)
    3377             (#\U+1F85 . #\U+1F8D)
    3378             (#\U+1F86 . #\U+1F8E)
    3379             (#\U+1F87 . #\U+1F8F)
    3380             (#\U+1F90 . #\U+1F98)
    3381             (#\U+1F91 . #\U+1F99)
    3382             (#\U+1F92 . #\U+1F9A)
    3383             (#\U+1F93 . #\U+1F9B)
    3384             (#\U+1F94 . #\U+1F9C)
    3385             (#\U+1F95 . #\U+1F9D)
    3386             (#\U+1F96 . #\U+1F9E)
    3387             (#\U+1F97 . #\U+1F9F)
    3388             (#\U+1FA0 . #\U+1FA8)
    3389             (#\U+1FA1 . #\U+1FA9)
    3390             (#\U+1FA2 . #\U+1FAA)
    3391             (#\U+1FA3 . #\U+1FAB)
    3392             (#\U+1FA4 . #\U+1FAC)
    3393             (#\U+1FA5 . #\U+1FAD)
    3394             (#\U+1FA6 . #\U+1FAE)
    3395             (#\U+1FA7 . #\U+1FAF)
    3396             (#\U+1FB0 . #\U+1FB8)
    3397             (#\U+1FB1 . #\U+1FB9)
    3398             (#\U+1FB3 . #\U+1FBC)
    3399             (#\U+1FC3 . #\U+1FCC)
    3400             (#\U+1FD0 . #\U+1FD8)
    3401             (#\U+1FD1 . #\U+1FD9)
    3402             (#\U+1FE0 . #\U+1FE8)
    3403             (#\U+1FE1 . #\U+1FE9)
    3404             (#\U+1FE5 . #\U+1FEC)
    3405             (#\U+1FF3 . #\U+1FFC)
    3406             (#\U+214E . #\U+2132)
    3407             (#\U+2170 . #\U+2160)
    3408             (#\U+2171 . #\U+2161)
    3409             (#\U+2172 . #\U+2162)
    3410             (#\U+2173 . #\U+2163)
    3411             (#\U+2174 . #\U+2164)
    3412             (#\U+2175 . #\U+2165)
    3413             (#\U+2176 . #\U+2166)
    3414             (#\U+2177 . #\U+2167)
    3415             (#\U+2178 . #\U+2168)
    3416             (#\U+2179 . #\U+2169)
    3417             (#\U+217A . #\U+216A)
    3418             (#\U+217B . #\U+216B)
    3419             (#\U+217C . #\U+216C)
    3420             (#\U+217D . #\U+216D)
    3421             (#\U+217E . #\U+216E)
    3422             (#\U+217F . #\U+216F)
    3423             (#\U+2184 . #\U+2183)
    3424             (#\U+24D0 . #\U+24B6)
    3425             (#\U+24D1 . #\U+24B7)
    3426             (#\U+24D2 . #\U+24B8)
    3427             (#\U+24D3 . #\U+24B9)
    3428             (#\U+24D4 . #\U+24BA)
    3429             (#\U+24D5 . #\U+24BB)
    3430             (#\U+24D6 . #\U+24BC)
    3431             (#\U+24D7 . #\U+24BD)
    3432             (#\U+24D8 . #\U+24BE)
    3433             (#\U+24D9 . #\U+24BF)
    3434             (#\U+24DA . #\U+24C0)
    3435             (#\U+24DB . #\U+24C1)
    3436             (#\U+24DC . #\U+24C2)
    3437             (#\U+24DD . #\U+24C3)
    3438             (#\U+24DE . #\U+24C4)
    3439             (#\U+24DF . #\U+24C5)
    3440             (#\U+24E0 . #\U+24C6)
    3441             (#\U+24E1 . #\U+24C7)
    3442             (#\U+24E2 . #\U+24C8)
    3443             (#\U+24E3 . #\U+24C9)
    3444             (#\U+24E4 . #\U+24CA)
    3445             (#\U+24E5 . #\U+24CB)
    3446             (#\U+24E6 . #\U+24CC)
    3447             (#\U+24E7 . #\U+24CD)
    3448             (#\U+24E8 . #\U+24CE)
    3449             (#\U+24E9 . #\U+24CF)
    3450             (#\U+2C30 . #\U+2C00)
    3451             (#\U+2C31 . #\U+2C01)
    3452             (#\U+2C32 . #\U+2C02)
    3453             (#\U+2C33 . #\U+2C03)
    3454             (#\U+2C34 . #\U+2C04)
    3455             (#\U+2C35 . #\U+2C05)
    3456             (#\U+2C36 . #\U+2C06)
    3457             (#\U+2C37 . #\U+2C07)
    3458             (#\U+2C38 . #\U+2C08)
    3459             (#\U+2C39 . #\U+2C09)
    3460             (#\U+2C3A . #\U+2C0A)
    3461             (#\U+2C3B . #\U+2C0B)
    3462             (#\U+2C3C . #\U+2C0C)
    3463             (#\U+2C3D . #\U+2C0D)
    3464             (#\U+2C3E . #\U+2C0E)
    3465             (#\U+2C3F . #\U+2C0F)
    3466             (#\U+2C40 . #\U+2C10)
    3467             (#\U+2C41 . #\U+2C11)
    3468             (#\U+2C42 . #\U+2C12)
    3469             (#\U+2C43 . #\U+2C13)
    3470             (#\U+2C44 . #\U+2C14)
    3471             (#\U+2C45 . #\U+2C15)
    3472             (#\U+2C46 . #\U+2C16)
    3473             (#\U+2C47 . #\U+2C17)
    3474             (#\U+2C48 . #\U+2C18)
    3475             (#\U+2C49 . #\U+2C19)
    3476             (#\U+2C4A . #\U+2C1A)
    3477             (#\U+2C4B . #\U+2C1B)
    3478             (#\U+2C4C . #\U+2C1C)
    3479             (#\U+2C4D . #\U+2C1D)
    3480             (#\U+2C4E . #\U+2C1E)
    3481             (#\U+2C4F . #\U+2C1F)
    3482             (#\U+2C50 . #\U+2C20)
    3483             (#\U+2C51 . #\U+2C21)
    3484             (#\U+2C52 . #\U+2C22)
    3485             (#\U+2C53 . #\U+2C23)
    3486             (#\U+2C54 . #\U+2C24)
    3487             (#\U+2C55 . #\U+2C25)
    3488             (#\U+2C56 . #\U+2C26)
    3489             (#\U+2C57 . #\U+2C27)
    3490             (#\U+2C58 . #\U+2C28)
    3491             (#\U+2C59 . #\U+2C29)
    3492             (#\U+2C5A . #\U+2C2A)
    3493             (#\U+2C5B . #\U+2C2B)
    3494             (#\U+2C5C . #\U+2C2C)
    3495             (#\U+2C5D . #\U+2C2D)
    3496             (#\U+2C5E . #\U+2C2E)
    3497             (#\U+2C61 . #\U+2C60)
    3498             (#\U+2C65 . #\Latin_Capital_Letter_A_With_Stroke)
    3499             (#\U+2C66 . #\Latin_Capital_Letter_T_With_Diagonal_Stroke)
    3500             (#\U+2C68 . #\U+2C67)
    3501             (#\U+2C6A . #\U+2C69)
    3502             (#\U+2C6C . #\U+2C6B)
    3503             (#\U+2C76 . #\U+2C75)
    3504             (#\U+2C81 . #\U+2C80)
    3505             (#\U+2C83 . #\U+2C82)
    3506             (#\U+2C85 . #\U+2C84)
    3507             (#\U+2C87 . #\U+2C86)
    3508             (#\U+2C89 . #\U+2C88)
    3509             (#\U+2C8B . #\U+2C8A)
    3510             (#\U+2C8D . #\U+2C8C)
    3511             (#\U+2C8F . #\U+2C8E)
    3512             (#\U+2C91 . #\U+2C90)
    3513             (#\U+2C93 . #\U+2C92)
    3514             (#\U+2C95 . #\U+2C94)
    3515             (#\U+2C97 . #\U+2C96)
    3516             (#\U+2C99 . #\U+2C98)
    3517             (#\U+2C9B . #\U+2C9A)
    3518             (#\U+2C9D . #\U+2C9C)
    3519             (#\U+2C9F . #\U+2C9E)
    3520             (#\U+2CA1 . #\U+2CA0)
    3521             (#\U+2CA3 . #\U+2CA2)
    3522             (#\U+2CA5 . #\U+2CA4)
    3523             (#\U+2CA7 . #\U+2CA6)
    3524             (#\U+2CA9 . #\U+2CA8)
    3525             (#\U+2CAB . #\U+2CAA)
    3526             (#\U+2CAD . #\U+2CAC)
    3527             (#\U+2CAF . #\U+2CAE)
    3528             (#\U+2CB1 . #\U+2CB0)
    3529             (#\U+2CB3 . #\U+2CB2)
    3530             (#\U+2CB5 . #\U+2CB4)
    3531             (#\U+2CB7 . #\U+2CB6)
    3532             (#\U+2CB9 . #\U+2CB8)
    3533             (#\U+2CBB . #\U+2CBA)
    3534             (#\U+2CBD . #\U+2CBC)
    3535             (#\U+2CBF . #\U+2CBE)
    3536             (#\U+2CC1 . #\U+2CC0)
    3537             (#\U+2CC3 . #\U+2CC2)
    3538             (#\U+2CC5 . #\U+2CC4)
    3539             (#\U+2CC7 . #\U+2CC6)
    3540             (#\U+2CC9 . #\U+2CC8)
    3541             (#\U+2CCB . #\U+2CCA)
    3542             (#\U+2CCD . #\U+2CCC)
    3543             (#\U+2CCF . #\U+2CCE)
    3544             (#\U+2CD1 . #\U+2CD0)
    3545             (#\U+2CD3 . #\U+2CD2)
    3546             (#\U+2CD5 . #\U+2CD4)
    3547             (#\U+2CD7 . #\U+2CD6)
    3548             (#\U+2CD9 . #\U+2CD8)
    3549             (#\U+2CDB . #\U+2CDA)
    3550             (#\U+2CDD . #\U+2CDC)
    3551             (#\U+2CDF . #\U+2CDE)
    3552             (#\U+2CE1 . #\U+2CE0)
    3553             (#\U+2CE3 . #\U+2CE2)
    3554             (#\U+2D00 . #\U+10A0)
    3555             (#\U+2D01 . #\U+10A1)
    3556             (#\U+2D02 . #\U+10A2)
    3557             (#\U+2D03 . #\U+10A3)
    3558             (#\U+2D04 . #\U+10A4)
    3559             (#\U+2D05 . #\U+10A5)
    3560             (#\U+2D06 . #\U+10A6)
    3561             (#\U+2D07 . #\U+10A7)
    3562             (#\U+2D08 . #\U+10A8)
    3563             (#\U+2D09 . #\U+10A9)
    3564             (#\U+2D0A . #\U+10AA)
    3565             (#\U+2D0B . #\U+10AB)
    3566             (#\U+2D0C . #\U+10AC)
    3567             (#\U+2D0D . #\U+10AD)
    3568             (#\U+2D0E . #\U+10AE)
    3569             (#\U+2D0F . #\U+10AF)
    3570             (#\U+2D10 . #\U+10B0)
    3571             (#\U+2D11 . #\U+10B1)
    3572             (#\U+2D12 . #\U+10B2)
    3573             (#\U+2D13 . #\U+10B3)
    3574             (#\U+2D14 . #\U+10B4)
    3575             (#\U+2D15 . #\U+10B5)
    3576             (#\U+2D16 . #\U+10B6)
    3577             (#\U+2D17 . #\U+10B7)
    3578             (#\U+2D18 . #\U+10B8)
    3579             (#\U+2D19 . #\U+10B9)
    3580             (#\U+2D1A . #\U+10BA)
    3581             (#\U+2D1B . #\U+10BB)
    3582             (#\U+2D1C . #\U+10BC)
    3583             (#\U+2D1D . #\U+10BD)
    3584             (#\U+2D1E . #\U+10BE)
    3585             (#\U+2D1F . #\U+10BF)
    3586             (#\U+2D20 . #\U+10C0)
    3587             (#\U+2D21 . #\U+10C1)
    3588             (#\U+2D22 . #\U+10C2)
    3589             (#\U+2D23 . #\U+10C3)
    3590             (#\U+2D24 . #\U+10C4)
    3591             (#\U+2D25 . #\U+10C5)
    3592             (#\U+FF41 . #\U+FF21)
    3593             (#\U+FF42 . #\U+FF22)
    3594             (#\U+FF43 . #\U+FF23)
    3595             (#\U+FF44 . #\U+FF24)
    3596             (#\U+FF45 . #\U+FF25)
    3597             (#\U+FF46 . #\U+FF26)
    3598             (#\U+FF47 . #\U+FF27)
    3599             (#\U+FF48 . #\U+FF28)
    3600             (#\U+FF49 . #\U+FF29)
    3601             (#\U+FF4A . #\U+FF2A)
    3602             (#\U+FF4B . #\U+FF2B)
    3603             (#\U+FF4C . #\U+FF2C)
    3604             (#\U+FF4D . #\U+FF2D)
    3605             (#\U+FF4E . #\U+FF2E)
    3606             (#\U+FF4F . #\U+FF2F)
    3607             (#\U+FF50 . #\U+FF30)
    3608             (#\U+FF51 . #\U+FF31)
    3609             (#\U+FF52 . #\U+FF32)
    3610             (#\U+FF53 . #\U+FF33)
    3611             (#\U+FF54 . #\U+FF34)
    3612             (#\U+FF55 . #\U+FF35)
    3613             (#\U+FF56 . #\U+FF36)
    3614             (#\U+FF57 . #\U+FF37)
    3615             (#\U+FF58 . #\U+FF38)
    3616             (#\U+FF59 . #\U+FF39)
    3617             (#\U+FF5A . #\U+FF3A)
    3618             (#\U+10428 . #\U+10400)
    3619             (#\U+10429 . #\U+10401)
    3620             (#\U+1042A . #\U+10402)
    3621             (#\U+1042B . #\U+10403)
    3622             (#\U+1042C . #\U+10404)
    3623             (#\U+1042D . #\U+10405)
    3624             (#\U+1042E . #\U+10406)
    3625             (#\U+1042F . #\U+10407)
    3626             (#\U+10430 . #\U+10408)
    3627             (#\U+10431 . #\U+10409)
    3628             (#\U+10432 . #\U+1040A)
    3629             (#\U+10433 . #\U+1040B)
    3630             (#\U+10434 . #\U+1040C)
    3631             (#\U+10435 . #\U+1040D)
    3632             (#\U+10436 . #\U+1040E)
    3633             (#\U+10437 . #\U+1040F)
    3634             (#\U+10438 . #\U+10410)
    3635             (#\U+10439 . #\U+10411)
    3636             (#\U+1043A . #\U+10412)
    3637             (#\U+1043B . #\U+10413)
    3638             (#\U+1043C . #\U+10414)
    3639             (#\U+1043D . #\U+10415)
    3640             (#\U+1043E . #\U+10416)
    3641             (#\U+1043F . #\U+10417)
    3642             (#\U+10440 . #\U+10418)
    3643             (#\U+10441 . #\U+10419)
    3644             (#\U+10442 . #\U+1041A)
    3645             (#\U+10443 . #\U+1041B)
    3646             (#\U+10444 . #\U+1041C)
    3647             (#\U+10445 . #\U+1041D)
    3648             (#\U+10446 . #\U+1041E)
    3649             (#\U+10447 . #\U+1041F)
    3650             (#\U+10448 . #\U+10420)
    3651             (#\U+10449 . #\U+10421)
    3652             (#\U+1044A . #\U+10422)
    3653             (#\U+1044B . #\U+10423)
    3654             (#\U+1044C . #\U+10424)
    3655             (#\U+1044D . #\U+10425)
    3656             (#\U+1044E . #\U+10426)
    3657             (#\U+1044F . #\U+10427)
    3658             ))
    3659        (i 0)
    3660        (n (length lower-to-upper))
    3661        (upper-string (make-string n))
    3662        (upper-to-lower-string (make-string n))
    3663        (lower-string (make-string n))
    3664        (lower-to-upper-string (make-string n)))
    3665   (dolist (pair upper-to-lower)
     2744       (max-upper #\u+0000)
     2745       (max-lower #\u+0000))
     2746  (dolist (pair mapping)
    36662747    (destructuring-bind (upper . lower) pair
    3667       (setf (schar upper-string i) upper
    3668             (schar upper-to-lower-string i) lower
    3669             i (1+ i))))
    3670   (setq i 0)
    3671   (dolist (pair lower-to-upper)
    3672     (destructuring-bind (lower . upper) pair
    3673       (setf (schar lower-string i) lower
    3674             (schar lower-to-upper-string i) upper
    3675             i (1+ i))))
    3676   (setq *non-standard-upper-case-characters* upper-string
    3677         *non-standard-lower-case-equivalents* upper-to-lower-string
    3678         *non-standard-lower-case-characters* lower-string
    3679         *non-standard-upper-case-equivalents* lower-to-upper-string)
    3680   nil
    3681   )
    3682 
    3683 (declaim (inline string-binary-search))
    3684 (defun string-binary-search (char string)
    3685   (declare (simple-string string) (character char))
    3686   (do* ((low 0)
    3687         (high (1- (length string))))
    3688        ((>= low high))
    3689     (declare (fixnum low high))
    3690     (let* ((mid (ash (the fixnum (+ low high)) -1)))
    3691       (declare (fixnum mid))
    3692       (let* ((midch (schar string mid)))
    3693         (declare (character midch))
    3694         (if (eq char midch)
    3695           (return mid)
    3696           (if (char< char midch)
    3697             (setq high (1- mid))
    3698             (setq low (1+ mid))))))))
     2748      (when (char> upper max-upper)
     2749        (setq max-upper upper))
     2750      (when (char> lower max-lower)
     2751        (setq max-lower lower))))
     2752  (let* ((upper-to-lower (make-array (the fixnum (1+ (the fixnum (char-code max-upper)))) :element-type '(signed-byte 16)))
     2753         (lower-to-upper (make-array (the fixnum (1+ (the fixnum (char-code max-lower)))) :element-type '(signed-byte 16))))
     2754  (dolist (pair mapping)
     2755    (destructuring-bind (upper . lower) pair
     2756      (let* ((upper-code (char-code upper))
     2757             (lower-code (char-code lower))
     2758             (diff (- lower-code upper-code)))
     2759        (declare (type (mod #x110000) upper-code lower-code)
     2760                 (type (signed-byte 16) diff))
     2761        (setf (aref upper-to-lower upper-code) diff
     2762              (aref lower-to-upper lower-code) (the fixnum (- diff))))))
     2763  (do* ((upper (char-code #\A) (1+ upper))
     2764        (lower (char-code #\a) (1+ lower)))
     2765       ((> upper (char-code #\Z)))
     2766    (setf (aref upper-to-lower upper) (- lower upper)
     2767          (aref lower-to-upper lower) (- upper lower)))
     2768  (setq *lower-to-upper* lower-to-upper
     2769        *upper-to-lower* upper-to-lower)
     2770  nil))
     2771
     2772(eval-when (:compile-toplevel)
     2773  (declaim (inline %char-code-case-fold)))
     2774
     2775(defun %char-code-case-fold (code table)
     2776  (declare (type (mod #x110000) code)
     2777           (type (simple-array (signed-byte 16) (*)) table))
     2778  (if (>= code (length table))
     2779    code
     2780    (locally (declare (optimize (speed 3) (safety 0)))
     2781      (the fixnum (+ code (the (signed-byte 16) (aref table code)))))))
     2782
     2783(defun %char-code-upcase (code)
     2784  (%char-code-case-fold code *lower-to-upper*))
     2785
     2786(defun char-upcase (c)
     2787  "Return CHAR converted to upper-case if that is possible.  Don't convert
     2788   lowercase eszet (U+DF)."
     2789  (declare (optimize speed))            ; so that %char-code-case-fold inlines
     2790  (code-char (the valid-char-code (%char-code-case-fold (char-code c) *lower-to-upper*))))
     2791
     2792(defun %non-standard-char-code-upcase (code)
     2793  (declare (type (mod #x110000) code))
     2794  (%char-code-upcase code))
     2795
     2796
     2797(defun %char-code-downcase (code)
     2798  (declare (type (mod #x110000) code))
     2799  (let* ((table *upper-to-lower*))
     2800    (declare (type (simple-array (signed-byte 16) (*)) table))
     2801    (if (>= code (length table))
     2802      code
     2803      (locally (declare (optimize (speed 3) (safety 0)))
     2804        (the fixnum (+ code (the (signed-byte 16) (aref table code))))))))
     2805
    36992806
    37002807(defun %non-standard-upper-case-equivalent (char)
    3701   (let* ((idx (string-binary-search char *non-standard-lower-case-characters*)))
    3702     (when idx
    3703       (schar *non-standard-upper-case-equivalents* idx))))
     2808  (let* ((code (char-code char))
     2809         (table *lower-to-upper*)
     2810         (disp 0))
     2811    (declare (type (mod #x110000) code)
     2812             (type (simple-array (signed-byte 16) (*)))
     2813             (type (signed-byte 16) disp))
     2814    (if (< code (length table))
     2815      (setq disp (aref table code)))
     2816    (unless (zerop disp)
     2817      (code-char (+ code disp)))))
     2818   
     2819
    37042820
    37052821(defun %non-standard-lower-case-equivalent (char)
    3706   (let* ((idx (string-binary-search char *non-standard-upper-case-characters*)))
    3707     (when idx
    3708       (schar *non-standard-lower-case-equivalents* idx))))
     2822  (let* ((code (char-code char))
     2823         (table *upper-to-lower*)
     2824         (disp 0))
     2825    (declare (type (mod #x110000) code)
     2826             (type (simple-array (signed-byte 16) (*)))
     2827             (type (signed-byte 16) disp))
     2828    (if (< code (length table))
     2829      (setq disp (aref table code)))
     2830    (unless (zerop disp)
     2831      (code-char (+ code disp)))))
    37092832
    37102833;;;True for a-z, and maybe other things.
     
    37122835  "The argument must be a character object; LOWER-CASE-P returns T if the
    37132836   argument is a lower-case character, NIL otherwise."
    3714   (let ((code (char-code c)))
    3715     (if (< code #x80)
    3716       (and (>= code (char-code #\a))
    3717            (<= code (char-code #\z)))
    3718      (not (null (%non-standard-upper-case-equivalent c))))))
     2837  (let* ((code (char-code c))
     2838         (table *lower-to-upper*))
     2839    (declare (type (mod #x110000) code)
     2840             (type (simple-array (signed-byte 16) (*)) table))
     2841    (if (< code (length table))
     2842      (not (eql 0 (the (signed-byte 16) (aref table code)))))))
     2843
    37192844
    37202845
     
    37252850  "The argument must be a character object. ALPHA-CHAR-P returns T if the
    37262851   argument is an alphabetic character; otherwise NIL."
    3727   (let* ((code (char-code c)))
    3728     (declare (fixnum code))
    3729     (or (and (>= code (char-code #\A)) (<= code (char-code #\Z)))
    3730         (and (>= code (char-code #\a)) (<= code (char-code #\z)))
    3731         (and (>= code #x80)
    3732              (or (not (null (%non-standard-upper-case-equivalent c)))
    3733                  (not (null (%non-standard-lower-case-equivalent c))))))))
     2852  (let* ((code (char-code c))
     2853         (upper *upper-to-lower*)
     2854         (lower *lower-to-upper*))
     2855    (declare (type (mod #x110000 code))
     2856             (type (simple-array (signed-byte 16) (*)) upper lower))
     2857    (or (and (< code (length upper))
     2858             (not (zerop (the (signed-byte 16) (aref upper code)))))
     2859        (and (< code (length lower))
     2860             (not (zerop (the (signed-byte 16) (aref lower code))))))))
    37342861
    37352862
     
    38362963  resource)
    38372964
    3838 
     2965(defun valid-char-code-p (code)
     2966  (and (typep code 'fixnum)
     2967       (locally (declare (fixnum code))
     2968         (and
     2969          (>= code 0)
     2970          (< code #x110000)
     2971          (or (< code #xd800)
     2972              (> code #xdfff))))))
    38392973
    38402974
Note: See TracChangeset for help on using the changeset viewer.