فهرست منبع

compiler: update charset, cruemap and cpXXX.pas files from Inoussa (part of issue #0022909)

git-svn-id: trunk@23727 -
paul 12 سال پیش
والد
کامیت
43e0116f61
11فایلهای تغییر یافته به همراه4118 افزوده شده و 1619 حذف شده
  1. 525 257
      compiler/cp1251.pas
  2. 267 3
      compiler/cp1252.pas
  3. 253 1
      compiler/cp1253.pas
  4. 527 258
      compiler/cp437.pas
  5. 142 1
      compiler/cp646.pas
  6. 527 258
      compiler/cp850.pas
  7. 526 257
      compiler/cp866.pas
  8. 527 258
      compiler/cp8859_1.pas
  9. 526 257
      compiler/cp8859_5.pas
  10. 278 69
      rtl/inc/charset.pp
  11. 20 0
      utils/creumap.pp

+ 525 - 257
compiler/cp1251.pas

@@ -5,274 +5,542 @@ unit cp1251;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 1026; flag : umf_noinfo; reserved : 0),
-       (unicode : 1027; flag : umf_noinfo; reserved : 0),
-       (unicode : 8218; flag : umf_noinfo; reserved : 0),
-       (unicode : 1107; flag : umf_noinfo; reserved : 0),
-       (unicode : 8222; flag : umf_noinfo; reserved : 0),
-       (unicode : 8230; flag : umf_noinfo; reserved : 0),
-       (unicode : 8224; flag : umf_noinfo; reserved : 0),
-       (unicode : 8225; flag : umf_noinfo; reserved : 0),
-       (unicode : 8364; flag : umf_noinfo; reserved : 0),
-       (unicode : 8240; flag : umf_noinfo; reserved : 0),
-       (unicode : 1033; flag : umf_noinfo; reserved : 0),
-       (unicode : 8249; flag : umf_noinfo; reserved : 0),
-       (unicode : 1034; flag : umf_noinfo; reserved : 0),
-       (unicode : 1036; flag : umf_noinfo; reserved : 0),
-       (unicode : 1035; flag : umf_noinfo; reserved : 0),
-       (unicode : 1039; flag : umf_noinfo; reserved : 0),
-       (unicode : 1106; flag : umf_noinfo; reserved : 0),
-       (unicode : 8216; flag : umf_noinfo; reserved : 0),
-       (unicode : 8217; flag : umf_noinfo; reserved : 0),
-       (unicode : 8220; flag : umf_noinfo; reserved : 0),
-       (unicode : 8221; flag : umf_noinfo; reserved : 0),
-       (unicode : 8226; flag : umf_noinfo; reserved : 0),
-       (unicode : 8211; flag : umf_noinfo; reserved : 0),
-       (unicode : 8212; flag : umf_noinfo; reserved : 0),
-       (unicode : 65535; flag : umf_unused; reserved : 0),
-       (unicode : 8482; flag : umf_noinfo; reserved : 0),
-       (unicode : 1113; flag : umf_noinfo; reserved : 0),
-       (unicode : 8250; flag : umf_noinfo; reserved : 0),
-       (unicode : 1114; flag : umf_noinfo; reserved : 0),
-       (unicode : 1116; flag : umf_noinfo; reserved : 0),
-       (unicode : 1115; flag : umf_noinfo; reserved : 0),
-       (unicode : 1119; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0),
-       (unicode : 1038; flag : umf_noinfo; reserved : 0),
-       (unicode : 1118; flag : umf_noinfo; reserved : 0),
-       (unicode : 1032; flag : umf_noinfo; reserved : 0),
-       (unicode : 164; flag : umf_noinfo; reserved : 0),
-       (unicode : 1168; flag : umf_noinfo; reserved : 0),
-       (unicode : 166; flag : umf_noinfo; reserved : 0),
-       (unicode : 167; flag : umf_noinfo; reserved : 0),
-       (unicode : 1025; flag : umf_noinfo; reserved : 0),
-       (unicode : 169; flag : umf_noinfo; reserved : 0),
-       (unicode : 1028; flag : umf_noinfo; reserved : 0),
-       (unicode : 171; flag : umf_noinfo; reserved : 0),
-       (unicode : 172; flag : umf_noinfo; reserved : 0),
-       (unicode : 173; flag : umf_noinfo; reserved : 0),
-       (unicode : 174; flag : umf_noinfo; reserved : 0),
-       (unicode : 1031; flag : umf_noinfo; reserved : 0),
-       (unicode : 176; flag : umf_noinfo; reserved : 0),
-       (unicode : 177; flag : umf_noinfo; reserved : 0),
-       (unicode : 1030; flag : umf_noinfo; reserved : 0),
-       (unicode : 1110; flag : umf_noinfo; reserved : 0),
-       (unicode : 1169; flag : umf_noinfo; reserved : 0),
-       (unicode : 181; flag : umf_noinfo; reserved : 0),
-       (unicode : 182; flag : umf_noinfo; reserved : 0),
-       (unicode : 183; flag : umf_noinfo; reserved : 0),
-       (unicode : 1105; flag : umf_noinfo; reserved : 0),
-       (unicode : 8470; flag : umf_noinfo; reserved : 0),
-       (unicode : 1108; flag : umf_noinfo; reserved : 0),
-       (unicode : 187; flag : umf_noinfo; reserved : 0),
-       (unicode : 1112; flag : umf_noinfo; reserved : 0),
-       (unicode : 1029; flag : umf_noinfo; reserved : 0),
-       (unicode : 1109; flag : umf_noinfo; reserved : 0),
-       (unicode : 1111; flag : umf_noinfo; reserved : 0),
-       (unicode : 1040; flag : umf_noinfo; reserved : 0),
-       (unicode : 1041; flag : umf_noinfo; reserved : 0),
-       (unicode : 1042; flag : umf_noinfo; reserved : 0),
-       (unicode : 1043; flag : umf_noinfo; reserved : 0),
-       (unicode : 1044; flag : umf_noinfo; reserved : 0),
-       (unicode : 1045; flag : umf_noinfo; reserved : 0),
-       (unicode : 1046; flag : umf_noinfo; reserved : 0),
-       (unicode : 1047; flag : umf_noinfo; reserved : 0),
-       (unicode : 1048; flag : umf_noinfo; reserved : 0),
-       (unicode : 1049; flag : umf_noinfo; reserved : 0),
-       (unicode : 1050; flag : umf_noinfo; reserved : 0),
-       (unicode : 1051; flag : umf_noinfo; reserved : 0),
-       (unicode : 1052; flag : umf_noinfo; reserved : 0),
-       (unicode : 1053; flag : umf_noinfo; reserved : 0),
-       (unicode : 1054; flag : umf_noinfo; reserved : 0),
-       (unicode : 1055; flag : umf_noinfo; reserved : 0),
-       (unicode : 1056; flag : umf_noinfo; reserved : 0),
-       (unicode : 1057; flag : umf_noinfo; reserved : 0),
-       (unicode : 1058; flag : umf_noinfo; reserved : 0),
-       (unicode : 1059; flag : umf_noinfo; reserved : 0),
-       (unicode : 1060; flag : umf_noinfo; reserved : 0),
-       (unicode : 1061; flag : umf_noinfo; reserved : 0),
-       (unicode : 1062; flag : umf_noinfo; reserved : 0),
-       (unicode : 1063; flag : umf_noinfo; reserved : 0),
-       (unicode : 1064; flag : umf_noinfo; reserved : 0),
-       (unicode : 1065; flag : umf_noinfo; reserved : 0),
-       (unicode : 1066; flag : umf_noinfo; reserved : 0),
-       (unicode : 1067; flag : umf_noinfo; reserved : 0),
-       (unicode : 1068; flag : umf_noinfo; reserved : 0),
-       (unicode : 1069; flag : umf_noinfo; reserved : 0),
-       (unicode : 1070; flag : umf_noinfo; reserved : 0),
-       (unicode : 1071; flag : umf_noinfo; reserved : 0),
-       (unicode : 1072; flag : umf_noinfo; reserved : 0),
-       (unicode : 1073; flag : umf_noinfo; reserved : 0),
-       (unicode : 1074; flag : umf_noinfo; reserved : 0),
-       (unicode : 1075; flag : umf_noinfo; reserved : 0),
-       (unicode : 1076; flag : umf_noinfo; reserved : 0),
-       (unicode : 1077; flag : umf_noinfo; reserved : 0),
-       (unicode : 1078; flag : umf_noinfo; reserved : 0),
-       (unicode : 1079; flag : umf_noinfo; reserved : 0),
-       (unicode : 1080; flag : umf_noinfo; reserved : 0),
-       (unicode : 1081; flag : umf_noinfo; reserved : 0),
-       (unicode : 1082; flag : umf_noinfo; reserved : 0),
-       (unicode : 1083; flag : umf_noinfo; reserved : 0),
-       (unicode : 1084; flag : umf_noinfo; reserved : 0),
-       (unicode : 1085; flag : umf_noinfo; reserved : 0),
-       (unicode : 1086; flag : umf_noinfo; reserved : 0),
-       (unicode : 1087; flag : umf_noinfo; reserved : 0),
-       (unicode : 1088; flag : umf_noinfo; reserved : 0),
-       (unicode : 1089; flag : umf_noinfo; reserved : 0),
-       (unicode : 1090; flag : umf_noinfo; reserved : 0),
-       (unicode : 1091; flag : umf_noinfo; reserved : 0),
-       (unicode : 1092; flag : umf_noinfo; reserved : 0),
-       (unicode : 1093; flag : umf_noinfo; reserved : 0),
-       (unicode : 1094; flag : umf_noinfo; reserved : 0),
-       (unicode : 1095; flag : umf_noinfo; reserved : 0),
-       (unicode : 1096; flag : umf_noinfo; reserved : 0),
-       (unicode : 1097; flag : umf_noinfo; reserved : 0),
-       (unicode : 1098; flag : umf_noinfo; reserved : 0),
-       (unicode : 1099; flag : umf_noinfo; reserved : 0),
-       (unicode : 1100; flag : umf_noinfo; reserved : 0),
-       (unicode : 1101; flag : umf_noinfo; reserved : 0),
-       (unicode : 1102; flag : umf_noinfo; reserved : 0),
-       (unicode : 1103; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 1026; flag : umf_noinfo; reserved: 0),
+       (unicode : 1027; flag : umf_noinfo; reserved: 0),
+       (unicode : 8218; flag : umf_noinfo; reserved: 0),
+       (unicode : 1107; flag : umf_noinfo; reserved: 0),
+       (unicode : 8222; flag : umf_noinfo; reserved: 0),
+       (unicode : 8230; flag : umf_noinfo; reserved: 0),
+       (unicode : 8224; flag : umf_noinfo; reserved: 0),
+       (unicode : 8225; flag : umf_noinfo; reserved: 0),
+       (unicode : 8364; flag : umf_noinfo; reserved: 0),
+       (unicode : 8240; flag : umf_noinfo; reserved: 0),
+       (unicode : 1033; flag : umf_noinfo; reserved: 0),
+       (unicode : 8249; flag : umf_noinfo; reserved: 0),
+       (unicode : 1034; flag : umf_noinfo; reserved: 0),
+       (unicode : 1036; flag : umf_noinfo; reserved: 0),
+       (unicode : 1035; flag : umf_noinfo; reserved: 0),
+       (unicode : 1039; flag : umf_noinfo; reserved: 0),
+       (unicode : 1106; flag : umf_noinfo; reserved: 0),
+       (unicode : 8216; flag : umf_noinfo; reserved: 0),
+       (unicode : 8217; flag : umf_noinfo; reserved: 0),
+       (unicode : 8220; flag : umf_noinfo; reserved: 0),
+       (unicode : 8221; flag : umf_noinfo; reserved: 0),
+       (unicode : 8226; flag : umf_noinfo; reserved: 0),
+       (unicode : 8211; flag : umf_noinfo; reserved: 0),
+       (unicode : 8212; flag : umf_noinfo; reserved: 0),
+       (unicode : 65535; flag : umf_unused; reserved: 0),
+       (unicode : 8482; flag : umf_noinfo; reserved: 0),
+       (unicode : 1113; flag : umf_noinfo; reserved: 0),
+       (unicode : 8250; flag : umf_noinfo; reserved: 0),
+       (unicode : 1114; flag : umf_noinfo; reserved: 0),
+       (unicode : 1116; flag : umf_noinfo; reserved: 0),
+       (unicode : 1115; flag : umf_noinfo; reserved: 0),
+       (unicode : 1119; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0),
+       (unicode : 1038; flag : umf_noinfo; reserved: 0),
+       (unicode : 1118; flag : umf_noinfo; reserved: 0),
+       (unicode : 1032; flag : umf_noinfo; reserved: 0),
+       (unicode : 164; flag : umf_noinfo; reserved: 0),
+       (unicode : 1168; flag : umf_noinfo; reserved: 0),
+       (unicode : 166; flag : umf_noinfo; reserved: 0),
+       (unicode : 167; flag : umf_noinfo; reserved: 0),
+       (unicode : 1025; flag : umf_noinfo; reserved: 0),
+       (unicode : 169; flag : umf_noinfo; reserved: 0),
+       (unicode : 1028; flag : umf_noinfo; reserved: 0),
+       (unicode : 171; flag : umf_noinfo; reserved: 0),
+       (unicode : 172; flag : umf_noinfo; reserved: 0),
+       (unicode : 173; flag : umf_noinfo; reserved: 0),
+       (unicode : 174; flag : umf_noinfo; reserved: 0),
+       (unicode : 1031; flag : umf_noinfo; reserved: 0),
+       (unicode : 176; flag : umf_noinfo; reserved: 0),
+       (unicode : 177; flag : umf_noinfo; reserved: 0),
+       (unicode : 1030; flag : umf_noinfo; reserved: 0),
+       (unicode : 1110; flag : umf_noinfo; reserved: 0),
+       (unicode : 1169; flag : umf_noinfo; reserved: 0),
+       (unicode : 181; flag : umf_noinfo; reserved: 0),
+       (unicode : 182; flag : umf_noinfo; reserved: 0),
+       (unicode : 183; flag : umf_noinfo; reserved: 0),
+       (unicode : 1105; flag : umf_noinfo; reserved: 0),
+       (unicode : 8470; flag : umf_noinfo; reserved: 0),
+       (unicode : 1108; flag : umf_noinfo; reserved: 0),
+       (unicode : 187; flag : umf_noinfo; reserved: 0),
+       (unicode : 1112; flag : umf_noinfo; reserved: 0),
+       (unicode : 1029; flag : umf_noinfo; reserved: 0),
+       (unicode : 1109; flag : umf_noinfo; reserved: 0),
+       (unicode : 1111; flag : umf_noinfo; reserved: 0),
+       (unicode : 1040; flag : umf_noinfo; reserved: 0),
+       (unicode : 1041; flag : umf_noinfo; reserved: 0),
+       (unicode : 1042; flag : umf_noinfo; reserved: 0),
+       (unicode : 1043; flag : umf_noinfo; reserved: 0),
+       (unicode : 1044; flag : umf_noinfo; reserved: 0),
+       (unicode : 1045; flag : umf_noinfo; reserved: 0),
+       (unicode : 1046; flag : umf_noinfo; reserved: 0),
+       (unicode : 1047; flag : umf_noinfo; reserved: 0),
+       (unicode : 1048; flag : umf_noinfo; reserved: 0),
+       (unicode : 1049; flag : umf_noinfo; reserved: 0),
+       (unicode : 1050; flag : umf_noinfo; reserved: 0),
+       (unicode : 1051; flag : umf_noinfo; reserved: 0),
+       (unicode : 1052; flag : umf_noinfo; reserved: 0),
+       (unicode : 1053; flag : umf_noinfo; reserved: 0),
+       (unicode : 1054; flag : umf_noinfo; reserved: 0),
+       (unicode : 1055; flag : umf_noinfo; reserved: 0),
+       (unicode : 1056; flag : umf_noinfo; reserved: 0),
+       (unicode : 1057; flag : umf_noinfo; reserved: 0),
+       (unicode : 1058; flag : umf_noinfo; reserved: 0),
+       (unicode : 1059; flag : umf_noinfo; reserved: 0),
+       (unicode : 1060; flag : umf_noinfo; reserved: 0),
+       (unicode : 1061; flag : umf_noinfo; reserved: 0),
+       (unicode : 1062; flag : umf_noinfo; reserved: 0),
+       (unicode : 1063; flag : umf_noinfo; reserved: 0),
+       (unicode : 1064; flag : umf_noinfo; reserved: 0),
+       (unicode : 1065; flag : umf_noinfo; reserved: 0),
+       (unicode : 1066; flag : umf_noinfo; reserved: 0),
+       (unicode : 1067; flag : umf_noinfo; reserved: 0),
+       (unicode : 1068; flag : umf_noinfo; reserved: 0),
+       (unicode : 1069; flag : umf_noinfo; reserved: 0),
+       (unicode : 1070; flag : umf_noinfo; reserved: 0),
+       (unicode : 1071; flag : umf_noinfo; reserved: 0),
+       (unicode : 1072; flag : umf_noinfo; reserved: 0),
+       (unicode : 1073; flag : umf_noinfo; reserved: 0),
+       (unicode : 1074; flag : umf_noinfo; reserved: 0),
+       (unicode : 1075; flag : umf_noinfo; reserved: 0),
+       (unicode : 1076; flag : umf_noinfo; reserved: 0),
+       (unicode : 1077; flag : umf_noinfo; reserved: 0),
+       (unicode : 1078; flag : umf_noinfo; reserved: 0),
+       (unicode : 1079; flag : umf_noinfo; reserved: 0),
+       (unicode : 1080; flag : umf_noinfo; reserved: 0),
+       (unicode : 1081; flag : umf_noinfo; reserved: 0),
+       (unicode : 1082; flag : umf_noinfo; reserved: 0),
+       (unicode : 1083; flag : umf_noinfo; reserved: 0),
+       (unicode : 1084; flag : umf_noinfo; reserved: 0),
+       (unicode : 1085; flag : umf_noinfo; reserved: 0),
+       (unicode : 1086; flag : umf_noinfo; reserved: 0),
+       (unicode : 1087; flag : umf_noinfo; reserved: 0),
+       (unicode : 1088; flag : umf_noinfo; reserved: 0),
+       (unicode : 1089; flag : umf_noinfo; reserved: 0),
+       (unicode : 1090; flag : umf_noinfo; reserved: 0),
+       (unicode : 1091; flag : umf_noinfo; reserved: 0),
+       (unicode : 1092; flag : umf_noinfo; reserved: 0),
+       (unicode : 1093; flag : umf_noinfo; reserved: 0),
+       (unicode : 1094; flag : umf_noinfo; reserved: 0),
+       (unicode : 1095; flag : umf_noinfo; reserved: 0),
+       (unicode : 1096; flag : umf_noinfo; reserved: 0),
+       (unicode : 1097; flag : umf_noinfo; reserved: 0),
+       (unicode : 1098; flag : umf_noinfo; reserved: 0),
+       (unicode : 1099; flag : umf_noinfo; reserved: 0),
+       (unicode : 1100; flag : umf_noinfo; reserved: 0),
+       (unicode : 1101; flag : umf_noinfo; reserved: 0),
+       (unicode : 1102; flag : umf_noinfo; reserved: 0),
+       (unicode : 1103; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..254] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 160; char2 : 0),
+       (unicode : 164; char1 : 164; char2 : 0),
+       (unicode : 166; char1 : 166; char2 : 0),
+       (unicode : 167; char1 : 167; char2 : 0),
+       (unicode : 169; char1 : 169; char2 : 0),
+       (unicode : 171; char1 : 171; char2 : 0),
+       (unicode : 172; char1 : 172; char2 : 0),
+       (unicode : 173; char1 : 173; char2 : 0),
+       (unicode : 174; char1 : 174; char2 : 0),
+       (unicode : 176; char1 : 176; char2 : 0),
+       (unicode : 177; char1 : 177; char2 : 0),
+       (unicode : 181; char1 : 181; char2 : 0),
+       (unicode : 182; char1 : 182; char2 : 0),
+       (unicode : 183; char1 : 183; char2 : 0),
+       (unicode : 187; char1 : 187; char2 : 0),
+       (unicode : 1025; char1 : 168; char2 : 0),
+       (unicode : 1026; char1 : 128; char2 : 0),
+       (unicode : 1027; char1 : 129; char2 : 0),
+       (unicode : 1028; char1 : 170; char2 : 0),
+       (unicode : 1029; char1 : 189; char2 : 0),
+       (unicode : 1030; char1 : 178; char2 : 0),
+       (unicode : 1031; char1 : 175; char2 : 0),
+       (unicode : 1032; char1 : 163; char2 : 0),
+       (unicode : 1033; char1 : 138; char2 : 0),
+       (unicode : 1034; char1 : 140; char2 : 0),
+       (unicode : 1035; char1 : 142; char2 : 0),
+       (unicode : 1036; char1 : 141; char2 : 0),
+       (unicode : 1038; char1 : 161; char2 : 0),
+       (unicode : 1039; char1 : 143; char2 : 0),
+       (unicode : 1040; char1 : 192; char2 : 0),
+       (unicode : 1041; char1 : 193; char2 : 0),
+       (unicode : 1042; char1 : 194; char2 : 0),
+       (unicode : 1043; char1 : 195; char2 : 0),
+       (unicode : 1044; char1 : 196; char2 : 0),
+       (unicode : 1045; char1 : 197; char2 : 0),
+       (unicode : 1046; char1 : 198; char2 : 0),
+       (unicode : 1047; char1 : 199; char2 : 0),
+       (unicode : 1048; char1 : 200; char2 : 0),
+       (unicode : 1049; char1 : 201; char2 : 0),
+       (unicode : 1050; char1 : 202; char2 : 0),
+       (unicode : 1051; char1 : 203; char2 : 0),
+       (unicode : 1052; char1 : 204; char2 : 0),
+       (unicode : 1053; char1 : 205; char2 : 0),
+       (unicode : 1054; char1 : 206; char2 : 0),
+       (unicode : 1055; char1 : 207; char2 : 0),
+       (unicode : 1056; char1 : 208; char2 : 0),
+       (unicode : 1057; char1 : 209; char2 : 0),
+       (unicode : 1058; char1 : 210; char2 : 0),
+       (unicode : 1059; char1 : 211; char2 : 0),
+       (unicode : 1060; char1 : 212; char2 : 0),
+       (unicode : 1061; char1 : 213; char2 : 0),
+       (unicode : 1062; char1 : 214; char2 : 0),
+       (unicode : 1063; char1 : 215; char2 : 0),
+       (unicode : 1064; char1 : 216; char2 : 0),
+       (unicode : 1065; char1 : 217; char2 : 0),
+       (unicode : 1066; char1 : 218; char2 : 0),
+       (unicode : 1067; char1 : 219; char2 : 0),
+       (unicode : 1068; char1 : 220; char2 : 0),
+       (unicode : 1069; char1 : 221; char2 : 0),
+       (unicode : 1070; char1 : 222; char2 : 0),
+       (unicode : 1071; char1 : 223; char2 : 0),
+       (unicode : 1072; char1 : 224; char2 : 0),
+       (unicode : 1073; char1 : 225; char2 : 0),
+       (unicode : 1074; char1 : 226; char2 : 0),
+       (unicode : 1075; char1 : 227; char2 : 0),
+       (unicode : 1076; char1 : 228; char2 : 0),
+       (unicode : 1077; char1 : 229; char2 : 0),
+       (unicode : 1078; char1 : 230; char2 : 0),
+       (unicode : 1079; char1 : 231; char2 : 0),
+       (unicode : 1080; char1 : 232; char2 : 0),
+       (unicode : 1081; char1 : 233; char2 : 0),
+       (unicode : 1082; char1 : 234; char2 : 0),
+       (unicode : 1083; char1 : 235; char2 : 0),
+       (unicode : 1084; char1 : 236; char2 : 0),
+       (unicode : 1085; char1 : 237; char2 : 0),
+       (unicode : 1086; char1 : 238; char2 : 0),
+       (unicode : 1087; char1 : 239; char2 : 0),
+       (unicode : 1088; char1 : 240; char2 : 0),
+       (unicode : 1089; char1 : 241; char2 : 0),
+       (unicode : 1090; char1 : 242; char2 : 0),
+       (unicode : 1091; char1 : 243; char2 : 0),
+       (unicode : 1092; char1 : 244; char2 : 0),
+       (unicode : 1093; char1 : 245; char2 : 0),
+       (unicode : 1094; char1 : 246; char2 : 0),
+       (unicode : 1095; char1 : 247; char2 : 0),
+       (unicode : 1096; char1 : 248; char2 : 0),
+       (unicode : 1097; char1 : 249; char2 : 0),
+       (unicode : 1098; char1 : 250; char2 : 0),
+       (unicode : 1099; char1 : 251; char2 : 0),
+       (unicode : 1100; char1 : 252; char2 : 0),
+       (unicode : 1101; char1 : 253; char2 : 0),
+       (unicode : 1102; char1 : 254; char2 : 0),
+       (unicode : 1103; char1 : 255; char2 : 0),
+       (unicode : 1105; char1 : 184; char2 : 0),
+       (unicode : 1106; char1 : 144; char2 : 0),
+       (unicode : 1107; char1 : 131; char2 : 0),
+       (unicode : 1108; char1 : 186; char2 : 0),
+       (unicode : 1109; char1 : 190; char2 : 0),
+       (unicode : 1110; char1 : 179; char2 : 0),
+       (unicode : 1111; char1 : 191; char2 : 0),
+       (unicode : 1112; char1 : 188; char2 : 0),
+       (unicode : 1113; char1 : 154; char2 : 0),
+       (unicode : 1114; char1 : 156; char2 : 0),
+       (unicode : 1115; char1 : 158; char2 : 0),
+       (unicode : 1116; char1 : 157; char2 : 0),
+       (unicode : 1118; char1 : 162; char2 : 0),
+       (unicode : 1119; char1 : 159; char2 : 0),
+       (unicode : 1168; char1 : 165; char2 : 0),
+       (unicode : 1169; char1 : 180; char2 : 0),
+       (unicode : 8211; char1 : 150; char2 : 0),
+       (unicode : 8212; char1 : 151; char2 : 0),
+       (unicode : 8216; char1 : 145; char2 : 0),
+       (unicode : 8217; char1 : 146; char2 : 0),
+       (unicode : 8218; char1 : 130; char2 : 0),
+       (unicode : 8220; char1 : 147; char2 : 0),
+       (unicode : 8221; char1 : 148; char2 : 0),
+       (unicode : 8222; char1 : 132; char2 : 0),
+       (unicode : 8224; char1 : 134; char2 : 0),
+       (unicode : 8225; char1 : 135; char2 : 0),
+       (unicode : 8226; char1 : 149; char2 : 0),
+       (unicode : 8230; char1 : 133; char2 : 0),
+       (unicode : 8240; char1 : 137; char2 : 0),
+       (unicode : 8249; char1 : 139; char2 : 0),
+       (unicode : 8250; char1 : 155; char2 : 0),
+       (unicode : 8364; char1 : 136; char2 : 0),
+       (unicode : 8470; char1 : 185; char2 : 0),
+       (unicode : 8482; char1 : 153; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : 'cp1251';
        cp : 1251;
        map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 255;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 267 - 3
compiler/cp1252.pas

@@ -1,12 +1,16 @@
 { This is an automatically created file, so don't edit it }
-unit CP1252;
+unit cp1252;
 
   interface
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
@@ -268,11 +272,271 @@ unit CP1252;
        (unicode : 255; flag : umf_noinfo; reserved: 0)
      );
 
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..250] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 160; char2 : 0),
+       (unicode : 161; char1 : 161; char2 : 0),
+       (unicode : 162; char1 : 162; char2 : 0),
+       (unicode : 163; char1 : 163; char2 : 0),
+       (unicode : 164; char1 : 164; char2 : 0),
+       (unicode : 165; char1 : 165; char2 : 0),
+       (unicode : 166; char1 : 166; char2 : 0),
+       (unicode : 167; char1 : 167; char2 : 0),
+       (unicode : 168; char1 : 168; char2 : 0),
+       (unicode : 169; char1 : 169; char2 : 0),
+       (unicode : 170; char1 : 170; char2 : 0),
+       (unicode : 171; char1 : 171; char2 : 0),
+       (unicode : 172; char1 : 172; char2 : 0),
+       (unicode : 173; char1 : 173; char2 : 0),
+       (unicode : 174; char1 : 174; char2 : 0),
+       (unicode : 175; char1 : 175; char2 : 0),
+       (unicode : 176; char1 : 176; char2 : 0),
+       (unicode : 177; char1 : 177; char2 : 0),
+       (unicode : 178; char1 : 178; char2 : 0),
+       (unicode : 179; char1 : 179; char2 : 0),
+       (unicode : 180; char1 : 180; char2 : 0),
+       (unicode : 181; char1 : 181; char2 : 0),
+       (unicode : 182; char1 : 182; char2 : 0),
+       (unicode : 183; char1 : 183; char2 : 0),
+       (unicode : 184; char1 : 184; char2 : 0),
+       (unicode : 185; char1 : 185; char2 : 0),
+       (unicode : 186; char1 : 186; char2 : 0),
+       (unicode : 187; char1 : 187; char2 : 0),
+       (unicode : 188; char1 : 188; char2 : 0),
+       (unicode : 189; char1 : 189; char2 : 0),
+       (unicode : 190; char1 : 190; char2 : 0),
+       (unicode : 191; char1 : 191; char2 : 0),
+       (unicode : 192; char1 : 192; char2 : 0),
+       (unicode : 193; char1 : 193; char2 : 0),
+       (unicode : 194; char1 : 194; char2 : 0),
+       (unicode : 195; char1 : 195; char2 : 0),
+       (unicode : 196; char1 : 196; char2 : 0),
+       (unicode : 197; char1 : 197; char2 : 0),
+       (unicode : 198; char1 : 198; char2 : 0),
+       (unicode : 199; char1 : 199; char2 : 0),
+       (unicode : 200; char1 : 200; char2 : 0),
+       (unicode : 201; char1 : 201; char2 : 0),
+       (unicode : 202; char1 : 202; char2 : 0),
+       (unicode : 203; char1 : 203; char2 : 0),
+       (unicode : 204; char1 : 204; char2 : 0),
+       (unicode : 205; char1 : 205; char2 : 0),
+       (unicode : 206; char1 : 206; char2 : 0),
+       (unicode : 207; char1 : 207; char2 : 0),
+       (unicode : 208; char1 : 208; char2 : 0),
+       (unicode : 209; char1 : 209; char2 : 0),
+       (unicode : 210; char1 : 210; char2 : 0),
+       (unicode : 211; char1 : 211; char2 : 0),
+       (unicode : 212; char1 : 212; char2 : 0),
+       (unicode : 213; char1 : 213; char2 : 0),
+       (unicode : 214; char1 : 214; char2 : 0),
+       (unicode : 215; char1 : 215; char2 : 0),
+       (unicode : 216; char1 : 216; char2 : 0),
+       (unicode : 217; char1 : 217; char2 : 0),
+       (unicode : 218; char1 : 218; char2 : 0),
+       (unicode : 219; char1 : 219; char2 : 0),
+       (unicode : 220; char1 : 220; char2 : 0),
+       (unicode : 221; char1 : 221; char2 : 0),
+       (unicode : 222; char1 : 222; char2 : 0),
+       (unicode : 223; char1 : 223; char2 : 0),
+       (unicode : 224; char1 : 224; char2 : 0),
+       (unicode : 225; char1 : 225; char2 : 0),
+       (unicode : 226; char1 : 226; char2 : 0),
+       (unicode : 227; char1 : 227; char2 : 0),
+       (unicode : 228; char1 : 228; char2 : 0),
+       (unicode : 229; char1 : 229; char2 : 0),
+       (unicode : 230; char1 : 230; char2 : 0),
+       (unicode : 231; char1 : 231; char2 : 0),
+       (unicode : 232; char1 : 232; char2 : 0),
+       (unicode : 233; char1 : 233; char2 : 0),
+       (unicode : 234; char1 : 234; char2 : 0),
+       (unicode : 235; char1 : 235; char2 : 0),
+       (unicode : 236; char1 : 236; char2 : 0),
+       (unicode : 237; char1 : 237; char2 : 0),
+       (unicode : 238; char1 : 238; char2 : 0),
+       (unicode : 239; char1 : 239; char2 : 0),
+       (unicode : 240; char1 : 240; char2 : 0),
+       (unicode : 241; char1 : 241; char2 : 0),
+       (unicode : 242; char1 : 242; char2 : 0),
+       (unicode : 243; char1 : 243; char2 : 0),
+       (unicode : 244; char1 : 244; char2 : 0),
+       (unicode : 245; char1 : 245; char2 : 0),
+       (unicode : 246; char1 : 246; char2 : 0),
+       (unicode : 247; char1 : 247; char2 : 0),
+       (unicode : 248; char1 : 248; char2 : 0),
+       (unicode : 249; char1 : 249; char2 : 0),
+       (unicode : 250; char1 : 250; char2 : 0),
+       (unicode : 251; char1 : 251; char2 : 0),
+       (unicode : 252; char1 : 252; char2 : 0),
+       (unicode : 253; char1 : 253; char2 : 0),
+       (unicode : 254; char1 : 254; char2 : 0),
+       (unicode : 255; char1 : 255; char2 : 0),
+       (unicode : 338; char1 : 140; char2 : 0),
+       (unicode : 339; char1 : 156; char2 : 0),
+       (unicode : 352; char1 : 138; char2 : 0),
+       (unicode : 353; char1 : 154; char2 : 0),
+       (unicode : 376; char1 : 159; char2 : 0),
+       (unicode : 381; char1 : 142; char2 : 0),
+       (unicode : 382; char1 : 158; char2 : 0),
+       (unicode : 402; char1 : 131; char2 : 0),
+       (unicode : 710; char1 : 136; char2 : 0),
+       (unicode : 732; char1 : 152; char2 : 0),
+       (unicode : 8211; char1 : 150; char2 : 0),
+       (unicode : 8212; char1 : 151; char2 : 0),
+       (unicode : 8216; char1 : 145; char2 : 0),
+       (unicode : 8217; char1 : 146; char2 : 0),
+       (unicode : 8218; char1 : 130; char2 : 0),
+       (unicode : 8220; char1 : 147; char2 : 0),
+       (unicode : 8221; char1 : 148; char2 : 0),
+       (unicode : 8222; char1 : 132; char2 : 0),
+       (unicode : 8224; char1 : 134; char2 : 0),
+       (unicode : 8225; char1 : 135; char2 : 0),
+       (unicode : 8226; char1 : 149; char2 : 0),
+       (unicode : 8230; char1 : 133; char2 : 0),
+       (unicode : 8240; char1 : 137; char2 : 0),
+       (unicode : 8249; char1 : 139; char2 : 0),
+       (unicode : 8250; char1 : 155; char2 : 0),
+       (unicode : 8364; char1 : 128; char2 : 0),
+       (unicode : 8482; char1 : 153; char2 : 0)
+     );
+  {$endif}
+
      unicodemap : tunicodemap = (
-       cpname : 'CP1252';
+       cpname : 'cp1252';
        cp : 1252;
        map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 251;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 253 - 1
compiler/cp1253.pas

@@ -5,8 +5,12 @@ unit cp1253;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-    {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
@@ -268,11 +272,259 @@ unit cp1253;
        (unicode : 65535; flag : umf_unused; reserved: 0)
      );
 
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..238] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 160; char2 : 0),
+       (unicode : 163; char1 : 163; char2 : 0),
+       (unicode : 164; char1 : 164; char2 : 0),
+       (unicode : 165; char1 : 165; char2 : 0),
+       (unicode : 166; char1 : 166; char2 : 0),
+       (unicode : 167; char1 : 167; char2 : 0),
+       (unicode : 168; char1 : 168; char2 : 0),
+       (unicode : 169; char1 : 169; char2 : 0),
+       (unicode : 171; char1 : 171; char2 : 0),
+       (unicode : 172; char1 : 172; char2 : 0),
+       (unicode : 173; char1 : 173; char2 : 0),
+       (unicode : 174; char1 : 174; char2 : 0),
+       (unicode : 176; char1 : 176; char2 : 0),
+       (unicode : 177; char1 : 177; char2 : 0),
+       (unicode : 178; char1 : 178; char2 : 0),
+       (unicode : 179; char1 : 179; char2 : 0),
+       (unicode : 181; char1 : 181; char2 : 0),
+       (unicode : 182; char1 : 182; char2 : 0),
+       (unicode : 183; char1 : 183; char2 : 0),
+       (unicode : 187; char1 : 187; char2 : 0),
+       (unicode : 189; char1 : 189; char2 : 0),
+       (unicode : 402; char1 : 131; char2 : 0),
+       (unicode : 900; char1 : 180; char2 : 0),
+       (unicode : 901; char1 : 161; char2 : 0),
+       (unicode : 902; char1 : 162; char2 : 0),
+       (unicode : 904; char1 : 184; char2 : 0),
+       (unicode : 905; char1 : 185; char2 : 0),
+       (unicode : 906; char1 : 186; char2 : 0),
+       (unicode : 908; char1 : 188; char2 : 0),
+       (unicode : 910; char1 : 190; char2 : 0),
+       (unicode : 911; char1 : 191; char2 : 0),
+       (unicode : 912; char1 : 192; char2 : 0),
+       (unicode : 913; char1 : 193; char2 : 0),
+       (unicode : 914; char1 : 194; char2 : 0),
+       (unicode : 915; char1 : 195; char2 : 0),
+       (unicode : 916; char1 : 196; char2 : 0),
+       (unicode : 917; char1 : 197; char2 : 0),
+       (unicode : 918; char1 : 198; char2 : 0),
+       (unicode : 919; char1 : 199; char2 : 0),
+       (unicode : 920; char1 : 200; char2 : 0),
+       (unicode : 921; char1 : 201; char2 : 0),
+       (unicode : 922; char1 : 202; char2 : 0),
+       (unicode : 923; char1 : 203; char2 : 0),
+       (unicode : 924; char1 : 204; char2 : 0),
+       (unicode : 925; char1 : 205; char2 : 0),
+       (unicode : 926; char1 : 206; char2 : 0),
+       (unicode : 927; char1 : 207; char2 : 0),
+       (unicode : 928; char1 : 208; char2 : 0),
+       (unicode : 929; char1 : 209; char2 : 0),
+       (unicode : 931; char1 : 211; char2 : 0),
+       (unicode : 932; char1 : 212; char2 : 0),
+       (unicode : 933; char1 : 213; char2 : 0),
+       (unicode : 934; char1 : 214; char2 : 0),
+       (unicode : 935; char1 : 215; char2 : 0),
+       (unicode : 936; char1 : 216; char2 : 0),
+       (unicode : 937; char1 : 217; char2 : 0),
+       (unicode : 938; char1 : 218; char2 : 0),
+       (unicode : 939; char1 : 219; char2 : 0),
+       (unicode : 940; char1 : 220; char2 : 0),
+       (unicode : 941; char1 : 221; char2 : 0),
+       (unicode : 942; char1 : 222; char2 : 0),
+       (unicode : 943; char1 : 223; char2 : 0),
+       (unicode : 944; char1 : 224; char2 : 0),
+       (unicode : 945; char1 : 225; char2 : 0),
+       (unicode : 946; char1 : 226; char2 : 0),
+       (unicode : 947; char1 : 227; char2 : 0),
+       (unicode : 948; char1 : 228; char2 : 0),
+       (unicode : 949; char1 : 229; char2 : 0),
+       (unicode : 950; char1 : 230; char2 : 0),
+       (unicode : 951; char1 : 231; char2 : 0),
+       (unicode : 952; char1 : 232; char2 : 0),
+       (unicode : 953; char1 : 233; char2 : 0),
+       (unicode : 954; char1 : 234; char2 : 0),
+       (unicode : 955; char1 : 235; char2 : 0),
+       (unicode : 956; char1 : 236; char2 : 0),
+       (unicode : 957; char1 : 237; char2 : 0),
+       (unicode : 958; char1 : 238; char2 : 0),
+       (unicode : 959; char1 : 239; char2 : 0),
+       (unicode : 960; char1 : 240; char2 : 0),
+       (unicode : 961; char1 : 241; char2 : 0),
+       (unicode : 962; char1 : 242; char2 : 0),
+       (unicode : 963; char1 : 243; char2 : 0),
+       (unicode : 964; char1 : 244; char2 : 0),
+       (unicode : 965; char1 : 245; char2 : 0),
+       (unicode : 966; char1 : 246; char2 : 0),
+       (unicode : 967; char1 : 247; char2 : 0),
+       (unicode : 968; char1 : 248; char2 : 0),
+       (unicode : 969; char1 : 249; char2 : 0),
+       (unicode : 970; char1 : 250; char2 : 0),
+       (unicode : 971; char1 : 251; char2 : 0),
+       (unicode : 972; char1 : 252; char2 : 0),
+       (unicode : 973; char1 : 253; char2 : 0),
+       (unicode : 974; char1 : 254; char2 : 0),
+       (unicode : 8211; char1 : 150; char2 : 0),
+       (unicode : 8212; char1 : 151; char2 : 0),
+       (unicode : 8213; char1 : 175; char2 : 0),
+       (unicode : 8216; char1 : 145; char2 : 0),
+       (unicode : 8217; char1 : 146; char2 : 0),
+       (unicode : 8218; char1 : 130; char2 : 0),
+       (unicode : 8220; char1 : 147; char2 : 0),
+       (unicode : 8221; char1 : 148; char2 : 0),
+       (unicode : 8222; char1 : 132; char2 : 0),
+       (unicode : 8224; char1 : 134; char2 : 0),
+       (unicode : 8225; char1 : 135; char2 : 0),
+       (unicode : 8226; char1 : 149; char2 : 0),
+       (unicode : 8230; char1 : 133; char2 : 0),
+       (unicode : 8240; char1 : 137; char2 : 0),
+       (unicode : 8249; char1 : 139; char2 : 0),
+       (unicode : 8250; char1 : 155; char2 : 0),
+       (unicode : 8364; char1 : 128; char2 : 0),
+       (unicode : 8482; char1 : 153; char2 : 0)
+     );
+  {$endif}
+
      unicodemap : tunicodemap = (
        cpname : 'cp1253';
        cp : 1253;
        map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 239;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 527 - 258
compiler/cp437.pas

@@ -5,274 +5,543 @@ unit cp437;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 199; flag : umf_noinfo; reserved : 0),
-       (unicode : 252; flag : umf_noinfo; reserved : 0),
-       (unicode : 233; flag : umf_noinfo; reserved : 0),
-       (unicode : 226; flag : umf_noinfo; reserved : 0),
-       (unicode : 228; flag : umf_noinfo; reserved : 0),
-       (unicode : 224; flag : umf_noinfo; reserved : 0),
-       (unicode : 229; flag : umf_noinfo; reserved : 0),
-       (unicode : 231; flag : umf_noinfo; reserved : 0),
-       (unicode : 234; flag : umf_noinfo; reserved : 0),
-       (unicode : 235; flag : umf_noinfo; reserved : 0),
-       (unicode : 232; flag : umf_noinfo; reserved : 0),
-       (unicode : 239; flag : umf_noinfo; reserved : 0),
-       (unicode : 238; flag : umf_noinfo; reserved : 0),
-       (unicode : 236; flag : umf_noinfo; reserved : 0),
-       (unicode : 196; flag : umf_noinfo; reserved : 0),
-       (unicode : 197; flag : umf_noinfo; reserved : 0),
-       (unicode : 201; flag : umf_noinfo; reserved : 0),
-       (unicode : 230; flag : umf_noinfo; reserved : 0),
-       (unicode : 198; flag : umf_noinfo; reserved : 0),
-       (unicode : 244; flag : umf_noinfo; reserved : 0),
-       (unicode : 246; flag : umf_noinfo; reserved : 0),
-       (unicode : 242; flag : umf_noinfo; reserved : 0),
-       (unicode : 251; flag : umf_noinfo; reserved : 0),
-       (unicode : 249; flag : umf_noinfo; reserved : 0),
-       (unicode : 255; flag : umf_noinfo; reserved : 0),
-       (unicode : 214; flag : umf_noinfo; reserved : 0),
-       (unicode : 220; flag : umf_noinfo; reserved : 0),
-       (unicode : 162; flag : umf_noinfo; reserved : 0),
-       (unicode : 163; flag : umf_noinfo; reserved : 0),
-       (unicode : 165; flag : umf_noinfo; reserved : 0),
-       (unicode : 8359; flag : umf_noinfo; reserved : 0),
-       (unicode : 402; flag : umf_noinfo; reserved : 0),
-       (unicode : 225; flag : umf_noinfo; reserved : 0),
-       (unicode : 237; flag : umf_noinfo; reserved : 0),
-       (unicode : 243; flag : umf_noinfo; reserved : 0),
-       (unicode : 250; flag : umf_noinfo; reserved : 0),
-       (unicode : 241; flag : umf_noinfo; reserved : 0),
-       (unicode : 209; flag : umf_noinfo; reserved : 0),
-       (unicode : 170; flag : umf_noinfo; reserved : 0),
-       (unicode : 186; flag : umf_noinfo; reserved : 0),
-       (unicode : 191; flag : umf_noinfo; reserved : 0),
-       (unicode : 8976; flag : umf_noinfo; reserved : 0),
-       (unicode : 172; flag : umf_noinfo; reserved : 0),
-       (unicode : 189; flag : umf_noinfo; reserved : 0),
-       (unicode : 188; flag : umf_noinfo; reserved : 0),
-       (unicode : 161; flag : umf_noinfo; reserved : 0),
-       (unicode : 171; flag : umf_noinfo; reserved : 0),
-       (unicode : 187; flag : umf_noinfo; reserved : 0),
-       (unicode : 9617; flag : umf_noinfo; reserved : 0),
-       (unicode : 9618; flag : umf_noinfo; reserved : 0),
-       (unicode : 9619; flag : umf_noinfo; reserved : 0),
-       (unicode : 9474; flag : umf_noinfo; reserved : 0),
-       (unicode : 9508; flag : umf_noinfo; reserved : 0),
-       (unicode : 9569; flag : umf_noinfo; reserved : 0),
-       (unicode : 9570; flag : umf_noinfo; reserved : 0),
-       (unicode : 9558; flag : umf_noinfo; reserved : 0),
-       (unicode : 9557; flag : umf_noinfo; reserved : 0),
-       (unicode : 9571; flag : umf_noinfo; reserved : 0),
-       (unicode : 9553; flag : umf_noinfo; reserved : 0),
-       (unicode : 9559; flag : umf_noinfo; reserved : 0),
-       (unicode : 9565; flag : umf_noinfo; reserved : 0),
-       (unicode : 9564; flag : umf_noinfo; reserved : 0),
-       (unicode : 9563; flag : umf_noinfo; reserved : 0),
-       (unicode : 9488; flag : umf_noinfo; reserved : 0),
-       (unicode : 9492; flag : umf_noinfo; reserved : 0),
-       (unicode : 9524; flag : umf_noinfo; reserved : 0),
-       (unicode : 9516; flag : umf_noinfo; reserved : 0),
-       (unicode : 9500; flag : umf_noinfo; reserved : 0),
-       (unicode : 9472; flag : umf_noinfo; reserved : 0),
-       (unicode : 9532; flag : umf_noinfo; reserved : 0),
-       (unicode : 9566; flag : umf_noinfo; reserved : 0),
-       (unicode : 9567; flag : umf_noinfo; reserved : 0),
-       (unicode : 9562; flag : umf_noinfo; reserved : 0),
-       (unicode : 9556; flag : umf_noinfo; reserved : 0),
-       (unicode : 9577; flag : umf_noinfo; reserved : 0),
-       (unicode : 9574; flag : umf_noinfo; reserved : 0),
-       (unicode : 9568; flag : umf_noinfo; reserved : 0),
-       (unicode : 9552; flag : umf_noinfo; reserved : 0),
-       (unicode : 9580; flag : umf_noinfo; reserved : 0),
-       (unicode : 9575; flag : umf_noinfo; reserved : 0),
-       (unicode : 9576; flag : umf_noinfo; reserved : 0),
-       (unicode : 9572; flag : umf_noinfo; reserved : 0),
-       (unicode : 9573; flag : umf_noinfo; reserved : 0),
-       (unicode : 9561; flag : umf_noinfo; reserved : 0),
-       (unicode : 9560; flag : umf_noinfo; reserved : 0),
-       (unicode : 9554; flag : umf_noinfo; reserved : 0),
-       (unicode : 9555; flag : umf_noinfo; reserved : 0),
-       (unicode : 9579; flag : umf_noinfo; reserved : 0),
-       (unicode : 9578; flag : umf_noinfo; reserved : 0),
-       (unicode : 9496; flag : umf_noinfo; reserved : 0),
-       (unicode : 9484; flag : umf_noinfo; reserved : 0),
-       (unicode : 9608; flag : umf_noinfo; reserved : 0),
-       (unicode : 9604; flag : umf_noinfo; reserved : 0),
-       (unicode : 9612; flag : umf_noinfo; reserved : 0),
-       (unicode : 9616; flag : umf_noinfo; reserved : 0),
-       (unicode : 9600; flag : umf_noinfo; reserved : 0),
-       (unicode : 945; flag : umf_noinfo; reserved : 0),
-       (unicode : 223; flag : umf_noinfo; reserved : 0),
-       (unicode : 915; flag : umf_noinfo; reserved : 0),
-       (unicode : 960; flag : umf_noinfo; reserved : 0),
-       (unicode : 931; flag : umf_noinfo; reserved : 0),
-       (unicode : 963; flag : umf_noinfo; reserved : 0),
-       (unicode : 181; flag : umf_noinfo; reserved : 0),
-       (unicode : 964; flag : umf_noinfo; reserved : 0),
-       (unicode : 934; flag : umf_noinfo; reserved : 0),
-       (unicode : 920; flag : umf_noinfo; reserved : 0),
-       (unicode : 937; flag : umf_noinfo; reserved : 0),
-       (unicode : 948; flag : umf_noinfo; reserved : 0),
-       (unicode : 8734; flag : umf_noinfo; reserved : 0),
-       (unicode : 966; flag : umf_noinfo; reserved : 0),
-       (unicode : 949; flag : umf_noinfo; reserved : 0),
-       (unicode : 8745; flag : umf_noinfo; reserved : 0),
-       (unicode : 8801; flag : umf_noinfo; reserved : 0),
-       (unicode : 177; flag : umf_noinfo; reserved : 0),
-       (unicode : 8805; flag : umf_noinfo; reserved : 0),
-       (unicode : 8804; flag : umf_noinfo; reserved : 0),
-       (unicode : 8992; flag : umf_noinfo; reserved : 0),
-       (unicode : 8993; flag : umf_noinfo; reserved : 0),
-       (unicode : 247; flag : umf_noinfo; reserved : 0),
-       (unicode : 8776; flag : umf_noinfo; reserved : 0),
-       (unicode : 176; flag : umf_noinfo; reserved : 0),
-       (unicode : 8729; flag : umf_noinfo; reserved : 0),
-       (unicode : 183; flag : umf_noinfo; reserved : 0),
-       (unicode : 8730; flag : umf_noinfo; reserved : 0),
-       (unicode : 8319; flag : umf_noinfo; reserved : 0),
-       (unicode : 178; flag : umf_noinfo; reserved : 0),
-       (unicode : 9632; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 199; flag : umf_noinfo; reserved: 0),
+       (unicode : 252; flag : umf_noinfo; reserved: 0),
+       (unicode : 233; flag : umf_noinfo; reserved: 0),
+       (unicode : 226; flag : umf_noinfo; reserved: 0),
+       (unicode : 228; flag : umf_noinfo; reserved: 0),
+       (unicode : 224; flag : umf_noinfo; reserved: 0),
+       (unicode : 229; flag : umf_noinfo; reserved: 0),
+       (unicode : 231; flag : umf_noinfo; reserved: 0),
+       (unicode : 234; flag : umf_noinfo; reserved: 0),
+       (unicode : 235; flag : umf_noinfo; reserved: 0),
+       (unicode : 232; flag : umf_noinfo; reserved: 0),
+       (unicode : 239; flag : umf_noinfo; reserved: 0),
+       (unicode : 238; flag : umf_noinfo; reserved: 0),
+       (unicode : 236; flag : umf_noinfo; reserved: 0),
+       (unicode : 196; flag : umf_noinfo; reserved: 0),
+       (unicode : 197; flag : umf_noinfo; reserved: 0),
+       (unicode : 201; flag : umf_noinfo; reserved: 0),
+       (unicode : 230; flag : umf_noinfo; reserved: 0),
+       (unicode : 198; flag : umf_noinfo; reserved: 0),
+       (unicode : 244; flag : umf_noinfo; reserved: 0),
+       (unicode : 246; flag : umf_noinfo; reserved: 0),
+       (unicode : 242; flag : umf_noinfo; reserved: 0),
+       (unicode : 251; flag : umf_noinfo; reserved: 0),
+       (unicode : 249; flag : umf_noinfo; reserved: 0),
+       (unicode : 255; flag : umf_noinfo; reserved: 0),
+       (unicode : 214; flag : umf_noinfo; reserved: 0),
+       (unicode : 220; flag : umf_noinfo; reserved: 0),
+       (unicode : 162; flag : umf_noinfo; reserved: 0),
+       (unicode : 163; flag : umf_noinfo; reserved: 0),
+       (unicode : 165; flag : umf_noinfo; reserved: 0),
+       (unicode : 8359; flag : umf_noinfo; reserved: 0),
+       (unicode : 402; flag : umf_noinfo; reserved: 0),
+       (unicode : 225; flag : umf_noinfo; reserved: 0),
+       (unicode : 237; flag : umf_noinfo; reserved: 0),
+       (unicode : 243; flag : umf_noinfo; reserved: 0),
+       (unicode : 250; flag : umf_noinfo; reserved: 0),
+       (unicode : 241; flag : umf_noinfo; reserved: 0),
+       (unicode : 209; flag : umf_noinfo; reserved: 0),
+       (unicode : 170; flag : umf_noinfo; reserved: 0),
+       (unicode : 186; flag : umf_noinfo; reserved: 0),
+       (unicode : 191; flag : umf_noinfo; reserved: 0),
+       (unicode : 8976; flag : umf_noinfo; reserved: 0),
+       (unicode : 172; flag : umf_noinfo; reserved: 0),
+       (unicode : 189; flag : umf_noinfo; reserved: 0),
+       (unicode : 188; flag : umf_noinfo; reserved: 0),
+       (unicode : 161; flag : umf_noinfo; reserved: 0),
+       (unicode : 171; flag : umf_noinfo; reserved: 0),
+       (unicode : 187; flag : umf_noinfo; reserved: 0),
+       (unicode : 9617; flag : umf_noinfo; reserved: 0),
+       (unicode : 9618; flag : umf_noinfo; reserved: 0),
+       (unicode : 9619; flag : umf_noinfo; reserved: 0),
+       (unicode : 9474; flag : umf_noinfo; reserved: 0),
+       (unicode : 9508; flag : umf_noinfo; reserved: 0),
+       (unicode : 9569; flag : umf_noinfo; reserved: 0),
+       (unicode : 9570; flag : umf_noinfo; reserved: 0),
+       (unicode : 9558; flag : umf_noinfo; reserved: 0),
+       (unicode : 9557; flag : umf_noinfo; reserved: 0),
+       (unicode : 9571; flag : umf_noinfo; reserved: 0),
+       (unicode : 9553; flag : umf_noinfo; reserved: 0),
+       (unicode : 9559; flag : umf_noinfo; reserved: 0),
+       (unicode : 9565; flag : umf_noinfo; reserved: 0),
+       (unicode : 9564; flag : umf_noinfo; reserved: 0),
+       (unicode : 9563; flag : umf_noinfo; reserved: 0),
+       (unicode : 9488; flag : umf_noinfo; reserved: 0),
+       (unicode : 9492; flag : umf_noinfo; reserved: 0),
+       (unicode : 9524; flag : umf_noinfo; reserved: 0),
+       (unicode : 9516; flag : umf_noinfo; reserved: 0),
+       (unicode : 9500; flag : umf_noinfo; reserved: 0),
+       (unicode : 9472; flag : umf_noinfo; reserved: 0),
+       (unicode : 9532; flag : umf_noinfo; reserved: 0),
+       (unicode : 9566; flag : umf_noinfo; reserved: 0),
+       (unicode : 9567; flag : umf_noinfo; reserved: 0),
+       (unicode : 9562; flag : umf_noinfo; reserved: 0),
+       (unicode : 9556; flag : umf_noinfo; reserved: 0),
+       (unicode : 9577; flag : umf_noinfo; reserved: 0),
+       (unicode : 9574; flag : umf_noinfo; reserved: 0),
+       (unicode : 9568; flag : umf_noinfo; reserved: 0),
+       (unicode : 9552; flag : umf_noinfo; reserved: 0),
+       (unicode : 9580; flag : umf_noinfo; reserved: 0),
+       (unicode : 9575; flag : umf_noinfo; reserved: 0),
+       (unicode : 9576; flag : umf_noinfo; reserved: 0),
+       (unicode : 9572; flag : umf_noinfo; reserved: 0),
+       (unicode : 9573; flag : umf_noinfo; reserved: 0),
+       (unicode : 9561; flag : umf_noinfo; reserved: 0),
+       (unicode : 9560; flag : umf_noinfo; reserved: 0),
+       (unicode : 9554; flag : umf_noinfo; reserved: 0),
+       (unicode : 9555; flag : umf_noinfo; reserved: 0),
+       (unicode : 9579; flag : umf_noinfo; reserved: 0),
+       (unicode : 9578; flag : umf_noinfo; reserved: 0),
+       (unicode : 9496; flag : umf_noinfo; reserved: 0),
+       (unicode : 9484; flag : umf_noinfo; reserved: 0),
+       (unicode : 9608; flag : umf_noinfo; reserved: 0),
+       (unicode : 9604; flag : umf_noinfo; reserved: 0),
+       (unicode : 9612; flag : umf_noinfo; reserved: 0),
+       (unicode : 9616; flag : umf_noinfo; reserved: 0),
+       (unicode : 9600; flag : umf_noinfo; reserved: 0),
+       (unicode : 945; flag : umf_noinfo; reserved: 0),
+       (unicode : 223; flag : umf_noinfo; reserved: 0),
+       (unicode : 915; flag : umf_noinfo; reserved: 0),
+       (unicode : 960; flag : umf_noinfo; reserved: 0),
+       (unicode : 931; flag : umf_noinfo; reserved: 0),
+       (unicode : 963; flag : umf_noinfo; reserved: 0),
+       (unicode : 181; flag : umf_noinfo; reserved: 0),
+       (unicode : 964; flag : umf_noinfo; reserved: 0),
+       (unicode : 934; flag : umf_noinfo; reserved: 0),
+       (unicode : 920; flag : umf_noinfo; reserved: 0),
+       (unicode : 937; flag : umf_noinfo; reserved: 0),
+       (unicode : 948; flag : umf_noinfo; reserved: 0),
+       (unicode : 8734; flag : umf_noinfo; reserved: 0),
+       (unicode : 966; flag : umf_noinfo; reserved: 0),
+       (unicode : 949; flag : umf_noinfo; reserved: 0),
+       (unicode : 8745; flag : umf_noinfo; reserved: 0),
+       (unicode : 8801; flag : umf_noinfo; reserved: 0),
+       (unicode : 177; flag : umf_noinfo; reserved: 0),
+       (unicode : 8805; flag : umf_noinfo; reserved: 0),
+       (unicode : 8804; flag : umf_noinfo; reserved: 0),
+       (unicode : 8992; flag : umf_noinfo; reserved: 0),
+       (unicode : 8993; flag : umf_noinfo; reserved: 0),
+       (unicode : 247; flag : umf_noinfo; reserved: 0),
+       (unicode : 8776; flag : umf_noinfo; reserved: 0),
+       (unicode : 176; flag : umf_noinfo; reserved: 0),
+       (unicode : 8729; flag : umf_noinfo; reserved: 0),
+       (unicode : 183; flag : umf_noinfo; reserved: 0),
+       (unicode : 8730; flag : umf_noinfo; reserved: 0),
+       (unicode : 8319; flag : umf_noinfo; reserved: 0),
+       (unicode : 178; flag : umf_noinfo; reserved: 0),
+       (unicode : 9632; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..255] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 255; char2 : 0),
+       (unicode : 161; char1 : 173; char2 : 0),
+       (unicode : 162; char1 : 155; char2 : 0),
+       (unicode : 163; char1 : 156; char2 : 0),
+       (unicode : 165; char1 : 157; char2 : 0),
+       (unicode : 170; char1 : 166; char2 : 0),
+       (unicode : 171; char1 : 174; char2 : 0),
+       (unicode : 172; char1 : 170; char2 : 0),
+       (unicode : 176; char1 : 248; char2 : 0),
+       (unicode : 177; char1 : 241; char2 : 0),
+       (unicode : 178; char1 : 253; char2 : 0),
+       (unicode : 181; char1 : 230; char2 : 0),
+       (unicode : 183; char1 : 250; char2 : 0),
+       (unicode : 186; char1 : 167; char2 : 0),
+       (unicode : 187; char1 : 175; char2 : 0),
+       (unicode : 188; char1 : 172; char2 : 0),
+       (unicode : 189; char1 : 171; char2 : 0),
+       (unicode : 191; char1 : 168; char2 : 0),
+       (unicode : 196; char1 : 142; char2 : 0),
+       (unicode : 197; char1 : 143; char2 : 0),
+       (unicode : 198; char1 : 146; char2 : 0),
+       (unicode : 199; char1 : 128; char2 : 0),
+       (unicode : 201; char1 : 144; char2 : 0),
+       (unicode : 209; char1 : 165; char2 : 0),
+       (unicode : 214; char1 : 153; char2 : 0),
+       (unicode : 220; char1 : 154; char2 : 0),
+       (unicode : 223; char1 : 225; char2 : 0),
+       (unicode : 224; char1 : 133; char2 : 0),
+       (unicode : 225; char1 : 160; char2 : 0),
+       (unicode : 226; char1 : 131; char2 : 0),
+       (unicode : 228; char1 : 132; char2 : 0),
+       (unicode : 229; char1 : 134; char2 : 0),
+       (unicode : 230; char1 : 145; char2 : 0),
+       (unicode : 231; char1 : 135; char2 : 0),
+       (unicode : 232; char1 : 138; char2 : 0),
+       (unicode : 233; char1 : 130; char2 : 0),
+       (unicode : 234; char1 : 136; char2 : 0),
+       (unicode : 235; char1 : 137; char2 : 0),
+       (unicode : 236; char1 : 141; char2 : 0),
+       (unicode : 237; char1 : 161; char2 : 0),
+       (unicode : 238; char1 : 140; char2 : 0),
+       (unicode : 239; char1 : 139; char2 : 0),
+       (unicode : 241; char1 : 164; char2 : 0),
+       (unicode : 242; char1 : 149; char2 : 0),
+       (unicode : 243; char1 : 162; char2 : 0),
+       (unicode : 244; char1 : 147; char2 : 0),
+       (unicode : 246; char1 : 148; char2 : 0),
+       (unicode : 247; char1 : 246; char2 : 0),
+       (unicode : 249; char1 : 151; char2 : 0),
+       (unicode : 250; char1 : 163; char2 : 0),
+       (unicode : 251; char1 : 150; char2 : 0),
+       (unicode : 252; char1 : 129; char2 : 0),
+       (unicode : 255; char1 : 152; char2 : 0),
+       (unicode : 402; char1 : 159; char2 : 0),
+       (unicode : 915; char1 : 226; char2 : 0),
+       (unicode : 920; char1 : 233; char2 : 0),
+       (unicode : 931; char1 : 228; char2 : 0),
+       (unicode : 934; char1 : 232; char2 : 0),
+       (unicode : 937; char1 : 234; char2 : 0),
+       (unicode : 945; char1 : 224; char2 : 0),
+       (unicode : 948; char1 : 235; char2 : 0),
+       (unicode : 949; char1 : 238; char2 : 0),
+       (unicode : 960; char1 : 227; char2 : 0),
+       (unicode : 963; char1 : 229; char2 : 0),
+       (unicode : 964; char1 : 231; char2 : 0),
+       (unicode : 966; char1 : 237; char2 : 0),
+       (unicode : 8319; char1 : 252; char2 : 0),
+       (unicode : 8359; char1 : 158; char2 : 0),
+       (unicode : 8729; char1 : 249; char2 : 0),
+       (unicode : 8730; char1 : 251; char2 : 0),
+       (unicode : 8734; char1 : 236; char2 : 0),
+       (unicode : 8745; char1 : 239; char2 : 0),
+       (unicode : 8776; char1 : 247; char2 : 0),
+       (unicode : 8801; char1 : 240; char2 : 0),
+       (unicode : 8804; char1 : 243; char2 : 0),
+       (unicode : 8805; char1 : 242; char2 : 0),
+       (unicode : 8976; char1 : 169; char2 : 0),
+       (unicode : 8992; char1 : 244; char2 : 0),
+       (unicode : 8993; char1 : 245; char2 : 0),
+       (unicode : 9472; char1 : 196; char2 : 0),
+       (unicode : 9474; char1 : 179; char2 : 0),
+       (unicode : 9484; char1 : 218; char2 : 0),
+       (unicode : 9488; char1 : 191; char2 : 0),
+       (unicode : 9492; char1 : 192; char2 : 0),
+       (unicode : 9496; char1 : 217; char2 : 0),
+       (unicode : 9500; char1 : 195; char2 : 0),
+       (unicode : 9508; char1 : 180; char2 : 0),
+       (unicode : 9516; char1 : 194; char2 : 0),
+       (unicode : 9524; char1 : 193; char2 : 0),
+       (unicode : 9532; char1 : 197; char2 : 0),
+       (unicode : 9552; char1 : 205; char2 : 0),
+       (unicode : 9553; char1 : 186; char2 : 0),
+       (unicode : 9554; char1 : 213; char2 : 0),
+       (unicode : 9555; char1 : 214; char2 : 0),
+       (unicode : 9556; char1 : 201; char2 : 0),
+       (unicode : 9557; char1 : 184; char2 : 0),
+       (unicode : 9558; char1 : 183; char2 : 0),
+       (unicode : 9559; char1 : 187; char2 : 0),
+       (unicode : 9560; char1 : 212; char2 : 0),
+       (unicode : 9561; char1 : 211; char2 : 0),
+       (unicode : 9562; char1 : 200; char2 : 0),
+       (unicode : 9563; char1 : 190; char2 : 0),
+       (unicode : 9564; char1 : 189; char2 : 0),
+       (unicode : 9565; char1 : 188; char2 : 0),
+       (unicode : 9566; char1 : 198; char2 : 0),
+       (unicode : 9567; char1 : 199; char2 : 0),
+       (unicode : 9568; char1 : 204; char2 : 0),
+       (unicode : 9569; char1 : 181; char2 : 0),
+       (unicode : 9570; char1 : 182; char2 : 0),
+       (unicode : 9571; char1 : 185; char2 : 0),
+       (unicode : 9572; char1 : 209; char2 : 0),
+       (unicode : 9573; char1 : 210; char2 : 0),
+       (unicode : 9574; char1 : 203; char2 : 0),
+       (unicode : 9575; char1 : 207; char2 : 0),
+       (unicode : 9576; char1 : 208; char2 : 0),
+       (unicode : 9577; char1 : 202; char2 : 0),
+       (unicode : 9578; char1 : 216; char2 : 0),
+       (unicode : 9579; char1 : 215; char2 : 0),
+       (unicode : 9580; char1 : 206; char2 : 0),
+       (unicode : 9600; char1 : 223; char2 : 0),
+       (unicode : 9604; char1 : 220; char2 : 0),
+       (unicode : 9608; char1 : 219; char2 : 0),
+       (unicode : 9612; char1 : 221; char2 : 0),
+       (unicode : 9616; char1 : 222; char2 : 0),
+       (unicode : 9617; char1 : 176; char2 : 0),
+       (unicode : 9618; char1 : 177; char2 : 0),
+       (unicode : 9619; char1 : 178; char2 : 0),
+       (unicode : 9632; char1 : 254; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : 'cp437';
        cp : 437;
-       map : @map[0];
+       map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 256;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 142 - 1
compiler/cp646.pas

@@ -5,8 +5,12 @@ unit cp646;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-    {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..127] of tunicodecharmapping = (
@@ -140,11 +144,148 @@ unit cp646;
        (unicode : 127; flag : umf_noinfo; reserved: 0)
      );
 
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..127] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0)
+     );
+  {$endif}
+
      unicodemap : tunicodemap = (
        cpname : 'ISO646-US';
        cp : 20127;
        map : @map;
        lastchar : 127;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 128;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 527 - 258
compiler/cp850.pas

@@ -5,274 +5,543 @@ unit cp850;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 199; flag : umf_noinfo; reserved : 0),
-       (unicode : 252; flag : umf_noinfo; reserved : 0),
-       (unicode : 233; flag : umf_noinfo; reserved : 0),
-       (unicode : 226; flag : umf_noinfo; reserved : 0),
-       (unicode : 228; flag : umf_noinfo; reserved : 0),
-       (unicode : 224; flag : umf_noinfo; reserved : 0),
-       (unicode : 229; flag : umf_noinfo; reserved : 0),
-       (unicode : 231; flag : umf_noinfo; reserved : 0),
-       (unicode : 234; flag : umf_noinfo; reserved : 0),
-       (unicode : 235; flag : umf_noinfo; reserved : 0),
-       (unicode : 232; flag : umf_noinfo; reserved : 0),
-       (unicode : 239; flag : umf_noinfo; reserved : 0),
-       (unicode : 238; flag : umf_noinfo; reserved : 0),
-       (unicode : 236; flag : umf_noinfo; reserved : 0),
-       (unicode : 196; flag : umf_noinfo; reserved : 0),
-       (unicode : 197; flag : umf_noinfo; reserved : 0),
-       (unicode : 201; flag : umf_noinfo; reserved : 0),
-       (unicode : 230; flag : umf_noinfo; reserved : 0),
-       (unicode : 198; flag : umf_noinfo; reserved : 0),
-       (unicode : 244; flag : umf_noinfo; reserved : 0),
-       (unicode : 246; flag : umf_noinfo; reserved : 0),
-       (unicode : 242; flag : umf_noinfo; reserved : 0),
-       (unicode : 251; flag : umf_noinfo; reserved : 0),
-       (unicode : 249; flag : umf_noinfo; reserved : 0),
-       (unicode : 255; flag : umf_noinfo; reserved : 0),
-       (unicode : 214; flag : umf_noinfo; reserved : 0),
-       (unicode : 220; flag : umf_noinfo; reserved : 0),
-       (unicode : 248; flag : umf_noinfo; reserved : 0),
-       (unicode : 163; flag : umf_noinfo; reserved : 0),
-       (unicode : 216; flag : umf_noinfo; reserved : 0),
-       (unicode : 215; flag : umf_noinfo; reserved : 0),
-       (unicode : 402; flag : umf_noinfo; reserved : 0),
-       (unicode : 225; flag : umf_noinfo; reserved : 0),
-       (unicode : 237; flag : umf_noinfo; reserved : 0),
-       (unicode : 243; flag : umf_noinfo; reserved : 0),
-       (unicode : 250; flag : umf_noinfo; reserved : 0),
-       (unicode : 241; flag : umf_noinfo; reserved : 0),
-       (unicode : 209; flag : umf_noinfo; reserved : 0),
-       (unicode : 170; flag : umf_noinfo; reserved : 0),
-       (unicode : 186; flag : umf_noinfo; reserved : 0),
-       (unicode : 191; flag : umf_noinfo; reserved : 0),
-       (unicode : 174; flag : umf_noinfo; reserved : 0),
-       (unicode : 172; flag : umf_noinfo; reserved : 0),
-       (unicode : 189; flag : umf_noinfo; reserved : 0),
-       (unicode : 188; flag : umf_noinfo; reserved : 0),
-       (unicode : 161; flag : umf_noinfo; reserved : 0),
-       (unicode : 171; flag : umf_noinfo; reserved : 0),
-       (unicode : 187; flag : umf_noinfo; reserved : 0),
-       (unicode : 9617; flag : umf_noinfo; reserved : 0),
-       (unicode : 9618; flag : umf_noinfo; reserved : 0),
-       (unicode : 9619; flag : umf_noinfo; reserved : 0),
-       (unicode : 9474; flag : umf_noinfo; reserved : 0),
-       (unicode : 9508; flag : umf_noinfo; reserved : 0),
-       (unicode : 193; flag : umf_noinfo; reserved : 0),
-       (unicode : 194; flag : umf_noinfo; reserved : 0),
-       (unicode : 192; flag : umf_noinfo; reserved : 0),
-       (unicode : 169; flag : umf_noinfo; reserved : 0),
-       (unicode : 9571; flag : umf_noinfo; reserved : 0),
-       (unicode : 9553; flag : umf_noinfo; reserved : 0),
-       (unicode : 9559; flag : umf_noinfo; reserved : 0),
-       (unicode : 9565; flag : umf_noinfo; reserved : 0),
-       (unicode : 162; flag : umf_noinfo; reserved : 0),
-       (unicode : 165; flag : umf_noinfo; reserved : 0),
-       (unicode : 9488; flag : umf_noinfo; reserved : 0),
-       (unicode : 9492; flag : umf_noinfo; reserved : 0),
-       (unicode : 9524; flag : umf_noinfo; reserved : 0),
-       (unicode : 9516; flag : umf_noinfo; reserved : 0),
-       (unicode : 9500; flag : umf_noinfo; reserved : 0),
-       (unicode : 9472; flag : umf_noinfo; reserved : 0),
-       (unicode : 9532; flag : umf_noinfo; reserved : 0),
-       (unicode : 227; flag : umf_noinfo; reserved : 0),
-       (unicode : 195; flag : umf_noinfo; reserved : 0),
-       (unicode : 9562; flag : umf_noinfo; reserved : 0),
-       (unicode : 9556; flag : umf_noinfo; reserved : 0),
-       (unicode : 9577; flag : umf_noinfo; reserved : 0),
-       (unicode : 9574; flag : umf_noinfo; reserved : 0),
-       (unicode : 9568; flag : umf_noinfo; reserved : 0),
-       (unicode : 9552; flag : umf_noinfo; reserved : 0),
-       (unicode : 9580; flag : umf_noinfo; reserved : 0),
-       (unicode : 164; flag : umf_noinfo; reserved : 0),
-       (unicode : 240; flag : umf_noinfo; reserved : 0),
-       (unicode : 208; flag : umf_noinfo; reserved : 0),
-       (unicode : 202; flag : umf_noinfo; reserved : 0),
-       (unicode : 203; flag : umf_noinfo; reserved : 0),
-       (unicode : 200; flag : umf_noinfo; reserved : 0),
-       (unicode : 305; flag : umf_noinfo; reserved : 0),
-       (unicode : 205; flag : umf_noinfo; reserved : 0),
-       (unicode : 206; flag : umf_noinfo; reserved : 0),
-       (unicode : 207; flag : umf_noinfo; reserved : 0),
-       (unicode : 9496; flag : umf_noinfo; reserved : 0),
-       (unicode : 9484; flag : umf_noinfo; reserved : 0),
-       (unicode : 9608; flag : umf_noinfo; reserved : 0),
-       (unicode : 9604; flag : umf_noinfo; reserved : 0),
-       (unicode : 166; flag : umf_noinfo; reserved : 0),
-       (unicode : 204; flag : umf_noinfo; reserved : 0),
-       (unicode : 9600; flag : umf_noinfo; reserved : 0),
-       (unicode : 211; flag : umf_noinfo; reserved : 0),
-       (unicode : 223; flag : umf_noinfo; reserved : 0),
-       (unicode : 212; flag : umf_noinfo; reserved : 0),
-       (unicode : 210; flag : umf_noinfo; reserved : 0),
-       (unicode : 245; flag : umf_noinfo; reserved : 0),
-       (unicode : 213; flag : umf_noinfo; reserved : 0),
-       (unicode : 181; flag : umf_noinfo; reserved : 0),
-       (unicode : 254; flag : umf_noinfo; reserved : 0),
-       (unicode : 222; flag : umf_noinfo; reserved : 0),
-       (unicode : 218; flag : umf_noinfo; reserved : 0),
-       (unicode : 219; flag : umf_noinfo; reserved : 0),
-       (unicode : 217; flag : umf_noinfo; reserved : 0),
-       (unicode : 253; flag : umf_noinfo; reserved : 0),
-       (unicode : 221; flag : umf_noinfo; reserved : 0),
-       (unicode : 175; flag : umf_noinfo; reserved : 0),
-       (unicode : 180; flag : umf_noinfo; reserved : 0),
-       (unicode : 173; flag : umf_noinfo; reserved : 0),
-       (unicode : 177; flag : umf_noinfo; reserved : 0),
-       (unicode : 8215; flag : umf_noinfo; reserved : 0),
-       (unicode : 190; flag : umf_noinfo; reserved : 0),
-       (unicode : 182; flag : umf_noinfo; reserved : 0),
-       (unicode : 167; flag : umf_noinfo; reserved : 0),
-       (unicode : 247; flag : umf_noinfo; reserved : 0),
-       (unicode : 184; flag : umf_noinfo; reserved : 0),
-       (unicode : 176; flag : umf_noinfo; reserved : 0),
-       (unicode : 168; flag : umf_noinfo; reserved : 0),
-       (unicode : 183; flag : umf_noinfo; reserved : 0),
-       (unicode : 185; flag : umf_noinfo; reserved : 0),
-       (unicode : 179; flag : umf_noinfo; reserved : 0),
-       (unicode : 178; flag : umf_noinfo; reserved : 0),
-       (unicode : 9632; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 199; flag : umf_noinfo; reserved: 0),
+       (unicode : 252; flag : umf_noinfo; reserved: 0),
+       (unicode : 233; flag : umf_noinfo; reserved: 0),
+       (unicode : 226; flag : umf_noinfo; reserved: 0),
+       (unicode : 228; flag : umf_noinfo; reserved: 0),
+       (unicode : 224; flag : umf_noinfo; reserved: 0),
+       (unicode : 229; flag : umf_noinfo; reserved: 0),
+       (unicode : 231; flag : umf_noinfo; reserved: 0),
+       (unicode : 234; flag : umf_noinfo; reserved: 0),
+       (unicode : 235; flag : umf_noinfo; reserved: 0),
+       (unicode : 232; flag : umf_noinfo; reserved: 0),
+       (unicode : 239; flag : umf_noinfo; reserved: 0),
+       (unicode : 238; flag : umf_noinfo; reserved: 0),
+       (unicode : 236; flag : umf_noinfo; reserved: 0),
+       (unicode : 196; flag : umf_noinfo; reserved: 0),
+       (unicode : 197; flag : umf_noinfo; reserved: 0),
+       (unicode : 201; flag : umf_noinfo; reserved: 0),
+       (unicode : 230; flag : umf_noinfo; reserved: 0),
+       (unicode : 198; flag : umf_noinfo; reserved: 0),
+       (unicode : 244; flag : umf_noinfo; reserved: 0),
+       (unicode : 246; flag : umf_noinfo; reserved: 0),
+       (unicode : 242; flag : umf_noinfo; reserved: 0),
+       (unicode : 251; flag : umf_noinfo; reserved: 0),
+       (unicode : 249; flag : umf_noinfo; reserved: 0),
+       (unicode : 255; flag : umf_noinfo; reserved: 0),
+       (unicode : 214; flag : umf_noinfo; reserved: 0),
+       (unicode : 220; flag : umf_noinfo; reserved: 0),
+       (unicode : 248; flag : umf_noinfo; reserved: 0),
+       (unicode : 163; flag : umf_noinfo; reserved: 0),
+       (unicode : 216; flag : umf_noinfo; reserved: 0),
+       (unicode : 215; flag : umf_noinfo; reserved: 0),
+       (unicode : 402; flag : umf_noinfo; reserved: 0),
+       (unicode : 225; flag : umf_noinfo; reserved: 0),
+       (unicode : 237; flag : umf_noinfo; reserved: 0),
+       (unicode : 243; flag : umf_noinfo; reserved: 0),
+       (unicode : 250; flag : umf_noinfo; reserved: 0),
+       (unicode : 241; flag : umf_noinfo; reserved: 0),
+       (unicode : 209; flag : umf_noinfo; reserved: 0),
+       (unicode : 170; flag : umf_noinfo; reserved: 0),
+       (unicode : 186; flag : umf_noinfo; reserved: 0),
+       (unicode : 191; flag : umf_noinfo; reserved: 0),
+       (unicode : 174; flag : umf_noinfo; reserved: 0),
+       (unicode : 172; flag : umf_noinfo; reserved: 0),
+       (unicode : 189; flag : umf_noinfo; reserved: 0),
+       (unicode : 188; flag : umf_noinfo; reserved: 0),
+       (unicode : 161; flag : umf_noinfo; reserved: 0),
+       (unicode : 171; flag : umf_noinfo; reserved: 0),
+       (unicode : 187; flag : umf_noinfo; reserved: 0),
+       (unicode : 9617; flag : umf_noinfo; reserved: 0),
+       (unicode : 9618; flag : umf_noinfo; reserved: 0),
+       (unicode : 9619; flag : umf_noinfo; reserved: 0),
+       (unicode : 9474; flag : umf_noinfo; reserved: 0),
+       (unicode : 9508; flag : umf_noinfo; reserved: 0),
+       (unicode : 193; flag : umf_noinfo; reserved: 0),
+       (unicode : 194; flag : umf_noinfo; reserved: 0),
+       (unicode : 192; flag : umf_noinfo; reserved: 0),
+       (unicode : 169; flag : umf_noinfo; reserved: 0),
+       (unicode : 9571; flag : umf_noinfo; reserved: 0),
+       (unicode : 9553; flag : umf_noinfo; reserved: 0),
+       (unicode : 9559; flag : umf_noinfo; reserved: 0),
+       (unicode : 9565; flag : umf_noinfo; reserved: 0),
+       (unicode : 162; flag : umf_noinfo; reserved: 0),
+       (unicode : 165; flag : umf_noinfo; reserved: 0),
+       (unicode : 9488; flag : umf_noinfo; reserved: 0),
+       (unicode : 9492; flag : umf_noinfo; reserved: 0),
+       (unicode : 9524; flag : umf_noinfo; reserved: 0),
+       (unicode : 9516; flag : umf_noinfo; reserved: 0),
+       (unicode : 9500; flag : umf_noinfo; reserved: 0),
+       (unicode : 9472; flag : umf_noinfo; reserved: 0),
+       (unicode : 9532; flag : umf_noinfo; reserved: 0),
+       (unicode : 227; flag : umf_noinfo; reserved: 0),
+       (unicode : 195; flag : umf_noinfo; reserved: 0),
+       (unicode : 9562; flag : umf_noinfo; reserved: 0),
+       (unicode : 9556; flag : umf_noinfo; reserved: 0),
+       (unicode : 9577; flag : umf_noinfo; reserved: 0),
+       (unicode : 9574; flag : umf_noinfo; reserved: 0),
+       (unicode : 9568; flag : umf_noinfo; reserved: 0),
+       (unicode : 9552; flag : umf_noinfo; reserved: 0),
+       (unicode : 9580; flag : umf_noinfo; reserved: 0),
+       (unicode : 164; flag : umf_noinfo; reserved: 0),
+       (unicode : 240; flag : umf_noinfo; reserved: 0),
+       (unicode : 208; flag : umf_noinfo; reserved: 0),
+       (unicode : 202; flag : umf_noinfo; reserved: 0),
+       (unicode : 203; flag : umf_noinfo; reserved: 0),
+       (unicode : 200; flag : umf_noinfo; reserved: 0),
+       (unicode : 305; flag : umf_noinfo; reserved: 0),
+       (unicode : 205; flag : umf_noinfo; reserved: 0),
+       (unicode : 206; flag : umf_noinfo; reserved: 0),
+       (unicode : 207; flag : umf_noinfo; reserved: 0),
+       (unicode : 9496; flag : umf_noinfo; reserved: 0),
+       (unicode : 9484; flag : umf_noinfo; reserved: 0),
+       (unicode : 9608; flag : umf_noinfo; reserved: 0),
+       (unicode : 9604; flag : umf_noinfo; reserved: 0),
+       (unicode : 166; flag : umf_noinfo; reserved: 0),
+       (unicode : 204; flag : umf_noinfo; reserved: 0),
+       (unicode : 9600; flag : umf_noinfo; reserved: 0),
+       (unicode : 211; flag : umf_noinfo; reserved: 0),
+       (unicode : 223; flag : umf_noinfo; reserved: 0),
+       (unicode : 212; flag : umf_noinfo; reserved: 0),
+       (unicode : 210; flag : umf_noinfo; reserved: 0),
+       (unicode : 245; flag : umf_noinfo; reserved: 0),
+       (unicode : 213; flag : umf_noinfo; reserved: 0),
+       (unicode : 181; flag : umf_noinfo; reserved: 0),
+       (unicode : 254; flag : umf_noinfo; reserved: 0),
+       (unicode : 222; flag : umf_noinfo; reserved: 0),
+       (unicode : 218; flag : umf_noinfo; reserved: 0),
+       (unicode : 219; flag : umf_noinfo; reserved: 0),
+       (unicode : 217; flag : umf_noinfo; reserved: 0),
+       (unicode : 253; flag : umf_noinfo; reserved: 0),
+       (unicode : 221; flag : umf_noinfo; reserved: 0),
+       (unicode : 175; flag : umf_noinfo; reserved: 0),
+       (unicode : 180; flag : umf_noinfo; reserved: 0),
+       (unicode : 173; flag : umf_noinfo; reserved: 0),
+       (unicode : 177; flag : umf_noinfo; reserved: 0),
+       (unicode : 8215; flag : umf_noinfo; reserved: 0),
+       (unicode : 190; flag : umf_noinfo; reserved: 0),
+       (unicode : 182; flag : umf_noinfo; reserved: 0),
+       (unicode : 167; flag : umf_noinfo; reserved: 0),
+       (unicode : 247; flag : umf_noinfo; reserved: 0),
+       (unicode : 184; flag : umf_noinfo; reserved: 0),
+       (unicode : 176; flag : umf_noinfo; reserved: 0),
+       (unicode : 168; flag : umf_noinfo; reserved: 0),
+       (unicode : 183; flag : umf_noinfo; reserved: 0),
+       (unicode : 185; flag : umf_noinfo; reserved: 0),
+       (unicode : 179; flag : umf_noinfo; reserved: 0),
+       (unicode : 178; flag : umf_noinfo; reserved: 0),
+       (unicode : 9632; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..255] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 255; char2 : 0),
+       (unicode : 161; char1 : 173; char2 : 0),
+       (unicode : 162; char1 : 189; char2 : 0),
+       (unicode : 163; char1 : 156; char2 : 0),
+       (unicode : 164; char1 : 207; char2 : 0),
+       (unicode : 165; char1 : 190; char2 : 0),
+       (unicode : 166; char1 : 221; char2 : 0),
+       (unicode : 167; char1 : 245; char2 : 0),
+       (unicode : 168; char1 : 249; char2 : 0),
+       (unicode : 169; char1 : 184; char2 : 0),
+       (unicode : 170; char1 : 166; char2 : 0),
+       (unicode : 171; char1 : 174; char2 : 0),
+       (unicode : 172; char1 : 170; char2 : 0),
+       (unicode : 173; char1 : 240; char2 : 0),
+       (unicode : 174; char1 : 169; char2 : 0),
+       (unicode : 175; char1 : 238; char2 : 0),
+       (unicode : 176; char1 : 248; char2 : 0),
+       (unicode : 177; char1 : 241; char2 : 0),
+       (unicode : 178; char1 : 253; char2 : 0),
+       (unicode : 179; char1 : 252; char2 : 0),
+       (unicode : 180; char1 : 239; char2 : 0),
+       (unicode : 181; char1 : 230; char2 : 0),
+       (unicode : 182; char1 : 244; char2 : 0),
+       (unicode : 183; char1 : 250; char2 : 0),
+       (unicode : 184; char1 : 247; char2 : 0),
+       (unicode : 185; char1 : 251; char2 : 0),
+       (unicode : 186; char1 : 167; char2 : 0),
+       (unicode : 187; char1 : 175; char2 : 0),
+       (unicode : 188; char1 : 172; char2 : 0),
+       (unicode : 189; char1 : 171; char2 : 0),
+       (unicode : 190; char1 : 243; char2 : 0),
+       (unicode : 191; char1 : 168; char2 : 0),
+       (unicode : 192; char1 : 183; char2 : 0),
+       (unicode : 193; char1 : 181; char2 : 0),
+       (unicode : 194; char1 : 182; char2 : 0),
+       (unicode : 195; char1 : 199; char2 : 0),
+       (unicode : 196; char1 : 142; char2 : 0),
+       (unicode : 197; char1 : 143; char2 : 0),
+       (unicode : 198; char1 : 146; char2 : 0),
+       (unicode : 199; char1 : 128; char2 : 0),
+       (unicode : 200; char1 : 212; char2 : 0),
+       (unicode : 201; char1 : 144; char2 : 0),
+       (unicode : 202; char1 : 210; char2 : 0),
+       (unicode : 203; char1 : 211; char2 : 0),
+       (unicode : 204; char1 : 222; char2 : 0),
+       (unicode : 205; char1 : 214; char2 : 0),
+       (unicode : 206; char1 : 215; char2 : 0),
+       (unicode : 207; char1 : 216; char2 : 0),
+       (unicode : 208; char1 : 209; char2 : 0),
+       (unicode : 209; char1 : 165; char2 : 0),
+       (unicode : 210; char1 : 227; char2 : 0),
+       (unicode : 211; char1 : 224; char2 : 0),
+       (unicode : 212; char1 : 226; char2 : 0),
+       (unicode : 213; char1 : 229; char2 : 0),
+       (unicode : 214; char1 : 153; char2 : 0),
+       (unicode : 215; char1 : 158; char2 : 0),
+       (unicode : 216; char1 : 157; char2 : 0),
+       (unicode : 217; char1 : 235; char2 : 0),
+       (unicode : 218; char1 : 233; char2 : 0),
+       (unicode : 219; char1 : 234; char2 : 0),
+       (unicode : 220; char1 : 154; char2 : 0),
+       (unicode : 221; char1 : 237; char2 : 0),
+       (unicode : 222; char1 : 232; char2 : 0),
+       (unicode : 223; char1 : 225; char2 : 0),
+       (unicode : 224; char1 : 133; char2 : 0),
+       (unicode : 225; char1 : 160; char2 : 0),
+       (unicode : 226; char1 : 131; char2 : 0),
+       (unicode : 227; char1 : 198; char2 : 0),
+       (unicode : 228; char1 : 132; char2 : 0),
+       (unicode : 229; char1 : 134; char2 : 0),
+       (unicode : 230; char1 : 145; char2 : 0),
+       (unicode : 231; char1 : 135; char2 : 0),
+       (unicode : 232; char1 : 138; char2 : 0),
+       (unicode : 233; char1 : 130; char2 : 0),
+       (unicode : 234; char1 : 136; char2 : 0),
+       (unicode : 235; char1 : 137; char2 : 0),
+       (unicode : 236; char1 : 141; char2 : 0),
+       (unicode : 237; char1 : 161; char2 : 0),
+       (unicode : 238; char1 : 140; char2 : 0),
+       (unicode : 239; char1 : 139; char2 : 0),
+       (unicode : 240; char1 : 208; char2 : 0),
+       (unicode : 241; char1 : 164; char2 : 0),
+       (unicode : 242; char1 : 149; char2 : 0),
+       (unicode : 243; char1 : 162; char2 : 0),
+       (unicode : 244; char1 : 147; char2 : 0),
+       (unicode : 245; char1 : 228; char2 : 0),
+       (unicode : 246; char1 : 148; char2 : 0),
+       (unicode : 247; char1 : 246; char2 : 0),
+       (unicode : 248; char1 : 155; char2 : 0),
+       (unicode : 249; char1 : 151; char2 : 0),
+       (unicode : 250; char1 : 163; char2 : 0),
+       (unicode : 251; char1 : 150; char2 : 0),
+       (unicode : 252; char1 : 129; char2 : 0),
+       (unicode : 253; char1 : 236; char2 : 0),
+       (unicode : 254; char1 : 231; char2 : 0),
+       (unicode : 255; char1 : 152; char2 : 0),
+       (unicode : 305; char1 : 213; char2 : 0),
+       (unicode : 402; char1 : 159; char2 : 0),
+       (unicode : 8215; char1 : 242; char2 : 0),
+       (unicode : 9472; char1 : 196; char2 : 0),
+       (unicode : 9474; char1 : 179; char2 : 0),
+       (unicode : 9484; char1 : 218; char2 : 0),
+       (unicode : 9488; char1 : 191; char2 : 0),
+       (unicode : 9492; char1 : 192; char2 : 0),
+       (unicode : 9496; char1 : 217; char2 : 0),
+       (unicode : 9500; char1 : 195; char2 : 0),
+       (unicode : 9508; char1 : 180; char2 : 0),
+       (unicode : 9516; char1 : 194; char2 : 0),
+       (unicode : 9524; char1 : 193; char2 : 0),
+       (unicode : 9532; char1 : 197; char2 : 0),
+       (unicode : 9552; char1 : 205; char2 : 0),
+       (unicode : 9553; char1 : 186; char2 : 0),
+       (unicode : 9556; char1 : 201; char2 : 0),
+       (unicode : 9559; char1 : 187; char2 : 0),
+       (unicode : 9562; char1 : 200; char2 : 0),
+       (unicode : 9565; char1 : 188; char2 : 0),
+       (unicode : 9568; char1 : 204; char2 : 0),
+       (unicode : 9571; char1 : 185; char2 : 0),
+       (unicode : 9574; char1 : 203; char2 : 0),
+       (unicode : 9577; char1 : 202; char2 : 0),
+       (unicode : 9580; char1 : 206; char2 : 0),
+       (unicode : 9600; char1 : 223; char2 : 0),
+       (unicode : 9604; char1 : 220; char2 : 0),
+       (unicode : 9608; char1 : 219; char2 : 0),
+       (unicode : 9617; char1 : 176; char2 : 0),
+       (unicode : 9618; char1 : 177; char2 : 0),
+       (unicode : 9619; char1 : 178; char2 : 0),
+       (unicode : 9632; char1 : 254; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : 'cp850';
        cp : 850;
-       map : @map[0];
+       map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 256;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 526 - 257
compiler/cp866.pas

@@ -5,274 +5,543 @@ unit cp866;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 1040; flag : umf_noinfo; reserved : 0),
-       (unicode : 1041; flag : umf_noinfo; reserved : 0),
-       (unicode : 1042; flag : umf_noinfo; reserved : 0),
-       (unicode : 1043; flag : umf_noinfo; reserved : 0),
-       (unicode : 1044; flag : umf_noinfo; reserved : 0),
-       (unicode : 1045; flag : umf_noinfo; reserved : 0),
-       (unicode : 1046; flag : umf_noinfo; reserved : 0),
-       (unicode : 1047; flag : umf_noinfo; reserved : 0),
-       (unicode : 1048; flag : umf_noinfo; reserved : 0),
-       (unicode : 1049; flag : umf_noinfo; reserved : 0),
-       (unicode : 1050; flag : umf_noinfo; reserved : 0),
-       (unicode : 1051; flag : umf_noinfo; reserved : 0),
-       (unicode : 1052; flag : umf_noinfo; reserved : 0),
-       (unicode : 1053; flag : umf_noinfo; reserved : 0),
-       (unicode : 1054; flag : umf_noinfo; reserved : 0),
-       (unicode : 1055; flag : umf_noinfo; reserved : 0),
-       (unicode : 1056; flag : umf_noinfo; reserved : 0),
-       (unicode : 1057; flag : umf_noinfo; reserved : 0),
-       (unicode : 1058; flag : umf_noinfo; reserved : 0),
-       (unicode : 1059; flag : umf_noinfo; reserved : 0),
-       (unicode : 1060; flag : umf_noinfo; reserved : 0),
-       (unicode : 1061; flag : umf_noinfo; reserved : 0),
-       (unicode : 1062; flag : umf_noinfo; reserved : 0),
-       (unicode : 1063; flag : umf_noinfo; reserved : 0),
-       (unicode : 1064; flag : umf_noinfo; reserved : 0),
-       (unicode : 1065; flag : umf_noinfo; reserved : 0),
-       (unicode : 1066; flag : umf_noinfo; reserved : 0),
-       (unicode : 1067; flag : umf_noinfo; reserved : 0),
-       (unicode : 1068; flag : umf_noinfo; reserved : 0),
-       (unicode : 1069; flag : umf_noinfo; reserved : 0),
-       (unicode : 1070; flag : umf_noinfo; reserved : 0),
-       (unicode : 1071; flag : umf_noinfo; reserved : 0),
-       (unicode : 1072; flag : umf_noinfo; reserved : 0),
-       (unicode : 1073; flag : umf_noinfo; reserved : 0),
-       (unicode : 1074; flag : umf_noinfo; reserved : 0),
-       (unicode : 1075; flag : umf_noinfo; reserved : 0),
-       (unicode : 1076; flag : umf_noinfo; reserved : 0),
-       (unicode : 1077; flag : umf_noinfo; reserved : 0),
-       (unicode : 1078; flag : umf_noinfo; reserved : 0),
-       (unicode : 1079; flag : umf_noinfo; reserved : 0),
-       (unicode : 1080; flag : umf_noinfo; reserved : 0),
-       (unicode : 1081; flag : umf_noinfo; reserved : 0),
-       (unicode : 1082; flag : umf_noinfo; reserved : 0),
-       (unicode : 1083; flag : umf_noinfo; reserved : 0),
-       (unicode : 1084; flag : umf_noinfo; reserved : 0),
-       (unicode : 1085; flag : umf_noinfo; reserved : 0),
-       (unicode : 1086; flag : umf_noinfo; reserved : 0),
-       (unicode : 1087; flag : umf_noinfo; reserved : 0),
-       (unicode : 9617; flag : umf_noinfo; reserved : 0),
-       (unicode : 9618; flag : umf_noinfo; reserved : 0),
-       (unicode : 9619; flag : umf_noinfo; reserved : 0),
-       (unicode : 9474; flag : umf_noinfo; reserved : 0),
-       (unicode : 9508; flag : umf_noinfo; reserved : 0),
-       (unicode : 9569; flag : umf_noinfo; reserved : 0),
-       (unicode : 9570; flag : umf_noinfo; reserved : 0),
-       (unicode : 9558; flag : umf_noinfo; reserved : 0),
-       (unicode : 9557; flag : umf_noinfo; reserved : 0),
-       (unicode : 9571; flag : umf_noinfo; reserved : 0),
-       (unicode : 9553; flag : umf_noinfo; reserved : 0),
-       (unicode : 9559; flag : umf_noinfo; reserved : 0),
-       (unicode : 9565; flag : umf_noinfo; reserved : 0),
-       (unicode : 9564; flag : umf_noinfo; reserved : 0),
-       (unicode : 9563; flag : umf_noinfo; reserved : 0),
-       (unicode : 9488; flag : umf_noinfo; reserved : 0),
-       (unicode : 9492; flag : umf_noinfo; reserved : 0),
-       (unicode : 9524; flag : umf_noinfo; reserved : 0),
-       (unicode : 9516; flag : umf_noinfo; reserved : 0),
-       (unicode : 9500; flag : umf_noinfo; reserved : 0),
-       (unicode : 9472; flag : umf_noinfo; reserved : 0),
-       (unicode : 9532; flag : umf_noinfo; reserved : 0),
-       (unicode : 9566; flag : umf_noinfo; reserved : 0),
-       (unicode : 9567; flag : umf_noinfo; reserved : 0),
-       (unicode : 9562; flag : umf_noinfo; reserved : 0),
-       (unicode : 9556; flag : umf_noinfo; reserved : 0),
-       (unicode : 9577; flag : umf_noinfo; reserved : 0),
-       (unicode : 9574; flag : umf_noinfo; reserved : 0),
-       (unicode : 9568; flag : umf_noinfo; reserved : 0),
-       (unicode : 9552; flag : umf_noinfo; reserved : 0),
-       (unicode : 9580; flag : umf_noinfo; reserved : 0),
-       (unicode : 9575; flag : umf_noinfo; reserved : 0),
-       (unicode : 9576; flag : umf_noinfo; reserved : 0),
-       (unicode : 9572; flag : umf_noinfo; reserved : 0),
-       (unicode : 9573; flag : umf_noinfo; reserved : 0),
-       (unicode : 9561; flag : umf_noinfo; reserved : 0),
-       (unicode : 9560; flag : umf_noinfo; reserved : 0),
-       (unicode : 9554; flag : umf_noinfo; reserved : 0),
-       (unicode : 9555; flag : umf_noinfo; reserved : 0),
-       (unicode : 9579; flag : umf_noinfo; reserved : 0),
-       (unicode : 9578; flag : umf_noinfo; reserved : 0),
-       (unicode : 9496; flag : umf_noinfo; reserved : 0),
-       (unicode : 9484; flag : umf_noinfo; reserved : 0),
-       (unicode : 9608; flag : umf_noinfo; reserved : 0),
-       (unicode : 9604; flag : umf_noinfo; reserved : 0),
-       (unicode : 9612; flag : umf_noinfo; reserved : 0),
-       (unicode : 9616; flag : umf_noinfo; reserved : 0),
-       (unicode : 9600; flag : umf_noinfo; reserved : 0),
-       (unicode : 1088; flag : umf_noinfo; reserved : 0),
-       (unicode : 1089; flag : umf_noinfo; reserved : 0),
-       (unicode : 1090; flag : umf_noinfo; reserved : 0),
-       (unicode : 1091; flag : umf_noinfo; reserved : 0),
-       (unicode : 1092; flag : umf_noinfo; reserved : 0),
-       (unicode : 1093; flag : umf_noinfo; reserved : 0),
-       (unicode : 1094; flag : umf_noinfo; reserved : 0),
-       (unicode : 1095; flag : umf_noinfo; reserved : 0),
-       (unicode : 1096; flag : umf_noinfo; reserved : 0),
-       (unicode : 1097; flag : umf_noinfo; reserved : 0),
-       (unicode : 1098; flag : umf_noinfo; reserved : 0),
-       (unicode : 1099; flag : umf_noinfo; reserved : 0),
-       (unicode : 1100; flag : umf_noinfo; reserved : 0),
-       (unicode : 1101; flag : umf_noinfo; reserved : 0),
-       (unicode : 1102; flag : umf_noinfo; reserved : 0),
-       (unicode : 1103; flag : umf_noinfo; reserved : 0),
-       (unicode : 1025; flag : umf_noinfo; reserved : 0),
-       (unicode : 1105; flag : umf_noinfo; reserved : 0),
-       (unicode : 1028; flag : umf_noinfo; reserved : 0),
-       (unicode : 1108; flag : umf_noinfo; reserved : 0),
-       (unicode : 1031; flag : umf_noinfo; reserved : 0),
-       (unicode : 1111; flag : umf_noinfo; reserved : 0),
-       (unicode : 1038; flag : umf_noinfo; reserved : 0),
-       (unicode : 1118; flag : umf_noinfo; reserved : 0),
-       (unicode : 176; flag : umf_noinfo; reserved : 0),
-       (unicode : 8729; flag : umf_noinfo; reserved : 0),
-       (unicode : 183; flag : umf_noinfo; reserved : 0),
-       (unicode : 8730; flag : umf_noinfo; reserved : 0),
-       (unicode : 8470; flag : umf_noinfo; reserved : 0),
-       (unicode : 164; flag : umf_noinfo; reserved : 0),
-       (unicode : 9632; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 1040; flag : umf_noinfo; reserved: 0),
+       (unicode : 1041; flag : umf_noinfo; reserved: 0),
+       (unicode : 1042; flag : umf_noinfo; reserved: 0),
+       (unicode : 1043; flag : umf_noinfo; reserved: 0),
+       (unicode : 1044; flag : umf_noinfo; reserved: 0),
+       (unicode : 1045; flag : umf_noinfo; reserved: 0),
+       (unicode : 1046; flag : umf_noinfo; reserved: 0),
+       (unicode : 1047; flag : umf_noinfo; reserved: 0),
+       (unicode : 1048; flag : umf_noinfo; reserved: 0),
+       (unicode : 1049; flag : umf_noinfo; reserved: 0),
+       (unicode : 1050; flag : umf_noinfo; reserved: 0),
+       (unicode : 1051; flag : umf_noinfo; reserved: 0),
+       (unicode : 1052; flag : umf_noinfo; reserved: 0),
+       (unicode : 1053; flag : umf_noinfo; reserved: 0),
+       (unicode : 1054; flag : umf_noinfo; reserved: 0),
+       (unicode : 1055; flag : umf_noinfo; reserved: 0),
+       (unicode : 1056; flag : umf_noinfo; reserved: 0),
+       (unicode : 1057; flag : umf_noinfo; reserved: 0),
+       (unicode : 1058; flag : umf_noinfo; reserved: 0),
+       (unicode : 1059; flag : umf_noinfo; reserved: 0),
+       (unicode : 1060; flag : umf_noinfo; reserved: 0),
+       (unicode : 1061; flag : umf_noinfo; reserved: 0),
+       (unicode : 1062; flag : umf_noinfo; reserved: 0),
+       (unicode : 1063; flag : umf_noinfo; reserved: 0),
+       (unicode : 1064; flag : umf_noinfo; reserved: 0),
+       (unicode : 1065; flag : umf_noinfo; reserved: 0),
+       (unicode : 1066; flag : umf_noinfo; reserved: 0),
+       (unicode : 1067; flag : umf_noinfo; reserved: 0),
+       (unicode : 1068; flag : umf_noinfo; reserved: 0),
+       (unicode : 1069; flag : umf_noinfo; reserved: 0),
+       (unicode : 1070; flag : umf_noinfo; reserved: 0),
+       (unicode : 1071; flag : umf_noinfo; reserved: 0),
+       (unicode : 1072; flag : umf_noinfo; reserved: 0),
+       (unicode : 1073; flag : umf_noinfo; reserved: 0),
+       (unicode : 1074; flag : umf_noinfo; reserved: 0),
+       (unicode : 1075; flag : umf_noinfo; reserved: 0),
+       (unicode : 1076; flag : umf_noinfo; reserved: 0),
+       (unicode : 1077; flag : umf_noinfo; reserved: 0),
+       (unicode : 1078; flag : umf_noinfo; reserved: 0),
+       (unicode : 1079; flag : umf_noinfo; reserved: 0),
+       (unicode : 1080; flag : umf_noinfo; reserved: 0),
+       (unicode : 1081; flag : umf_noinfo; reserved: 0),
+       (unicode : 1082; flag : umf_noinfo; reserved: 0),
+       (unicode : 1083; flag : umf_noinfo; reserved: 0),
+       (unicode : 1084; flag : umf_noinfo; reserved: 0),
+       (unicode : 1085; flag : umf_noinfo; reserved: 0),
+       (unicode : 1086; flag : umf_noinfo; reserved: 0),
+       (unicode : 1087; flag : umf_noinfo; reserved: 0),
+       (unicode : 9617; flag : umf_noinfo; reserved: 0),
+       (unicode : 9618; flag : umf_noinfo; reserved: 0),
+       (unicode : 9619; flag : umf_noinfo; reserved: 0),
+       (unicode : 9474; flag : umf_noinfo; reserved: 0),
+       (unicode : 9508; flag : umf_noinfo; reserved: 0),
+       (unicode : 9569; flag : umf_noinfo; reserved: 0),
+       (unicode : 9570; flag : umf_noinfo; reserved: 0),
+       (unicode : 9558; flag : umf_noinfo; reserved: 0),
+       (unicode : 9557; flag : umf_noinfo; reserved: 0),
+       (unicode : 9571; flag : umf_noinfo; reserved: 0),
+       (unicode : 9553; flag : umf_noinfo; reserved: 0),
+       (unicode : 9559; flag : umf_noinfo; reserved: 0),
+       (unicode : 9565; flag : umf_noinfo; reserved: 0),
+       (unicode : 9564; flag : umf_noinfo; reserved: 0),
+       (unicode : 9563; flag : umf_noinfo; reserved: 0),
+       (unicode : 9488; flag : umf_noinfo; reserved: 0),
+       (unicode : 9492; flag : umf_noinfo; reserved: 0),
+       (unicode : 9524; flag : umf_noinfo; reserved: 0),
+       (unicode : 9516; flag : umf_noinfo; reserved: 0),
+       (unicode : 9500; flag : umf_noinfo; reserved: 0),
+       (unicode : 9472; flag : umf_noinfo; reserved: 0),
+       (unicode : 9532; flag : umf_noinfo; reserved: 0),
+       (unicode : 9566; flag : umf_noinfo; reserved: 0),
+       (unicode : 9567; flag : umf_noinfo; reserved: 0),
+       (unicode : 9562; flag : umf_noinfo; reserved: 0),
+       (unicode : 9556; flag : umf_noinfo; reserved: 0),
+       (unicode : 9577; flag : umf_noinfo; reserved: 0),
+       (unicode : 9574; flag : umf_noinfo; reserved: 0),
+       (unicode : 9568; flag : umf_noinfo; reserved: 0),
+       (unicode : 9552; flag : umf_noinfo; reserved: 0),
+       (unicode : 9580; flag : umf_noinfo; reserved: 0),
+       (unicode : 9575; flag : umf_noinfo; reserved: 0),
+       (unicode : 9576; flag : umf_noinfo; reserved: 0),
+       (unicode : 9572; flag : umf_noinfo; reserved: 0),
+       (unicode : 9573; flag : umf_noinfo; reserved: 0),
+       (unicode : 9561; flag : umf_noinfo; reserved: 0),
+       (unicode : 9560; flag : umf_noinfo; reserved: 0),
+       (unicode : 9554; flag : umf_noinfo; reserved: 0),
+       (unicode : 9555; flag : umf_noinfo; reserved: 0),
+       (unicode : 9579; flag : umf_noinfo; reserved: 0),
+       (unicode : 9578; flag : umf_noinfo; reserved: 0),
+       (unicode : 9496; flag : umf_noinfo; reserved: 0),
+       (unicode : 9484; flag : umf_noinfo; reserved: 0),
+       (unicode : 9608; flag : umf_noinfo; reserved: 0),
+       (unicode : 9604; flag : umf_noinfo; reserved: 0),
+       (unicode : 9612; flag : umf_noinfo; reserved: 0),
+       (unicode : 9616; flag : umf_noinfo; reserved: 0),
+       (unicode : 9600; flag : umf_noinfo; reserved: 0),
+       (unicode : 1088; flag : umf_noinfo; reserved: 0),
+       (unicode : 1089; flag : umf_noinfo; reserved: 0),
+       (unicode : 1090; flag : umf_noinfo; reserved: 0),
+       (unicode : 1091; flag : umf_noinfo; reserved: 0),
+       (unicode : 1092; flag : umf_noinfo; reserved: 0),
+       (unicode : 1093; flag : umf_noinfo; reserved: 0),
+       (unicode : 1094; flag : umf_noinfo; reserved: 0),
+       (unicode : 1095; flag : umf_noinfo; reserved: 0),
+       (unicode : 1096; flag : umf_noinfo; reserved: 0),
+       (unicode : 1097; flag : umf_noinfo; reserved: 0),
+       (unicode : 1098; flag : umf_noinfo; reserved: 0),
+       (unicode : 1099; flag : umf_noinfo; reserved: 0),
+       (unicode : 1100; flag : umf_noinfo; reserved: 0),
+       (unicode : 1101; flag : umf_noinfo; reserved: 0),
+       (unicode : 1102; flag : umf_noinfo; reserved: 0),
+       (unicode : 1103; flag : umf_noinfo; reserved: 0),
+       (unicode : 1025; flag : umf_noinfo; reserved: 0),
+       (unicode : 1105; flag : umf_noinfo; reserved: 0),
+       (unicode : 1028; flag : umf_noinfo; reserved: 0),
+       (unicode : 1108; flag : umf_noinfo; reserved: 0),
+       (unicode : 1031; flag : umf_noinfo; reserved: 0),
+       (unicode : 1111; flag : umf_noinfo; reserved: 0),
+       (unicode : 1038; flag : umf_noinfo; reserved: 0),
+       (unicode : 1118; flag : umf_noinfo; reserved: 0),
+       (unicode : 176; flag : umf_noinfo; reserved: 0),
+       (unicode : 8729; flag : umf_noinfo; reserved: 0),
+       (unicode : 183; flag : umf_noinfo; reserved: 0),
+       (unicode : 8730; flag : umf_noinfo; reserved: 0),
+       (unicode : 8470; flag : umf_noinfo; reserved: 0),
+       (unicode : 164; flag : umf_noinfo; reserved: 0),
+       (unicode : 9632; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..255] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 160; char1 : 255; char2 : 0),
+       (unicode : 164; char1 : 253; char2 : 0),
+       (unicode : 176; char1 : 248; char2 : 0),
+       (unicode : 183; char1 : 250; char2 : 0),
+       (unicode : 1025; char1 : 240; char2 : 0),
+       (unicode : 1028; char1 : 242; char2 : 0),
+       (unicode : 1031; char1 : 244; char2 : 0),
+       (unicode : 1038; char1 : 246; char2 : 0),
+       (unicode : 1040; char1 : 128; char2 : 0),
+       (unicode : 1041; char1 : 129; char2 : 0),
+       (unicode : 1042; char1 : 130; char2 : 0),
+       (unicode : 1043; char1 : 131; char2 : 0),
+       (unicode : 1044; char1 : 132; char2 : 0),
+       (unicode : 1045; char1 : 133; char2 : 0),
+       (unicode : 1046; char1 : 134; char2 : 0),
+       (unicode : 1047; char1 : 135; char2 : 0),
+       (unicode : 1048; char1 : 136; char2 : 0),
+       (unicode : 1049; char1 : 137; char2 : 0),
+       (unicode : 1050; char1 : 138; char2 : 0),
+       (unicode : 1051; char1 : 139; char2 : 0),
+       (unicode : 1052; char1 : 140; char2 : 0),
+       (unicode : 1053; char1 : 141; char2 : 0),
+       (unicode : 1054; char1 : 142; char2 : 0),
+       (unicode : 1055; char1 : 143; char2 : 0),
+       (unicode : 1056; char1 : 144; char2 : 0),
+       (unicode : 1057; char1 : 145; char2 : 0),
+       (unicode : 1058; char1 : 146; char2 : 0),
+       (unicode : 1059; char1 : 147; char2 : 0),
+       (unicode : 1060; char1 : 148; char2 : 0),
+       (unicode : 1061; char1 : 149; char2 : 0),
+       (unicode : 1062; char1 : 150; char2 : 0),
+       (unicode : 1063; char1 : 151; char2 : 0),
+       (unicode : 1064; char1 : 152; char2 : 0),
+       (unicode : 1065; char1 : 153; char2 : 0),
+       (unicode : 1066; char1 : 154; char2 : 0),
+       (unicode : 1067; char1 : 155; char2 : 0),
+       (unicode : 1068; char1 : 156; char2 : 0),
+       (unicode : 1069; char1 : 157; char2 : 0),
+       (unicode : 1070; char1 : 158; char2 : 0),
+       (unicode : 1071; char1 : 159; char2 : 0),
+       (unicode : 1072; char1 : 160; char2 : 0),
+       (unicode : 1073; char1 : 161; char2 : 0),
+       (unicode : 1074; char1 : 162; char2 : 0),
+       (unicode : 1075; char1 : 163; char2 : 0),
+       (unicode : 1076; char1 : 164; char2 : 0),
+       (unicode : 1077; char1 : 165; char2 : 0),
+       (unicode : 1078; char1 : 166; char2 : 0),
+       (unicode : 1079; char1 : 167; char2 : 0),
+       (unicode : 1080; char1 : 168; char2 : 0),
+       (unicode : 1081; char1 : 169; char2 : 0),
+       (unicode : 1082; char1 : 170; char2 : 0),
+       (unicode : 1083; char1 : 171; char2 : 0),
+       (unicode : 1084; char1 : 172; char2 : 0),
+       (unicode : 1085; char1 : 173; char2 : 0),
+       (unicode : 1086; char1 : 174; char2 : 0),
+       (unicode : 1087; char1 : 175; char2 : 0),
+       (unicode : 1088; char1 : 224; char2 : 0),
+       (unicode : 1089; char1 : 225; char2 : 0),
+       (unicode : 1090; char1 : 226; char2 : 0),
+       (unicode : 1091; char1 : 227; char2 : 0),
+       (unicode : 1092; char1 : 228; char2 : 0),
+       (unicode : 1093; char1 : 229; char2 : 0),
+       (unicode : 1094; char1 : 230; char2 : 0),
+       (unicode : 1095; char1 : 231; char2 : 0),
+       (unicode : 1096; char1 : 232; char2 : 0),
+       (unicode : 1097; char1 : 233; char2 : 0),
+       (unicode : 1098; char1 : 234; char2 : 0),
+       (unicode : 1099; char1 : 235; char2 : 0),
+       (unicode : 1100; char1 : 236; char2 : 0),
+       (unicode : 1101; char1 : 237; char2 : 0),
+       (unicode : 1102; char1 : 238; char2 : 0),
+       (unicode : 1103; char1 : 239; char2 : 0),
+       (unicode : 1105; char1 : 241; char2 : 0),
+       (unicode : 1108; char1 : 243; char2 : 0),
+       (unicode : 1111; char1 : 245; char2 : 0),
+       (unicode : 1118; char1 : 247; char2 : 0),
+       (unicode : 8470; char1 : 252; char2 : 0),
+       (unicode : 8729; char1 : 249; char2 : 0),
+       (unicode : 8730; char1 : 251; char2 : 0),
+       (unicode : 9472; char1 : 196; char2 : 0),
+       (unicode : 9474; char1 : 179; char2 : 0),
+       (unicode : 9484; char1 : 218; char2 : 0),
+       (unicode : 9488; char1 : 191; char2 : 0),
+       (unicode : 9492; char1 : 192; char2 : 0),
+       (unicode : 9496; char1 : 217; char2 : 0),
+       (unicode : 9500; char1 : 195; char2 : 0),
+       (unicode : 9508; char1 : 180; char2 : 0),
+       (unicode : 9516; char1 : 194; char2 : 0),
+       (unicode : 9524; char1 : 193; char2 : 0),
+       (unicode : 9532; char1 : 197; char2 : 0),
+       (unicode : 9552; char1 : 205; char2 : 0),
+       (unicode : 9553; char1 : 186; char2 : 0),
+       (unicode : 9554; char1 : 213; char2 : 0),
+       (unicode : 9555; char1 : 214; char2 : 0),
+       (unicode : 9556; char1 : 201; char2 : 0),
+       (unicode : 9557; char1 : 184; char2 : 0),
+       (unicode : 9558; char1 : 183; char2 : 0),
+       (unicode : 9559; char1 : 187; char2 : 0),
+       (unicode : 9560; char1 : 212; char2 : 0),
+       (unicode : 9561; char1 : 211; char2 : 0),
+       (unicode : 9562; char1 : 200; char2 : 0),
+       (unicode : 9563; char1 : 190; char2 : 0),
+       (unicode : 9564; char1 : 189; char2 : 0),
+       (unicode : 9565; char1 : 188; char2 : 0),
+       (unicode : 9566; char1 : 198; char2 : 0),
+       (unicode : 9567; char1 : 199; char2 : 0),
+       (unicode : 9568; char1 : 204; char2 : 0),
+       (unicode : 9569; char1 : 181; char2 : 0),
+       (unicode : 9570; char1 : 182; char2 : 0),
+       (unicode : 9571; char1 : 185; char2 : 0),
+       (unicode : 9572; char1 : 209; char2 : 0),
+       (unicode : 9573; char1 : 210; char2 : 0),
+       (unicode : 9574; char1 : 203; char2 : 0),
+       (unicode : 9575; char1 : 207; char2 : 0),
+       (unicode : 9576; char1 : 208; char2 : 0),
+       (unicode : 9577; char1 : 202; char2 : 0),
+       (unicode : 9578; char1 : 216; char2 : 0),
+       (unicode : 9579; char1 : 215; char2 : 0),
+       (unicode : 9580; char1 : 206; char2 : 0),
+       (unicode : 9600; char1 : 223; char2 : 0),
+       (unicode : 9604; char1 : 220; char2 : 0),
+       (unicode : 9608; char1 : 219; char2 : 0),
+       (unicode : 9612; char1 : 221; char2 : 0),
+       (unicode : 9616; char1 : 222; char2 : 0),
+       (unicode : 9617; char1 : 176; char2 : 0),
+       (unicode : 9618; char1 : 177; char2 : 0),
+       (unicode : 9619; char1 : 178; char2 : 0),
+       (unicode : 9632; char1 : 254; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : 'cp866';
        cp : 866;
        map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 256;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 527 - 258
compiler/cp8859_1.pas

@@ -5,274 +5,543 @@ unit cp8859_1;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-    {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 128; flag : umf_noinfo; reserved : 0),
-       (unicode : 129; flag : umf_noinfo; reserved : 0),
-       (unicode : 130; flag : umf_noinfo; reserved : 0),
-       (unicode : 131; flag : umf_noinfo; reserved : 0),
-       (unicode : 132; flag : umf_noinfo; reserved : 0),
-       (unicode : 133; flag : umf_noinfo; reserved : 0),
-       (unicode : 134; flag : umf_noinfo; reserved : 0),
-       (unicode : 135; flag : umf_noinfo; reserved : 0),
-       (unicode : 136; flag : umf_noinfo; reserved : 0),
-       (unicode : 137; flag : umf_noinfo; reserved : 0),
-       (unicode : 138; flag : umf_noinfo; reserved : 0),
-       (unicode : 139; flag : umf_noinfo; reserved : 0),
-       (unicode : 140; flag : umf_noinfo; reserved : 0),
-       (unicode : 141; flag : umf_noinfo; reserved : 0),
-       (unicode : 142; flag : umf_noinfo; reserved : 0),
-       (unicode : 143; flag : umf_noinfo; reserved : 0),
-       (unicode : 144; flag : umf_noinfo; reserved : 0),
-       (unicode : 145; flag : umf_noinfo; reserved : 0),
-       (unicode : 146; flag : umf_noinfo; reserved : 0),
-       (unicode : 147; flag : umf_noinfo; reserved : 0),
-       (unicode : 148; flag : umf_noinfo; reserved : 0),
-       (unicode : 149; flag : umf_noinfo; reserved : 0),
-       (unicode : 150; flag : umf_noinfo; reserved : 0),
-       (unicode : 151; flag : umf_noinfo; reserved : 0),
-       (unicode : 152; flag : umf_noinfo; reserved : 0),
-       (unicode : 153; flag : umf_noinfo; reserved : 0),
-       (unicode : 154; flag : umf_noinfo; reserved : 0),
-       (unicode : 155; flag : umf_noinfo; reserved : 0),
-       (unicode : 156; flag : umf_noinfo; reserved : 0),
-       (unicode : 157; flag : umf_noinfo; reserved : 0),
-       (unicode : 158; flag : umf_noinfo; reserved : 0),
-       (unicode : 159; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0),
-       (unicode : 161; flag : umf_noinfo; reserved : 0),
-       (unicode : 162; flag : umf_noinfo; reserved : 0),
-       (unicode : 163; flag : umf_noinfo; reserved : 0),
-       (unicode : 164; flag : umf_noinfo; reserved : 0),
-       (unicode : 165; flag : umf_noinfo; reserved : 0),
-       (unicode : 166; flag : umf_noinfo; reserved : 0),
-       (unicode : 167; flag : umf_noinfo; reserved : 0),
-       (unicode : 168; flag : umf_noinfo; reserved : 0),
-       (unicode : 169; flag : umf_noinfo; reserved : 0),
-       (unicode : 170; flag : umf_noinfo; reserved : 0),
-       (unicode : 171; flag : umf_noinfo; reserved : 0),
-       (unicode : 172; flag : umf_noinfo; reserved : 0),
-       (unicode : 173; flag : umf_noinfo; reserved : 0),
-       (unicode : 174; flag : umf_noinfo; reserved : 0),
-       (unicode : 175; flag : umf_noinfo; reserved : 0),
-       (unicode : 176; flag : umf_noinfo; reserved : 0),
-       (unicode : 177; flag : umf_noinfo; reserved : 0),
-       (unicode : 178; flag : umf_noinfo; reserved : 0),
-       (unicode : 179; flag : umf_noinfo; reserved : 0),
-       (unicode : 180; flag : umf_noinfo; reserved : 0),
-       (unicode : 181; flag : umf_noinfo; reserved : 0),
-       (unicode : 182; flag : umf_noinfo; reserved : 0),
-       (unicode : 183; flag : umf_noinfo; reserved : 0),
-       (unicode : 184; flag : umf_noinfo; reserved : 0),
-       (unicode : 185; flag : umf_noinfo; reserved : 0),
-       (unicode : 186; flag : umf_noinfo; reserved : 0),
-       (unicode : 187; flag : umf_noinfo; reserved : 0),
-       (unicode : 188; flag : umf_noinfo; reserved : 0),
-       (unicode : 189; flag : umf_noinfo; reserved : 0),
-       (unicode : 190; flag : umf_noinfo; reserved : 0),
-       (unicode : 191; flag : umf_noinfo; reserved : 0),
-       (unicode : 192; flag : umf_noinfo; reserved : 0),
-       (unicode : 193; flag : umf_noinfo; reserved : 0),
-       (unicode : 194; flag : umf_noinfo; reserved : 0),
-       (unicode : 195; flag : umf_noinfo; reserved : 0),
-       (unicode : 196; flag : umf_noinfo; reserved : 0),
-       (unicode : 197; flag : umf_noinfo; reserved : 0),
-       (unicode : 198; flag : umf_noinfo; reserved : 0),
-       (unicode : 199; flag : umf_noinfo; reserved : 0),
-       (unicode : 200; flag : umf_noinfo; reserved : 0),
-       (unicode : 201; flag : umf_noinfo; reserved : 0),
-       (unicode : 202; flag : umf_noinfo; reserved : 0),
-       (unicode : 203; flag : umf_noinfo; reserved : 0),
-       (unicode : 204; flag : umf_noinfo; reserved : 0),
-       (unicode : 205; flag : umf_noinfo; reserved : 0),
-       (unicode : 206; flag : umf_noinfo; reserved : 0),
-       (unicode : 207; flag : umf_noinfo; reserved : 0),
-       (unicode : 208; flag : umf_noinfo; reserved : 0),
-       (unicode : 209; flag : umf_noinfo; reserved : 0),
-       (unicode : 210; flag : umf_noinfo; reserved : 0),
-       (unicode : 211; flag : umf_noinfo; reserved : 0),
-       (unicode : 212; flag : umf_noinfo; reserved : 0),
-       (unicode : 213; flag : umf_noinfo; reserved : 0),
-       (unicode : 214; flag : umf_noinfo; reserved : 0),
-       (unicode : 215; flag : umf_noinfo; reserved : 0),
-       (unicode : 216; flag : umf_noinfo; reserved : 0),
-       (unicode : 217; flag : umf_noinfo; reserved : 0),
-       (unicode : 218; flag : umf_noinfo; reserved : 0),
-       (unicode : 219; flag : umf_noinfo; reserved : 0),
-       (unicode : 220; flag : umf_noinfo; reserved : 0),
-       (unicode : 221; flag : umf_noinfo; reserved : 0),
-       (unicode : 222; flag : umf_noinfo; reserved : 0),
-       (unicode : 223; flag : umf_noinfo; reserved : 0),
-       (unicode : 224; flag : umf_noinfo; reserved : 0),
-       (unicode : 225; flag : umf_noinfo; reserved : 0),
-       (unicode : 226; flag : umf_noinfo; reserved : 0),
-       (unicode : 227; flag : umf_noinfo; reserved : 0),
-       (unicode : 228; flag : umf_noinfo; reserved : 0),
-       (unicode : 229; flag : umf_noinfo; reserved : 0),
-       (unicode : 230; flag : umf_noinfo; reserved : 0),
-       (unicode : 231; flag : umf_noinfo; reserved : 0),
-       (unicode : 232; flag : umf_noinfo; reserved : 0),
-       (unicode : 233; flag : umf_noinfo; reserved : 0),
-       (unicode : 234; flag : umf_noinfo; reserved : 0),
-       (unicode : 235; flag : umf_noinfo; reserved : 0),
-       (unicode : 236; flag : umf_noinfo; reserved : 0),
-       (unicode : 237; flag : umf_noinfo; reserved : 0),
-       (unicode : 238; flag : umf_noinfo; reserved : 0),
-       (unicode : 239; flag : umf_noinfo; reserved : 0),
-       (unicode : 240; flag : umf_noinfo; reserved : 0),
-       (unicode : 241; flag : umf_noinfo; reserved : 0),
-       (unicode : 242; flag : umf_noinfo; reserved : 0),
-       (unicode : 243; flag : umf_noinfo; reserved : 0),
-       (unicode : 244; flag : umf_noinfo; reserved : 0),
-       (unicode : 245; flag : umf_noinfo; reserved : 0),
-       (unicode : 246; flag : umf_noinfo; reserved : 0),
-       (unicode : 247; flag : umf_noinfo; reserved : 0),
-       (unicode : 248; flag : umf_noinfo; reserved : 0),
-       (unicode : 249; flag : umf_noinfo; reserved : 0),
-       (unicode : 250; flag : umf_noinfo; reserved : 0),
-       (unicode : 251; flag : umf_noinfo; reserved : 0),
-       (unicode : 252; flag : umf_noinfo; reserved : 0),
-       (unicode : 253; flag : umf_noinfo; reserved : 0),
-       (unicode : 254; flag : umf_noinfo; reserved : 0),
-       (unicode : 255; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 128; flag : umf_noinfo; reserved: 0),
+       (unicode : 129; flag : umf_noinfo; reserved: 0),
+       (unicode : 130; flag : umf_noinfo; reserved: 0),
+       (unicode : 131; flag : umf_noinfo; reserved: 0),
+       (unicode : 132; flag : umf_noinfo; reserved: 0),
+       (unicode : 133; flag : umf_noinfo; reserved: 0),
+       (unicode : 134; flag : umf_noinfo; reserved: 0),
+       (unicode : 135; flag : umf_noinfo; reserved: 0),
+       (unicode : 136; flag : umf_noinfo; reserved: 0),
+       (unicode : 137; flag : umf_noinfo; reserved: 0),
+       (unicode : 138; flag : umf_noinfo; reserved: 0),
+       (unicode : 139; flag : umf_noinfo; reserved: 0),
+       (unicode : 140; flag : umf_noinfo; reserved: 0),
+       (unicode : 141; flag : umf_noinfo; reserved: 0),
+       (unicode : 142; flag : umf_noinfo; reserved: 0),
+       (unicode : 143; flag : umf_noinfo; reserved: 0),
+       (unicode : 144; flag : umf_noinfo; reserved: 0),
+       (unicode : 145; flag : umf_noinfo; reserved: 0),
+       (unicode : 146; flag : umf_noinfo; reserved: 0),
+       (unicode : 147; flag : umf_noinfo; reserved: 0),
+       (unicode : 148; flag : umf_noinfo; reserved: 0),
+       (unicode : 149; flag : umf_noinfo; reserved: 0),
+       (unicode : 150; flag : umf_noinfo; reserved: 0),
+       (unicode : 151; flag : umf_noinfo; reserved: 0),
+       (unicode : 152; flag : umf_noinfo; reserved: 0),
+       (unicode : 153; flag : umf_noinfo; reserved: 0),
+       (unicode : 154; flag : umf_noinfo; reserved: 0),
+       (unicode : 155; flag : umf_noinfo; reserved: 0),
+       (unicode : 156; flag : umf_noinfo; reserved: 0),
+       (unicode : 157; flag : umf_noinfo; reserved: 0),
+       (unicode : 158; flag : umf_noinfo; reserved: 0),
+       (unicode : 159; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0),
+       (unicode : 161; flag : umf_noinfo; reserved: 0),
+       (unicode : 162; flag : umf_noinfo; reserved: 0),
+       (unicode : 163; flag : umf_noinfo; reserved: 0),
+       (unicode : 164; flag : umf_noinfo; reserved: 0),
+       (unicode : 165; flag : umf_noinfo; reserved: 0),
+       (unicode : 166; flag : umf_noinfo; reserved: 0),
+       (unicode : 167; flag : umf_noinfo; reserved: 0),
+       (unicode : 168; flag : umf_noinfo; reserved: 0),
+       (unicode : 169; flag : umf_noinfo; reserved: 0),
+       (unicode : 170; flag : umf_noinfo; reserved: 0),
+       (unicode : 171; flag : umf_noinfo; reserved: 0),
+       (unicode : 172; flag : umf_noinfo; reserved: 0),
+       (unicode : 173; flag : umf_noinfo; reserved: 0),
+       (unicode : 174; flag : umf_noinfo; reserved: 0),
+       (unicode : 175; flag : umf_noinfo; reserved: 0),
+       (unicode : 176; flag : umf_noinfo; reserved: 0),
+       (unicode : 177; flag : umf_noinfo; reserved: 0),
+       (unicode : 178; flag : umf_noinfo; reserved: 0),
+       (unicode : 179; flag : umf_noinfo; reserved: 0),
+       (unicode : 180; flag : umf_noinfo; reserved: 0),
+       (unicode : 181; flag : umf_noinfo; reserved: 0),
+       (unicode : 182; flag : umf_noinfo; reserved: 0),
+       (unicode : 183; flag : umf_noinfo; reserved: 0),
+       (unicode : 184; flag : umf_noinfo; reserved: 0),
+       (unicode : 185; flag : umf_noinfo; reserved: 0),
+       (unicode : 186; flag : umf_noinfo; reserved: 0),
+       (unicode : 187; flag : umf_noinfo; reserved: 0),
+       (unicode : 188; flag : umf_noinfo; reserved: 0),
+       (unicode : 189; flag : umf_noinfo; reserved: 0),
+       (unicode : 190; flag : umf_noinfo; reserved: 0),
+       (unicode : 191; flag : umf_noinfo; reserved: 0),
+       (unicode : 192; flag : umf_noinfo; reserved: 0),
+       (unicode : 193; flag : umf_noinfo; reserved: 0),
+       (unicode : 194; flag : umf_noinfo; reserved: 0),
+       (unicode : 195; flag : umf_noinfo; reserved: 0),
+       (unicode : 196; flag : umf_noinfo; reserved: 0),
+       (unicode : 197; flag : umf_noinfo; reserved: 0),
+       (unicode : 198; flag : umf_noinfo; reserved: 0),
+       (unicode : 199; flag : umf_noinfo; reserved: 0),
+       (unicode : 200; flag : umf_noinfo; reserved: 0),
+       (unicode : 201; flag : umf_noinfo; reserved: 0),
+       (unicode : 202; flag : umf_noinfo; reserved: 0),
+       (unicode : 203; flag : umf_noinfo; reserved: 0),
+       (unicode : 204; flag : umf_noinfo; reserved: 0),
+       (unicode : 205; flag : umf_noinfo; reserved: 0),
+       (unicode : 206; flag : umf_noinfo; reserved: 0),
+       (unicode : 207; flag : umf_noinfo; reserved: 0),
+       (unicode : 208; flag : umf_noinfo; reserved: 0),
+       (unicode : 209; flag : umf_noinfo; reserved: 0),
+       (unicode : 210; flag : umf_noinfo; reserved: 0),
+       (unicode : 211; flag : umf_noinfo; reserved: 0),
+       (unicode : 212; flag : umf_noinfo; reserved: 0),
+       (unicode : 213; flag : umf_noinfo; reserved: 0),
+       (unicode : 214; flag : umf_noinfo; reserved: 0),
+       (unicode : 215; flag : umf_noinfo; reserved: 0),
+       (unicode : 216; flag : umf_noinfo; reserved: 0),
+       (unicode : 217; flag : umf_noinfo; reserved: 0),
+       (unicode : 218; flag : umf_noinfo; reserved: 0),
+       (unicode : 219; flag : umf_noinfo; reserved: 0),
+       (unicode : 220; flag : umf_noinfo; reserved: 0),
+       (unicode : 221; flag : umf_noinfo; reserved: 0),
+       (unicode : 222; flag : umf_noinfo; reserved: 0),
+       (unicode : 223; flag : umf_noinfo; reserved: 0),
+       (unicode : 224; flag : umf_noinfo; reserved: 0),
+       (unicode : 225; flag : umf_noinfo; reserved: 0),
+       (unicode : 226; flag : umf_noinfo; reserved: 0),
+       (unicode : 227; flag : umf_noinfo; reserved: 0),
+       (unicode : 228; flag : umf_noinfo; reserved: 0),
+       (unicode : 229; flag : umf_noinfo; reserved: 0),
+       (unicode : 230; flag : umf_noinfo; reserved: 0),
+       (unicode : 231; flag : umf_noinfo; reserved: 0),
+       (unicode : 232; flag : umf_noinfo; reserved: 0),
+       (unicode : 233; flag : umf_noinfo; reserved: 0),
+       (unicode : 234; flag : umf_noinfo; reserved: 0),
+       (unicode : 235; flag : umf_noinfo; reserved: 0),
+       (unicode : 236; flag : umf_noinfo; reserved: 0),
+       (unicode : 237; flag : umf_noinfo; reserved: 0),
+       (unicode : 238; flag : umf_noinfo; reserved: 0),
+       (unicode : 239; flag : umf_noinfo; reserved: 0),
+       (unicode : 240; flag : umf_noinfo; reserved: 0),
+       (unicode : 241; flag : umf_noinfo; reserved: 0),
+       (unicode : 242; flag : umf_noinfo; reserved: 0),
+       (unicode : 243; flag : umf_noinfo; reserved: 0),
+       (unicode : 244; flag : umf_noinfo; reserved: 0),
+       (unicode : 245; flag : umf_noinfo; reserved: 0),
+       (unicode : 246; flag : umf_noinfo; reserved: 0),
+       (unicode : 247; flag : umf_noinfo; reserved: 0),
+       (unicode : 248; flag : umf_noinfo; reserved: 0),
+       (unicode : 249; flag : umf_noinfo; reserved: 0),
+       (unicode : 250; flag : umf_noinfo; reserved: 0),
+       (unicode : 251; flag : umf_noinfo; reserved: 0),
+       (unicode : 252; flag : umf_noinfo; reserved: 0),
+       (unicode : 253; flag : umf_noinfo; reserved: 0),
+       (unicode : 254; flag : umf_noinfo; reserved: 0),
+       (unicode : 255; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..255] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 128; char1 : 128; char2 : 0),
+       (unicode : 129; char1 : 129; char2 : 0),
+       (unicode : 130; char1 : 130; char2 : 0),
+       (unicode : 131; char1 : 131; char2 : 0),
+       (unicode : 132; char1 : 132; char2 : 0),
+       (unicode : 133; char1 : 133; char2 : 0),
+       (unicode : 134; char1 : 134; char2 : 0),
+       (unicode : 135; char1 : 135; char2 : 0),
+       (unicode : 136; char1 : 136; char2 : 0),
+       (unicode : 137; char1 : 137; char2 : 0),
+       (unicode : 138; char1 : 138; char2 : 0),
+       (unicode : 139; char1 : 139; char2 : 0),
+       (unicode : 140; char1 : 140; char2 : 0),
+       (unicode : 141; char1 : 141; char2 : 0),
+       (unicode : 142; char1 : 142; char2 : 0),
+       (unicode : 143; char1 : 143; char2 : 0),
+       (unicode : 144; char1 : 144; char2 : 0),
+       (unicode : 145; char1 : 145; char2 : 0),
+       (unicode : 146; char1 : 146; char2 : 0),
+       (unicode : 147; char1 : 147; char2 : 0),
+       (unicode : 148; char1 : 148; char2 : 0),
+       (unicode : 149; char1 : 149; char2 : 0),
+       (unicode : 150; char1 : 150; char2 : 0),
+       (unicode : 151; char1 : 151; char2 : 0),
+       (unicode : 152; char1 : 152; char2 : 0),
+       (unicode : 153; char1 : 153; char2 : 0),
+       (unicode : 154; char1 : 154; char2 : 0),
+       (unicode : 155; char1 : 155; char2 : 0),
+       (unicode : 156; char1 : 156; char2 : 0),
+       (unicode : 157; char1 : 157; char2 : 0),
+       (unicode : 158; char1 : 158; char2 : 0),
+       (unicode : 159; char1 : 159; char2 : 0),
+       (unicode : 160; char1 : 160; char2 : 0),
+       (unicode : 161; char1 : 161; char2 : 0),
+       (unicode : 162; char1 : 162; char2 : 0),
+       (unicode : 163; char1 : 163; char2 : 0),
+       (unicode : 164; char1 : 164; char2 : 0),
+       (unicode : 165; char1 : 165; char2 : 0),
+       (unicode : 166; char1 : 166; char2 : 0),
+       (unicode : 167; char1 : 167; char2 : 0),
+       (unicode : 168; char1 : 168; char2 : 0),
+       (unicode : 169; char1 : 169; char2 : 0),
+       (unicode : 170; char1 : 170; char2 : 0),
+       (unicode : 171; char1 : 171; char2 : 0),
+       (unicode : 172; char1 : 172; char2 : 0),
+       (unicode : 173; char1 : 173; char2 : 0),
+       (unicode : 174; char1 : 174; char2 : 0),
+       (unicode : 175; char1 : 175; char2 : 0),
+       (unicode : 176; char1 : 176; char2 : 0),
+       (unicode : 177; char1 : 177; char2 : 0),
+       (unicode : 178; char1 : 178; char2 : 0),
+       (unicode : 179; char1 : 179; char2 : 0),
+       (unicode : 180; char1 : 180; char2 : 0),
+       (unicode : 181; char1 : 181; char2 : 0),
+       (unicode : 182; char1 : 182; char2 : 0),
+       (unicode : 183; char1 : 183; char2 : 0),
+       (unicode : 184; char1 : 184; char2 : 0),
+       (unicode : 185; char1 : 185; char2 : 0),
+       (unicode : 186; char1 : 186; char2 : 0),
+       (unicode : 187; char1 : 187; char2 : 0),
+       (unicode : 188; char1 : 188; char2 : 0),
+       (unicode : 189; char1 : 189; char2 : 0),
+       (unicode : 190; char1 : 190; char2 : 0),
+       (unicode : 191; char1 : 191; char2 : 0),
+       (unicode : 192; char1 : 192; char2 : 0),
+       (unicode : 193; char1 : 193; char2 : 0),
+       (unicode : 194; char1 : 194; char2 : 0),
+       (unicode : 195; char1 : 195; char2 : 0),
+       (unicode : 196; char1 : 196; char2 : 0),
+       (unicode : 197; char1 : 197; char2 : 0),
+       (unicode : 198; char1 : 198; char2 : 0),
+       (unicode : 199; char1 : 199; char2 : 0),
+       (unicode : 200; char1 : 200; char2 : 0),
+       (unicode : 201; char1 : 201; char2 : 0),
+       (unicode : 202; char1 : 202; char2 : 0),
+       (unicode : 203; char1 : 203; char2 : 0),
+       (unicode : 204; char1 : 204; char2 : 0),
+       (unicode : 205; char1 : 205; char2 : 0),
+       (unicode : 206; char1 : 206; char2 : 0),
+       (unicode : 207; char1 : 207; char2 : 0),
+       (unicode : 208; char1 : 208; char2 : 0),
+       (unicode : 209; char1 : 209; char2 : 0),
+       (unicode : 210; char1 : 210; char2 : 0),
+       (unicode : 211; char1 : 211; char2 : 0),
+       (unicode : 212; char1 : 212; char2 : 0),
+       (unicode : 213; char1 : 213; char2 : 0),
+       (unicode : 214; char1 : 214; char2 : 0),
+       (unicode : 215; char1 : 215; char2 : 0),
+       (unicode : 216; char1 : 216; char2 : 0),
+       (unicode : 217; char1 : 217; char2 : 0),
+       (unicode : 218; char1 : 218; char2 : 0),
+       (unicode : 219; char1 : 219; char2 : 0),
+       (unicode : 220; char1 : 220; char2 : 0),
+       (unicode : 221; char1 : 221; char2 : 0),
+       (unicode : 222; char1 : 222; char2 : 0),
+       (unicode : 223; char1 : 223; char2 : 0),
+       (unicode : 224; char1 : 224; char2 : 0),
+       (unicode : 225; char1 : 225; char2 : 0),
+       (unicode : 226; char1 : 226; char2 : 0),
+       (unicode : 227; char1 : 227; char2 : 0),
+       (unicode : 228; char1 : 228; char2 : 0),
+       (unicode : 229; char1 : 229; char2 : 0),
+       (unicode : 230; char1 : 230; char2 : 0),
+       (unicode : 231; char1 : 231; char2 : 0),
+       (unicode : 232; char1 : 232; char2 : 0),
+       (unicode : 233; char1 : 233; char2 : 0),
+       (unicode : 234; char1 : 234; char2 : 0),
+       (unicode : 235; char1 : 235; char2 : 0),
+       (unicode : 236; char1 : 236; char2 : 0),
+       (unicode : 237; char1 : 237; char2 : 0),
+       (unicode : 238; char1 : 238; char2 : 0),
+       (unicode : 239; char1 : 239; char2 : 0),
+       (unicode : 240; char1 : 240; char2 : 0),
+       (unicode : 241; char1 : 241; char2 : 0),
+       (unicode : 242; char1 : 242; char2 : 0),
+       (unicode : 243; char1 : 243; char2 : 0),
+       (unicode : 244; char1 : 244; char2 : 0),
+       (unicode : 245; char1 : 245; char2 : 0),
+       (unicode : 246; char1 : 246; char2 : 0),
+       (unicode : 247; char1 : 247; char2 : 0),
+       (unicode : 248; char1 : 248; char2 : 0),
+       (unicode : 249; char1 : 249; char2 : 0),
+       (unicode : 250; char1 : 250; char2 : 0),
+       (unicode : 251; char1 : 251; char2 : 0),
+       (unicode : 252; char1 : 252; char2 : 0),
+       (unicode : 253; char1 : 253; char2 : 0),
+       (unicode : 254; char1 : 254; char2 : 0),
+       (unicode : 255; char1 : 255; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : '8859-1';
        cp : 28591;
-       map : @map[0];
+       map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 256;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 526 - 257
compiler/cp8859_5.pas

@@ -5,274 +5,543 @@ unit cp8859_5;
 
   implementation
 
+{$if FPC_FULLVERSION<20700}
+  {$DEFINE FPC_2_6_COMPAT}
+{$ifend}
+
   uses
-     {$if FPC_FULLVERSION<20700}ccharset{$else}charset{$endif};
+     {$ifdef FPC_2_6_COMPAT}ccharset{$else}charset{$endif};
 
   const
      map : array[0..255] of tunicodecharmapping = (
-       (unicode : 0; flag : umf_noinfo; reserved : 0),
-       (unicode : 1; flag : umf_noinfo; reserved : 0),
-       (unicode : 2; flag : umf_noinfo; reserved : 0),
-       (unicode : 3; flag : umf_noinfo; reserved : 0),
-       (unicode : 4; flag : umf_noinfo; reserved : 0),
-       (unicode : 5; flag : umf_noinfo; reserved : 0),
-       (unicode : 6; flag : umf_noinfo; reserved : 0),
-       (unicode : 7; flag : umf_noinfo; reserved : 0),
-       (unicode : 8; flag : umf_noinfo; reserved : 0),
-       (unicode : 9; flag : umf_noinfo; reserved : 0),
-       (unicode : 10; flag : umf_noinfo; reserved : 0),
-       (unicode : 11; flag : umf_noinfo; reserved : 0),
-       (unicode : 12; flag : umf_noinfo; reserved : 0),
-       (unicode : 13; flag : umf_noinfo; reserved : 0),
-       (unicode : 14; flag : umf_noinfo; reserved : 0),
-       (unicode : 15; flag : umf_noinfo; reserved : 0),
-       (unicode : 16; flag : umf_noinfo; reserved : 0),
-       (unicode : 17; flag : umf_noinfo; reserved : 0),
-       (unicode : 18; flag : umf_noinfo; reserved : 0),
-       (unicode : 19; flag : umf_noinfo; reserved : 0),
-       (unicode : 20; flag : umf_noinfo; reserved : 0),
-       (unicode : 21; flag : umf_noinfo; reserved : 0),
-       (unicode : 22; flag : umf_noinfo; reserved : 0),
-       (unicode : 23; flag : umf_noinfo; reserved : 0),
-       (unicode : 24; flag : umf_noinfo; reserved : 0),
-       (unicode : 25; flag : umf_noinfo; reserved : 0),
-       (unicode : 26; flag : umf_noinfo; reserved : 0),
-       (unicode : 27; flag : umf_noinfo; reserved : 0),
-       (unicode : 28; flag : umf_noinfo; reserved : 0),
-       (unicode : 29; flag : umf_noinfo; reserved : 0),
-       (unicode : 30; flag : umf_noinfo; reserved : 0),
-       (unicode : 31; flag : umf_noinfo; reserved : 0),
-       (unicode : 32; flag : umf_noinfo; reserved : 0),
-       (unicode : 33; flag : umf_noinfo; reserved : 0),
-       (unicode : 34; flag : umf_noinfo; reserved : 0),
-       (unicode : 35; flag : umf_noinfo; reserved : 0),
-       (unicode : 36; flag : umf_noinfo; reserved : 0),
-       (unicode : 37; flag : umf_noinfo; reserved : 0),
-       (unicode : 38; flag : umf_noinfo; reserved : 0),
-       (unicode : 39; flag : umf_noinfo; reserved : 0),
-       (unicode : 40; flag : umf_noinfo; reserved : 0),
-       (unicode : 41; flag : umf_noinfo; reserved : 0),
-       (unicode : 42; flag : umf_noinfo; reserved : 0),
-       (unicode : 43; flag : umf_noinfo; reserved : 0),
-       (unicode : 44; flag : umf_noinfo; reserved : 0),
-       (unicode : 45; flag : umf_noinfo; reserved : 0),
-       (unicode : 46; flag : umf_noinfo; reserved : 0),
-       (unicode : 47; flag : umf_noinfo; reserved : 0),
-       (unicode : 48; flag : umf_noinfo; reserved : 0),
-       (unicode : 49; flag : umf_noinfo; reserved : 0),
-       (unicode : 50; flag : umf_noinfo; reserved : 0),
-       (unicode : 51; flag : umf_noinfo; reserved : 0),
-       (unicode : 52; flag : umf_noinfo; reserved : 0),
-       (unicode : 53; flag : umf_noinfo; reserved : 0),
-       (unicode : 54; flag : umf_noinfo; reserved : 0),
-       (unicode : 55; flag : umf_noinfo; reserved : 0),
-       (unicode : 56; flag : umf_noinfo; reserved : 0),
-       (unicode : 57; flag : umf_noinfo; reserved : 0),
-       (unicode : 58; flag : umf_noinfo; reserved : 0),
-       (unicode : 59; flag : umf_noinfo; reserved : 0),
-       (unicode : 60; flag : umf_noinfo; reserved : 0),
-       (unicode : 61; flag : umf_noinfo; reserved : 0),
-       (unicode : 62; flag : umf_noinfo; reserved : 0),
-       (unicode : 63; flag : umf_noinfo; reserved : 0),
-       (unicode : 64; flag : umf_noinfo; reserved : 0),
-       (unicode : 65; flag : umf_noinfo; reserved : 0),
-       (unicode : 66; flag : umf_noinfo; reserved : 0),
-       (unicode : 67; flag : umf_noinfo; reserved : 0),
-       (unicode : 68; flag : umf_noinfo; reserved : 0),
-       (unicode : 69; flag : umf_noinfo; reserved : 0),
-       (unicode : 70; flag : umf_noinfo; reserved : 0),
-       (unicode : 71; flag : umf_noinfo; reserved : 0),
-       (unicode : 72; flag : umf_noinfo; reserved : 0),
-       (unicode : 73; flag : umf_noinfo; reserved : 0),
-       (unicode : 74; flag : umf_noinfo; reserved : 0),
-       (unicode : 75; flag : umf_noinfo; reserved : 0),
-       (unicode : 76; flag : umf_noinfo; reserved : 0),
-       (unicode : 77; flag : umf_noinfo; reserved : 0),
-       (unicode : 78; flag : umf_noinfo; reserved : 0),
-       (unicode : 79; flag : umf_noinfo; reserved : 0),
-       (unicode : 80; flag : umf_noinfo; reserved : 0),
-       (unicode : 81; flag : umf_noinfo; reserved : 0),
-       (unicode : 82; flag : umf_noinfo; reserved : 0),
-       (unicode : 83; flag : umf_noinfo; reserved : 0),
-       (unicode : 84; flag : umf_noinfo; reserved : 0),
-       (unicode : 85; flag : umf_noinfo; reserved : 0),
-       (unicode : 86; flag : umf_noinfo; reserved : 0),
-       (unicode : 87; flag : umf_noinfo; reserved : 0),
-       (unicode : 88; flag : umf_noinfo; reserved : 0),
-       (unicode : 89; flag : umf_noinfo; reserved : 0),
-       (unicode : 90; flag : umf_noinfo; reserved : 0),
-       (unicode : 91; flag : umf_noinfo; reserved : 0),
-       (unicode : 92; flag : umf_noinfo; reserved : 0),
-       (unicode : 93; flag : umf_noinfo; reserved : 0),
-       (unicode : 94; flag : umf_noinfo; reserved : 0),
-       (unicode : 95; flag : umf_noinfo; reserved : 0),
-       (unicode : 96; flag : umf_noinfo; reserved : 0),
-       (unicode : 97; flag : umf_noinfo; reserved : 0),
-       (unicode : 98; flag : umf_noinfo; reserved : 0),
-       (unicode : 99; flag : umf_noinfo; reserved : 0),
-       (unicode : 100; flag : umf_noinfo; reserved : 0),
-       (unicode : 101; flag : umf_noinfo; reserved : 0),
-       (unicode : 102; flag : umf_noinfo; reserved : 0),
-       (unicode : 103; flag : umf_noinfo; reserved : 0),
-       (unicode : 104; flag : umf_noinfo; reserved : 0),
-       (unicode : 105; flag : umf_noinfo; reserved : 0),
-       (unicode : 106; flag : umf_noinfo; reserved : 0),
-       (unicode : 107; flag : umf_noinfo; reserved : 0),
-       (unicode : 108; flag : umf_noinfo; reserved : 0),
-       (unicode : 109; flag : umf_noinfo; reserved : 0),
-       (unicode : 110; flag : umf_noinfo; reserved : 0),
-       (unicode : 111; flag : umf_noinfo; reserved : 0),
-       (unicode : 112; flag : umf_noinfo; reserved : 0),
-       (unicode : 113; flag : umf_noinfo; reserved : 0),
-       (unicode : 114; flag : umf_noinfo; reserved : 0),
-       (unicode : 115; flag : umf_noinfo; reserved : 0),
-       (unicode : 116; flag : umf_noinfo; reserved : 0),
-       (unicode : 117; flag : umf_noinfo; reserved : 0),
-       (unicode : 118; flag : umf_noinfo; reserved : 0),
-       (unicode : 119; flag : umf_noinfo; reserved : 0),
-       (unicode : 120; flag : umf_noinfo; reserved : 0),
-       (unicode : 121; flag : umf_noinfo; reserved : 0),
-       (unicode : 122; flag : umf_noinfo; reserved : 0),
-       (unicode : 123; flag : umf_noinfo; reserved : 0),
-       (unicode : 124; flag : umf_noinfo; reserved : 0),
-       (unicode : 125; flag : umf_noinfo; reserved : 0),
-       (unicode : 126; flag : umf_noinfo; reserved : 0),
-       (unicode : 127; flag : umf_noinfo; reserved : 0),
-       (unicode : 128; flag : umf_noinfo; reserved : 0),
-       (unicode : 129; flag : umf_noinfo; reserved : 0),
-       (unicode : 130; flag : umf_noinfo; reserved : 0),
-       (unicode : 131; flag : umf_noinfo; reserved : 0),
-       (unicode : 132; flag : umf_noinfo; reserved : 0),
-       (unicode : 133; flag : umf_noinfo; reserved : 0),
-       (unicode : 134; flag : umf_noinfo; reserved : 0),
-       (unicode : 135; flag : umf_noinfo; reserved : 0),
-       (unicode : 136; flag : umf_noinfo; reserved : 0),
-       (unicode : 137; flag : umf_noinfo; reserved : 0),
-       (unicode : 138; flag : umf_noinfo; reserved : 0),
-       (unicode : 139; flag : umf_noinfo; reserved : 0),
-       (unicode : 140; flag : umf_noinfo; reserved : 0),
-       (unicode : 141; flag : umf_noinfo; reserved : 0),
-       (unicode : 142; flag : umf_noinfo; reserved : 0),
-       (unicode : 143; flag : umf_noinfo; reserved : 0),
-       (unicode : 144; flag : umf_noinfo; reserved : 0),
-       (unicode : 145; flag : umf_noinfo; reserved : 0),
-       (unicode : 146; flag : umf_noinfo; reserved : 0),
-       (unicode : 147; flag : umf_noinfo; reserved : 0),
-       (unicode : 148; flag : umf_noinfo; reserved : 0),
-       (unicode : 149; flag : umf_noinfo; reserved : 0),
-       (unicode : 150; flag : umf_noinfo; reserved : 0),
-       (unicode : 151; flag : umf_noinfo; reserved : 0),
-       (unicode : 152; flag : umf_noinfo; reserved : 0),
-       (unicode : 153; flag : umf_noinfo; reserved : 0),
-       (unicode : 154; flag : umf_noinfo; reserved : 0),
-       (unicode : 155; flag : umf_noinfo; reserved : 0),
-       (unicode : 156; flag : umf_noinfo; reserved : 0),
-       (unicode : 157; flag : umf_noinfo; reserved : 0),
-       (unicode : 158; flag : umf_noinfo; reserved : 0),
-       (unicode : 159; flag : umf_noinfo; reserved : 0),
-       (unicode : 160; flag : umf_noinfo; reserved : 0),
-       (unicode : 1025; flag : umf_noinfo; reserved : 0),
-       (unicode : 1026; flag : umf_noinfo; reserved : 0),
-       (unicode : 1027; flag : umf_noinfo; reserved : 0),
-       (unicode : 1028; flag : umf_noinfo; reserved : 0),
-       (unicode : 1029; flag : umf_noinfo; reserved : 0),
-       (unicode : 1030; flag : umf_noinfo; reserved : 0),
-       (unicode : 1031; flag : umf_noinfo; reserved : 0),
-       (unicode : 1032; flag : umf_noinfo; reserved : 0),
-       (unicode : 1033; flag : umf_noinfo; reserved : 0),
-       (unicode : 1034; flag : umf_noinfo; reserved : 0),
-       (unicode : 1035; flag : umf_noinfo; reserved : 0),
-       (unicode : 1036; flag : umf_noinfo; reserved : 0),
-       (unicode : 173; flag : umf_noinfo; reserved : 0),
-       (unicode : 1038; flag : umf_noinfo; reserved : 0),
-       (unicode : 1039; flag : umf_noinfo; reserved : 0),
-       (unicode : 1040; flag : umf_noinfo; reserved : 0),
-       (unicode : 1041; flag : umf_noinfo; reserved : 0),
-       (unicode : 1042; flag : umf_noinfo; reserved : 0),
-       (unicode : 1043; flag : umf_noinfo; reserved : 0),
-       (unicode : 1044; flag : umf_noinfo; reserved : 0),
-       (unicode : 1045; flag : umf_noinfo; reserved : 0),
-       (unicode : 1046; flag : umf_noinfo; reserved : 0),
-       (unicode : 1047; flag : umf_noinfo; reserved : 0),
-       (unicode : 1048; flag : umf_noinfo; reserved : 0),
-       (unicode : 1049; flag : umf_noinfo; reserved : 0),
-       (unicode : 1050; flag : umf_noinfo; reserved : 0),
-       (unicode : 1051; flag : umf_noinfo; reserved : 0),
-       (unicode : 1052; flag : umf_noinfo; reserved : 0),
-       (unicode : 1053; flag : umf_noinfo; reserved : 0),
-       (unicode : 1054; flag : umf_noinfo; reserved : 0),
-       (unicode : 1055; flag : umf_noinfo; reserved : 0),
-       (unicode : 1056; flag : umf_noinfo; reserved : 0),
-       (unicode : 1057; flag : umf_noinfo; reserved : 0),
-       (unicode : 1058; flag : umf_noinfo; reserved : 0),
-       (unicode : 1059; flag : umf_noinfo; reserved : 0),
-       (unicode : 1060; flag : umf_noinfo; reserved : 0),
-       (unicode : 1061; flag : umf_noinfo; reserved : 0),
-       (unicode : 1062; flag : umf_noinfo; reserved : 0),
-       (unicode : 1063; flag : umf_noinfo; reserved : 0),
-       (unicode : 1064; flag : umf_noinfo; reserved : 0),
-       (unicode : 1065; flag : umf_noinfo; reserved : 0),
-       (unicode : 1066; flag : umf_noinfo; reserved : 0),
-       (unicode : 1067; flag : umf_noinfo; reserved : 0),
-       (unicode : 1068; flag : umf_noinfo; reserved : 0),
-       (unicode : 1069; flag : umf_noinfo; reserved : 0),
-       (unicode : 1070; flag : umf_noinfo; reserved : 0),
-       (unicode : 1071; flag : umf_noinfo; reserved : 0),
-       (unicode : 1072; flag : umf_noinfo; reserved : 0),
-       (unicode : 1073; flag : umf_noinfo; reserved : 0),
-       (unicode : 1074; flag : umf_noinfo; reserved : 0),
-       (unicode : 1075; flag : umf_noinfo; reserved : 0),
-       (unicode : 1076; flag : umf_noinfo; reserved : 0),
-       (unicode : 1077; flag : umf_noinfo; reserved : 0),
-       (unicode : 1078; flag : umf_noinfo; reserved : 0),
-       (unicode : 1079; flag : umf_noinfo; reserved : 0),
-       (unicode : 1080; flag : umf_noinfo; reserved : 0),
-       (unicode : 1081; flag : umf_noinfo; reserved : 0),
-       (unicode : 1082; flag : umf_noinfo; reserved : 0),
-       (unicode : 1083; flag : umf_noinfo; reserved : 0),
-       (unicode : 1084; flag : umf_noinfo; reserved : 0),
-       (unicode : 1085; flag : umf_noinfo; reserved : 0),
-       (unicode : 1086; flag : umf_noinfo; reserved : 0),
-       (unicode : 1087; flag : umf_noinfo; reserved : 0),
-       (unicode : 1088; flag : umf_noinfo; reserved : 0),
-       (unicode : 1089; flag : umf_noinfo; reserved : 0),
-       (unicode : 1090; flag : umf_noinfo; reserved : 0),
-       (unicode : 1091; flag : umf_noinfo; reserved : 0),
-       (unicode : 1092; flag : umf_noinfo; reserved : 0),
-       (unicode : 1093; flag : umf_noinfo; reserved : 0),
-       (unicode : 1094; flag : umf_noinfo; reserved : 0),
-       (unicode : 1095; flag : umf_noinfo; reserved : 0),
-       (unicode : 1096; flag : umf_noinfo; reserved : 0),
-       (unicode : 1097; flag : umf_noinfo; reserved : 0),
-       (unicode : 1098; flag : umf_noinfo; reserved : 0),
-       (unicode : 1099; flag : umf_noinfo; reserved : 0),
-       (unicode : 1100; flag : umf_noinfo; reserved : 0),
-       (unicode : 1101; flag : umf_noinfo; reserved : 0),
-       (unicode : 1102; flag : umf_noinfo; reserved : 0),
-       (unicode : 1103; flag : umf_noinfo; reserved : 0),
-       (unicode : 8470; flag : umf_noinfo; reserved : 0),
-       (unicode : 1105; flag : umf_noinfo; reserved : 0),
-       (unicode : 1106; flag : umf_noinfo; reserved : 0),
-       (unicode : 1107; flag : umf_noinfo; reserved : 0),
-       (unicode : 1108; flag : umf_noinfo; reserved : 0),
-       (unicode : 1109; flag : umf_noinfo; reserved : 0),
-       (unicode : 1110; flag : umf_noinfo; reserved : 0),
-       (unicode : 1111; flag : umf_noinfo; reserved : 0),
-       (unicode : 1112; flag : umf_noinfo; reserved : 0),
-       (unicode : 1113; flag : umf_noinfo; reserved : 0),
-       (unicode : 1114; flag : umf_noinfo; reserved : 0),
-       (unicode : 1115; flag : umf_noinfo; reserved : 0),
-       (unicode : 1116; flag : umf_noinfo; reserved : 0),
-       (unicode : 167; flag : umf_noinfo; reserved : 0),
-       (unicode : 1118; flag : umf_noinfo; reserved : 0),
-       (unicode : 1119; flag : umf_noinfo; reserved : 0)
+       (unicode : 0; flag : umf_noinfo; reserved: 0),
+       (unicode : 1; flag : umf_noinfo; reserved: 0),
+       (unicode : 2; flag : umf_noinfo; reserved: 0),
+       (unicode : 3; flag : umf_noinfo; reserved: 0),
+       (unicode : 4; flag : umf_noinfo; reserved: 0),
+       (unicode : 5; flag : umf_noinfo; reserved: 0),
+       (unicode : 6; flag : umf_noinfo; reserved: 0),
+       (unicode : 7; flag : umf_noinfo; reserved: 0),
+       (unicode : 8; flag : umf_noinfo; reserved: 0),
+       (unicode : 9; flag : umf_noinfo; reserved: 0),
+       (unicode : 10; flag : umf_noinfo; reserved: 0),
+       (unicode : 11; flag : umf_noinfo; reserved: 0),
+       (unicode : 12; flag : umf_noinfo; reserved: 0),
+       (unicode : 13; flag : umf_noinfo; reserved: 0),
+       (unicode : 14; flag : umf_noinfo; reserved: 0),
+       (unicode : 15; flag : umf_noinfo; reserved: 0),
+       (unicode : 16; flag : umf_noinfo; reserved: 0),
+       (unicode : 17; flag : umf_noinfo; reserved: 0),
+       (unicode : 18; flag : umf_noinfo; reserved: 0),
+       (unicode : 19; flag : umf_noinfo; reserved: 0),
+       (unicode : 20; flag : umf_noinfo; reserved: 0),
+       (unicode : 21; flag : umf_noinfo; reserved: 0),
+       (unicode : 22; flag : umf_noinfo; reserved: 0),
+       (unicode : 23; flag : umf_noinfo; reserved: 0),
+       (unicode : 24; flag : umf_noinfo; reserved: 0),
+       (unicode : 25; flag : umf_noinfo; reserved: 0),
+       (unicode : 26; flag : umf_noinfo; reserved: 0),
+       (unicode : 27; flag : umf_noinfo; reserved: 0),
+       (unicode : 28; flag : umf_noinfo; reserved: 0),
+       (unicode : 29; flag : umf_noinfo; reserved: 0),
+       (unicode : 30; flag : umf_noinfo; reserved: 0),
+       (unicode : 31; flag : umf_noinfo; reserved: 0),
+       (unicode : 32; flag : umf_noinfo; reserved: 0),
+       (unicode : 33; flag : umf_noinfo; reserved: 0),
+       (unicode : 34; flag : umf_noinfo; reserved: 0),
+       (unicode : 35; flag : umf_noinfo; reserved: 0),
+       (unicode : 36; flag : umf_noinfo; reserved: 0),
+       (unicode : 37; flag : umf_noinfo; reserved: 0),
+       (unicode : 38; flag : umf_noinfo; reserved: 0),
+       (unicode : 39; flag : umf_noinfo; reserved: 0),
+       (unicode : 40; flag : umf_noinfo; reserved: 0),
+       (unicode : 41; flag : umf_noinfo; reserved: 0),
+       (unicode : 42; flag : umf_noinfo; reserved: 0),
+       (unicode : 43; flag : umf_noinfo; reserved: 0),
+       (unicode : 44; flag : umf_noinfo; reserved: 0),
+       (unicode : 45; flag : umf_noinfo; reserved: 0),
+       (unicode : 46; flag : umf_noinfo; reserved: 0),
+       (unicode : 47; flag : umf_noinfo; reserved: 0),
+       (unicode : 48; flag : umf_noinfo; reserved: 0),
+       (unicode : 49; flag : umf_noinfo; reserved: 0),
+       (unicode : 50; flag : umf_noinfo; reserved: 0),
+       (unicode : 51; flag : umf_noinfo; reserved: 0),
+       (unicode : 52; flag : umf_noinfo; reserved: 0),
+       (unicode : 53; flag : umf_noinfo; reserved: 0),
+       (unicode : 54; flag : umf_noinfo; reserved: 0),
+       (unicode : 55; flag : umf_noinfo; reserved: 0),
+       (unicode : 56; flag : umf_noinfo; reserved: 0),
+       (unicode : 57; flag : umf_noinfo; reserved: 0),
+       (unicode : 58; flag : umf_noinfo; reserved: 0),
+       (unicode : 59; flag : umf_noinfo; reserved: 0),
+       (unicode : 60; flag : umf_noinfo; reserved: 0),
+       (unicode : 61; flag : umf_noinfo; reserved: 0),
+       (unicode : 62; flag : umf_noinfo; reserved: 0),
+       (unicode : 63; flag : umf_noinfo; reserved: 0),
+       (unicode : 64; flag : umf_noinfo; reserved: 0),
+       (unicode : 65; flag : umf_noinfo; reserved: 0),
+       (unicode : 66; flag : umf_noinfo; reserved: 0),
+       (unicode : 67; flag : umf_noinfo; reserved: 0),
+       (unicode : 68; flag : umf_noinfo; reserved: 0),
+       (unicode : 69; flag : umf_noinfo; reserved: 0),
+       (unicode : 70; flag : umf_noinfo; reserved: 0),
+       (unicode : 71; flag : umf_noinfo; reserved: 0),
+       (unicode : 72; flag : umf_noinfo; reserved: 0),
+       (unicode : 73; flag : umf_noinfo; reserved: 0),
+       (unicode : 74; flag : umf_noinfo; reserved: 0),
+       (unicode : 75; flag : umf_noinfo; reserved: 0),
+       (unicode : 76; flag : umf_noinfo; reserved: 0),
+       (unicode : 77; flag : umf_noinfo; reserved: 0),
+       (unicode : 78; flag : umf_noinfo; reserved: 0),
+       (unicode : 79; flag : umf_noinfo; reserved: 0),
+       (unicode : 80; flag : umf_noinfo; reserved: 0),
+       (unicode : 81; flag : umf_noinfo; reserved: 0),
+       (unicode : 82; flag : umf_noinfo; reserved: 0),
+       (unicode : 83; flag : umf_noinfo; reserved: 0),
+       (unicode : 84; flag : umf_noinfo; reserved: 0),
+       (unicode : 85; flag : umf_noinfo; reserved: 0),
+       (unicode : 86; flag : umf_noinfo; reserved: 0),
+       (unicode : 87; flag : umf_noinfo; reserved: 0),
+       (unicode : 88; flag : umf_noinfo; reserved: 0),
+       (unicode : 89; flag : umf_noinfo; reserved: 0),
+       (unicode : 90; flag : umf_noinfo; reserved: 0),
+       (unicode : 91; flag : umf_noinfo; reserved: 0),
+       (unicode : 92; flag : umf_noinfo; reserved: 0),
+       (unicode : 93; flag : umf_noinfo; reserved: 0),
+       (unicode : 94; flag : umf_noinfo; reserved: 0),
+       (unicode : 95; flag : umf_noinfo; reserved: 0),
+       (unicode : 96; flag : umf_noinfo; reserved: 0),
+       (unicode : 97; flag : umf_noinfo; reserved: 0),
+       (unicode : 98; flag : umf_noinfo; reserved: 0),
+       (unicode : 99; flag : umf_noinfo; reserved: 0),
+       (unicode : 100; flag : umf_noinfo; reserved: 0),
+       (unicode : 101; flag : umf_noinfo; reserved: 0),
+       (unicode : 102; flag : umf_noinfo; reserved: 0),
+       (unicode : 103; flag : umf_noinfo; reserved: 0),
+       (unicode : 104; flag : umf_noinfo; reserved: 0),
+       (unicode : 105; flag : umf_noinfo; reserved: 0),
+       (unicode : 106; flag : umf_noinfo; reserved: 0),
+       (unicode : 107; flag : umf_noinfo; reserved: 0),
+       (unicode : 108; flag : umf_noinfo; reserved: 0),
+       (unicode : 109; flag : umf_noinfo; reserved: 0),
+       (unicode : 110; flag : umf_noinfo; reserved: 0),
+       (unicode : 111; flag : umf_noinfo; reserved: 0),
+       (unicode : 112; flag : umf_noinfo; reserved: 0),
+       (unicode : 113; flag : umf_noinfo; reserved: 0),
+       (unicode : 114; flag : umf_noinfo; reserved: 0),
+       (unicode : 115; flag : umf_noinfo; reserved: 0),
+       (unicode : 116; flag : umf_noinfo; reserved: 0),
+       (unicode : 117; flag : umf_noinfo; reserved: 0),
+       (unicode : 118; flag : umf_noinfo; reserved: 0),
+       (unicode : 119; flag : umf_noinfo; reserved: 0),
+       (unicode : 120; flag : umf_noinfo; reserved: 0),
+       (unicode : 121; flag : umf_noinfo; reserved: 0),
+       (unicode : 122; flag : umf_noinfo; reserved: 0),
+       (unicode : 123; flag : umf_noinfo; reserved: 0),
+       (unicode : 124; flag : umf_noinfo; reserved: 0),
+       (unicode : 125; flag : umf_noinfo; reserved: 0),
+       (unicode : 126; flag : umf_noinfo; reserved: 0),
+       (unicode : 127; flag : umf_noinfo; reserved: 0),
+       (unicode : 128; flag : umf_noinfo; reserved: 0),
+       (unicode : 129; flag : umf_noinfo; reserved: 0),
+       (unicode : 130; flag : umf_noinfo; reserved: 0),
+       (unicode : 131; flag : umf_noinfo; reserved: 0),
+       (unicode : 132; flag : umf_noinfo; reserved: 0),
+       (unicode : 133; flag : umf_noinfo; reserved: 0),
+       (unicode : 134; flag : umf_noinfo; reserved: 0),
+       (unicode : 135; flag : umf_noinfo; reserved: 0),
+       (unicode : 136; flag : umf_noinfo; reserved: 0),
+       (unicode : 137; flag : umf_noinfo; reserved: 0),
+       (unicode : 138; flag : umf_noinfo; reserved: 0),
+       (unicode : 139; flag : umf_noinfo; reserved: 0),
+       (unicode : 140; flag : umf_noinfo; reserved: 0),
+       (unicode : 141; flag : umf_noinfo; reserved: 0),
+       (unicode : 142; flag : umf_noinfo; reserved: 0),
+       (unicode : 143; flag : umf_noinfo; reserved: 0),
+       (unicode : 144; flag : umf_noinfo; reserved: 0),
+       (unicode : 145; flag : umf_noinfo; reserved: 0),
+       (unicode : 146; flag : umf_noinfo; reserved: 0),
+       (unicode : 147; flag : umf_noinfo; reserved: 0),
+       (unicode : 148; flag : umf_noinfo; reserved: 0),
+       (unicode : 149; flag : umf_noinfo; reserved: 0),
+       (unicode : 150; flag : umf_noinfo; reserved: 0),
+       (unicode : 151; flag : umf_noinfo; reserved: 0),
+       (unicode : 152; flag : umf_noinfo; reserved: 0),
+       (unicode : 153; flag : umf_noinfo; reserved: 0),
+       (unicode : 154; flag : umf_noinfo; reserved: 0),
+       (unicode : 155; flag : umf_noinfo; reserved: 0),
+       (unicode : 156; flag : umf_noinfo; reserved: 0),
+       (unicode : 157; flag : umf_noinfo; reserved: 0),
+       (unicode : 158; flag : umf_noinfo; reserved: 0),
+       (unicode : 159; flag : umf_noinfo; reserved: 0),
+       (unicode : 160; flag : umf_noinfo; reserved: 0),
+       (unicode : 1025; flag : umf_noinfo; reserved: 0),
+       (unicode : 1026; flag : umf_noinfo; reserved: 0),
+       (unicode : 1027; flag : umf_noinfo; reserved: 0),
+       (unicode : 1028; flag : umf_noinfo; reserved: 0),
+       (unicode : 1029; flag : umf_noinfo; reserved: 0),
+       (unicode : 1030; flag : umf_noinfo; reserved: 0),
+       (unicode : 1031; flag : umf_noinfo; reserved: 0),
+       (unicode : 1032; flag : umf_noinfo; reserved: 0),
+       (unicode : 1033; flag : umf_noinfo; reserved: 0),
+       (unicode : 1034; flag : umf_noinfo; reserved: 0),
+       (unicode : 1035; flag : umf_noinfo; reserved: 0),
+       (unicode : 1036; flag : umf_noinfo; reserved: 0),
+       (unicode : 173; flag : umf_noinfo; reserved: 0),
+       (unicode : 1038; flag : umf_noinfo; reserved: 0),
+       (unicode : 1039; flag : umf_noinfo; reserved: 0),
+       (unicode : 1040; flag : umf_noinfo; reserved: 0),
+       (unicode : 1041; flag : umf_noinfo; reserved: 0),
+       (unicode : 1042; flag : umf_noinfo; reserved: 0),
+       (unicode : 1043; flag : umf_noinfo; reserved: 0),
+       (unicode : 1044; flag : umf_noinfo; reserved: 0),
+       (unicode : 1045; flag : umf_noinfo; reserved: 0),
+       (unicode : 1046; flag : umf_noinfo; reserved: 0),
+       (unicode : 1047; flag : umf_noinfo; reserved: 0),
+       (unicode : 1048; flag : umf_noinfo; reserved: 0),
+       (unicode : 1049; flag : umf_noinfo; reserved: 0),
+       (unicode : 1050; flag : umf_noinfo; reserved: 0),
+       (unicode : 1051; flag : umf_noinfo; reserved: 0),
+       (unicode : 1052; flag : umf_noinfo; reserved: 0),
+       (unicode : 1053; flag : umf_noinfo; reserved: 0),
+       (unicode : 1054; flag : umf_noinfo; reserved: 0),
+       (unicode : 1055; flag : umf_noinfo; reserved: 0),
+       (unicode : 1056; flag : umf_noinfo; reserved: 0),
+       (unicode : 1057; flag : umf_noinfo; reserved: 0),
+       (unicode : 1058; flag : umf_noinfo; reserved: 0),
+       (unicode : 1059; flag : umf_noinfo; reserved: 0),
+       (unicode : 1060; flag : umf_noinfo; reserved: 0),
+       (unicode : 1061; flag : umf_noinfo; reserved: 0),
+       (unicode : 1062; flag : umf_noinfo; reserved: 0),
+       (unicode : 1063; flag : umf_noinfo; reserved: 0),
+       (unicode : 1064; flag : umf_noinfo; reserved: 0),
+       (unicode : 1065; flag : umf_noinfo; reserved: 0),
+       (unicode : 1066; flag : umf_noinfo; reserved: 0),
+       (unicode : 1067; flag : umf_noinfo; reserved: 0),
+       (unicode : 1068; flag : umf_noinfo; reserved: 0),
+       (unicode : 1069; flag : umf_noinfo; reserved: 0),
+       (unicode : 1070; flag : umf_noinfo; reserved: 0),
+       (unicode : 1071; flag : umf_noinfo; reserved: 0),
+       (unicode : 1072; flag : umf_noinfo; reserved: 0),
+       (unicode : 1073; flag : umf_noinfo; reserved: 0),
+       (unicode : 1074; flag : umf_noinfo; reserved: 0),
+       (unicode : 1075; flag : umf_noinfo; reserved: 0),
+       (unicode : 1076; flag : umf_noinfo; reserved: 0),
+       (unicode : 1077; flag : umf_noinfo; reserved: 0),
+       (unicode : 1078; flag : umf_noinfo; reserved: 0),
+       (unicode : 1079; flag : umf_noinfo; reserved: 0),
+       (unicode : 1080; flag : umf_noinfo; reserved: 0),
+       (unicode : 1081; flag : umf_noinfo; reserved: 0),
+       (unicode : 1082; flag : umf_noinfo; reserved: 0),
+       (unicode : 1083; flag : umf_noinfo; reserved: 0),
+       (unicode : 1084; flag : umf_noinfo; reserved: 0),
+       (unicode : 1085; flag : umf_noinfo; reserved: 0),
+       (unicode : 1086; flag : umf_noinfo; reserved: 0),
+       (unicode : 1087; flag : umf_noinfo; reserved: 0),
+       (unicode : 1088; flag : umf_noinfo; reserved: 0),
+       (unicode : 1089; flag : umf_noinfo; reserved: 0),
+       (unicode : 1090; flag : umf_noinfo; reserved: 0),
+       (unicode : 1091; flag : umf_noinfo; reserved: 0),
+       (unicode : 1092; flag : umf_noinfo; reserved: 0),
+       (unicode : 1093; flag : umf_noinfo; reserved: 0),
+       (unicode : 1094; flag : umf_noinfo; reserved: 0),
+       (unicode : 1095; flag : umf_noinfo; reserved: 0),
+       (unicode : 1096; flag : umf_noinfo; reserved: 0),
+       (unicode : 1097; flag : umf_noinfo; reserved: 0),
+       (unicode : 1098; flag : umf_noinfo; reserved: 0),
+       (unicode : 1099; flag : umf_noinfo; reserved: 0),
+       (unicode : 1100; flag : umf_noinfo; reserved: 0),
+       (unicode : 1101; flag : umf_noinfo; reserved: 0),
+       (unicode : 1102; flag : umf_noinfo; reserved: 0),
+       (unicode : 1103; flag : umf_noinfo; reserved: 0),
+       (unicode : 8470; flag : umf_noinfo; reserved: 0),
+       (unicode : 1105; flag : umf_noinfo; reserved: 0),
+       (unicode : 1106; flag : umf_noinfo; reserved: 0),
+       (unicode : 1107; flag : umf_noinfo; reserved: 0),
+       (unicode : 1108; flag : umf_noinfo; reserved: 0),
+       (unicode : 1109; flag : umf_noinfo; reserved: 0),
+       (unicode : 1110; flag : umf_noinfo; reserved: 0),
+       (unicode : 1111; flag : umf_noinfo; reserved: 0),
+       (unicode : 1112; flag : umf_noinfo; reserved: 0),
+       (unicode : 1113; flag : umf_noinfo; reserved: 0),
+       (unicode : 1114; flag : umf_noinfo; reserved: 0),
+       (unicode : 1115; flag : umf_noinfo; reserved: 0),
+       (unicode : 1116; flag : umf_noinfo; reserved: 0),
+       (unicode : 167; flag : umf_noinfo; reserved: 0),
+       (unicode : 1118; flag : umf_noinfo; reserved: 0),
+       (unicode : 1119; flag : umf_noinfo; reserved: 0)
+     );
+
+  {$ifndef FPC_2_6_COMPAT}
+     reversemap : array[0..255] of treversecharmapping = (
+       (unicode : 0; char1 : 0; char2 : 0),
+       (unicode : 1; char1 : 1; char2 : 0),
+       (unicode : 2; char1 : 2; char2 : 0),
+       (unicode : 3; char1 : 3; char2 : 0),
+       (unicode : 4; char1 : 4; char2 : 0),
+       (unicode : 5; char1 : 5; char2 : 0),
+       (unicode : 6; char1 : 6; char2 : 0),
+       (unicode : 7; char1 : 7; char2 : 0),
+       (unicode : 8; char1 : 8; char2 : 0),
+       (unicode : 9; char1 : 9; char2 : 0),
+       (unicode : 10; char1 : 10; char2 : 0),
+       (unicode : 11; char1 : 11; char2 : 0),
+       (unicode : 12; char1 : 12; char2 : 0),
+       (unicode : 13; char1 : 13; char2 : 0),
+       (unicode : 14; char1 : 14; char2 : 0),
+       (unicode : 15; char1 : 15; char2 : 0),
+       (unicode : 16; char1 : 16; char2 : 0),
+       (unicode : 17; char1 : 17; char2 : 0),
+       (unicode : 18; char1 : 18; char2 : 0),
+       (unicode : 19; char1 : 19; char2 : 0),
+       (unicode : 20; char1 : 20; char2 : 0),
+       (unicode : 21; char1 : 21; char2 : 0),
+       (unicode : 22; char1 : 22; char2 : 0),
+       (unicode : 23; char1 : 23; char2 : 0),
+       (unicode : 24; char1 : 24; char2 : 0),
+       (unicode : 25; char1 : 25; char2 : 0),
+       (unicode : 26; char1 : 26; char2 : 0),
+       (unicode : 27; char1 : 27; char2 : 0),
+       (unicode : 28; char1 : 28; char2 : 0),
+       (unicode : 29; char1 : 29; char2 : 0),
+       (unicode : 30; char1 : 30; char2 : 0),
+       (unicode : 31; char1 : 31; char2 : 0),
+       (unicode : 32; char1 : 32; char2 : 0),
+       (unicode : 33; char1 : 33; char2 : 0),
+       (unicode : 34; char1 : 34; char2 : 0),
+       (unicode : 35; char1 : 35; char2 : 0),
+       (unicode : 36; char1 : 36; char2 : 0),
+       (unicode : 37; char1 : 37; char2 : 0),
+       (unicode : 38; char1 : 38; char2 : 0),
+       (unicode : 39; char1 : 39; char2 : 0),
+       (unicode : 40; char1 : 40; char2 : 0),
+       (unicode : 41; char1 : 41; char2 : 0),
+       (unicode : 42; char1 : 42; char2 : 0),
+       (unicode : 43; char1 : 43; char2 : 0),
+       (unicode : 44; char1 : 44; char2 : 0),
+       (unicode : 45; char1 : 45; char2 : 0),
+       (unicode : 46; char1 : 46; char2 : 0),
+       (unicode : 47; char1 : 47; char2 : 0),
+       (unicode : 48; char1 : 48; char2 : 0),
+       (unicode : 49; char1 : 49; char2 : 0),
+       (unicode : 50; char1 : 50; char2 : 0),
+       (unicode : 51; char1 : 51; char2 : 0),
+       (unicode : 52; char1 : 52; char2 : 0),
+       (unicode : 53; char1 : 53; char2 : 0),
+       (unicode : 54; char1 : 54; char2 : 0),
+       (unicode : 55; char1 : 55; char2 : 0),
+       (unicode : 56; char1 : 56; char2 : 0),
+       (unicode : 57; char1 : 57; char2 : 0),
+       (unicode : 58; char1 : 58; char2 : 0),
+       (unicode : 59; char1 : 59; char2 : 0),
+       (unicode : 60; char1 : 60; char2 : 0),
+       (unicode : 61; char1 : 61; char2 : 0),
+       (unicode : 62; char1 : 62; char2 : 0),
+       (unicode : 63; char1 : 63; char2 : 0),
+       (unicode : 64; char1 : 64; char2 : 0),
+       (unicode : 65; char1 : 65; char2 : 0),
+       (unicode : 66; char1 : 66; char2 : 0),
+       (unicode : 67; char1 : 67; char2 : 0),
+       (unicode : 68; char1 : 68; char2 : 0),
+       (unicode : 69; char1 : 69; char2 : 0),
+       (unicode : 70; char1 : 70; char2 : 0),
+       (unicode : 71; char1 : 71; char2 : 0),
+       (unicode : 72; char1 : 72; char2 : 0),
+       (unicode : 73; char1 : 73; char2 : 0),
+       (unicode : 74; char1 : 74; char2 : 0),
+       (unicode : 75; char1 : 75; char2 : 0),
+       (unicode : 76; char1 : 76; char2 : 0),
+       (unicode : 77; char1 : 77; char2 : 0),
+       (unicode : 78; char1 : 78; char2 : 0),
+       (unicode : 79; char1 : 79; char2 : 0),
+       (unicode : 80; char1 : 80; char2 : 0),
+       (unicode : 81; char1 : 81; char2 : 0),
+       (unicode : 82; char1 : 82; char2 : 0),
+       (unicode : 83; char1 : 83; char2 : 0),
+       (unicode : 84; char1 : 84; char2 : 0),
+       (unicode : 85; char1 : 85; char2 : 0),
+       (unicode : 86; char1 : 86; char2 : 0),
+       (unicode : 87; char1 : 87; char2 : 0),
+       (unicode : 88; char1 : 88; char2 : 0),
+       (unicode : 89; char1 : 89; char2 : 0),
+       (unicode : 90; char1 : 90; char2 : 0),
+       (unicode : 91; char1 : 91; char2 : 0),
+       (unicode : 92; char1 : 92; char2 : 0),
+       (unicode : 93; char1 : 93; char2 : 0),
+       (unicode : 94; char1 : 94; char2 : 0),
+       (unicode : 95; char1 : 95; char2 : 0),
+       (unicode : 96; char1 : 96; char2 : 0),
+       (unicode : 97; char1 : 97; char2 : 0),
+       (unicode : 98; char1 : 98; char2 : 0),
+       (unicode : 99; char1 : 99; char2 : 0),
+       (unicode : 100; char1 : 100; char2 : 0),
+       (unicode : 101; char1 : 101; char2 : 0),
+       (unicode : 102; char1 : 102; char2 : 0),
+       (unicode : 103; char1 : 103; char2 : 0),
+       (unicode : 104; char1 : 104; char2 : 0),
+       (unicode : 105; char1 : 105; char2 : 0),
+       (unicode : 106; char1 : 106; char2 : 0),
+       (unicode : 107; char1 : 107; char2 : 0),
+       (unicode : 108; char1 : 108; char2 : 0),
+       (unicode : 109; char1 : 109; char2 : 0),
+       (unicode : 110; char1 : 110; char2 : 0),
+       (unicode : 111; char1 : 111; char2 : 0),
+       (unicode : 112; char1 : 112; char2 : 0),
+       (unicode : 113; char1 : 113; char2 : 0),
+       (unicode : 114; char1 : 114; char2 : 0),
+       (unicode : 115; char1 : 115; char2 : 0),
+       (unicode : 116; char1 : 116; char2 : 0),
+       (unicode : 117; char1 : 117; char2 : 0),
+       (unicode : 118; char1 : 118; char2 : 0),
+       (unicode : 119; char1 : 119; char2 : 0),
+       (unicode : 120; char1 : 120; char2 : 0),
+       (unicode : 121; char1 : 121; char2 : 0),
+       (unicode : 122; char1 : 122; char2 : 0),
+       (unicode : 123; char1 : 123; char2 : 0),
+       (unicode : 124; char1 : 124; char2 : 0),
+       (unicode : 125; char1 : 125; char2 : 0),
+       (unicode : 126; char1 : 126; char2 : 0),
+       (unicode : 127; char1 : 127; char2 : 0),
+       (unicode : 128; char1 : 128; char2 : 0),
+       (unicode : 129; char1 : 129; char2 : 0),
+       (unicode : 130; char1 : 130; char2 : 0),
+       (unicode : 131; char1 : 131; char2 : 0),
+       (unicode : 132; char1 : 132; char2 : 0),
+       (unicode : 133; char1 : 133; char2 : 0),
+       (unicode : 134; char1 : 134; char2 : 0),
+       (unicode : 135; char1 : 135; char2 : 0),
+       (unicode : 136; char1 : 136; char2 : 0),
+       (unicode : 137; char1 : 137; char2 : 0),
+       (unicode : 138; char1 : 138; char2 : 0),
+       (unicode : 139; char1 : 139; char2 : 0),
+       (unicode : 140; char1 : 140; char2 : 0),
+       (unicode : 141; char1 : 141; char2 : 0),
+       (unicode : 142; char1 : 142; char2 : 0),
+       (unicode : 143; char1 : 143; char2 : 0),
+       (unicode : 144; char1 : 144; char2 : 0),
+       (unicode : 145; char1 : 145; char2 : 0),
+       (unicode : 146; char1 : 146; char2 : 0),
+       (unicode : 147; char1 : 147; char2 : 0),
+       (unicode : 148; char1 : 148; char2 : 0),
+       (unicode : 149; char1 : 149; char2 : 0),
+       (unicode : 150; char1 : 150; char2 : 0),
+       (unicode : 151; char1 : 151; char2 : 0),
+       (unicode : 152; char1 : 152; char2 : 0),
+       (unicode : 153; char1 : 153; char2 : 0),
+       (unicode : 154; char1 : 154; char2 : 0),
+       (unicode : 155; char1 : 155; char2 : 0),
+       (unicode : 156; char1 : 156; char2 : 0),
+       (unicode : 157; char1 : 157; char2 : 0),
+       (unicode : 158; char1 : 158; char2 : 0),
+       (unicode : 159; char1 : 159; char2 : 0),
+       (unicode : 160; char1 : 160; char2 : 0),
+       (unicode : 167; char1 : 253; char2 : 0),
+       (unicode : 173; char1 : 173; char2 : 0),
+       (unicode : 1025; char1 : 161; char2 : 0),
+       (unicode : 1026; char1 : 162; char2 : 0),
+       (unicode : 1027; char1 : 163; char2 : 0),
+       (unicode : 1028; char1 : 164; char2 : 0),
+       (unicode : 1029; char1 : 165; char2 : 0),
+       (unicode : 1030; char1 : 166; char2 : 0),
+       (unicode : 1031; char1 : 167; char2 : 0),
+       (unicode : 1032; char1 : 168; char2 : 0),
+       (unicode : 1033; char1 : 169; char2 : 0),
+       (unicode : 1034; char1 : 170; char2 : 0),
+       (unicode : 1035; char1 : 171; char2 : 0),
+       (unicode : 1036; char1 : 172; char2 : 0),
+       (unicode : 1038; char1 : 174; char2 : 0),
+       (unicode : 1039; char1 : 175; char2 : 0),
+       (unicode : 1040; char1 : 176; char2 : 0),
+       (unicode : 1041; char1 : 177; char2 : 0),
+       (unicode : 1042; char1 : 178; char2 : 0),
+       (unicode : 1043; char1 : 179; char2 : 0),
+       (unicode : 1044; char1 : 180; char2 : 0),
+       (unicode : 1045; char1 : 181; char2 : 0),
+       (unicode : 1046; char1 : 182; char2 : 0),
+       (unicode : 1047; char1 : 183; char2 : 0),
+       (unicode : 1048; char1 : 184; char2 : 0),
+       (unicode : 1049; char1 : 185; char2 : 0),
+       (unicode : 1050; char1 : 186; char2 : 0),
+       (unicode : 1051; char1 : 187; char2 : 0),
+       (unicode : 1052; char1 : 188; char2 : 0),
+       (unicode : 1053; char1 : 189; char2 : 0),
+       (unicode : 1054; char1 : 190; char2 : 0),
+       (unicode : 1055; char1 : 191; char2 : 0),
+       (unicode : 1056; char1 : 192; char2 : 0),
+       (unicode : 1057; char1 : 193; char2 : 0),
+       (unicode : 1058; char1 : 194; char2 : 0),
+       (unicode : 1059; char1 : 195; char2 : 0),
+       (unicode : 1060; char1 : 196; char2 : 0),
+       (unicode : 1061; char1 : 197; char2 : 0),
+       (unicode : 1062; char1 : 198; char2 : 0),
+       (unicode : 1063; char1 : 199; char2 : 0),
+       (unicode : 1064; char1 : 200; char2 : 0),
+       (unicode : 1065; char1 : 201; char2 : 0),
+       (unicode : 1066; char1 : 202; char2 : 0),
+       (unicode : 1067; char1 : 203; char2 : 0),
+       (unicode : 1068; char1 : 204; char2 : 0),
+       (unicode : 1069; char1 : 205; char2 : 0),
+       (unicode : 1070; char1 : 206; char2 : 0),
+       (unicode : 1071; char1 : 207; char2 : 0),
+       (unicode : 1072; char1 : 208; char2 : 0),
+       (unicode : 1073; char1 : 209; char2 : 0),
+       (unicode : 1074; char1 : 210; char2 : 0),
+       (unicode : 1075; char1 : 211; char2 : 0),
+       (unicode : 1076; char1 : 212; char2 : 0),
+       (unicode : 1077; char1 : 213; char2 : 0),
+       (unicode : 1078; char1 : 214; char2 : 0),
+       (unicode : 1079; char1 : 215; char2 : 0),
+       (unicode : 1080; char1 : 216; char2 : 0),
+       (unicode : 1081; char1 : 217; char2 : 0),
+       (unicode : 1082; char1 : 218; char2 : 0),
+       (unicode : 1083; char1 : 219; char2 : 0),
+       (unicode : 1084; char1 : 220; char2 : 0),
+       (unicode : 1085; char1 : 221; char2 : 0),
+       (unicode : 1086; char1 : 222; char2 : 0),
+       (unicode : 1087; char1 : 223; char2 : 0),
+       (unicode : 1088; char1 : 224; char2 : 0),
+       (unicode : 1089; char1 : 225; char2 : 0),
+       (unicode : 1090; char1 : 226; char2 : 0),
+       (unicode : 1091; char1 : 227; char2 : 0),
+       (unicode : 1092; char1 : 228; char2 : 0),
+       (unicode : 1093; char1 : 229; char2 : 0),
+       (unicode : 1094; char1 : 230; char2 : 0),
+       (unicode : 1095; char1 : 231; char2 : 0),
+       (unicode : 1096; char1 : 232; char2 : 0),
+       (unicode : 1097; char1 : 233; char2 : 0),
+       (unicode : 1098; char1 : 234; char2 : 0),
+       (unicode : 1099; char1 : 235; char2 : 0),
+       (unicode : 1100; char1 : 236; char2 : 0),
+       (unicode : 1101; char1 : 237; char2 : 0),
+       (unicode : 1102; char1 : 238; char2 : 0),
+       (unicode : 1103; char1 : 239; char2 : 0),
+       (unicode : 1105; char1 : 241; char2 : 0),
+       (unicode : 1106; char1 : 242; char2 : 0),
+       (unicode : 1107; char1 : 243; char2 : 0),
+       (unicode : 1108; char1 : 244; char2 : 0),
+       (unicode : 1109; char1 : 245; char2 : 0),
+       (unicode : 1110; char1 : 246; char2 : 0),
+       (unicode : 1111; char1 : 247; char2 : 0),
+       (unicode : 1112; char1 : 248; char2 : 0),
+       (unicode : 1113; char1 : 249; char2 : 0),
+       (unicode : 1114; char1 : 250; char2 : 0),
+       (unicode : 1115; char1 : 251; char2 : 0),
+       (unicode : 1116; char1 : 252; char2 : 0),
+       (unicode : 1118; char1 : 254; char2 : 0),
+       (unicode : 1119; char1 : 255; char2 : 0),
+       (unicode : 8470; char1 : 240; char2 : 0)
      );
+  {$endif}
 
      unicodemap : tunicodemap = (
        cpname : '8859-5';
        cp : 28595;
        map : @map;
        lastchar : 255;
+  {$ifndef FPC_2_6_COMPAT}
+       reversemap : @reversemap;
+       reversemaplength : 256;
+  {$endif}
        next : nil;
        internalmap : true
      );

+ 278 - 69
rtl/inc/charset.pp

@@ -14,6 +14,7 @@
 
  **********************************************************************}
 {$mode objfpc}
