Changeset 10372


Ignore:
Timestamp:
Aug 6, 2008, 10:20:02 AM (11 years ago)
Author:
gb
Message:

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.

Location:
trunk/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-1/l1-aprims.lisp

    r10359 r10372  
    401401)
    402402
     403
    403404(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)))
    404411  (let* ((length (length seq)))
    405412    (declare (fixnum length))
    406     (if (not end)
    407       (setq end length)
    408       (unless (typep end 'fixnum)
    409         (report-bad-arg end 'fixnum)))
    410     (unless (typep start 'fixnum)
    411       (report-bad-arg start 'fixnum))
    412     (locally (declare (fixnum start end))
    413       (cond ((> end length)
    414              (report-bad-arg end `(integer 0 (,length))))
    415             ((< start 0)
    416              (report-bad-arg start `(integer 0)))
    417             ((< end 0)
    418              (report-bad-arg end `(integer 0 (,length))))
    419             ((> start end)
    420              (report-bad-arg start `(integer 0 ,end)))
    421             (t end)))))
     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
    422424 
    423425
     
    899901(defun char-downcase (c)
    900902  "Return CHAR converted to lower-case if that is possible."
    901   (let* ((code (char-code c)))
    902     (declare (type (mod #x110000) code))
    903     (if (and (>= code (char-code #\A))(<= code (char-code #\Z)))
    904       (%code-char (%i+ code #.(- (char-code #\a)(char-code #\A))))
    905       (or (and (>= code #x80)
    906                (%non-standard-lower-case-equivalent c))
    907           c))))
     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)))))
    908905
    909906
     
    934931
    935932
    936 (defun char-upcase (c)
    937   "Return CHAR converted to upper-case if that is possible.  Don't convert
    938    lowercase eszet (U+DF)."
    939   (let* ((code (char-code c)))
    940     (declare (type (mod #x110000) code))
    941     (if (and (>= code (char-code #\a))(<= code (char-code #\z)))
    942       (%code-char (%i- code #.(- (char-code #\a)(char-code #\A))))
    943       (or (and (>= code #x80) (%non-standard-upper-case-equivalent c))
    944           c))))
    945 
    946 (defun %non-standard-char-code-upcase (code)
    947   (declare (type (mod #x110000) code))
    948   (if (>= code #x80)
    949     (let* ((upper (%non-standard-upper-case-equivalent (code-char code))))
    950       (if upper
    951         (char-code upper)
    952         code))
    953     code))
    954933
    955934
     
    1000979             (and (not (logbitp $lfbits-gfn-bit bits))
    1001980                  (not (logbitp $lfbits-cm-bit bits))))
    1002         (nth-immediate lfun 1))))
     981        (nth-immediate lfun 1))))
    1003982
    1004983
     
    11851164       (= (uvsize p) target::xmacptr.element-count)))
    11861165
    1187 (defstatic *non-standard-lower-to-upper* (make-hash-table :test #'eq)
    1188   "Maps non-STANDARD-CHAR lowercase chars to uppercase equivalents")
    1189 
    1190 (defstatic *non-standard-upper-to-lower* (make-hash-table :test #'eq)
    1191   "Maps non-STANDARD-CHAR uppercase chars to lowercase equivalents")
    1192 
    1193 ;;; This alist is automatically (and not to cleverly ...) generated.
     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.
    11941172;;; The (upper . lower) pairs have the property that UPPER is the
    11951173;;; value "simple uppercase equivalent" entry for LOWER in the
    11961174;;; UnicodeData.txt file and LOWER is the corresponding entry for
    1197 ;;; UPPER.
    1198 (dolist (pair '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
     1175;;; UPPER,
     1176(let* ((mapping
     1177        '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
    11991178                (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
    12001179                (#\Latin_Capital_Letter_A_With_Circumflex
     
    12051184                (#\Latin_Capital_Letter_A_With_Ring_Above
    12061185                 . #\Latin_Small_Letter_A_With_Ring_Above)
     1186         
    12071187                (#\Latin_Capital_Letter_Ae . #\Latin_Small_Letter_Ae)
     1188         
    12081189                (#\Latin_Capital_Letter_C_With_Cedilla . #\Latin_Small_Letter_C_With_Cedilla)
     1190         
    12091191                (#\Latin_Capital_Letter_E_With_Grave . #\Latin_Small_Letter_E_With_Grave)
     1192         
    12101193                (#\Latin_Capital_Letter_E_With_Acute . #\Latin_Small_Letter_E_With_Acute)
     1194         
    12111195                (#\Latin_Capital_Letter_E_With_Circumflex
    12121196                 . #\Latin_Small_Letter_E_With_Circumflex)
     1197         
    12131198                (#\Latin_Capital_Letter_E_With_Diaeresis
    12141199                 . #\Latin_Small_Letter_E_With_Diaeresis)
     1200         
    12151201                (#\Latin_Capital_Letter_I_With_Grave . #\Latin_Small_Letter_I_With_Grave)
     1202         
    12161203                (#\Latin_Capital_Letter_I_With_Acute . #\Latin_Small_Letter_I_With_Acute)
     1204         
    12171205                (#\Latin_Capital_Letter_I_With_Circumflex
    12181206                 . #\Latin_Small_Letter_I_With_Circumflex)
     1207         
    12191208                (#\Latin_Capital_Letter_I_With_Diaeresis
    12201209                 . #\Latin_Small_Letter_I_With_Diaeresis)
     1210         
    12211211                (#\Latin_Capital_Letter_Eth . #\Latin_Small_Letter_Eth)
     1212         
    12221213                (#\Latin_Capital_Letter_N_With_Tilde . #\Latin_Small_Letter_N_With_Tilde)
     1214         
    12231215                (#\Latin_Capital_Letter_O_With_Grave . #\Latin_Small_Letter_O_With_Grave)
     1216         
    12241217                (#\Latin_Capital_Letter_O_With_Acute . #\Latin_Small_Letter_O_With_Acute)
     1218         
    12251219                (#\Latin_Capital_Letter_O_With_Circumflex
    12261220                 . #\Latin_Small_Letter_O_With_Circumflex)
     1221         
    12271222                (#\Latin_Capital_Letter_O_With_Tilde . #\Latin_Small_Letter_O_With_Tilde)
     1223         
    12281224                (#\Latin_Capital_Letter_O_With_Diaeresis
    12291225                 . #\Latin_Small_Letter_O_With_Diaeresis)
     1226         
    12301227                (#\Latin_Capital_Letter_O_With_Stroke . #\Latin_Small_Letter_O_With_Stroke)
     1228         
    12311229                (#\Latin_Capital_Letter_U_With_Grave . #\Latin_Small_Letter_U_With_Grave)
     1230         
    12321231                (#\Latin_Capital_Letter_U_With_Acute . #\Latin_Small_Letter_U_With_Acute)
     1232         
    12331233                (#\Latin_Capital_Letter_U_With_Circumflex
    12341234                 . #\Latin_Small_Letter_U_With_Circumflex)
     1235         
    12351236                (#\Latin_Capital_Letter_U_With_Diaeresis
    12361237                 . #\Latin_Small_Letter_U_With_Diaeresis)
     1238         
    12371239                (#\Latin_Capital_Letter_Y_With_Acute . #\Latin_Small_Letter_Y_With_Acute)
     1240         
    12381241                (#\Latin_Capital_Letter_Thorn . #\Latin_Small_Letter_Thorn)
     1242         
    12391243                (#\Latin_Capital_Letter_A_With_Macron . #\Latin_Small_Letter_A_With_Macron)
     1244         
    12401245                (#\Latin_Capital_Letter_A_With_Breve . #\Latin_Small_Letter_A_With_Breve)
     1246         
    12411247                (#\Latin_Capital_Letter_A_With_Ogonek . #\Latin_Small_Letter_A_With_Ogonek)
     1248         
    12421249                (#\Latin_Capital_Letter_C_With_Acute . #\Latin_Small_Letter_C_With_Acute)
     1250         
    12431251                (#\Latin_Capital_Letter_C_With_Circumflex
    12441252                 . #\Latin_Small_Letter_C_With_Circumflex)
     1253         
    12451254                (#\Latin_Capital_Letter_C_With_Dot_Above
    12461255                 . #\Latin_Small_Letter_C_With_Dot_Above)
     1256         
    12471257                (#\Latin_Capital_Letter_C_With_Caron . #\Latin_Small_Letter_C_With_Caron)
     1258         
    12481259                (#\Latin_Capital_Letter_D_With_Caron . #\Latin_Small_Letter_D_With_Caron)
     1260         
    12491261                (#\Latin_Capital_Letter_D_With_Stroke . #\Latin_Small_Letter_D_With_Stroke)
     1262         
    12501263                (#\Latin_Capital_Letter_E_With_Macron . #\Latin_Small_Letter_E_With_Macron)
     1264         
    12511265                (#\Latin_Capital_Letter_E_With_Breve . #\Latin_Small_Letter_E_With_Breve)
     1266         
    12521267                (#\Latin_Capital_Letter_E_With_Dot_Above
    12531268                 . #\Latin_Small_Letter_E_With_Dot_Above)
     1269         
    12541270                (#\Latin_Capital_Letter_E_With_Ogonek . #\Latin_Small_Letter_E_With_Ogonek)
     1271         
    12551272                (#\Latin_Capital_Letter_E_With_Caron . #\Latin_Small_Letter_E_With_Caron)
     1273         
    12561274                (#\Latin_Capital_Letter_G_With_Circumflex
    12571275                 . #\Latin_Small_Letter_G_With_Circumflex)
     1276         
    12581277                (#\Latin_Capital_Letter_G_With_Breve . #\Latin_Small_Letter_G_With_Breve)
     1278         
    12591279                (#\Latin_Capital_Letter_G_With_Dot_Above
    12601280                 . #\Latin_Small_Letter_G_With_Dot_Above)
     1281         
    12611282                (#\Latin_Capital_Letter_G_With_Cedilla . #\Latin_Small_Letter_G_With_Cedilla)
     1283         
    12621284                (#\Latin_Capital_Letter_H_With_Circumflex
    12631285                 . #\Latin_Small_Letter_H_With_Circumflex)
     1286         
    12641287                (#\Latin_Capital_Letter_H_With_Stroke . #\Latin_Small_Letter_H_With_Stroke)
     1288         
    12651289                (#\Latin_Capital_Letter_I_With_Tilde . #\Latin_Small_Letter_I_With_Tilde)
     1290         
    12661291                (#\Latin_Capital_Letter_I_With_Macron . #\Latin_Small_Letter_I_With_Macron)
     1292         
    12671293                (#\Latin_Capital_Letter_I_With_Breve . #\Latin_Small_Letter_I_With_Breve)
     1294         
    12681295                (#\Latin_Capital_Letter_I_With_Ogonek . #\Latin_Small_Letter_I_With_Ogonek)
     1296         
    12691297                (#\Latin_Capital_Ligature_Ij . #\Latin_Small_Ligature_Ij)
     1298         
    12701299                (#\Latin_Capital_Letter_J_With_Circumflex
    12711300                 . #\Latin_Small_Letter_J_With_Circumflex)
     1301         
    12721302                (#\Latin_Capital_Letter_K_With_Cedilla . #\Latin_Small_Letter_K_With_Cedilla)
     1303         
    12731304                (#\Latin_Capital_Letter_L_With_Acute . #\Latin_Small_Letter_L_With_Acute)
     1305         
    12741306                (#\Latin_Capital_Letter_L_With_Cedilla . #\Latin_Small_Letter_L_With_Cedilla)
     1307         
    12751308                (#\Latin_Capital_Letter_L_With_Caron . #\Latin_Small_Letter_L_With_Caron)
     1309         
    12761310                (#\Latin_Capital_Letter_L_With_Middle_Dot
    12771311                 . #\Latin_Small_Letter_L_With_Middle_Dot)
     1312         
    12781313                (#\Latin_Capital_Letter_L_With_Stroke . #\Latin_Small_Letter_L_With_Stroke)
     1314         
    12791315                (#\Latin_Capital_Letter_N_With_Acute . #\Latin_Small_Letter_N_With_Acute)
     1316         
    12801317                (#\Latin_Capital_Letter_N_With_Cedilla . #\Latin_Small_Letter_N_With_Cedilla)
     1318         
    12811319                (#\Latin_Capital_Letter_N_With_Caron . #\Latin_Small_Letter_N_With_Caron)
     1320         
    12821321                (#\Latin_Capital_Letter_Eng . #\Latin_Small_Letter_Eng)
     1322         
    12831323                (#\Latin_Capital_Letter_O_With_Macron . #\Latin_Small_Letter_O_With_Macron)
     1324         
    12841325                (#\Latin_Capital_Letter_O_With_Breve . #\Latin_Small_Letter_O_With_Breve)
     1326         
    12851327                (#\Latin_Capital_Letter_O_With_Double_Acute
    12861328                 . #\Latin_Small_Letter_O_With_Double_Acute)
     1329         
    12871330                (#\Latin_Capital_Ligature_Oe . #\Latin_Small_Ligature_Oe)
     1331         
    12881332                (#\Latin_Capital_Letter_R_With_Acute . #\Latin_Small_Letter_R_With_Acute)
     1333         
    12891334                (#\Latin_Capital_Letter_R_With_Cedilla . #\Latin_Small_Letter_R_With_Cedilla)
     1335         
    12901336                (#\Latin_Capital_Letter_R_With_Caron . #\Latin_Small_Letter_R_With_Caron)
     1337         
    12911338                (#\Latin_Capital_Letter_S_With_Acute . #\Latin_Small_Letter_S_With_Acute)
     1339         
    12921340                (#\Latin_Capital_Letter_S_With_Circumflex
    12931341                 . #\Latin_Small_Letter_S_With_Circumflex)
     1342         
    12941343                (#\Latin_Capital_Letter_S_With_Cedilla . #\Latin_Small_Letter_S_With_Cedilla)
     1344         
    12951345                (#\Latin_Capital_Letter_S_With_Caron . #\Latin_Small_Letter_S_With_Caron)
     1346         
    12961347                (#\Latin_Capital_Letter_T_With_Cedilla . #\Latin_Small_Letter_T_With_Cedilla)
     1348         
    12971349                (#\Latin_Capital_Letter_T_With_Caron . #\Latin_Small_Letter_T_With_Caron)
     1350         
    12981351                (#\Latin_Capital_Letter_T_With_Stroke . #\Latin_Small_Letter_T_With_Stroke)
     1352         
    12991353                (#\Latin_Capital_Letter_U_With_Tilde . #\Latin_Small_Letter_U_With_Tilde)
     1354         
    13001355                (#\Latin_Capital_Letter_U_With_Macron . #\Latin_Small_Letter_U_With_Macron)
     1356         
    13011357                (#\Latin_Capital_Letter_U_With_Breve . #\Latin_Small_Letter_U_With_Breve)
     1358         
    13021359                (#\Latin_Capital_Letter_U_With_Ring_Above
    13031360                 . #\Latin_Small_Letter_U_With_Ring_Above)
     1361         
    13041362                (#\Latin_Capital_Letter_U_With_Double_Acute
    13051363                 . #\Latin_Small_Letter_U_With_Double_Acute)
     1364         
    13061365                (#\Latin_Capital_Letter_U_With_Ogonek . #\Latin_Small_Letter_U_With_Ogonek)
     1366         
    13071367                (#\Latin_Capital_Letter_W_With_Circumflex
    13081368                 . #\Latin_Small_Letter_W_With_Circumflex)
     1369         
    13091370                (#\Latin_Capital_Letter_Y_With_Circumflex
    13101371                 . #\Latin_Small_Letter_Y_With_Circumflex)
     1372         
    13111373                (#\Latin_Capital_Letter_Y_With_Diaeresis
    13121374                 . #\Latin_Small_Letter_Y_With_Diaeresis)
     1375         
    13131376                (#\Latin_Capital_Letter_Z_With_Acute . #\Latin_Small_Letter_Z_With_Acute)
     1377         
    13141378                (#\Latin_Capital_Letter_Z_With_Dot_Above
    13151379                 . #\Latin_Small_Letter_Z_With_Dot_Above)
     1380         
    13161381                (#\Latin_Capital_Letter_Z_With_Caron . #\Latin_Small_Letter_Z_With_Caron)
     1382         
    13171383                (#\Latin_Capital_Letter_B_With_Hook . #\Latin_Small_Letter_B_With_Hook)
     1384         
    13181385                (#\Latin_Capital_Letter_B_With_Topbar . #\Latin_Small_Letter_B_With_Topbar)
     1386         
    13191387                (#\Latin_Capital_Letter_Tone_Six . #\Latin_Small_Letter_Tone_Six)
     1388         
    13201389                (#\Latin_Capital_Letter_Open_O . #\Latin_Small_Letter_Open_O)
     1390         
    13211391                (#\Latin_Capital_Letter_C_With_Hook . #\Latin_Small_Letter_C_With_Hook)
     1392         
    13221393                (#\Latin_Capital_Letter_African_D . #\Latin_Small_Letter_D_With_Tail)
     1394         
    13231395                (#\Latin_Capital_Letter_D_With_Hook . #\Latin_Small_Letter_D_With_Hook)
     1396         
    13241397                (#\Latin_Capital_Letter_D_With_Topbar . #\Latin_Small_Letter_D_With_Topbar)
     1398         
    13251399                (#\Latin_Capital_Letter_Reversed_E . #\Latin_Small_Letter_Turned_E)
     1400         
    13261401                (#\Latin_Capital_Letter_Schwa . #\Latin_Small_Letter_Schwa)
     1402         
    13271403                (#\Latin_Capital_Letter_Open_E . #\Latin_Small_Letter_Open_E)
     1404         
    13281405                (#\Latin_Capital_Letter_F_With_Hook . #\Latin_Small_Letter_F_With_Hook)
     1406         
    13291407                (#\Latin_Capital_Letter_G_With_Hook . #\Latin_Small_Letter_G_With_Hook)
     1408         
    13301409                (#\Latin_Capital_Letter_Gamma . #\Latin_Small_Letter_Gamma)
     1410         
    13311411                (#\Latin_Capital_Letter_Iota . #\Latin_Small_Letter_Iota)
     1412         
    13321413                (#\Latin_Capital_Letter_I_With_Stroke . #\Latin_Small_Letter_I_With_Stroke)
     1414         
    13331415                (#\Latin_Capital_Letter_K_With_Hook . #\Latin_Small_Letter_K_With_Hook)
     1416         
    13341417                (#\Latin_Capital_Letter_Turned_M . #\Latin_Small_Letter_Turned_M)
     1418         
    13351419                (#\Latin_Capital_Letter_N_With_Left_Hook
    13361420                 . #\Latin_Small_Letter_N_With_Left_Hook)
     1421         
    13371422                (#\Latin_Capital_Letter_O_With_Middle_Tilde . #\Latin_Small_Letter_Barred_O)
     1423         
    13381424                (#\Latin_Capital_Letter_O_With_Horn . #\Latin_Small_Letter_O_With_Horn)
     1425         
    13391426                (#\Latin_Capital_Letter_Oi . #\Latin_Small_Letter_Oi)
     1427         
    13401428                (#\Latin_Capital_Letter_P_With_Hook . #\Latin_Small_Letter_P_With_Hook)
     1429         
    13411430                (#\Latin_Letter_Yr . #\Latin_Letter_Small_Capital_R)
     1431         
    13421432                (#\Latin_Capital_Letter_Tone_Two . #\Latin_Small_Letter_Tone_Two)
     1433         
    13431434                (#\Latin_Capital_Letter_Esh . #\Latin_Small_Letter_Esh)
     1435         
    13441436                (#\Latin_Capital_Letter_T_With_Hook . #\Latin_Small_Letter_T_With_Hook)
     1437         
    13451438                (#\Latin_Capital_Letter_T_With_Retroflex_Hook
    13461439                 . #\Latin_Small_Letter_T_With_Retroflex_Hook)
     1440         
    13471441                (#\Latin_Capital_Letter_U_With_Horn . #\Latin_Small_Letter_U_With_Horn)
     1442         
    13481443                (#\Latin_Capital_Letter_Upsilon . #\Latin_Small_Letter_Upsilon)
     1444         
    13491445                (#\Latin_Capital_Letter_V_With_Hook . #\Latin_Small_Letter_V_With_Hook)
     1446         
    13501447                (#\Latin_Capital_Letter_Y_With_Hook . #\Latin_Small_Letter_Y_With_Hook)
     1448         
    13511449                (#\Latin_Capital_Letter_Z_With_Stroke . #\Latin_Small_Letter_Z_With_Stroke)
     1450         
    13521451                (#\Latin_Capital_Letter_Ezh . #\Latin_Small_Letter_Ezh)
     1452         
    13531453                (#\Latin_Capital_Letter_Ezh_Reversed . #\Latin_Small_Letter_Ezh_Reversed)
     1454         
    13541455                (#\Latin_Capital_Letter_Tone_Five . #\Latin_Small_Letter_Tone_Five)
     1456         
    13551457                (#\Latin_Capital_Letter_Dz_With_Caron . #\Latin_Small_Letter_Dz_With_Caron)
     1458         
    13561459                (#\Latin_Capital_Letter_Lj . #\Latin_Small_Letter_Lj)
     1460         
    13571461                (#\Latin_Capital_Letter_Nj . #\Latin_Small_Letter_Nj)
     1462         
    13581463                (#\Latin_Capital_Letter_A_With_Caron . #\Latin_Small_Letter_A_With_Caron)
     1464         
    13591465                (#\Latin_Capital_Letter_I_With_Caron . #\Latin_Small_Letter_I_With_Caron)
     1466         
    13601467                (#\Latin_Capital_Letter_O_With_Caron . #\Latin_Small_Letter_O_With_Caron)
     1468         
    13611469                (#\Latin_Capital_Letter_U_With_Caron . #\Latin_Small_Letter_U_With_Caron)
     1470         
    13621471                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Macron
    13631472                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Macron)
     1473         
    13641474                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Acute
    13651475                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Acute)
     1476         
    13661477                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Caron
    13671478                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Caron)
     1479         
    13681480                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Grave
    13691481                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Grave)
     1482         
    13701483                (#\Latin_Capital_Letter_A_With_Diaeresis_And_Macron
    13711484                 . #\Latin_Small_Letter_A_With_Diaeresis_And_Macron)
     1485         
    13721486                (#\Latin_Capital_Letter_A_With_Dot_Above_And_Macron
    13731487                 . #\Latin_Small_Letter_A_With_Dot_Above_And_Macron)
     1488         
    13741489                (#\Latin_Capital_Letter_Ae_With_Macron . #\Latin_Small_Letter_Ae_With_Macron)
     1490         
    13751491                (#\Latin_Capital_Letter_G_With_Stroke . #\Latin_Small_Letter_G_With_Stroke)
     1492         
    13761493                (#\Latin_Capital_Letter_G_With_Caron . #\Latin_Small_Letter_G_With_Caron)
     1494         
    13771495                (#\Latin_Capital_Letter_K_With_Caron . #\Latin_Small_Letter_K_With_Caron)
     1496         
    13781497                (#\Latin_Capital_Letter_O_With_Ogonek . #\Latin_Small_Letter_O_With_Ogonek)
     1498         
    13791499                (#\Latin_Capital_Letter_O_With_Ogonek_And_Macron
    13801500                 . #\Latin_Small_Letter_O_With_Ogonek_And_Macron)
     1501         
    13811502                (#\Latin_Capital_Letter_Ezh_With_Caron . #\Latin_Small_Letter_Ezh_With_Caron)
     1503         
    13821504                (#\Latin_Capital_Letter_Dz . #\Latin_Small_Letter_Dz)
     1505         
    13831506                (#\Latin_Capital_Letter_G_With_Acute . #\Latin_Small_Letter_G_With_Acute)
     1507         
    13841508                (#\Latin_Capital_Letter_Hwair . #\Latin_Small_Letter_Hv)
     1509         
    13851510                (#\Latin_Capital_Letter_Wynn . #\Latin_Letter_Wynn)
     1511         
    13861512                (#\Latin_Capital_Letter_N_With_Grave . #\Latin_Small_Letter_N_With_Grave)
     1513         
    13871514                (#\Latin_Capital_Letter_A_With_Ring_Above_And_Acute
    13881515                 . #\Latin_Small_Letter_A_With_Ring_Above_And_Acute)
     1516         
    13891517                (#\Latin_Capital_Letter_Ae_With_Acute . #\Latin_Small_Letter_Ae_With_Acute)
     1518         
    13901519                (#\Latin_Capital_Letter_O_With_Stroke_And_Acute
    13911520                 . #\Latin_Small_Letter_O_With_Stroke_And_Acute)
     1521         
    13921522                (#\Latin_Capital_Letter_A_With_Double_Grave
    13931523                 . #\Latin_Small_Letter_A_With_Double_Grave)
     1524         
    13941525                (#\Latin_Capital_Letter_A_With_Inverted_Breve
    13951526                 . #\Latin_Small_Letter_A_With_Inverted_Breve)
     1527         
    13961528                (#\Latin_Capital_Letter_E_With_Double_Grave
    13971529                 . #\Latin_Small_Letter_E_With_Double_Grave)
     1530         
    13981531                (#\Latin_Capital_Letter_E_With_Inverted_Breve
    13991532                 . #\Latin_Small_Letter_E_With_Inverted_Breve)
     1533         
    14001534                (#\Latin_Capital_Letter_I_With_Double_Grave
    14011535                 . #\Latin_Small_Letter_I_With_Double_Grave)
     1536         
    14021537                (#\Latin_Capital_Letter_I_With_Inverted_Breve
    14031538                 . #\Latin_Small_Letter_I_With_Inverted_Breve)
     1539         
    14041540                (#\Latin_Capital_Letter_O_With_Double_Grave
    14051541                 . #\Latin_Small_Letter_O_With_Double_Grave)
     1542         
    14061543                (#\Latin_Capital_Letter_O_With_Inverted_Breve
    14071544                 . #\Latin_Small_Letter_O_With_Inverted_Breve)
     1545         
    14081546                (#\Latin_Capital_Letter_R_With_Double_Grave
    14091547                 . #\Latin_Small_Letter_R_With_Double_Grave)
     1548         
    14101549                (#\Latin_Capital_Letter_R_With_Inverted_Breve
    14111550                 . #\Latin_Small_Letter_R_With_Inverted_Breve)
     1551         
    14121552                (#\Latin_Capital_Letter_U_With_Double_Grave
    14131553                 . #\Latin_Small_Letter_U_With_Double_Grave)
     1554         
    14141555                (#\Latin_Capital_Letter_U_With_Inverted_Breve
    14151556                 . #\Latin_Small_Letter_U_With_Inverted_Breve)
     1557         
    14161558                (#\Latin_Capital_Letter_S_With_Comma_Below
    14171559                 . #\Latin_Small_Letter_S_With_Comma_Below)
     1560         
    14181561                (#\Latin_Capital_Letter_T_With_Comma_Below
    14191562                 . #\Latin_Small_Letter_T_With_Comma_Below)
     1563         
    14201564                (#\Latin_Capital_Letter_Yogh . #\Latin_Small_Letter_Yogh)
     1565         
    14211566                (#\Latin_Capital_Letter_H_With_Caron . #\Latin_Small_Letter_H_With_Caron)
     1567         
    14221568                (#\Latin_Capital_Letter_N_With_Long_Right_Leg
    14231569                 . #\Latin_Small_Letter_N_With_Long_Right_Leg)
     1570         
    14241571                (#\Latin_Capital_Letter_Ou . #\Latin_Small_Letter_Ou)
     1572         
    14251573                (#\Latin_Capital_Letter_Z_With_Hook . #\Latin_Small_Letter_Z_With_Hook)
     1574         
    14261575                (#\Latin_Capital_Letter_A_With_Dot_Above
    14271576                 . #\Latin_Small_Letter_A_With_Dot_Above)
     1577         
    14281578                (#\Latin_Capital_Letter_E_With_Cedilla . #\Latin_Small_Letter_E_With_Cedilla)
     1579         
    14291580                (#\Latin_Capital_Letter_O_With_Diaeresis_And_Macron
    14301581                 . #\Latin_Small_Letter_O_With_Diaeresis_And_Macron)
     1582         
    14311583                (#\Latin_Capital_Letter_O_With_Tilde_And_Macron
    14321584                 . #\Latin_Small_Letter_O_With_Tilde_And_Macron)
     1585         
    14331586                (#\Latin_Capital_Letter_O_With_Dot_Above
    14341587                 . #\Latin_Small_Letter_O_With_Dot_Above)
     1588         
    14351589                (#\Latin_Capital_Letter_O_With_Dot_Above_And_Macron
    14361590                 . #\Latin_Small_Letter_O_With_Dot_Above_And_Macron)
     1591         
    14371592                (#\Latin_Capital_Letter_Y_With_Macron . #\Latin_Small_Letter_Y_With_Macron)
     1593         
    14381594                (#\Latin_Capital_Letter_A_With_Stroke . #\U+2C65)
     1595         
    14391596                (#\Latin_Capital_Letter_C_With_Stroke . #\Latin_Small_Letter_C_With_Stroke)
     1597         
    14401598                (#\Latin_Capital_Letter_L_With_Bar . #\Latin_Small_Letter_L_With_Bar)
     1599         
    14411600                (#\Latin_Capital_Letter_T_With_Diagonal_Stroke . #\U+2C66)
     1601         
    14421602                (#\Latin_Capital_Letter_Glottal_Stop . #\Latin_Small_Letter_Glottal_Stop)
     1603         
    14431604                (#\Latin_Capital_Letter_B_With_Stroke . #\Latin_Small_Letter_B_With_Stroke)
     1605         
    14441606                (#\Latin_Capital_Letter_U_Bar . #\Latin_Small_Letter_U_Bar)
     1607         
    14451608                (#\Latin_Capital_Letter_Turned_V . #\Latin_Small_Letter_Turned_V)
     1609         
    14461610                (#\Latin_Capital_Letter_E_With_Stroke . #\Latin_Small_Letter_E_With_Stroke)
     1611         
    14471612                (#\Latin_Capital_Letter_J_With_Stroke . #\Latin_Small_Letter_J_With_Stroke)
     1613         
    14481614                (#\Latin_Capital_Letter_Small_Q_With_Hook_Tail
    14491615                 . #\Latin_Small_Letter_Q_With_Hook_Tail)
     1616         
    14501617                (#\Latin_Capital_Letter_R_With_Stroke . #\Latin_Small_Letter_R_With_Stroke)
     1618         
    14511619                (#\Latin_Capital_Letter_Y_With_Stroke . #\Latin_Small_Letter_Y_With_Stroke)
     1620         
    14521621                (#\Greek_Capital_Letter_Alpha_With_Tonos
    14531622                 . #\Greek_Small_Letter_Alpha_With_Tonos)
     1623         
    14541624                (#\Greek_Capital_Letter_Epsilon_With_Tonos
    14551625                 . #\Greek_Small_Letter_Epsilon_With_Tonos)
     1626         
    14561627                (#\Greek_Capital_Letter_Eta_With_Tonos . #\Greek_Small_Letter_Eta_With_Tonos)
     1628         
    14571629                (#\Greek_Capital_Letter_Iota_With_Tonos
    14581630                 . #\Greek_Small_Letter_Iota_With_Tonos)
     1631         
    14591632                (#\Greek_Capital_Letter_Omicron_With_Tonos
    14601633                 . #\Greek_Small_Letter_Omicron_With_Tonos)
     1634         
    14611635                (#\Greek_Capital_Letter_Upsilon_With_Tonos
    14621636                 . #\Greek_Small_Letter_Upsilon_With_Tonos)
     1637         
    14631638                (#\Greek_Capital_Letter_Omega_With_Tonos
    14641639                 . #\Greek_Small_Letter_Omega_With_Tonos)
     1640         
    14651641                (#\Greek_Capital_Letter_Alpha . #\Greek_Small_Letter_Alpha)
     1642         
    14661643                (#\Greek_Capital_Letter_Beta . #\Greek_Small_Letter_Beta)
     1644         
    14671645                (#\Greek_Capital_Letter_Gamma . #\Greek_Small_Letter_Gamma)
     1646         
    14681647                (#\Greek_Capital_Letter_Delta . #\Greek_Small_Letter_Delta)
     1648         
    14691649                (#\Greek_Capital_Letter_Epsilon . #\Greek_Small_Letter_Epsilon)
     1650         
    14701651                (#\Greek_Capital_Letter_Zeta . #\Greek_Small_Letter_Zeta)
     1652         
    14711653                (#\Greek_Capital_Letter_Eta . #\Greek_Small_Letter_Eta)
     1654         
    14721655                (#\Greek_Capital_Letter_Theta . #\Greek_Small_Letter_Theta)
     1656         
    14731657                (#\Greek_Capital_Letter_Iota . #\Greek_Small_Letter_Iota)
     1658         
    14741659                (#\Greek_Capital_Letter_Kappa . #\Greek_Small_Letter_Kappa)
     1660         
    14751661                (#\Greek_Capital_Letter_Lamda . #\Greek_Small_Letter_Lamda)
     1662         
    14761663                (#\Greek_Capital_Letter_Mu . #\Greek_Small_Letter_Mu)
     1664         
    14771665                (#\Greek_Capital_Letter_Nu . #\Greek_Small_Letter_Nu)
     1666         
    14781667                (#\Greek_Capital_Letter_Xi . #\Greek_Small_Letter_Xi)
     1668         
    14791669                (#\Greek_Capital_Letter_Omicron . #\Greek_Small_Letter_Omicron)
     1670         
    14801671                (#\Greek_Capital_Letter_Pi . #\Greek_Small_Letter_Pi)
     1672         
    14811673                (#\Greek_Capital_Letter_Rho . #\Greek_Small_Letter_Rho)
     1674         
    14821675                (#\Greek_Capital_Letter_Sigma . #\Greek_Small_Letter_Sigma)
     1676         
    14831677                (#\Greek_Capital_Letter_Tau . #\Greek_Small_Letter_Tau)
     1678         
    14841679                (#\Greek_Capital_Letter_Upsilon . #\Greek_Small_Letter_Upsilon)
     1680         
    14851681                (#\Greek_Capital_Letter_Phi . #\Greek_Small_Letter_Phi)
     1682         
    14861683                (#\Greek_Capital_Letter_Chi . #\Greek_Small_Letter_Chi)
     1684         
    14871685                (#\Greek_Capital_Letter_Psi . #\Greek_Small_Letter_Psi)
     1686         
    14881687                (#\Greek_Capital_Letter_Omega . #\Greek_Small_Letter_Omega)
     1688         
    14891689                (#\Greek_Capital_Letter_Iota_With_Dialytika
    14901690                 . #\Greek_Small_Letter_Iota_With_Dialytika)
     1691         
    14911692                (#\Greek_Capital_Letter_Upsilon_With_Dialytika
    14921693                 . #\Greek_Small_Letter_Upsilon_With_Dialytika)
     1694         
    14931695                (#\Greek_Letter_Archaic_Koppa . #\Greek_Small_Letter_Archaic_Koppa)
     1696         
    14941697                (#\Greek_Letter_Stigma . #\Greek_Small_Letter_Stigma)
     1698         
    14951699                (#\Greek_Letter_Digamma . #\Greek_Small_Letter_Digamma)
     1700         
    14961701                (#\Greek_Letter_Koppa . #\Greek_Small_Letter_Koppa)
     1702         
    14971703                (#\Greek_Letter_Sampi . #\Greek_Small_Letter_Sampi)
     1704         
    14981705                (#\Coptic_Capital_Letter_Shei . #\Coptic_Small_Letter_Shei)
     1706         
    14991707                (#\Coptic_Capital_Letter_Fei . #\Coptic_Small_Letter_Fei)
     1708         
    15001709                (#\Coptic_Capital_Letter_Khei . #\Coptic_Small_Letter_Khei)
     1710         
    15011711                (#\Coptic_Capital_Letter_Hori . #\Coptic_Small_Letter_Hori)
     1712         
    15021713                (#\Coptic_Capital_Letter_Gangia . #\Coptic_Small_Letter_Gangia)
     1714         
    15031715                (#\Coptic_Capital_Letter_Shima . #\Coptic_Small_Letter_Shima)
     1716         
    15041717                (#\Coptic_Capital_Letter_Dei . #\Coptic_Small_Letter_Dei)
     1718         
    15051719                (#\Greek_Capital_Letter_Sho . #\Greek_Small_Letter_Sho)
     1720         
    15061721                (#\Greek_Capital_Lunate_Sigma_Symbol . #\Greek_Lunate_Sigma_Symbol)
     1722         
    15071723                (#\Greek_Capital_Letter_San . #\Greek_Small_Letter_San)
     1724         
    15081725                (#\Greek_Capital_Reversed_Lunate_Sigma_Symbol
    15091726                 . #\Greek_Small_Reversed_Lunate_Sigma_Symbol)
     1727         
    15101728                (#\Greek_Capital_Dotted_Lunate_Sigma_Symbol
    15111729                 . #\Greek_Small_Dotted_Lunate_Sigma_Symbol)
     1730         
    15121731                (#\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol
    15131732                 . #\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol)
     1733         
    15141734                (#\Cyrillic_Capital_Letter_Ie_With_Grave
    15151735                 . #\Cyrillic_Small_Letter_Ie_With_Grave)
     1736         
    15161737                (#\Cyrillic_Capital_Letter_Io . #\Cyrillic_Small_Letter_Io)
     1738         
    15171739                (#\Cyrillic_Capital_Letter_Dje . #\Cyrillic_Small_Letter_Dje)
     1740         
    15181741                (#\Cyrillic_Capital_Letter_Gje . #\Cyrillic_Small_Letter_Gje)
     1742         
    15191743                (#\Cyrillic_Capital_Letter_Ukrainian_Ie
    15201744                 . #\Cyrillic_Small_Letter_Ukrainian_Ie)
     1745         
    15211746                (#\Cyrillic_Capital_Letter_Dze . #\Cyrillic_Small_Letter_Dze)
     1747         
    15221748                (#\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I
    15231749                 . #\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I)
     1750         
    15241751                (#\Cyrillic_Capital_Letter_Yi . #\Cyrillic_Small_Letter_Yi)
     1752         
    15251753                (#\Cyrillic_Capital_Letter_Je . #\Cyrillic_Small_Letter_Je)
     1754         
    15261755                (#\Cyrillic_Capital_Letter_Lje . #\Cyrillic_Small_Letter_Lje)
     1756         
    15271757                (#\Cyrillic_Capital_Letter_Nje . #\Cyrillic_Small_Letter_Nje)
     1758         
    15281759                (#\Cyrillic_Capital_Letter_Tshe . #\Cyrillic_Small_Letter_Tshe)
     1760         
    15291761                (#\Cyrillic_Capital_Letter_Kje . #\Cyrillic_Small_Letter_Kje)
     1762         
    15301763                (#\Cyrillic_Capital_Letter_I_With_Grave
    15311764                 . #\Cyrillic_Small_Letter_I_With_Grave)
     1765         
    15321766                (#\Cyrillic_Capital_Letter_Short_U . #\Cyrillic_Small_Letter_Short_U)
     1767         
    15331768                (#\Cyrillic_Capital_Letter_Dzhe . #\Cyrillic_Small_Letter_Dzhe)
     1769         
    15341770                (#\Cyrillic_Capital_Letter_A . #\Cyrillic_Small_Letter_A)
     1771         
    15351772                (#\Cyrillic_Capital_Letter_Be . #\Cyrillic_Small_Letter_Be)
     1773         
    15361774                (#\Cyrillic_Capital_Letter_Ve . #\Cyrillic_Small_Letter_Ve)
     1775         
    15371776                (#\Cyrillic_Capital_Letter_Ghe . #\Cyrillic_Small_Letter_Ghe)
     1777         
    15381778                (#\Cyrillic_Capital_Letter_De . #\Cyrillic_Small_Letter_De)
     1779         
    15391780                (#\Cyrillic_Capital_Letter_Ie . #\Cyrillic_Small_Letter_Ie)
     1781         
    15401782                (#\Cyrillic_Capital_Letter_Zhe . #\Cyrillic_Small_Letter_Zhe)
     1783         
    15411784                (#\Cyrillic_Capital_Letter_Ze . #\Cyrillic_Small_Letter_Ze)
     1785         
    15421786                (#\Cyrillic_Capital_Letter_I . #\Cyrillic_Small_Letter_I)
     1787         
    15431788                (#\Cyrillic_Capital_Letter_Short_I . #\Cyrillic_Small_Letter_Short_I)
     1789         
    15441790                (#\Cyrillic_Capital_Letter_Ka . #\Cyrillic_Small_Letter_Ka)
     1791         
    15451792                (#\Cyrillic_Capital_Letter_El . #\Cyrillic_Small_Letter_El)
     1793         
    15461794                (#\Cyrillic_Capital_Letter_Em . #\Cyrillic_Small_Letter_Em)
     1795         
    15471796                (#\Cyrillic_Capital_Letter_En . #\Cyrillic_Small_Letter_En)
     1797         
    15481798                (#\Cyrillic_Capital_Letter_O . #\Cyrillic_Small_Letter_O)
     1799         
    15491800                (#\Cyrillic_Capital_Letter_Pe . #\Cyrillic_Small_Letter_Pe)
     1801         
    15501802                (#\Cyrillic_Capital_Letter_Er . #\Cyrillic_Small_Letter_Er)
     1803         
    15511804                (#\Cyrillic_Capital_Letter_Es . #\Cyrillic_Small_Letter_Es)
     1805         
    15521806                (#\Cyrillic_Capital_Letter_Te . #\Cyrillic_Small_Letter_Te)
     1807         
    15531808                (#\Cyrillic_Capital_Letter_U . #\Cyrillic_Small_Letter_U)
     1809         
    15541810                (#\Cyrillic_Capital_Letter_Ef . #\Cyrillic_Small_Letter_Ef)
     1811         
    15551812                (#\Cyrillic_Capital_Letter_Ha . #\Cyrillic_Small_Letter_Ha)
     1813         
    15561814                (#\Cyrillic_Capital_Letter_Tse . #\Cyrillic_Small_Letter_Tse)
     1815         
    15571816                (#\Cyrillic_Capital_Letter_Che . #\Cyrillic_Small_Letter_Che)
     1817         
    15581818                (#\Cyrillic_Capital_Letter_Sha . #\Cyrillic_Small_Letter_Sha)
     1819         
    15591820                (#\Cyrillic_Capital_Letter_Shcha . #\Cyrillic_Small_Letter_Shcha)
     1821         
    15601822                (#\Cyrillic_Capital_Letter_Hard_Sign . #\Cyrillic_Small_Letter_Hard_Sign)
     1823         
    15611824                (#\Cyrillic_Capital_Letter_Yeru . #\Cyrillic_Small_Letter_Yeru)
     1825         
    15621826                (#\Cyrillic_Capital_Letter_Soft_Sign . #\Cyrillic_Small_Letter_Soft_Sign)
     1827         
    15631828                (#\Cyrillic_Capital_Letter_E . #\Cyrillic_Small_Letter_E)
     1829         
    15641830                (#\Cyrillic_Capital_Letter_Yu . #\Cyrillic_Small_Letter_Yu)
     1831         
    15651832                (#\Cyrillic_Capital_Letter_Ya . #\Cyrillic_Small_Letter_Ya)
     1833         
    15661834                (#\Cyrillic_Capital_Letter_Omega . #\Cyrillic_Small_Letter_Omega)
     1835         
    15671836                (#\Cyrillic_Capital_Letter_Yat . #\Cyrillic_Small_Letter_Yat)
     1837         
    15681838                (#\Cyrillic_Capital_Letter_Iotified_E . #\Cyrillic_Small_Letter_Iotified_E)
     1839         
    15691840                (#\Cyrillic_Capital_Letter_Little_Yus . #\Cyrillic_Small_Letter_Little_Yus)
     1841         
    15701842                (#\Cyrillic_Capital_Letter_Iotified_Little_Yus
    15711843                 . #\Cyrillic_Small_Letter_Iotified_Little_Yus)
     1844         
    15721845                (#\Cyrillic_Capital_Letter_Big_Yus . #\Cyrillic_Small_Letter_Big_Yus)
     1846         
    15731847                (#\Cyrillic_Capital_Letter_Iotified_Big_Yus
    15741848                 . #\Cyrillic_Small_Letter_Iotified_Big_Yus)
     1849         
    15751850                (#\Cyrillic_Capital_Letter_Ksi . #\Cyrillic_Small_Letter_Ksi)
     1851         
    15761852                (#\Cyrillic_Capital_Letter_Psi . #\Cyrillic_Small_Letter_Psi)
     1853         
    15771854                (#\Cyrillic_Capital_Letter_Fita . #\Cyrillic_Small_Letter_Fita)
     1855         
    15781856                (#\Cyrillic_Capital_Letter_Izhitsa . #\Cyrillic_Small_Letter_Izhitsa)
     1857         
    15791858                (#\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent
    15801859                 . #\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent)
     1860         
    15811861                (#\Cyrillic_Capital_Letter_Uk . #\Cyrillic_Small_Letter_Uk)
     1862         
    15821863                (#\Cyrillic_Capital_Letter_Round_Omega . #\Cyrillic_Small_Letter_Round_Omega)
     1864         
    15831865                (#\Cyrillic_Capital_Letter_Omega_With_Titlo
    15841866                 . #\Cyrillic_Small_Letter_Omega_With_Titlo)
     1867         
    15851868                (#\Cyrillic_Capital_Letter_Ot . #\Cyrillic_Small_Letter_Ot)
     1869         
    15861870                (#\Cyrillic_Capital_Letter_Koppa . #\Cyrillic_Small_Letter_Koppa)
     1871         
    15871872                (#\Cyrillic_Capital_Letter_Short_I_With_Tail
    15881873                 . #\Cyrillic_Small_Letter_Short_I_With_Tail)
     1874         
    15891875                (#\Cyrillic_Capital_Letter_Semisoft_Sign
    15901876                 . #\Cyrillic_Small_Letter_Semisoft_Sign)
     1877         
    15911878                (#\Cyrillic_Capital_Letter_Er_With_Tick
    15921879                 . #\Cyrillic_Small_Letter_Er_With_Tick)
     1880         
    15931881                (#\Cyrillic_Capital_Letter_Ghe_With_Upturn
    15941882                 . #\Cyrillic_Small_Letter_Ghe_With_Upturn)
     1883         
    15951884                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke
    15961885                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke)
     1886         
    15971887                (#\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook
    15981888                 . #\Cyrillic_Small_Letter_Ghe_With_Middle_Hook)
     1889         
    15991890                (#\Cyrillic_Capital_Letter_Zhe_With_Descender
    16001891                 . #\Cyrillic_Small_Letter_Zhe_With_Descender)
     1892         
    16011893                (#\Cyrillic_Capital_Letter_Ze_With_Descender
    16021894                 . #\Cyrillic_Small_Letter_Ze_With_Descender)
     1895         
    16031896                (#\Cyrillic_Capital_Letter_Ka_With_Descender
    16041897                 . #\Cyrillic_Small_Letter_Ka_With_Descender)
     1898         
    16051899                (#\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke
    16061900                 . #\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke)
     1901         
    16071902                (#\Cyrillic_Capital_Letter_Ka_With_Stroke
    16081903                 . #\Cyrillic_Small_Letter_Ka_With_Stroke)
     1904         
    16091905                (#\Cyrillic_Capital_Letter_Bashkir_Ka . #\Cyrillic_Small_Letter_Bashkir_Ka)
     1906         
    16101907                (#\Cyrillic_Capital_Letter_En_With_Descender
    16111908                 . #\Cyrillic_Small_Letter_En_With_Descender)
     1909         
    16121910                (#\Cyrillic_Capital_Ligature_En_Ghe . #\Cyrillic_Small_Ligature_En_Ghe)
     1911         
    16131912                (#\Cyrillic_Capital_Letter_Pe_With_Middle_Hook
    16141913                 . #\Cyrillic_Small_Letter_Pe_With_Middle_Hook)
     1914         
    16151915                (#\Cyrillic_Capital_Letter_Abkhasian_Ha
    16161916                 . #\Cyrillic_Small_Letter_Abkhasian_Ha)
     1917         
    16171918                (#\Cyrillic_Capital_Letter_Es_With_Descender
    16181919                 . #\Cyrillic_Small_Letter_Es_With_Descender)
     1920         
    16191921                (#\Cyrillic_Capital_Letter_Te_With_Descender
    16201922                 . #\Cyrillic_Small_Letter_Te_With_Descender)
     1923         
    16211924                (#\Cyrillic_Capital_Letter_Straight_U . #\Cyrillic_Small_Letter_Straight_U)
     1925         
    16221926                (#\Cyrillic_Capital_Letter_Straight_U_With_Stroke
    16231927                 . #\Cyrillic_Small_Letter_Straight_U_With_Stroke)
     1928         
    16241929                (#\Cyrillic_Capital_Letter_Ha_With_Descender
    16251930                 . #\Cyrillic_Small_Letter_Ha_With_Descender)
     1931         
    16261932                (#\Cyrillic_Capital_Ligature_Te_Tse . #\Cyrillic_Small_Ligature_Te_Tse)
     1933         
    16271934                (#\Cyrillic_Capital_Letter_Che_With_Descender
    16281935                 . #\Cyrillic_Small_Letter_Che_With_Descender)
     1936         
    16291937                (#\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke
    16301938                 . #\Cyrillic_Small_Letter_Che_With_Vertical_Stroke)
     1939         
    16311940                (#\Cyrillic_Capital_Letter_Shha . #\Cyrillic_Small_Letter_Shha)
     1941         
    16321942                (#\Cyrillic_Capital_Letter_Abkhasian_Che
    16331943                 . #\Cyrillic_Small_Letter_Abkhasian_Che)
     1944         
    16341945                (#\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender
    16351946                 . #\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender)
     1947         
    16361948                (#\Cyrillic_Letter_Palochka . #\Cyrillic_Small_Letter_Palochka)
     1949         
    16371950                (#\Cyrillic_Capital_Letter_Zhe_With_Breve
    16381951                 . #\Cyrillic_Small_Letter_Zhe_With_Breve)
     1952         
    16391953                (#\Cyrillic_Capital_Letter_Ka_With_Hook
    16401954                 . #\Cyrillic_Small_Letter_Ka_With_Hook)
     1955         
    16411956                (#\Cyrillic_Capital_Letter_El_With_Tail
    16421957                 . #\Cyrillic_Small_Letter_El_With_Tail)
     1958         
    16431959                (#\Cyrillic_Capital_Letter_En_With_Hook
    16441960                 . #\Cyrillic_Small_Letter_En_With_Hook)
     1961         
    16451962                (#\Cyrillic_Capital_Letter_En_With_Tail
    16461963                 . #\Cyrillic_Small_Letter_En_With_Tail)
     1964         
    16471965                (#\Cyrillic_Capital_Letter_Khakassian_Che
    16481966                 . #\Cyrillic_Small_Letter_Khakassian_Che)
     1967         
    16491968                (#\Cyrillic_Capital_Letter_Em_With_Tail
    16501969                 . #\Cyrillic_Small_Letter_Em_With_Tail)
     1970         
    16511971                (#\Cyrillic_Capital_Letter_A_With_Breve
    16521972                 . #\Cyrillic_Small_Letter_A_With_Breve)
     1973         
    16531974                (#\Cyrillic_Capital_Letter_A_With_Diaeresis
    16541975                 . #\Cyrillic_Small_Letter_A_With_Diaeresis)
     1976         
    16551977                (#\Cyrillic_Capital_Ligature_A_Ie . #\Cyrillic_Small_Ligature_A_Ie)
     1978         
    16561979                (#\Cyrillic_Capital_Letter_Ie_With_Breve
    16571980                 . #\Cyrillic_Small_Letter_Ie_With_Breve)
     1981         
    16581982                (#\Cyrillic_Capital_Letter_Schwa . #\Cyrillic_Small_Letter_Schwa)
     1983         
    16591984                (#\Cyrillic_Capital_Letter_Schwa_With_Diaeresis
    16601985                 . #\Cyrillic_Small_Letter_Schwa_With_Diaeresis)
     1986         
    16611987                (#\Cyrillic_Capital_Letter_Zhe_With_Diaeresis
    16621988                 . #\Cyrillic_Small_Letter_Zhe_With_Diaeresis)
     1989         
    16631990                (#\Cyrillic_Capital_Letter_Ze_With_Diaeresis
    16641991                 . #\Cyrillic_Small_Letter_Ze_With_Diaeresis)
     1992         
    16651993                (#\Cyrillic_Capital_Letter_Abkhasian_Dze
    16661994                 . #\Cyrillic_Small_Letter_Abkhasian_Dze)
     1995         
    16671996                (#\Cyrillic_Capital_Letter_I_With_Macron
    16681997                 . #\Cyrillic_Small_Letter_I_With_Macron)
     1998         
    16691999                (#\Cyrillic_Capital_Letter_I_With_Diaeresis
    16702000                 . #\Cyrillic_Small_Letter_I_With_Diaeresis)
     2001         
    16712002                (#\Cyrillic_Capital_Letter_O_With_Diaeresis
    16722003                 . #\Cyrillic_Small_Letter_O_With_Diaeresis)
     2004         
    16732005                (#\Cyrillic_Capital_Letter_Barred_O . #\Cyrillic_Small_Letter_Barred_O)
     2006         
    16742007                (#\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis
    16752008                 . #\Cyrillic_Small_Letter_Barred_O_With_Diaeresis)
     2009         
    16762010                (#\Cyrillic_Capital_Letter_E_With_Diaeresis
    16772011                 . #\Cyrillic_Small_Letter_E_With_Diaeresis)
     2012         
    16782013                (#\Cyrillic_Capital_Letter_U_With_Macron
    16792014                 . #\Cyrillic_Small_Letter_U_With_Macron)
     2015         
    16802016                (#\Cyrillic_Capital_Letter_U_With_Diaeresis
    16812017                 . #\Cyrillic_Small_Letter_U_With_Diaeresis)
     2018         
    16822019                (#\Cyrillic_Capital_Letter_U_With_Double_Acute
    16832020                 . #\Cyrillic_Small_Letter_U_With_Double_Acute)
     2021         
    16842022                (#\Cyrillic_Capital_Letter_Che_With_Diaeresis
    16852023                 . #\Cyrillic_Small_Letter_Che_With_Diaeresis)
     2024         
    16862025                (#\Cyrillic_Capital_Letter_Ghe_With_Descender
    16872026                 . #\Cyrillic_Small_Letter_Ghe_With_Descender)
     2027         
    16882028                (#\Cyrillic_Capital_Letter_Yeru_With_Diaeresis
    16892029                 . #\Cyrillic_Small_Letter_Yeru_With_Diaeresis)
     2030         
    16902031                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook
    16912032                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook)
     2033         
    16922034                (#\Cyrillic_Capital_Letter_Ha_With_Hook
    16932035                 . #\Cyrillic_Small_Letter_Ha_With_Hook)
     2036         
    16942037                (#\Cyrillic_Capital_Letter_Ha_With_Stroke
    16952038                 . #\Cyrillic_Small_Letter_Ha_With_Stroke)
     2039         
    16962040                (#\Cyrillic_Capital_Letter_Komi_De . #\Cyrillic_Small_Letter_Komi_De)
     2041         
    16972042                (#\Cyrillic_Capital_Letter_Komi_Dje . #\Cyrillic_Small_Letter_Komi_Dje)
     2043         
    16982044                (#\Cyrillic_Capital_Letter_Komi_Zje . #\Cyrillic_Small_Letter_Komi_Zje)
     2045         
    16992046                (#\Cyrillic_Capital_Letter_Komi_Dzje . #\Cyrillic_Small_Letter_Komi_Dzje)
     2047         
    17002048                (#\Cyrillic_Capital_Letter_Komi_Lje . #\Cyrillic_Small_Letter_Komi_Lje)
     2049         
    17012050                (#\Cyrillic_Capital_Letter_Komi_Nje . #\Cyrillic_Small_Letter_Komi_Nje)
     2051         
    17022052                (#\Cyrillic_Capital_Letter_Komi_Sje . #\Cyrillic_Small_Letter_Komi_Sje)
     2053         
    17032054                (#\Cyrillic_Capital_Letter_Komi_Tje . #\Cyrillic_Small_Letter_Komi_Tje)
     2055         
    17042056                (#\Cyrillic_Capital_Letter_Reversed_Ze . #\Cyrillic_Small_Letter_Reversed_Ze)
     2057         
    17052058                (#\Cyrillic_Capital_Letter_El_With_Hook
    17062059                 . #\Cyrillic_Small_Letter_El_With_Hook)
     2060         
    17072061                (#\Armenian_Capital_Letter_Ayb . #\Armenian_Small_Letter_Ayb)
     2062         
    17082063                (#\Armenian_Capital_Letter_Ben . #\Armenian_Small_Letter_Ben)
     2064         
    17092065                (#\Armenian_Capital_Letter_Gim . #\Armenian_Small_Letter_Gim)
     2066         
    17102067                (#\Armenian_Capital_Letter_Da . #\Armenian_Small_Letter_Da)
     2068         
    17112069                (#\Armenian_Capital_Letter_Ech . #\Armenian_Small_Letter_Ech)
     2070         
    17122071                (#\Armenian_Capital_Letter_Za . #\Armenian_Small_Letter_Za)
     2072         
    17132073                (#\Armenian_Capital_Letter_Eh . #\Armenian_Small_Letter_Eh)
     2074         
    17142075                (#\Armenian_Capital_Letter_Et . #\Armenian_Small_Letter_Et)
     2076         
    17152077                (#\Armenian_Capital_Letter_To . #\Armenian_Small_Letter_To)
     2078         
    17162079                (#\Armenian_Capital_Letter_Zhe . #\Armenian_Small_Letter_Zhe)
     2080         
    17172081                (#\Armenian_Capital_Letter_Ini . #\Armenian_Small_Letter_Ini)
     2082         
    17182083                (#\Armenian_Capital_Letter_Liwn . #\Armenian_Small_Letter_Liwn)
     2084         
    17192085                (#\Armenian_Capital_Letter_Xeh . #\Armenian_Small_Letter_Xeh)
     2086         
    17202087                (#\Armenian_Capital_Letter_Ca . #\Armenian_Small_Letter_Ca)
     2088         
    17212089                (#\Armenian_Capital_Letter_Ken . #\Armenian_Small_Letter_Ken)
     2090         
    17222091                (#\Armenian_Capital_Letter_Ho . #\Armenian_Small_Letter_Ho)
     2092         
    17232093                (#\Armenian_Capital_Letter_Ja . #\Armenian_Small_Letter_Ja)
     2094         
    17242095                (#\Armenian_Capital_Letter_Ghad . #\Armenian_Small_Letter_Ghad)
     2096         
    17252097                (#\Armenian_Capital_Letter_Cheh . #\Armenian_Small_Letter_Cheh)
     2098         
    17262099                (#\Armenian_Capital_Letter_Men . #\Armenian_Small_Letter_Men)
     2100         
    17272101                (#\Armenian_Capital_Letter_Yi . #\Armenian_Small_Letter_Yi)
     2102         
    17282103                (#\Armenian_Capital_Letter_Now . #\Armenian_Small_Letter_Now)
     2104         
    17292105                (#\Armenian_Capital_Letter_Sha . #\Armenian_Small_Letter_Sha)
     2106         
    17302107                (#\Armenian_Capital_Letter_Vo . #\Armenian_Small_Letter_Vo)
     2108         
    17312109                (#\Armenian_Capital_Letter_Cha . #\Armenian_Small_Letter_Cha)
     2110         
    17322111                (#\Armenian_Capital_Letter_Peh . #\Armenian_Small_Letter_Peh)
     2112         
    17332113                (#\Armenian_Capital_Letter_Jheh . #\Armenian_Small_Letter_Jheh)
     2114         
    17342115                (#\Armenian_Capital_Letter_Ra . #\Armenian_Small_Letter_Ra)
     2116         
    17352117                (#\Armenian_Capital_Letter_Seh . #\Armenian_Small_Letter_Seh)
     2118         
    17362119                (#\Armenian_Capital_Letter_Vew . #\Armenian_Small_Letter_Vew)
     2120         
    17372121                (#\Armenian_Capital_Letter_Tiwn . #\Armenian_Small_Letter_Tiwn)
     2122         
    17382123                (#\Armenian_Capital_Letter_Reh . #\Armenian_Small_Letter_Reh)
     2124         
    17392125                (#\Armenian_Capital_Letter_Co . #\Armenian_Small_Letter_Co)
     2126         
    17402127                (#\Armenian_Capital_Letter_Yiwn . #\Armenian_Small_Letter_Yiwn)
     2128         
    17412129                (#\Armenian_Capital_Letter_Piwr . #\Armenian_Small_Letter_Piwr)
     2130         
    17422131                (#\Armenian_Capital_Letter_Keh . #\Armenian_Small_Letter_Keh)
     2132         
    17432133                (#\Armenian_Capital_Letter_Oh . #\Armenian_Small_Letter_Oh)
     2134         
    17442135                (#\Armenian_Capital_Letter_Feh . #\Armenian_Small_Letter_Feh)
    1745                 (#\U+10A0 . #\U+2D00) (#\U+10A1 . #\U+2D01) (#\U+10A2 . #\U+2D02)
    1746                 (#\U+10A3 . #\U+2D03) (#\U+10A4 . #\U+2D04) (#\U+10A5 . #\U+2D05)
    1747                 (#\U+10A6 . #\U+2D06) (#\U+10A7 . #\U+2D07) (#\U+10A8 . #\U+2D08)
    1748                 (#\U+10A9 . #\U+2D09) (#\U+10AA . #\U+2D0A) (#\U+10AB . #\U+2D0B)
    1749                 (#\U+10AC . #\U+2D0C) (#\U+10AD . #\U+2D0D) (#\U+10AE . #\U+2D0E)
    1750                 (#\U+10AF . #\U+2D0F) (#\U+10B0 . #\U+2D10) (#\U+10B1 . #\U+2D11)
    1751                 (#\U+10B2 . #\U+2D12) (#\U+10B3 . #\U+2D13) (#\U+10B4 . #\U+2D14)
    1752                 (#\U+10B5 . #\U+2D15) (#\U+10B6 . #\U+2D16) (#\U+10B7 . #\U+2D17)
    1753                 (#\U+10B8 . #\U+2D18) (#\U+10B9 . #\U+2D19) (#\U+10BA . #\U+2D1A)
    1754                 (#\U+10BB . #\U+2D1B) (#\U+10BC . #\U+2D1C) (#\U+10BD . #\U+2D1D)
    1755                 (#\U+10BE . #\U+2D1E) (#\U+10BF . #\U+2D1F) (#\U+10C0 . #\U+2D20)
    1756                 (#\U+10C1 . #\U+2D21) (#\U+10C2 . #\U+2D22) (#\U+10C3 . #\U+2D23)
    1757                 (#\U+10C4 . #\U+2D24) (#\U+10C5 . #\U+2D25) (#\U+1E00 . #\U+1E01)
    1758                 (#\U+1E02 . #\U+1E03) (#\U+1E04 . #\U+1E05) (#\U+1E06 . #\U+1E07)
    1759                 (#\U+1E08 . #\U+1E09) (#\U+1E0A . #\U+1E0B) (#\U+1E0C . #\U+1E0D)
    1760                 (#\U+1E0E . #\U+1E0F) (#\U+1E10 . #\U+1E11) (#\U+1E12 . #\U+1E13)
    1761                 (#\U+1E14 . #\U+1E15) (#\U+1E16 . #\U+1E17) (#\U+1E18 . #\U+1E19)
    1762                 (#\U+1E1A . #\U+1E1B) (#\U+1E1C . #\U+1E1D) (#\U+1E1E . #\U+1E1F)
    1763                 (#\U+1E20 . #\U+1E21) (#\U+1E22 . #\U+1E23) (#\U+1E24 . #\U+1E25)
    1764                 (#\U+1E26 . #\U+1E27) (#\U+1E28 . #\U+1E29) (#\U+1E2A . #\U+1E2B)
    1765                 (#\U+1E2C . #\U+1E2D) (#\U+1E2E . #\U+1E2F) (#\U+1E30 . #\U+1E31)
    1766                 (#\U+1E32 . #\U+1E33) (#\U+1E34 . #\U+1E35) (#\U+1E36 . #\U+1E37)
    1767                 (#\U+1E38 . #\U+1E39) (#\U+1E3A . #\U+1E3B) (#\U+1E3C . #\U+1E3D)
    1768                 (#\U+1E3E . #\U+1E3F) (#\U+1E40 . #\U+1E41) (#\U+1E42 . #\U+1E43)
    1769                 (#\U+1E44 . #\U+1E45) (#\U+1E46 . #\U+1E47) (#\U+1E48 . #\U+1E49)
    1770                 (#\U+1E4A . #\U+1E4B) (#\U+1E4C . #\U+1E4D) (#\U+1E4E . #\U+1E4F)
    1771                 (#\U+1E50 . #\U+1E51) (#\U+1E52 . #\U+1E53) (#\U+1E54 . #\U+1E55)
    1772                 (#\U+1E56 . #\U+1E57) (#\U+1E58 . #\U+1E59) (#\U+1E5A . #\U+1E5B)
    1773                 (#\U+1E5C . #\U+1E5D) (#\U+1E5E . #\U+1E5F) (#\U+1E60 . #\U+1E61)
    1774                 (#\U+1E62 . #\U+1E63) (#\U+1E64 . #\U+1E65) (#\U+1E66 . #\U+1E67)
    1775                 (#\U+1E68 . #\U+1E69) (#\U+1E6A . #\U+1E6B) (#\U+1E6C . #\U+1E6D)
    1776                 (#\U+1E6E . #\U+1E6F) (#\U+1E70 . #\U+1E71) (#\U+1E72 . #\U+1E73)
    1777                 (#\U+1E74 . #\U+1E75) (#\U+1E76 . #\U+1E77) (#\U+1E78 . #\U+1E79)
    1778                 (#\U+1E7A . #\U+1E7B) (#\U+1E7C . #\U+1E7D) (#\U+1E7E . #\U+1E7F)
    1779                 (#\U+1E80 . #\U+1E81) (#\U+1E82 . #\U+1E83) (#\U+1E84 . #\U+1E85)
    1780                 (#\U+1E86 . #\U+1E87) (#\U+1E88 . #\U+1E89) (#\U+1E8A . #\U+1E8B)
    1781                 (#\U+1E8C . #\U+1E8D) (#\U+1E8E . #\U+1E8F) (#\U+1E90 . #\U+1E91)
    1782                 (#\U+1E92 . #\U+1E93) (#\U+1E94 . #\U+1E95) (#\U+1EA0 . #\U+1EA1)
    1783                 (#\U+1EA2 . #\U+1EA3) (#\U+1EA4 . #\U+1EA5) (#\U+1EA6 . #\U+1EA7)
    1784                 (#\U+1EA8 . #\U+1EA9) (#\U+1EAA . #\U+1EAB) (#\U+1EAC . #\U+1EAD)
    1785                 (#\U+1EAE . #\U+1EAF) (#\U+1EB0 . #\U+1EB1) (#\U+1EB2 . #\U+1EB3)
    1786                 (#\U+1EB4 . #\U+1EB5) (#\U+1EB6 . #\U+1EB7) (#\U+1EB8 . #\U+1EB9)
    1787                 (#\U+1EBA . #\U+1EBB) (#\U+1EBC . #\U+1EBD) (#\U+1EBE . #\U+1EBF)
    1788                 (#\U+1EC0 . #\U+1EC1) (#\U+1EC2 . #\U+1EC3) (#\U+1EC4 . #\U+1EC5)
    1789                 (#\U+1EC6 . #\U+1EC7) (#\U+1EC8 . #\U+1EC9) (#\U+1ECA . #\U+1ECB)
    1790                 (#\U+1ECC . #\U+1ECD) (#\U+1ECE . #\U+1ECF) (#\U+1ED0 . #\U+1ED1)
    1791                 (#\U+1ED2 . #\U+1ED3) (#\U+1ED4 . #\U+1ED5) (#\U+1ED6 . #\U+1ED7)
    1792                 (#\U+1ED8 . #\U+1ED9) (#\U+1EDA . #\U+1EDB) (#\U+1EDC . #\U+1EDD)
    1793                 (#\U+1EDE . #\U+1EDF) (#\U+1EE0 . #\U+1EE1) (#\U+1EE2 . #\U+1EE3)
    1794                 (#\U+1EE4 . #\U+1EE5) (#\U+1EE6 . #\U+1EE7) (#\U+1EE8 . #\U+1EE9)
    1795                 (#\U+1EEA . #\U+1EEB) (#\U+1EEC . #\U+1EED) (#\U+1EEE . #\U+1EEF)
    1796                 (#\U+1EF0 . #\U+1EF1) (#\U+1EF2 . #\U+1EF3) (#\U+1EF4 . #\U+1EF5)
    1797                 (#\U+1EF6 . #\U+1EF7) (#\U+1EF8 . #\U+1EF9) (#\U+1F08 . #\U+1F00)
    1798                 (#\U+1F09 . #\U+1F01) (#\U+1F0A . #\U+1F02) (#\U+1F0B . #\U+1F03)
    1799                 (#\U+1F0C . #\U+1F04) (#\U+1F0D . #\U+1F05) (#\U+1F0E . #\U+1F06)
    1800                 (#\U+1F0F . #\U+1F07) (#\U+1F18 . #\U+1F10) (#\U+1F19 . #\U+1F11)
    1801                 (#\U+1F1A . #\U+1F12) (#\U+1F1B . #\U+1F13) (#\U+1F1C . #\U+1F14)
    1802                 (#\U+1F1D . #\U+1F15) (#\U+1F28 . #\U+1F20) (#\U+1F29 . #\U+1F21)
    1803                 (#\U+1F2A . #\U+1F22) (#\U+1F2B . #\U+1F23) (#\U+1F2C . #\U+1F24)
    1804                 (#\U+1F2D . #\U+1F25) (#\U+1F2E . #\U+1F26) (#\U+1F2F . #\U+1F27)
    1805                 (#\U+1F38 . #\U+1F30) (#\U+1F39 . #\U+1F31) (#\U+1F3A . #\U+1F32)
    1806                 (#\U+1F3B . #\U+1F33) (#\U+1F3C . #\U+1F34) (#\U+1F3D . #\U+1F35)
    1807                 (#\U+1F3E . #\U+1F36) (#\U+1F3F . #\U+1F37) (#\U+1F48 . #\U+1F40)
    1808                 (#\U+1F49 . #\U+1F41) (#\U+1F4A . #\U+1F42) (#\U+1F4B . #\U+1F43)
    1809                 (#\U+1F4C . #\U+1F44) (#\U+1F4D . #\U+1F45) (#\U+1F59 . #\U+1F51)
    1810                 (#\U+1F5B . #\U+1F53) (#\U+1F5D . #\U+1F55) (#\U+1F5F . #\U+1F57)
    1811                 (#\U+1F68 . #\U+1F60) (#\U+1F69 . #\U+1F61) (#\U+1F6A . #\U+1F62)
    1812                 (#\U+1F6B . #\U+1F63) (#\U+1F6C . #\U+1F64) (#\U+1F6D . #\U+1F65)
    1813                 (#\U+1F6E . #\U+1F66) (#\U+1F6F . #\U+1F67) (#\U+1F88 . #\U+1F80)
    1814                 (#\U+1F89 . #\U+1F81) (#\U+1F8A . #\U+1F82) (#\U+1F8B . #\U+1F83)
    1815                 (#\U+1F8C . #\U+1F84) (#\U+1F8D . #\U+1F85) (#\U+1F8E . #\U+1F86)
    1816                 (#\U+1F8F . #\U+1F87) (#\U+1F98 . #\U+1F90) (#\U+1F99 . #\U+1F91)
    1817                 (#\U+1F9A . #\U+1F92) (#\U+1F9B . #\U+1F93) (#\U+1F9C . #\U+1F94)
    1818                 (#\U+1F9D . #\U+1F95) (#\U+1F9E . #\U+1F96) (#\U+1F9F . #\U+1F97)
    1819                 (#\U+1FA8 . #\U+1FA0) (#\U+1FA9 . #\U+1FA1) (#\U+1FAA . #\U+1FA2)
    1820                 (#\U+1FAB . #\U+1FA3) (#\U+1FAC . #\U+1FA4) (#\U+1FAD . #\U+1FA5)
    1821                 (#\U+1FAE . #\U+1FA6) (#\U+1FAF . #\U+1FA7) (#\U+1FB8 . #\U+1FB0)
    1822                 (#\U+1FB9 . #\U+1FB1) (#\U+1FBA . #\U+1F70) (#\U+1FBB . #\U+1F71)
    1823                 (#\U+1FBC . #\U+1FB3) (#\U+1FC8 . #\U+1F72) (#\U+1FC9 . #\U+1F73)
    1824                 (#\U+1FCA . #\U+1F74) (#\U+1FCB . #\U+1F75) (#\U+1FCC . #\U+1FC3)
    1825                 (#\U+1FD8 . #\U+1FD0) (#\U+1FD9 . #\U+1FD1) (#\U+1FDA . #\U+1F76)
    1826                 (#\U+1FDB . #\U+1F77) (#\U+1FE8 . #\U+1FE0) (#\U+1FE9 . #\U+1FE1)
    1827                 (#\U+1FEA . #\U+1F7A) (#\U+1FEB . #\U+1F7B) (#\U+1FEC . #\U+1FE5)
    1828                 (#\U+1FF8 . #\U+1F78) (#\U+1FF9 . #\U+1F79) (#\U+1FFA . #\U+1F7C)
    1829                 (#\U+1FFB . #\U+1F7D) (#\U+1FFC . #\U+1FF3) (#\U+2132 . #\U+214E)
    1830                 (#\U+2160 . #\U+2170) (#\U+2161 . #\U+2171) (#\U+2162 . #\U+2172)
    1831                 (#\U+2163 . #\U+2173) (#\U+2164 . #\U+2174) (#\U+2165 . #\U+2175)
    1832                 (#\U+2166 . #\U+2176) (#\U+2167 . #\U+2177) (#\U+2168 . #\U+2178)
    1833                 (#\U+2169 . #\U+2179) (#\U+216A . #\U+217A) (#\U+216B . #\U+217B)
    1834                 (#\U+216C . #\U+217C) (#\U+216D . #\U+217D) (#\U+216E . #\U+217E)
    1835                 (#\U+216F . #\U+217F) (#\U+2183 . #\U+2184) (#\U+24B6 . #\U+24D0)
    1836                 (#\U+24B7 . #\U+24D1) (#\U+24B8 . #\U+24D2) (#\U+24B9 . #\U+24D3)
    1837                 (#\U+24BA . #\U+24D4) (#\U+24BB . #\U+24D5) (#\U+24BC . #\U+24D6)
    1838                 (#\U+24BD . #\U+24D7) (#\U+24BE . #\U+24D8) (#\U+24BF . #\U+24D9)
    1839                 (#\U+24C0 . #\U+24DA) (#\U+24C1 . #\U+24DB) (#\U+24C2 . #\U+24DC)
    1840                 (#\U+24C3 . #\U+24DD) (#\U+24C4 . #\U+24DE) (#\U+24C5 . #\U+24DF)
    1841                 (#\U+24C6 . #\U+24E0) (#\U+24C7 . #\U+24E1) (#\U+24C8 . #\U+24E2)
    1842                 (#\U+24C9 . #\U+24E3) (#\U+24CA . #\U+24E4) (#\U+24CB . #\U+24E5)
    1843                 (#\U+24CC . #\U+24E6) (#\U+24CD . #\U+24E7) (#\U+24CE . #\U+24E8)
    1844                 (#\U+24CF . #\U+24E9) (#\U+2C00 . #\U+2C30) (#\U+2C01 . #\U+2C31)
    1845                 (#\U+2C02 . #\U+2C32) (#\U+2C03 . #\U+2C33) (#\U+2C04 . #\U+2C34)
    1846                 (#\U+2C05 . #\U+2C35) (#\U+2C06 . #\U+2C36) (#\U+2C07 . #\U+2C37)
    1847                 (#\U+2C08 . #\U+2C38) (#\U+2C09 . #\U+2C39) (#\U+2C0A . #\U+2C3A)
    1848                 (#\U+2C0B . #\U+2C3B) (#\U+2C0C . #\U+2C3C) (#\U+2C0D . #\U+2C3D)
    1849                 (#\U+2C0E . #\U+2C3E) (#\U+2C0F . #\U+2C3F) (#\U+2C10 . #\U+2C40)
    1850                 (#\U+2C11 . #\U+2C41) (#\U+2C12 . #\U+2C42) (#\U+2C13 . #\U+2C43)
    1851                 (#\U+2C14 . #\U+2C44) (#\U+2C15 . #\U+2C45) (#\U+2C16 . #\U+2C46)
    1852                 (#\U+2C17 . #\U+2C47) (#\U+2C18 . #\U+2C48) (#\U+2C19 . #\U+2C49)
    1853                 (#\U+2C1A . #\U+2C4A) (#\U+2C1B . #\U+2C4B) (#\U+2C1C . #\U+2C4C)
    1854                 (#\U+2C1D . #\U+2C4D) (#\U+2C1E . #\U+2C4E) (#\U+2C1F . #\U+2C4F)
    1855                 (#\U+2C20 . #\U+2C50) (#\U+2C21 . #\U+2C51) (#\U+2C22 . #\U+2C52)
    1856                 (#\U+2C23 . #\U+2C53) (#\U+2C24 . #\U+2C54) (#\U+2C25 . #\U+2C55)
    1857                 (#\U+2C26 . #\U+2C56) (#\U+2C27 . #\U+2C57) (#\U+2C28 . #\U+2C58)
    1858                 (#\U+2C29 . #\U+2C59) (#\U+2C2A . #\U+2C5A) (#\U+2C2B . #\U+2C5B)
    1859                 (#\U+2C2C . #\U+2C5C) (#\U+2C2D . #\U+2C5D) (#\U+2C2E . #\U+2C5E)
    1860                 (#\U+2C60 . #\U+2C61) (#\U+2C62 . #\Latin_Small_Letter_L_With_Middle_Tilde)
    1861                 (#\U+2C63 . #\U+1D7D) (#\U+2C64 . #\Latin_Small_Letter_R_With_Tail)
    1862                 (#\U+2C67 . #\U+2C68) (#\U+2C69 . #\U+2C6A) (#\U+2C6B . #\U+2C6C)
    1863                 (#\U+2C75 . #\U+2C76) (#\U+2C80 . #\U+2C81) (#\U+2C82 . #\U+2C83)
    1864                 (#\U+2C84 . #\U+2C85) (#\U+2C86 . #\U+2C87) (#\U+2C88 . #\U+2C89)
    1865                 (#\U+2C8A . #\U+2C8B) (#\U+2C8C . #\U+2C8D) (#\U+2C8E . #\U+2C8F)
    1866                 (#\U+2C90 . #\U+2C91) (#\U+2C92 . #\U+2C93) (#\U+2C94 . #\U+2C95)
    1867                 (#\U+2C96 . #\U+2C97) (#\U+2C98 . #\U+2C99) (#\U+2C9A . #\U+2C9B)
    1868                 (#\U+2C9C . #\U+2C9D) (#\U+2C9E . #\U+2C9F) (#\U+2CA0 . #\U+2CA1)
    1869                 (#\U+2CA2 . #\U+2CA3) (#\U+2CA4 . #\U+2CA5) (#\U+2CA6 . #\U+2CA7)
    1870                 (#\U+2CA8 . #\U+2CA9) (#\U+2CAA . #\U+2CAB) (#\U+2CAC . #\U+2CAD)
    1871                 (#\U+2CAE . #\U+2CAF) (#\U+2CB0 . #\U+2CB1) (#\U+2CB2 . #\U+2CB3)
    1872                 (#\U+2CB4 . #\U+2CB5) (#\U+2CB6 . #\U+2CB7) (#\U+2CB8 . #\U+2CB9)
    1873                 (#\U+2CBA . #\U+2CBB) (#\U+2CBC . #\U+2CBD) (#\U+2CBE . #\U+2CBF)
    1874                 (#\U+2CC0 . #\U+2CC1) (#\U+2CC2 . #\U+2CC3) (#\U+2CC4 . #\U+2CC5)
    1875                 (#\U+2CC6 . #\U+2CC7) (#\U+2CC8 . #\U+2CC9) (#\U+2CCA . #\U+2CCB)
    1876                 (#\U+2CCC . #\U+2CCD) (#\U+2CCE . #\U+2CCF) (#\U+2CD0 . #\U+2CD1)
    1877                 (#\U+2CD2 . #\U+2CD3) (#\U+2CD4 . #\U+2CD5) (#\U+2CD6 . #\U+2CD7)
    1878                 (#\U+2CD8 . #\U+2CD9) (#\U+2CDA . #\U+2CDB) (#\U+2CDC . #\U+2CDD)
    1879                 (#\U+2CDE . #\U+2CDF) (#\U+2CE0 . #\U+2CE1) (#\U+2CE2 . #\U+2CE3)
    1880                 (#\U+FF21 . #\U+FF41) (#\U+FF22 . #\U+FF42) (#\U+FF23 . #\U+FF43)
    1881                 (#\U+FF24 . #\U+FF44) (#\U+FF25 . #\U+FF45) (#\U+FF26 . #\U+FF46)
    1882                 (#\U+FF27 . #\U+FF47) (#\U+FF28 . #\U+FF48) (#\U+FF29 . #\U+FF49)
    1883                 (#\U+FF2A . #\U+FF4A) (#\U+FF2B . #\U+FF4B) (#\U+FF2C . #\U+FF4C)
    1884                 (#\U+FF2D . #\U+FF4D) (#\U+FF2E . #\U+FF4E) (#\U+FF2F . #\U+FF4F)
    1885                 (#\U+FF30 . #\U+FF50) (#\U+FF31 . #\U+FF51) (#\U+FF32 . #\U+FF52)
    1886                 (#\U+FF33 . #\U+FF53) (#\U+FF34 . #\U+FF54) (#\U+FF35 . #\U+FF55)
    1887                 (#\U+FF36 . #\U+FF56) (#\U+FF37 . #\U+FF57) (#\U+FF38 . #\U+FF58)
    1888                 (#\U+FF39 . #\U+FF59) (#\U+FF3A . #\U+FF5A) (#\U+10400 . #\U+10428)
    1889                 (#\U+10401 . #\U+10429) (#\U+10402 . #\U+1042A) (#\U+10403 . #\U+1042B)
    1890                 (#\U+10404 . #\U+1042C) (#\U+10405 . #\U+1042D) (#\U+10406 . #\U+1042E)
    1891                 (#\U+10407 . #\U+1042F) (#\U+10408 . #\U+10430) (#\U+10409 . #\U+10431)
    1892                 (#\U+1040A . #\U+10432) (#\U+1040B . #\U+10433) (#\U+1040C . #\U+10434)
    1893                 (#\U+1040D . #\U+10435) (#\U+1040E . #\U+10436) (#\U+1040F . #\U+10437)
    1894                 (#\U+10410 . #\U+10438) (#\U+10411 . #\U+10439) (#\U+10412 . #\U+1043A)
    1895                 (#\U+10413 . #\U+1043B) (#\U+10414 . #\U+1043C) (#\U+10415 . #\U+1043D)
    1896                 (#\U+10416 . #\U+1043E) (#\U+10417 . #\U+1043F) (#\U+10418 . #\U+10440)
    1897                 (#\U+10419 . #\U+10441) (#\U+1041A . #\U+10442) (#\U+1041B . #\U+10443)
    1898                 (#\U+1041C . #\U+10444) (#\U+1041D . #\U+10445) (#\U+1041E . #\U+10446)
    1899                 (#\U+1041F . #\U+10447) (#\U+10420 . #\U+10448) (#\U+10421 . #\U+10449)
    1900                 (#\U+10422 . #\U+1044A) (#\U+10423 . #\U+1044B) (#\U+10424 . #\U+1044C)
    1901                 (#\U+10425 . #\U+1044D) (#\U+10426 . #\U+1044E) (#\U+10427 . #\U+1044F)))
    1902   (destructuring-bind (upper . lower) pair
    1903     (setf (gethash upper *non-standard-upper-to-lower*) lower
    1904           (gethash lower *non-standard-lower-to-upper*) upper)))
    1905 
    1906 (assert-hash-table-readonly *non-standard-upper-to-lower*)
    1907 (assert-hash-table-readonly *non-standard-lower-to-upper*)
     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
    19082825
    19092826(defun %non-standard-upper-case-equivalent (char)
    1910   (gethash char *non-standard-lower-to-upper*))
     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)))))
    19112851
    19122852;;;True for a-z, and maybe other things.
     
    19142854  "The argument must be a character object; LOWER-CASE-P returns T if the
    19152855   argument is a lower-case character, NIL otherwise."
    1916   (let ((code (char-code c)))
    1917     (if (< code #x80)
    1918       (and (>= code (char-code #\a))
    1919            (<= code (char-code #\z)))
    1920      (not (null (%non-standard-upper-case-equivalent c))))))
     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
    19212863
    19222864
     
    19272869  "The argument must be a character object. ALPHA-CHAR-P returns T if the
    19282870   argument is an alphabetic character; otherwise NIL."
    1929   (let* ((code (char-code c)))
    1930     (declare (fixnum code))
    1931     (or (and (>= code (char-code #\A)) (<= code (char-code #\Z)))
    1932         (and (>= code (char-code #\a)) (<= code (char-code #\z)))
    1933         (and (>= code #x80)
    1934              (or (not (null (%non-standard-upper-case-equivalent c)))
    1935                  (not (null (%non-standard-lower-case-equivalent c))))))))
     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))))))))
    19362880
    19372881
     
    20382982  resource)
    20392983
    2040 
    20412984(defun valid-char-code-p (code)
    20422985  (and (typep code 'fixnum)
  • trunk/source/lib/chars.lisp

    r8532 r10372  
    8181
    8282
    83 (defun %non-standard-lower-case-equivalent (char)
    84   (gethash char *non-standard-upper-to-lower*))
     83
    8584
    8685
     
    125124     (and (>= code (char-code #\A))
    126125          (<= code (char-code #\Z)))
    127      (and (>= code #x80)
     126     (and (> code #x80)
    128127          (or (not (null (%non-standard-upper-case-equivalent c)))
    129128              (not (null (%non-standard-lower-case-equivalent c))))))))
     
    303302
    304303
    305 (defun string-downcase (string &key start end)
     304(defun string-downcase (string &key (start 0) end)
    306305  (setq string (copy-string-arg string))
    307   (if (not start) (setq start 0)(require-type start 'fixnum))
    308   (if (not end)(setq end (length string))(require-type end 'fixnum))
     306  (setq end (check-sequence-bounds string start end))
    309307  (%strdown string start end))
    310308
     
    326324                    (if (>= code #x80)
    327325                      (%non-standard-lower-case-equivalent ch)))))
    328       (declare (character ch) (type (mod #x11000) code))
     326      (declare (character ch) (type (mod #x110000) code))
    329327      (when lower
    330328        (setf (schar string i) lower)))))
     
    343341    (character
    344342     (return-from copy-string-arg
    345                     (make-string 1 :initial-element string :element-type (type-of string)))))
     343                    (make-string 1 :initial-element string ))))
    346344  (%substr string org (+ len org)))     
    347345
    348 (defun string-upcase (string &key start end)
     346(defun string-upcase (string &key (start 0) end)
    349347  (setq string (copy-string-arg string))
    350   (if (not start) (setq start 0)(require-type start 'fixnum))
    351   (if (not end)(setq end (length string))(require-type end 'fixnum))
     348  (setq end (check-sequence-bounds string start end))
    352349  (%strup string start end))
    353350
     
    368365                    (if (>= code #x80)
    369366                      (%non-standard-upper-case-equivalent ch)))))
    370       (declare (character ch) (type (mod #x11000) code))
     367      (declare (character ch) (type (mod #x110000) code))
    371368      (when upper
    372369        (setf (schar string i) upper)))))
     
    374371
    375372
    376 (defun string-capitalize (string &key start end)
     373(defun string-capitalize (string &key (start 0) end)
    377374  (setq string (copy-string-arg string))
    378   (if (not start) (setq start 0)(require-type start 'fixnum))
    379   (if (not end)(setq end (length string))(require-type end 'fixnum))
     375  (setq end (check-sequence-bounds string start end))
    380376  (%strcap string start end))
    381377
     
    402398
    403399
    404 (defun nstring-downcase (string &key start end)
     400(defun nstring-downcase (string &key (start 0) end)
    405401  (etypecase string
    406402    (string
    407      (if (not start) (setq start 0)(require-type start 'fixnum))
    408      (if (not end)(setq end (length string))(require-type end 'fixnum))
    409      (multiple-value-bind (sstring org) (array-data-and-offset string)
    410        (%strdown sstring (+ start org)(+ end org)))
     403     (setq end (check-sequence-bounds string start end))
     404     (if (typep string 'simple-string)
     405       (%strdown string start end)
     406       (multiple-value-bind (data offset) (array-data-and-offset string)
     407         (%strdown data (+ start offset) (+ end offset))))
    411408     string)))
    412409
    413 (defun nstring-upcase (string &key start end)
     410(defun nstring-upcase (string &key (start 0) end)
    414411  (etypecase string
    415412    (string
    416      (if (not start) (setq start 0)(require-type start 'fixnum))
    417      (if (not end)(setq end (length string))(require-type end 'fixnum))
    418      (multiple-value-bind (sstring org) (array-data-and-offset string)
    419        (%strup sstring (+ start org)(+ end org)))
     413     (setq end (check-sequence-bounds string start end))
     414     (if (typep string 'simple-string)
     415       (%strup string start end)
     416       (multiple-value-bind (data offset) (array-data-and-offset string)
     417         (%strup data (+ start offset) (+ end offset))))
    420418     string)))
    421419
    422420
    423 (defun nstring-capitalize (string &key start end)
     421(defun nstring-capitalize (string &key (start 0) end)
    424422  (etypecase string
    425423    (string
    426      (if (not start) (setq start 0)(require-type start 'fixnum))
    427      (if (not end)(setq end (length string))(require-type end 'fixnum))
    428      (multiple-value-bind (sstring org) (array-data-and-offset string)
    429        (%strcap sstring (+ start org)(+ end org)))
     424     (setq end (check-sequence-bounds string start end))
     425     (if (typep string 'simple-string)
     426       (%strcap string start end)
     427       (multiple-value-bind (data offset) (array-data-and-offset string)
     428         (%strcap data (+ start offset) (+ end offset))))
    430429     string)))
    431430
     
    445444      (setq start2 0 end2 (length string2))
    446445      (multiple-value-setq (string2 start2 end2)(string-start-end string2 start2 end2)))
    447     (setq istart1 (%i- start1 istart1))       
     446    (setq istart1 (%i- start1 istart1))
    448447    (let* ((val t))
    449448      (declare (optimize (speed 3)(safety 0)))
     
    452451           ()
    453452        (when (eq i end1)
    454           (when (neq j end2)(setq val -1))
     453          (when (neq j end2)
     454            (setq val -1))
    455455          (return))
    456456        (when (eq j end2)
    457457          (setq end1 i)
    458           (setq val 1)(return))
     458          (setq val 1)
     459          (return))
    459460        (let ((code1 (%scharcode string1 i))
    460461              (code2 (%scharcode string2 j)))
     
    462463          (if (and (>= code1 (char-code #\a))
    463464                   (<= code1 (char-code #\z)))
    464             (setq code1 (- code1 (- (char-code #\a) (char-code #\A))))
    465             (if (> code1 #x80)
    466               (setq code1 (%non-standard-char-code-upcase code1))))
     465            (setq code1 (- code1 (- (char-code #\a) (char-code #\A)))))
    467466          (if (and (>= code2 (char-code #\a))
    468467                   (<= code2 (char-code #\z)))
    469             (setq code2 (- code2 (- (char-code #\a) (char-code #\A))))
    470             (if (> code2 #x80)
    471               (setq code2 (%non-standard-char-code-upcase code2))))
     468            (setq code2 (- code2 (- (char-code #\a) (char-code #\A)))))
    472469          (unless (= code1 code2)           
    473470            (setq val (if (%i< code1 code2) -1 1))
     
    505502    (if (eq result -1) nil pos)))
    506503
     504(declaim (inline %string-start-end))
     505(defun %string-start-end (string)
     506  (etypecase string
     507    (string (multiple-value-bind (data offset)
     508                (array-data-and-offset string)
     509              (declare (fixnum offset))
     510              (values data offset (+ offset (length string)))))
     511    (symbol (let* ((pname (symbol-name string)))
     512              (values pname 0 (length pname))))
     513    (character (let* ((data (make-string 1)))
     514                 (setf (schar data 0) string)
     515                 (values data 0 1)))))
     516                       
     517;;; This is generally a bit faster then the version that deals with
     518;;; user-supplied bounds, both because the caller avoids passing
     519;;; some extra arguments and because those bounds don't need to be
     520;;; validated.
     521(defun %fixed-string-equal (string1 string2)
     522  (let* ((start1 0)
     523         (end1 0)
     524         (start2 0)
     525         (end2 0))
     526    (declare (fixnum start1 end1 start2 end2))
     527    (if (typep string1 'simple-string)
     528      (setq end1 (uvsize string1))
     529      (multiple-value-setq (string1 start1 end1)
     530        (%string-start-end string1)))
     531    (if (typep string2 'simple-string)
     532      (setq end2 (uvsize string2))
     533      (multiple-value-setq (string2 start2 end2)
     534        (%string-start-end string2)))
     535    (locally
     536        (declare (optimize (speed 3)(safety 0))
     537                 (simple-string string1 string2))
     538      (when (= (the fixnum (- end1 start1))
     539               (the fixnum (- end2 start2)))
     540        (do* ((i start1 (1+ i))
     541              (j start2 (1+ j))
     542              (map *lower-to-upper*))
     543             ((= i end1) t)
     544          (declare (fixnum i j))
     545          (let ((code1 (%scharcode string1 i))
     546                (code2 (%scharcode string2 j)))
     547            (declare (type (mod #x110000) code1 code2))
     548            (unless (= code1 code2)
     549              (unless (= (the (mod #x110000) (%char-code-case-fold code1 map))
     550                         (the (mod #x110000) (%char-code-case-fold code2 map)))
     551                (return)))))))))
     552
     553;;; Some of the start1/end1/start2/end2 args may be bogus.
     554(defun %bounded-string-equal (string1 string2 start1 end1 start2 end2)
     555  (let* ((disp1 nil)
     556         (len1 0)
     557         (disp2 nil)
     558         (len2 0))
     559    (declare (fixnum len1 len2))
     560    (if (typep string1 'simple-string)
     561      (setq len1 (length (the simple-string string1)))
     562      (etypecase string1
     563        (string (setq len1 (length string1))
     564                (multiple-value-setq (string1 disp1)
     565                  (array-data-and-offset string1)))
     566        (symbol (setq string1 (symbol-name string1)
     567                      len1 (length (the simple-string string1))))
     568        (character (setq string1 (make-string 1 :initial-element string1)
     569                         len1 1))))
     570    (if (typep string2 'simple-string)
     571      (setq len2 (length (the sumple-string string2)))
     572      (etypecase string2
     573        (string (setq len2 (length string2))
     574                (multiple-value-setq (string2 disp2)
     575                  (array-data-and-offset string2)))
     576        (symbol (setq string2 (symbol-name string2)
     577                      len1 (length (the simple-string string2))))
     578        (character (setq string2 (make-string 1 :initial-element string2)
     579                         len1 1))))
     580    (flet ((bad-index (index vector) (error "Index ~s is invalid for ~s" index vector)))
     581      (if (null start1)
     582        (setq start1 0)
     583        (when (or (not (typep start1 'fixnum))
     584                  (< (the fixnum start1) 0))
     585          (bad-index start1 string1)))
     586      (if (null end1)
     587        (setq end1 len1)
     588        (when (or (not (typep end1 'fixnum))
     589                  (< (the fixnum end1) 0)
     590                  (> (the fixnum end1) len1))
     591          (bad-index end1 string1)))
     592      (locally (declare (fixnum start1 end1))
     593        (if (> start1 end1)
     594          (error ":start1 argument ~s exceeds :end1 argument ~s" start1 end1))
     595        (when disp1
     596          (locally (declare (fixnum disp1))
     597            (incf start1 disp1)
     598            (incf end1 disp1)))
     599        (if (null start2)
     600          (setq start2 0)
     601          (when (or (not (typep start2 'fixnum))
     602                    (< (the fixnum start2) 0))
     603            (bad-index start2 string2)))
     604        (if (null end2)
     605          (setq end2 len2)
     606          (when (or (not (typep end2 'fixnum))
     607                    (< (the fixnum end2) 0)
     608                    (> (the fixnum end2) len2))
     609            (bad-index end2 string2)))
     610        (locally (declare (fixnum start2 end2))
     611          (if (> start2 end2)
     612            (error ":start2 argument ~s exceeds :end2 argument ~s" start1 end1))
     613          (when disp2
     614            (locally (declare (fixnum disp2))
     615              (incf start2 disp2)
     616              (incf end2 disp2)))
     617          (locally
     618              (declare (optimize (speed 3)(safety 0))
     619                       (simple-string string1 string2))
     620            (when (= (the fixnum (- end1 start1))
     621                     (the fixnum (- end2 start2)))
     622              (do* ((i start1 (1+ i))
     623                    (j start2 (1+ j))
     624                    (map *lower-to-upper*))
     625                   ((= i end1) t)
     626                (declare (fixnum i j))
     627                (let ((code1 (%scharcode string1 i))
     628                      (code2 (%scharcode string2 j)))
     629                  (declare (type (mod #x110000) code1 code2))
     630                  (unless (= code1 code2)
     631                    (unless (= (the (mod #x110000) (%char-code-case-fold code1 map))
     632                               (the (mod #x110000) (%char-code-case-fold code2 map)))
     633                      (return))))))))))))
     634
    507635(defun string-equal (string1 string2 &key start1 end1 start2 end2)
    508636  "Given two strings (string1 and string2), and optional integers start1,
    509637  start2, end1 and end2, compares characters in string1 to characters in
    510638  string2 (using char-equal)."
    511   (eq t (string-compare string1 start1 end1 string2 start2 end2)))
     639  (if (or start1 end1 start2 end2)
     640    (%bounded-string-equal string1 string2 start1 end1 start2 end2)
     641    (%fixed-string-equal string1 string2)))
     642
    512643
    513644
     
    519650    (if (eq result -1) pos nil)))
    520651
    521 ; forget script-manager - just do codes
     652;;; forget script-manager - just do codes
    522653(defun string-cmp (string1 start1 end1 string2 start2 end2)
    523654  (let ((istart1 (or start1 0)))
Note: See TracChangeset for help on using the changeset viewer.