+{$pointermath on}
 unit charset;
 
   interface
@@ -36,12 +37,21 @@ unit charset;
           reserved : byte;
        end;
 
+       preversecharmapping = ^treversecharmapping;
+       treversecharmapping = record
+          unicode : tunicodechar;
+          char1   : Byte;
+          char2   : Byte;
+       end;
+
        punicodemap = ^tunicodemap;
        tunicodemap = record
           cpname : string[20];
           cp : word;
           map : punicodecharmapping;
           lastchar : longint;
+          reversemap : preversecharmapping;
+          reversemaplength : longint;
           next : punicodemap;
           internalmap : boolean;
        end;
@@ -53,9 +63,9 @@ unit charset;
     procedure registermapping(p : punicodemap);
     function getmap(const s : string) : punicodemap; 
     function getmap(cp : word) : punicodemap;   
-    function mappingavailable(const s : string) : boolean;
-    function mappingavailable(cp :word) : boolean;
-    function getunicode(c : char;p : punicodemap) : tunicodechar;
+    function mappingavailable(const s : string) : boolean;inline;
+    function mappingavailable(cp :word) : boolean;inline;
+    function getunicode(c : char;p : punicodemap) : tunicodechar;inline;
     function getunicode(
       AAnsiStr : pansichar;
       AAnsiLen : SizeInt;
@@ -73,6 +83,188 @@ unit charset;
     var
        mappings : punicodemap;
 
+
+    procedure QuickSort(AList: preversecharmapping; L, R : Longint);
+    var
+      I, J : Longint;
+      P, Q : treversecharmapping;
+    begin
+      repeat
+        I:=L;
+        J:=R;
+        P:=AList[(L + R) div 2];
+        repeat
+          while (P.unicode-AList[I].unicode) > 0 do
+            I:=I+1;
+          while (P.unicode-AList[J].unicode) < 0 do
+            J:=J-1;
+          if I<=J then
+            begin
+              Q:=AList[I];
+              AList[I]:=AList[J];
+              AList[J]:=Q;
+              I:=I+1;
+              J:=J-1;
+            end;
+        until I > J;
+        if J-L < R-I then
+          begin
+            if L<J then
+              QuickSort(AList, L, J);
+            L:=I;
+          end
+        else
+          begin
+            if I < R then
+              QuickSort(AList, I, R);
+            R:=J;
+          end;
+      until L>=R;
+    end;
+
+    function find(
+      const c     : tunicodechar;
+      const AData : preversecharmapping;
+      const ALen  : SizeInt
+    ) : preversecharmapping;overload;
+    var
+       l, h, m : longint;
+       r:preversecharmapping;
+    begin
+      if ALen=0 then
+        exit(nil);
+      r:=AData;
+      l:=0;
+      h:=ALen-1;
+      while l<h do begin
+        m:=(l+h) div 2;
+        if r[m].unicode<c then
+          l:=m+1
+        else
+          h:=m;
+      end;
+      if (l=h) and (r[l].unicode=c) then
+        Result:=@r[l]
+      else
+        Result:=nil;
+    end;
+
+    function find(
+      const c : tunicodechar;
+      const p : punicodemap
+    ) : preversecharmapping;overload;inline;
+    begin
+      Result:=find(c,p^.reversemap,p^.reversemaplength);
+    end;
+
+    function RemoveDuplicates(
+      const AData      : preversecharmapping;
+      const ALen       : SizeInt;
+      out   AResultLen : SizeInt
+    ) : preversecharmapping;
+    var
+      r0, r, p, t : preversecharmapping;
+      i, c, actualCount : SizeInt;
+    begin
+      c:=ALen;
+      GetMem(r0,c*SizeOf(treversecharmapping));
+      r:=r0;
+      p:=AData;
+      actualCount:=0;
+      i:=0;
+      while i<c do
+        begin
+          t:=find(p^.unicode,r0,actualCount);
+          if t=nil then
+            begin
+              r^:=p^;
+              actualCount:=actualCount+1;
+              Inc(r);
+            end
+          else
+            begin
+              if (p^.char1<t^.char1) or
+                 ((p^.char1=t^.char1) and (p^.char2<t^.char2))
+              then
+                t^:=p^;//keep the first mapping
+            end;
+          i:=i+1;
+          Inc(p);
+        end;
+      if c<>actualCount then
+        ReAllocMem(r0,actualCount*SizeOf(treversecharmapping));
+      AResultLen:=actualCount;
+      Result:=r0;
+    end;
+
+    function buildreversemap(
+      const AMapping   : punicodecharmapping;
+      const ALen       : SizeInt;
+      out   AResultLen : SizeInt
+    ) : preversecharmapping;
+    var
+      r0, r, t : preversecharmapping;
+      i, c, actualCount, ti : LongInt;
+      p : punicodecharmapping;
+    begin
+      if (ALen<1) then
+        exit(nil);
+      p:=AMapping;
+      c:=ALen;
+      GetMem(r0,c*SizeOf(treversecharmapping));
+      r:=r0;
+      actualCount:=0;
+      i:=0;
+      while i<c do
+        begin
+          if (p^.flag=umf_noinfo) then
+            begin
+              r^.unicode:=p^.unicode;
+              if i<=High(Byte) then
+                begin
+                  r^.char1:=i;
+                  r^.char2:=0;
+                end
+              else
+                begin
+                  r^.char1:=i div 256;
+                  r^.char2:=i mod 256;
+                end;
+              actualCount:=actualCount+1;
+              Inc(r);
+            end;
+          Inc(p);
+          i:=i+1;
+        end;
+      if c<>actualCount then
+        ReAllocMem(r0,actualCount*SizeOf(treversecharmapping));
+      if actualCount>1 then
+        begin
+          QuickSort(r0,0,(actualCount-1));
+          t:=RemoveDuplicates(r0,actualCount,ti);
+          FreeMem(r0,actualCount*SizeOf(treversecharmapping));
+          r0:=t;
+          actualCount:=ti;
+        end;
+      AResultLen:=actualCount;
+      Result:=r0;
+    end;
+
+    procedure inititems(const p : punicodecharmapping; const ALen : SizeInt);
+    const
+      INIT_ITEM : tunicodecharmapping = (unicode:0; flag:umf_unused; reserved:0);
+    var
+      x : punicodecharmapping;
+      i : LongInt;
+    begin
+      x:=p;
+      for i:=0 to ALen-1 do
+        begin
+          x^:=INIT_ITEM;
+          Inc(x);
+        end;
+    end;
+
     function loadunicodemapping(const cpname,f : string; cp :word) : punicodemap;
 
       var
@@ -84,13 +276,14 @@ unit charset;
          code : word;
          flag : tunicodecharmappingflag;
          p : punicodemap;
-         lastchar : longint;
+         lastchar, i : longint;
 
       begin
          lastchar:=-1;
          loadunicodemapping:=nil;
          datasize:=256;
-         getmem(data,sizeof(tunicodecharmapping)*datasize);
+         GetMem(data,sizeof(tunicodecharmapping)*datasize);
+         inititems(data,datasize);
          assign(t,f);
          {$I-}
          reset(t);
@@ -153,8 +346,10 @@ unit charset;
                              { if we need more than 256 entries it's    }
                              { probably a mbcs with a lot of            }
                              { entries                                  }
-                             datasize:=charpos+1024;
+                             i:=datasize;
+                             datasize:=charpos+8*1024;
                              reallocmem(data,sizeof(tunicodecharmapping)*datasize);
+                             inititems(@data[i],(datasize-i));
                           end;
                         flag:=umf_noinfo;
                      end;
@@ -172,6 +367,7 @@ unit charset;
          p^.internalmap:=false;
          p^.next:=nil;
          p^.map:=data;
+         p^.reversemap:=buildreversemap(p^.map,(p^.lastchar+1),p^.reversemaplength);
          loadunicodemapping:=p;
       end;
 
@@ -182,19 +378,22 @@ unit charset;
          mappings:=p;
       end;
 
+    {$ifdef FPC_HAS_FEATURE_THREADING}
+    threadvar
+    {$else FPC_HAS_FEATURE_THREADING}
+    var
+    {$endif FPC_HAS_FEATURE_THREADING}
+      strmapcache : string;
+      strmapcachep : punicodemap;
     function getmap(const s : string) : punicodemap;
 
       var
          hp : punicodemap;
 
-      const
-         mapcache : string = '';
-         mapcachep : punicodemap = nil;
-
       begin
-         if (mapcache=s) and assigned(mapcachep) and (mapcachep^.cpname=s) then
+         if (strmapcache=s) and assigned(strmapcachep) and (strmapcachep^.cpname=s) then
            begin
-              getmap:=mapcachep;
+              getmap:=strmapcachep;
               exit;
            end;
          hp:=mappings;
@@ -203,8 +402,8 @@ unit charset;
               if hp^.cpname=s then
                 begin
                    getmap:=hp;
-                   mapcache:=s;
-                   mapcachep:=hp;
+                   strmapcache:=s;
+                   strmapcachep:=hp;
                    exit;
                 end;
               hp:=hp^.next;
@@ -212,19 +411,23 @@ unit charset;
          getmap:=nil;
       end;////////
 
+
+    {$ifdef FPC_HAS_FEATURE_THREADING}
+    threadvar
+    {$else FPC_HAS_FEATURE_THREADING}
+    var
+    {$endif FPC_HAS_FEATURE_THREADING}
+      intmapcache : word;
+      intmapcachep : punicodemap;
     function getmap(cp : word) : punicodemap;
 
       var
          hp : punicodemap;
 
-      const
-         mapcache : word = 0;
-         mapcachep : punicodemap = nil;
-
       begin
-         if (mapcache=cp) and assigned(mapcachep) and (mapcachep^.cp=cp) then
+         if (intmapcache=cp) and assigned(intmapcachep) and (intmapcachep^.cp=cp) then
            begin
-              getmap:=mapcachep;
+              getmap:=intmapcachep;
               exit;
            end;
          hp:=mappings;
@@ -233,8 +436,8 @@ unit charset;
               if hp^.cp=cp then
                 begin
                    getmap:=hp;
-                   mapcache:=cp;
-                   mapcachep:=hp;
+                   intmapcache:=cp;
+                   intmapcachep:=hp;
                    exit;
                 end;
               hp:=hp^.next;
@@ -289,7 +492,10 @@ unit charset;
                 if (ord(ps^)<=AMap^.lastchar) then
                   begin
                     if (AMap^.map[ord(ps^)].flag=umf_leadbyte) and (i<c) then
-                      Inc(ps);
+                      begin
+                        Inc(ps);
+                        i:=i+1;
+                      end;
                   end;  
                 i:=i+1;  
                 Inc(ps);
@@ -311,6 +517,7 @@ unit charset;
                       begin
                         k:=(Ord(ps^)*256);
                         Inc(ps);
+                        i:=i+1;
                         k:=k+Ord(ps^);
                         if (k<=AMap^.lastchar) then
                           pd^:=AMap^.map[k].unicode
@@ -333,68 +540,69 @@ unit charset;
       end;
 
     function getascii(c : tunicodechar;p : punicodemap) : string;
-
       var
-         i : longint;
-
+         rm : preversecharmapping;
       begin
-         { at least map to '?' }
-         getascii:=#63;
-         for i:=0 to p^.lastchar do
-           if p^.map[i].unicode=c then
-             begin
-                if i<256 then
-                  getascii:=chr(i)
-                else
-                  getascii:=chr(i div 256)+chr(i mod 256);
-                exit;
-             end;
+        rm:=find(c,p);
+        if rm<>nil then
+          begin
+            if rm^.char2=0 then
+              begin
+                SetLength(Result,1);
+                Byte(Result[1]):=rm^.char1;
+              end
+            else
+              begin
+                SetLength(Result,2);
+                Byte(Result[1]):=rm^.char1;
+                Byte(Result[2]):=rm^.char2;
+              end;
+          end
+        else
+          Result:=UNKNOW_CHAR_A;
       end;
 
     function getascii(c : tunicodechar;p : punicodemap; ABuffer : PAnsiChar; ABufferLen : SizeInt) : SizeInt;
-
       var
-         i : longint;
-
+         rm : preversecharmapping;
       begin
          if (ABuffer<>nil) and (ABufferLen<=0) then
-           begin
-              Result:=-1;
-              exit;
-           end;
-         for i:=0 to p^.lastchar do
-           if p^.map[i].unicode=c then
-             begin
-                if (ABuffer=nil) then
-                  begin
-                     if i<256 then
-                       Result:=1
-                     else
-                       Result:=2;
-                     exit;
-                  end;
-                if i<256 then
+           exit(-1);
+        rm:=find(c,p);
+        if rm<>nil then
+          begin
+            if (ABuffer=nil) then
+              begin
+                if rm^.char2=0 then
+                  Result:=1
+                else
+                  Result:=2;
+              end
+            else
+              begin
+                if rm^.char2=0 then
                   begin
+                    Byte(ABuffer^):=rm^.char1;
                     Result:=1;
-                    ABuffer^:=chr(i);
                   end
                 else
                   begin
                     if (ABufferLen<2) then
+                      Result:=-1
+                    else
                       begin
-                        Result:=-1;
-                        exit;
-                      end;
-                    ABuffer^:=chr(i div 256);
-                    Inc(ABuffer);
-                    ABuffer^:=chr(i mod 256);
+                        Byte(ABuffer^):=rm^.char1;
+                        Byte((ABuffer+1)^):=rm^.char2;
+                        Result:=2;
+                      end
                   end;
-                exit;
-             end;
-         { at least map to '?' }
-         Result := 1;
-         if (ABuffer<>nil) then
-           ABuffer^:=#63;
+              end;
+          end
+        else
+          begin
+            ABuffer^:=UNKNOW_CHAR_A;
+            Result:=1;
+          end;
       end;
 
   var
@@ -409,6 +617,7 @@ finalization
        if not(mappings^.internalmap) then
          begin
             freemem(mappings^.map);
+            freemem(mappings^.reversemap);
             dispose(mappings);
          end;
        mappings:=hp;

+ 20 - 0
utils/creumap.pp

@@ -31,6 +31,7 @@ program creumap;
      i : longint;
      t : text;
      e : word;
+     c : longint;
 
 begin
    if paramcount<>2 then
@@ -73,11 +74,30 @@ begin
      end;
    writeln(t,'     );');
    writeln(t);
+   c:=p^.reversemaplength-1;
+   writeln(t,'     reversemap : array[0..',c,'] of treversecharmapping = (');
+   for i:=0 to c do
+     begin
+        write(t,'       (',
+                'unicode : ',p^.reversemap[i].unicode,
+                '; char1 : ',p^.reversemap[i].char1,
+                '; char2 : ',p^.reversemap[i].char2,
+                ')'
+        );
+        if i<>c then
+          writeln(t,',')
+        else
+          writeln(t);
+     end;
+   writeln(t,'     );');
+   writeln(t);
    writeln(t,'     unicodemap : tunicodemap = (');
    writeln(t,'       cpname : ''',p^.cpname,''';');
    writeln(t,'       cp : ',p^.cp,';');
    writeln(t,'       map : @map;');
    writeln(t,'       lastchar : ',p^.lastchar,';');
+   writeln(t,'       reversemap : @reversemap;');
+   writeln(t,'       reversemaplength : ',p^.reversemaplength,';');
    writeln(t,'       next : nil;');
    writeln(t,'       internalmap : true');
    writeln(t,'     );');