groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Groff] unicode support: HTML entity names


From: Bruno Haible
Subject: [Groff] unicode support: HTML entity names
Date: Mon, 23 Jan 2006 16:51:21 +0100
User-agent: KMail/1.5

Hi,

The first intermediate goal of Unicode support is to make groff work with
Unicode fonts without having to first register thousands of characters.
This implies that the "charset" sections of the font files of the "html"
and tty devices must go away. The first step in doing this is to move the
HTML entity names from the font files to the HTML postprocessor. These
entities are not font dependent and not user dependent, because they are
standardized by the W3C.

Another justification for this patch: Currently the HTML post-processor
fetches the "&#nnnn;" sequence through get_special_device_encoding() - an
API which returns a 'const char *', meaning a string that lives in memory
forever. To avoid consuming excessive memory amounts with strings of this
kind, it is necessary to use a different API, that allows the string's
memory to be reused at the next call. It turns out that post-html.cpp
already has this API: a function to_unicode(). This patch moves the
"&#nnnn;" strings away from get_special_device_encoding() to a new API
of the same kind.


2006-01-17  Bruno Haible  <address@hidden>

        * font/devhtml/R.proto: Remove the entity names from the font's
        special_encoding_encoding column.
        * src/devices/grohtml/post-html.cpp (get_html_entity): New function,
        handling the entity names here.
        (get_html_translation): Use it. Change return type to 'const char *'.
        (page::add_and_encode): Update, removing a useless cast.

*** groff-20060113.orig/font/devhtml/R.proto    2005-03-14 09:17:12.000000000 
+0100
--- groff-20060113/font/devhtml/R.proto 2006-01-16 02:08:51.000000000 +0100
***************
*** 3,16 ****
  spacewidth 24
  charset
  !     24      0       0x0021
! "     24      0       0x0022  &quot;
  dq    "
  #     24      0       0x0023
  sh    "
  $     24      0       0x0024
  Do    "
  %     24      0       0x0025
! &     24      0       0x0026  &amp;
  aq    24      0       0x0027
  (     24      0       0x0028
  )     24      0       0x0029
--- 3,16 ----
  spacewidth 24
  charset
  !     24      0       0x0021
! "     24      0       0x0022
  dq    "
  #     24      0       0x0023
  sh    "
  $     24      0       0x0024
  Do    "
  %     24      0       0x0025
! &     24      0       0x0026
  aq    24      0       0x0027
  (     24      0       0x0028
  )     24      0       0x0029
***************
*** 35,44 ****
  9     24      0       0x0039
  :     24      0       0x003A
  ;     24      0       0x003B
! <     24      0       0x003C  &lt;
  =     24      0       0x003D
  eq    "
! >     24      0       0x003E  &gt;
  ?     24      0       0x003F
  @     24      0       0x0040
  at    "
--- 35,44 ----
  9     24      0       0x0039
  :     24      0       0x003A
  ;     24      0       0x003B
! <     24      0       0x003C
  =     24      0       0x003D
  eq    "
! >     24      0       0x003E
  ?     24      0       0x003F
  @     24      0       0x0040
  at    "
***************
*** 118,746 ****
  a~    24      0       0x007E
  ~     "
  ti    "
! ---   24      0       0x00A0  &nbsp;
! r!    24      0       0x00A1  &iexcl;
! ct    24      0       0x00A2  &cent;
! Po    24      0       0x00A3  &pound;
! Cs    24      0       0x00A4  &curren;
! Ye    24      0       0x00A5  &yen;
! bb    24      0       0x00A6  &brvbar;
! sc    24      0       0x00A7  &sect;
! ad    24      0       0x00A8  &uml;
! co    24      0       0x00A9  &copy;
! Of    24      0       0x00AA  &ordf;
! Fo    24      0       0x00AB  &laquo;
! no    24      0       0x00AC  &not;
  tno   "
! rg    24      0       0x00AE  &reg;
! a-    24      0       0x00AF  &macr;
! de    24      0       0x00B0  &deg;
! +-    24      0       0x00B1  &plusmn;
  t+-   "
! S2    24      0       0x00B2  &sup2;
! S3    24      0       0x00B3  &sup3;
! aa    24      0       0x00B4  &acute;
  \'    "
! mc    24      0       0x00B5  &micro;
! ps    24      0       0x00B6  &para;
! pc    24      0       0x00B7  &middot;
! ac    24      0       0x00B8  &cedil;
! S1    24      0       0x00B9  &sup1;
! Om    24      0       0x00BA  &ordm;
! Fc    24      0       0x00BB  &raquo;
! 14    24      0       0x00BC  &frac14;
! 12    24      0       0x00BD  &frac12;
! 34    24      0       0x00BE  &frac34;
! r?    24      0       0x00BF  &iquest;
! `A    24      0       0x00C0  &Agrave;
! 'A    24      0       0x00C1  &Aacute;
! ^A    24      0       0x00C2  &Acirc;
! ~A    24      0       0x00C3  &Atilde;
! :A    24      0       0x00C4  &Auml;
! oA    24      0       0x00C5  &Aring;
! AE    24      0       0x00C6  &AElig;
! ,C    24      0       0x00C7  &Ccedil;
! `E    24      0       0x00C8  &Egrave;
! 'E    24      0       0x00C9  &Eacute;
! ^E    24      0       0x00CA  &Ecirc;
! :E    24      0       0x00CB  &Euml;
! `I    24      0       0x00CC  &Igrave;
! 'I    24      0       0x00CD  &Iacute;
! ^I    24      0       0x00CE  &Icirc;
! :I    24      0       0x00CF  &Iuml;
! -D    24      0       0x00D0  &ETH;
! ~N    24      0       0x00D1  &Ntilde;
! `O    24      0       0x00D2  &Ograve;
! 'O    24      0       0x00D3  &Oacute;
! ^O    24      0       0x00D4  &Ocirc;
! ~O    24      0       0x00D5  &Otilde;
! :O    24      0       0x00D6  &Ouml;
! mu    24      0       0x00D7  &times;
  tmu   "
! /O    24      0       0x00D8  &Oslash;
! `U    24      0       0x00D9  &Ugrave;
! 'U    24      0       0x00DA  &Uacute;
! ^U    24      0       0x00DB  &Ucirc;
! :U    24      0       0x00DC  &Uuml;
! 'Y    24      0       0x00DD  &Yacute;
! TP    24      0       0x00DE  &THORN;
! ss    24      0       0x00DF  &szlig;
! `a    24      0       0x00E0  &agrave;
! 'a    24      0       0x00E1  &aacute;
! ^a    24      0       0x00E2  &acirc;
! ~a    24      0       0x00E3  &atilde;
! :a    24      0       0x00E4  &auml;
! oa    24      0       0x00E5  &aring;
! ae    24      0       0x00E6  &aelig;
! ,c    24      0       0x00E7  &ccedil;
! `e    24      0       0x00E8  &egrave;
! 'e    24      0       0x00E9  &eacute;
! ^e    24      0       0x00EA  &ecirc;
! :e    24      0       0x00EB  &euml;
! `i    24      0       0x00EC  &igrave;
! 'i    24      0       0x00ED  &iacute;
! ^i    24      0       0x00EE  &icirc;
! :i    24      0       0x00EF  &iuml;
! Sd    24      0       0x00F0  &eth;
! ~n    24      0       0x00F1  &ntilde;
! `o    24      0       0x00F2  &ograve;
! 'o    24      0       0x00F3  &oacute;
! ^o    24      0       0x00F4  &ocirc;
! ~o    24      0       0x00F5  &otilde;
! :o    24      0       0x00F6  &ouml;
! di    24      0       0x00F7  &divide;
  tdi   "
! /o    24      0       0x00F8  &oslash;
! `u    24      0       0x00F9  &ugrave;
! 'u    24      0       0x00FA  &uacute;
! ^u    24      0       0x00FB  &ucirc;
! :u    24      0       0x00FC  &uuml;
! 'y    24      0       0x00FD  &yacute;
! Tp    24      0       0x00FE  &thorn;
! :y    24      0       0x00FF  &yuml;
! u0041_0306    24      0       0x0102  &#258;
! u0061_0306    24      0       0x0103  &#259;
! u0041_0328    24      0       0x0104  &#260;
! u0061_0328    24      0       0x0105  &#261;
! 'C    24      0       0x0106  &#262;
! 'c    24      0       0x0107  &#263;
! u0043_030C    24      0       0x010C  &#268;
! u0063_030C    24      0       0x010D  &#269;
! u0044_030C    24      0       0x010E  &#270;
! u0064_030C    24      0       0x010F  &#271;
! u0110 24      0       0x0110  &#272;
! u0111 24      0       0x0111  &#273;
! u0045_0328    24      0       0x0118  &#280;
! u0065_0328    24      0       0x0119  &#281;
! u0045_030C 24 0       0x011A  &#282;
! u0065_030C    24      0       0x011B  &#283;
! u0047_0306    24      0       0x011E  &#286;
! u0067_0306    24      0       0x011F  &#287;
! u0049_0307    24      0       0x0130  &#304;
! .i    24      0       0x0131  &#305;
! IJ    24      0       0x0132  &#306;
! ij    24      0       0x0133  &#307;
! u004C_0301    24      0       0x0139  &#313;
! u006C_0301    24      0       0x013A  &#314;
! u004C_030C    24      0       0x013D  &#317;
! u006C_030C    24      0       0x013E  &#318;
! /L    24      0       0x0141  &#321;
! /l    24      0       0x0142  &#322;
! u004E_0301    24      0       0x0143  &#323;
! u006E_0301    24      0       0x0144  &#324;
! u004E_030C    24      0       0x0147  &#327;
! u006E_030C    24      0       0x0148  &#328;
! u004F_030B    24      0       0x0150  &#330;
! u006F_030B    24      0       0x0151  &#331;
! OE    24      0       0x0152  &OElig;
! oe    24      0       0x0153  &oelig;
! u0052_0301    24      0       0x0154  &#340;
! u0072_0301    24      0       0x0155  &#341;
! u0052_030C    24      0       0x0158  &#344;
! u0072_030C    24      0       0x0159  &#345;
! u0053_0301    24      0       0x015A  &#346;
! u0073_0301    24      0       0x015B  &#347;
! u0053_0327    24      0       0x015E  &#350;
! u0073_0327    24      0       0x015F  &#351;
! vS    24      0       0x0160  &Scaron;
! vs    24      0       0x0161  &scaron;
! u0054_0327    24      0       0x0162  &#354;
! u0074_0327    24      0       0x0163  &#355;
! u0054_030C    24      0       0x0164  &#356;
! u0074_030C    24      0       0x0165  &#357;
! u0055_030A    24      0       0x016E  &#366;
! u0075_030A    24      0       0x016F  &#367;
! u0055_030B    24      0       0x0170  &#368;
! u0075_030B    24      0       0x0171  &#369;
! :Y    24      0       0x0178  &Yuml;
! u005A_0301    24      0       0x0179  &#377;
! u007A_0301    24      0       0x017A  &#378;
! u005A_0307    24      0       0x017B  &#379;
! u007A_0307    24      0       0x017C  &#380;
! vZ    24      0       0x017D  &#381;
! vz    24      0       0x017E  &#382;
! Fn    24      0       0x0192  &fnof;
! ah    24      0       0x02C7  &#711;
! ab    24      0       0x02D8  &#728;
! a.    24      0       0x02D9  &#729;
! ao    24      0       0x02DA  &#730;
! ho    24      0       0x02DB  &#731;
! a"    24      0       0x02DD  &#733;
! *A    24      0       0x0391  &Alpha;
! *B    24      0       0x0392  &Beta;
! *G    24      0       0x0393  &Gamma;
! *D    24      0       0x0394  &Delta;
! *E    24      0       0x0395  &Epsilon;
! *Z    24      0       0x0396  &Zeta;
! *Y    24      0       0x0397  &Eta;
! *H    24      0       0x0398  &Theta;
! *I    24      0       0x0399  &Iota;
! *K    24      0       0x039A  &Kappa;
! *L    24      0       0x039B  &Lambda;
! *M    24      0       0x039C  &Mu;
! *N    24      0       0x039D  &Nu;
! *C    24      0       0x039E  &Xi;
! *O    24      0       0x039F  &Omicron;
! *P    24      0       0x03A0  &Pi;
! *R    24      0       0x03A1  &Rho;
! *S    24      0       0x03A3  &Sigma;
! *T    24      0       0x03A4  &Tau;
! *U    24      0       0x03A5  &Upsilon;
! *F    24      0       0x03A6  &Phi;
! *X    24      0       0x03A7  &Chi;
! *Q    24      0       0x03A8  &Psi;
! *W    24      0       0x03A9  &Omega;
! *a    24      0       0x03B1  &alpha;
! *b    24      0       0x03B2  &beta;
! *g    24      0       0x03B3  &gamma;
! *d    24      0       0x03B4  &delta;
! *e    24      0       0x03B5  &epsilon;
! *z    24      0       0x03B6  &zeta;
! *y    24      0       0x03B7  &eta;
! *h    24      0       0x03B8  &theta;
! *i    24      0       0x03B9  &iota;
! *k    24      0       0x03BA  &kappa;
! *l    24      0       0x03BB  &lambda;
! *m    24      0       0x03BC  &mu;
! *n    24      0       0x03BD  &nu;
! *c    24      0       0x03BE  &xi;
! *o    24      0       0x03BF  &omicron;
! *p    24      0       0x03C0  &pi;
! *r    24      0       0x03C1  &rho;
! ts    24      0       0x03C2  &sigmaf;
! *s    24      0       0x03C3  &sigma;
! *t    24      0       0x03C4  &tau;
! *u    24      0       0x03C5  &upsilon;
! +f    24      0       0x03C6  &phi;
! *x    24      0       0x03C7  &chi;
! *q    24      0       0x03C8  &psi;
! *w    24      0       0x03C9  &omega;
! +h    24      0       0x03D1  &thetasym;
! *f    24      0       0x03D5  &#981;
! +p    24      0       0x03D6  &piv;
! +e    24      0       0x03F5  &#1013;
! u0415_0300    24      0       0x0400  &#1024;
! u0415_0308    24      0       0x0401  &#1025;
! u0402 24      0       0x0402  &#1026;
! u0413_0301    24      0       0x0403  &#1027;
! u0404 24      0       0x0404  &#1028;
! u0405 24      0       0x0405  &#1029;
! u0406 24      0       0x0406  &#1030;
! u0406_0308    24      0       0x0407  &#1031;
! u0408 24      0       0x0408  &#1032;
! u0409 24      0       0x0409  &#1033;
! u040A 24      0       0x040A  &#1034;
! u040B 24      0       0x040B  &#1035;
! u041A_0301    24      0       0x040C  &#1036;
! u0418_0300    24      0       0x040D  &#1037;
! u0423_0306    24      0       0x040E  &#1038;
! u040F 24      0       0x040F  &#1039;
! u0410 24      0       0x0410  &#1040;
! u0411 24      0       0x0411  &#1041;
! u0412 24      0       0x0412  &#1042;
! u0413 24      0       0x0413  &#1043;
! u0414 24      0       0x0414  &#1044;
! u0415 24      0       0x0415  &#1045;
! u0416 24      0       0x0416  &#1046;
! u0417 24      0       0x0417  &#1047;
! u0418 24      0       0x0418  &#1048;
! u0418_0306    24      0       0x0419  &#1049;
! u041A 24      0       0x041A  &#1050;
! u041B 24      0       0x041B  &#1051;
! u041C 24      0       0x041C  &#1052;
! u041D 24      0       0x041D  &#1053;
! u041E 24      0       0x041E  &#1054;
! u041F 24      0       0x041F  &#1055;
! u0420 24      0       0x0420  &#1056;
! u0421 24      0       0x0421  &#1057;
! u0422 24      0       0x0422  &#1058;
! u0423 24      0       0x0423  &#1059;
! u0424 24      0       0x0424  &#1060;
! u0425 24      0       0x0425  &#1061;
! u0426 24      0       0x0426  &#1062;
! u0427 24      0       0x0427  &#1063;
! u0428 24      0       0x0428  &#1064;
! u0429 24      0       0x0429  &#1065;
! u042A 24      0       0x042A  &#1066;
! u042B 24      0       0x042B  &#1067;
! u042C 24      0       0x042C  &#1068;
! u042D 24      0       0x042D  &#1069;
! u042E 24      0       0x042E  &#1070;
! u042F 24      0       0x042F  &#1071;
! u0430 24      0       0x0430  &#1072;
! u0431 24      0       0x0431  &#1073;
! u0432 24      0       0x0432  &#1074;
! u0433 24      0       0x0433  &#1075;
! u0434 24      0       0x0434  &#1076;
! u0435 24      0       0x0435  &#1077;
! u0436 24      0       0x0436  &#1078;
! u0437 24      0       0x0437  &#1079;
! u0438 24      0       0x0438  &#1080;
! u0438_0306    24      0       0x0439  &#1081;
! u043A 24      0       0x043A  &#1082;
! u043B 24      0       0x043B  &#1083;
! u043C 24      0       0x043C  &#1084;
! u043D 24      0       0x043D  &#1085;
! u043E 24      0       0x043E  &#1086;
! u043F 24      0       0x043F  &#1087;
! u0440 24      0       0x0440  &#1088;
! u0441 24      0       0x0441  &#1089;
! u0442 24      0       0x0442  &#1090;
! u0443 24      0       0x0443  &#1091;
! u0444 24      0       0x0444  &#1092;
! u0445 24      0       0x0445  &#1093;
! u0446 24      0       0x0446  &#1094;
! u0447 24      0       0x0447  &#1095;
! u0448 24      0       0x0448  &#1096;
! u0449 24      0       0x0449  &#1097;
! u044A 24      0       0x044A  &#1098;
! u044B 24      0       0x044B  &#1099;
! u044C 24      0       0x044C  &#1100;
! u044D 24      0       0x044D  &#1101;
! u044E 24      0       0x044E  &#1102;
! u044F 24      0       0x044F  &#1103;
! u0435_0300    24      0       0x0450  &#1104;
! u0435_0308    24      0       0x0451  &#1105;
! u0452 24      0       0x0452  &#1106;
! u0433_0301    24      0       0x0453  &#1107;
! u0454 24      0       0x0454  &#1108;
! u0455 24      0       0x0455  &#1109;
! u0456 24      0       0x0456  &#1110;
! u0456_0308    24      0       0x0457  &#1111;
! u0458 24      0       0x0458  &#1112;
! u0459 24      0       0x0459  &#1113;
! u045A 24      0       0x045A  &#1114;
! u045B 24      0       0x045B  &#1115;
! u043A_0301    24      0       0x045C  &#1116;
! u0438_0300    24      0       0x045D  &#1117;
! u0443_0306    24      0       0x045E  &#1118;
! u045F 24      0       0x045F  &#1119;
! u0460 24      0       0x0460  &#1120;
! u0461 24      0       0x0461  &#1121;
! u0462 24      0       0x0462  &#1122;
! u0463 24      0       0x0463  &#1123;
! u0464 24      0       0x0464  &#1124;
! u0465 24      0       0x0465  &#1125;
! u0466 24      0       0x0466  &#1126;
! u0467 24      0       0x0467  &#1127;
! u0468 24      0       0x0468  &#1128;
! u0469 24      0       0x0469  &#1129;
! u046A 24      0       0x046A  &#1130;
! u046B 24      0       0x046B  &#1131;
! u046C 24      0       0x046C  &#1132;
! u046D 24      0       0x046D  &#1133;
! u046E 24      0       0x046E  &#1134;
! u046F 24      0       0x046F  &#1135;
! u0470 24      0       0x0470  &#1136;
! u0471 24      0       0x0471  &#1137;
! u0472 24      0       0x0472  &#1138;
! u0473 24      0       0x0473  &#1139;
! u0474 24      0       0x0474  &#1140;
! u0475 24      0       0x0475  &#1141;
! u0474_030F    24      0       0x0476  &#1142;
! u0475_030F    24      0       0x0477  &#1143;
! u0478 24      0       0x0478  &#1144;
! u0479 24      0       0x0479  &#1145;
! u047A 24      0       0x047A  &#1146;
! u047B 24      0       0x047B  &#1147;
! u047C 24      0       0x047C  &#1148;
! u047D 24      0       0x047D  &#1149;
! u047E 24      0       0x047E  &#1150;
! u047F 24      0       0x047F  &#1151;
! u0480 24      0       0x0480  &#1152;
! u0481 24      0       0x0481  &#1153;
! u0482 24      0       0x0482  &#1154;
! u0483 0       0       0x0483  &#1155;
! u0484 0       0       0x0484  &#1156;
! u0485 0       0       0x0485  &#1157;
! u0486 0       0       0x0486  &#1158;
! u0488 0       0       0x0488  &#1160;
! u0489 0       0       0x0489  &#1161;
! u048A 24      0       0x048A  &#1162;
! u048B 24      0       0x048B  &#1163;
! u048C 24      0       0x048C  &#1164;
! u048D 24      0       0x048D  &#1165;
! u048E 24      0       0x048E  &#1166;
! u048F 24      0       0x048F  &#1167;
! u0490 24      0       0x0490  &#1168;
! u0491 24      0       0x0491  &#1169;
! u0492 24      0       0x0492  &#1170;
! u0493 24      0       0x0493  &#1171;
! u0494 24      0       0x0494  &#1172;
! u0495 24      0       0x0495  &#1173;
! u0496 24      0       0x0496  &#1174;
! u0497 24      0       0x0497  &#1175;
! u0498 24      0       0x0498  &#1176;
! u0499 24      0       0x0499  &#1177;
! u049A 24      0       0x049A  &#1178;
! u049B 24      0       0x049B  &#1179;
! u049C 24      0       0x049C  &#1180;
! u049D 24      0       0x049D  &#1181;
! u049E 24      0       0x049E  &#1182;
! u049F 24      0       0x049F  &#1183;
! u04A0 24      0       0x04A0  &#1184;
! u04A1 24      0       0x04A1  &#1185;
! u04A2 24      0       0x04A2  &#1186;
! u04A3 24      0       0x04A3  &#1187;
! u04A4 24      0       0x04A4  &#1188;
! u04A5 24      0       0x04A5  &#1189;
! u04A6 24      0       0x04A6  &#1190;
! u04A7 24      0       0x04A7  &#1191;
! u04A8 24      0       0x04A8  &#1192;
! u04A9 24      0       0x04A9  &#1193;
! u04AA 24      0       0x04AA  &#1194;
! u04AB 24      0       0x04AB  &#1195;
! u04AC 24      0       0x04AC  &#1196;
! u04AD 24      0       0x04AD  &#1197;
! u04AE 24      0       0x04AE  &#1198;
! u04AF 24      0       0x04AF  &#1199;
! u04B0 24      0       0x04B0  &#1200;
! u04B1 24      0       0x04B1  &#1201;
! u04B2 24      0       0x04B2  &#1202;
! u04B3 24      0       0x04B3  &#1203;
! u04B4 24      0       0x04B4  &#1204;
! u04B5 24      0       0x04B5  &#1205;
! u04B6 24      0       0x04B6  &#1206;
! u04B7 24      0       0x04B7  &#1207;
! u04B8 24      0       0x04B8  &#1208;
! u04B9 24      0       0x04B9  &#1209;
! u04BA 24      0       0x04BA  &#1210;
! u04BB 24      0       0x04BB  &#1211;
! u04BC 24      0       0x04BC  &#1212;
! u04BD 24      0       0x04BD  &#1213;
! u04BE 24      0       0x04BE  &#1214;
! u04BF 24      0       0x04BF  &#1215;
! u04C0 24      0       0x04C0  &#1216;
! u0416_0306    24      0       0x04C1  &#1217;
! u0436_0306    24      0       0x04C2  &#1218;
! u04C3 24      0       0x04C3  &#1219;
! u04C4 24      0       0x04C4  &#1220;
! u04C5 24      0       0x04C5  &#1221;
! u04C6 24      0       0x04C6  &#1222;
! u04C7 24      0       0x04C7  &#1223;
! u04C8 24      0       0x04C8  &#1224;
! u04C9 24      0       0x04C9  &#1225;
! u04CA 24      0       0x04CA  &#1226;
! u04CB 24      0       0x04CB  &#1227;
! u04CC 24      0       0x04CC  &#1228;
! u04CD 24      0       0x04CD  &#1229;
! u04CE 24      0       0x04CE  &#1230;
! u0410_0306    24      0       0x04D0  &#1232;
! u0430_0306    24      0       0x04D1  &#1233;
! u0410_0308    24      0       0x04D2  &#1234;
! u0430_0308    24      0       0x04D3  &#1235;
! u04D4 24      0       0x04D4  &#1236;
! u04D5 24      0       0x04D5  &#1237;
! u0415_0306    24      0       0x04D6  &#1238;
! u0435_0306    24      0       0x04D7  &#1239;
! u04D8 24      0       0x04D8  &#1240;
! u04D9 24      0       0x04D9  &#1241;
! u04D8_0308    24      0       0x04DA  &#1242;
! u04D9_0308    24      0       0x04DB  &#1243;
! u0416_0308    24      0       0x04DC  &#1244;
! u0436_0308    24      0       0x04DD  &#1245;
! u0417_0308    24      0       0x04DE  &#1246;
! u0437_0308    24      0       0x04DF  &#1247;
! u04E0 24      0       0x04E0  &#1248;
! u04E1 24      0       0x04E1  &#1249;
! u0418_0304    24      0       0x04E2  &#1250;
! u0438_0304    24      0       0x04E3  &#1251;
! u0418_0308    24      0       0x04E4  &#1252;
! u0438_0308    24      0       0x04E5  &#1253;
! u041E_0308    24      0       0x04E6  &#1254;
! u043E_0308    24      0       0x04E7  &#1255;
! u04E8 24      0       0x04E8  &#1256;
! u04E9 24      0       0x04E9  &#1257;
! u04E8_0308    24      0       0x04EA  &#1258;
! u04E9_0308    24      0       0x04EB  &#1259;
! u042D_0308    24      0       0x04EC  &#1260;
! u044D_0308    24      0       0x04ED  &#1261;
! u0423_0304    24      0       0x04EE  &#1262;
! u0443_0304    24      0       0x04EF  &#1263;
! u0423_0308    24      0       0x04F0  &#1264;
! u0443_0308    24      0       0x04F1  &#1265;
! u0423_030B    24      0       0x04F2  &#1266;
! u0443_030B    24      0       0x04F3  &#1267;
! u0427_0308    24      0       0x04F4  &#1268;
! u0447_0308    24      0       0x04F5  &#1269;
! u042B_0308    24      0       0x04F8  &#1272;
! u044B_0308    24      0       0x04F9  &#1273;
! u0500 24      0       0x0500  &#1280;
! u0501 24      0       0x0501  &#1281;
! u0502 24      0       0x0502  &#1282;
! u0503 24      0       0x0503  &#1283;
! u0504 24      0       0x0504  &#1284;
! u0505 24      0       0x0505  &#1285;
! u0506 24      0       0x0506  &#1286;
! u0507 24      0       0x0507  &#1287;
! u0508 24      0       0x0508  &#1288;
! u0509 24      0       0x0509  &#1289;
! u050A 24      0       0x050A  &#1290;
! u050B 24      0       0x050B  &#1291;
! u050C 24      0       0x050C  &#1292;
! u050D 24      0       0x050D  &#1293;
! u050E 24      0       0x050E  &#1294;
! u050F 24      0       0x050F  &#1295;
! en    24      0       0x2013  &ndash;
! em    24      0       0x2014  &mdash;
! `     24      0       0x2018  &lsquo;
  oq    "
! '     24      0       0x2019  &rsquo;
  cq    "
! bq    24      0       0x201A  &sbquo;
! lq    24      0       0x201C  &ldquo;
! rq    24      0       0x201D  &rdquo;
! Bq    24      0       0x201E  &bdquo;
! dg    24      0       0x2020  &dagger;
! dd    24      0       0x2021  &Dagger;
! bu    24      0       0x2022  &bull;
! %0    24      0       0x2030  &permil;
! fm    24      0       0x2032  &prime;
! sd    24      0       0x2033  &Prime;
! fo    24      0       0x2039  &lsaquo;
! fc    24      0       0x203A  &rsaquo;
! rn    24      0       0x203E  &oline;
! f/    24      0       0x2044  &frasl;
! Eu    24      0       0x20AC  &euro;
  eu    "
! -h    24      0       0x210F  &#8463;
  hbar  "
! Im    24      0       0x2111  &image;
! wp    24      0       0x2118  &weierp;
! Re    24      0       0x211C  &real;
! tm    24      0       0x2122  &trade;
! Ah    24      0       0x2135  &alefsym;
! 18    24      0       0x215B  &#8539;
! 38    24      0       0x215C  &#8540;
! 58    24      0       0x215D  &#8541;
! 78    24      0       0x215E  &#8542;
! <-    24      0       0x2190  &larr;
! ua    24      0       0x2191  &uarr;
! ->    24      0       0x2192  &rarr;
! da    24      0       0x2193  &darr;
! <>    24      0       0x2194  &harr;
! va    24      0       0x2195  &#8597;
! CR    24      0       0x21B5  &#8629;
! lA    24      0       0x21D0  &lArr;
! uA    24      0       0x21D1  &uArr;
! rA    24      0       0x21D2  &rArr;
! dA    24      0       0x21D3  &dArr;
! hA    24      0       0x21D4  &hArr;
! vA    24      0       0x21D5  &#8661;
! fa    24      0       0x2200  &forall;
! pd    24      0       0x2202  &part;
! te    24      0       0x2203  &exist;
! es    24      0       0x2205  &empty;
! gr    24      0       0x2207  &nabla;
! mo    24      0       0x2208  &isin;
! nm    24      0       0x2209  &notin;
! st    24      0       0x220B  &ni;
! product       24      0       0x220F  &prod;
! coproduct     24      0       0x2210  &#8720;
! sum   24      0       0x2211  &sum;
! \-    24      0       0x2212  &minus;
  mi    "
! -+    24      0       0x2213  &#8723;
! **    24      0       0x2217  &lowast;
! sr    24      0       0x221A  &radic;
  sqrt  "
! pt    24      0       0x221D  &prop;
! if    24      0       0x221E  &infin;
! /_    24      0       0x2220  &ang;
! AN    24      0       0x2227  &and;
! OR    24      0       0x2228  &or;
! ca    24      0       0x2229  &cap;
! cu    24      0       0x222A  &cup;
! is    24      0       0x222B  &int;
  integral      "
! tf    24      0       0x2234  &there4;
  3d    "
! ap    24      0       0x223C  &sim;
! |=    24      0       0x2243  &#8771;
! =~    24      0       0x2245  &cong;
! ~~    24      0       0x2248  &asymp;
  ~=    "
! !=    24      0       0x2260  &ne;
! ==    24      0       0x2261  &equiv;
! ne    24      0       0x2262  &#8802;
! <=    24      0       0x2264  &le;
! >=    24      0       0x2265  &ge;
! <<    24      0       0x226A  &#8810;
! >>    24      0       0x226B  &#8811;
! sb    24      0       0x2282  &sub;
! sp    24      0       0x2283  &sup;
! nb    24      0       0x2284  &nsub;
! nc    24      0       0x2285  &#8837;
! ib    24      0       0x2286  &sube;
! ip    24      0       0x2287  &supe;
! c+    24      0       0x2295  &oplus;
! c*    24      0       0x2297  &otimes;
! pp    24      0       0x22A5  &perp;
! md    24      0       0x22C5  &sdot;
! lc    24      0       0x2308  &lceil;
! rc    24      0       0x2309  &rceil;
! lf    24      0       0x230A  &lfloor;
! rf    24      0       0x230B  &rfloor;
! la    24      0       0x2329  &lang;
! ra    24      0       0x232A  &rang;
! parenlefttp   24      0       0x239B  &#9115;
! parenleftex   24      0       0x239C  &#9116;
! parenleftbt   24      0       0x239D  &#9117;
! parenrighttp  24      0       0x239E  &#9118;
! parenrightex  24      0       0x239F  &#9119;
! parenrightbt  24      0       0x23A0  &#9120;
! bracketlefttp 24      0       0x23A1  &#9121;
! bracketleftex 24      0       0x23A2  &#9122;
! bracketleftbt 24      0       0x23A3  &#9123;
! bracketrighttp        24      0       0x23A4  &#9124;
! bracketrightex        24      0       0x23A5  &#9125;
! bracketrightbt        24      0       0x23A6  &#9126;
! lt    24      0       0x23A7  &#9127;
  bracelefttp   "
! lk    24      0       0x23A8  &#9128;
  braceleftmid  "
! lb    24      0       0x23A9  &#9129;
  braceleftbt   "
! bv    24      0       0x23AA  &#9130;
  braceex       "
  braceleftex   "
  bracerightex  "
! rt    24      0       0x23AB  &#9131;
  bracerighttp  "
! rk    24      0       0x23AC  &#9132;
  bracerightmid "
! rb    24      0       0x23AD  &#9133;
  bracerightbt  "
! u23AE 24      0       0x23AE  &#9134;
! an    24      0       0x23AF  &#9135;
! br    24      0       0x2502  &#9474;
! sq    24      0       0x25A1  &#9633;
! lz    24      0       0x25CA  &loz;
! ci    24      0       0x25CB  &#9675;
! lh    24      0       0x261C  &#9756;
! rh    24      0       0x261E  &#9758;
! SP    24      0       0x2660  &spades;
! CL    24      0       0x2663  &clubs;
! HE    24      0       0x2665  &hearts;
! DI    24      0       0x2666  &diams;
! OK    24      0       0x2713  &#10003;
--- 118,746 ----
  a~    24      0       0x007E
  ~     "
  ti    "
! ---   24      0       0x00A0
! r!    24      0       0x00A1
! ct    24      0       0x00A2
! Po    24      0       0x00A3
! Cs    24      0       0x00A4
! Ye    24      0       0x00A5
! bb    24      0       0x00A6
! sc    24      0       0x00A7
! ad    24      0       0x00A8
! co    24      0       0x00A9
! Of    24      0       0x00AA
! Fo    24      0       0x00AB
! no    24      0       0x00AC
  tno   "
! rg    24      0       0x00AE
! a-    24      0       0x00AF
! de    24      0       0x00B0
! +-    24      0       0x00B1
  t+-   "
! S2    24      0       0x00B2
! S3    24      0       0x00B3
! aa    24      0       0x00B4
  \'    "
! mc    24      0       0x00B5
! ps    24      0       0x00B6
! pc    24      0       0x00B7
! ac    24      0       0x00B8
! S1    24      0       0x00B9
! Om    24      0       0x00BA
! Fc    24      0       0x00BB
! 14    24      0       0x00BC
! 12    24      0       0x00BD
! 34    24      0       0x00BE
! r?    24      0       0x00BF
! `A    24      0       0x00C0
! 'A    24      0       0x00C1
! ^A    24      0       0x00C2
! ~A    24      0       0x00C3
! :A    24      0       0x00C4
! oA    24      0       0x00C5
! AE    24      0       0x00C6
! ,C    24      0       0x00C7
! `E    24      0       0x00C8
! 'E    24      0       0x00C9
! ^E    24      0       0x00CA
! :E    24      0       0x00CB
! `I    24      0       0x00CC
! 'I    24      0       0x00CD
! ^I    24      0       0x00CE
! :I    24      0       0x00CF
! -D    24      0       0x00D0
! ~N    24      0       0x00D1
! `O    24      0       0x00D2
! 'O    24      0       0x00D3
! ^O    24      0       0x00D4
! ~O    24      0       0x00D5
! :O    24      0       0x00D6
! mu    24      0       0x00D7
  tmu   "
! /O    24      0       0x00D8
! `U    24      0       0x00D9
! 'U    24      0       0x00DA
! ^U    24      0       0x00DB
! :U    24      0       0x00DC
! 'Y    24      0       0x00DD
! TP    24      0       0x00DE
! ss    24      0       0x00DF
! `a    24      0       0x00E0
! 'a    24      0       0x00E1
! ^a    24      0       0x00E2
! ~a    24      0       0x00E3
! :a    24      0       0x00E4
! oa    24      0       0x00E5
! ae    24      0       0x00E6
! ,c    24      0       0x00E7
! `e    24      0       0x00E8
! 'e    24      0       0x00E9
! ^e    24      0       0x00EA
! :e    24      0       0x00EB
! `i    24      0       0x00EC
! 'i    24      0       0x00ED
! ^i    24      0       0x00EE
! :i    24      0       0x00EF
! Sd    24      0       0x00F0
! ~n    24      0       0x00F1
! `o    24      0       0x00F2
! 'o    24      0       0x00F3
! ^o    24      0       0x00F4
! ~o    24      0       0x00F5
! :o    24      0       0x00F6
! di    24      0       0x00F7
  tdi   "
! /o    24      0       0x00F8
! `u    24      0       0x00F9
! 'u    24      0       0x00FA
! ^u    24      0       0x00FB
! :u    24      0       0x00FC
! 'y    24      0       0x00FD
! Tp    24      0       0x00FE
! :y    24      0       0x00FF
! u0041_0306    24      0       0x0102
! u0061_0306    24      0       0x0103
! u0041_0328    24      0       0x0104
! u0061_0328    24      0       0x0105
! 'C    24      0       0x0106
! 'c    24      0       0x0107
! u0043_030C    24      0       0x010C
! u0063_030C    24      0       0x010D
! u0044_030C    24      0       0x010E
! u0064_030C    24      0       0x010F
! u0110 24      0       0x0110
! u0111 24      0       0x0111
! u0045_0328    24      0       0x0118
! u0065_0328    24      0       0x0119
! u0045_030C    24      0       0x011A
! u0065_030C    24      0       0x011B
! u0047_0306    24      0       0x011E
! u0067_0306    24      0       0x011F
! u0049_0307    24      0       0x0130
! .i    24      0       0x0131
! IJ    24      0       0x0132
! ij    24      0       0x0133
! u004C_0301    24      0       0x0139
! u006C_0301    24      0       0x013A
! u004C_030C    24      0       0x013D
! u006C_030C    24      0       0x013E
! /L    24      0       0x0141
! /l    24      0       0x0142
! u004E_0301    24      0       0x0143
! u006E_0301    24      0       0x0144
! u004E_030C    24      0       0x0147
! u006E_030C    24      0       0x0148
! u004F_030B    24      0       0x0150
! u006F_030B    24      0       0x0151
! OE    24      0       0x0152
! oe    24      0       0x0153
! u0052_0301    24      0       0x0154
! u0072_0301    24      0       0x0155
! u0052_030C    24      0       0x0158
! u0072_030C    24      0       0x0159
! u0053_0301    24      0       0x015A
! u0073_0301    24      0       0x015B
! u0053_0327    24      0       0x015E
! u0073_0327    24      0       0x015F
! vS    24      0       0x0160
! vs    24      0       0x0161
! u0054_0327    24      0       0x0162
! u0074_0327    24      0       0x0163
! u0054_030C    24      0       0x0164
! u0074_030C    24      0       0x0165
! u0055_030A    24      0       0x016E
! u0075_030A    24      0       0x016F
! u0055_030B    24      0       0x0170
! u0075_030B    24      0       0x0171
! :Y    24      0       0x0178
! u005A_0301    24      0       0x0179
! u007A_0301    24      0       0x017A
! u005A_0307    24      0       0x017B
! u007A_0307    24      0       0x017C
! vZ    24      0       0x017D
! vz    24      0       0x017E
! Fn    24      0       0x0192
! ah    24      0       0x02C7
! ab    24      0       0x02D8
! a.    24      0       0x02D9
! ao    24      0       0x02DA
! ho    24      0       0x02DB
! a"    24      0       0x02DD
! *A    24      0       0x0391
! *B    24      0       0x0392
! *G    24      0       0x0393
! *D    24      0       0x0394
! *E    24      0       0x0395
! *Z    24      0       0x0396
! *Y    24      0       0x0397
! *H    24      0       0x0398
! *I    24      0       0x0399
! *K    24      0       0x039A
! *L    24      0       0x039B
! *M    24      0       0x039C
! *N    24      0       0x039D
! *C    24      0       0x039E
! *O    24      0       0x039F
! *P    24      0       0x03A0
! *R    24      0       0x03A1
! *S    24      0       0x03A3
! *T    24      0       0x03A4
! *U    24      0       0x03A5
! *F    24      0       0x03A6
! *X    24      0       0x03A7
! *Q    24      0       0x03A8
! *W    24      0       0x03A9
! *a    24      0       0x03B1
! *b    24      0       0x03B2
! *g    24      0       0x03B3
! *d    24      0       0x03B4
! *e    24      0       0x03B5
! *z    24      0       0x03B6
! *y    24      0       0x03B7
! *h    24      0       0x03B8
! *i    24      0       0x03B9
! *k    24      0       0x03BA
! *l    24      0       0x03BB
! *m    24      0       0x03BC
! *n    24      0       0x03BD
! *c    24      0       0x03BE
! *o    24      0       0x03BF
! *p    24      0       0x03C0
! *r    24      0       0x03C1
! ts    24      0       0x03C2
! *s    24      0       0x03C3
! *t    24      0       0x03C4
! *u    24      0       0x03C5
! +f    24      0       0x03C6
! *x    24      0       0x03C7
! *q    24      0       0x03C8
! *w    24      0       0x03C9
! +h    24      0       0x03D1
! *f    24      0       0x03D5
! +p    24      0       0x03D6
! +e    24      0       0x03F5
! u0415_0300    24      0       0x0400
! u0415_0308    24      0       0x0401
! u0402 24      0       0x0402
! u0413_0301    24      0       0x0403
! u0404 24      0       0x0404
! u0405 24      0       0x0405
! u0406 24      0       0x0406
! u0406_0308    24      0       0x0407
! u0408 24      0       0x0408
! u0409 24      0       0x0409
! u040A 24      0       0x040A
! u040B 24      0       0x040B
! u041A_0301    24      0       0x040C
! u0418_0300    24      0       0x040D
! u0423_0306    24      0       0x040E
! u040F 24      0       0x040F
! u0410 24      0       0x0410
! u0411 24      0       0x0411
! u0412 24      0       0x0412
! u0413 24      0       0x0413
! u0414 24      0       0x0414
! u0415 24      0       0x0415
! u0416 24      0       0x0416
! u0417 24      0       0x0417
! u0418 24      0       0x0418
! u0418_0306    24      0       0x0419
! u041A 24      0       0x041A
! u041B 24      0       0x041B
! u041C 24      0       0x041C
! u041D 24      0       0x041D
! u041E 24      0       0x041E
! u041F 24      0       0x041F
! u0420 24      0       0x0420
! u0421 24      0       0x0421
! u0422 24      0       0x0422
! u0423 24      0       0x0423
! u0424 24      0       0x0424
! u0425 24      0       0x0425
! u0426 24      0       0x0426
! u0427 24      0       0x0427
! u0428 24      0       0x0428
! u0429 24      0       0x0429
! u042A 24      0       0x042A
! u042B 24      0       0x042B
! u042C 24      0       0x042C
! u042D 24      0       0x042D
! u042E 24      0       0x042E
! u042F 24      0       0x042F
! u0430 24      0       0x0430
! u0431 24      0       0x0431
! u0432 24      0       0x0432
! u0433 24      0       0x0433
! u0434 24      0       0x0434
! u0435 24      0       0x0435
! u0436 24      0       0x0436
! u0437 24      0       0x0437
! u0438 24      0       0x0438
! u0438_0306    24      0       0x0439
! u043A 24      0       0x043A
! u043B 24      0       0x043B
! u043C 24      0       0x043C
! u043D 24      0       0x043D
! u043E 24      0       0x043E
! u043F 24      0       0x043F
! u0440 24      0       0x0440
! u0441 24      0       0x0441
! u0442 24      0       0x0442
! u0443 24      0       0x0443
! u0444 24      0       0x0444
! u0445 24      0       0x0445
! u0446 24      0       0x0446
! u0447 24      0       0x0447
! u0448 24      0       0x0448
! u0449 24      0       0x0449
! u044A 24      0       0x044A
! u044B 24      0       0x044B
! u044C 24      0       0x044C
! u044D 24      0       0x044D
! u044E 24      0       0x044E
! u044F 24      0       0x044F
! u0435_0300    24      0       0x0450
! u0435_0308    24      0       0x0451
! u0452 24      0       0x0452
! u0433_0301    24      0       0x0453
! u0454 24      0       0x0454
! u0455 24      0       0x0455
! u0456 24      0       0x0456
! u0456_0308    24      0       0x0457
! u0458 24      0       0x0458
! u0459 24      0       0x0459
! u045A 24      0       0x045A
! u045B 24      0       0x045B
! u043A_0301    24      0       0x045C
! u0438_0300    24      0       0x045D
! u0443_0306    24      0       0x045E
! u045F 24      0       0x045F
! u0460 24      0       0x0460
! u0461 24      0       0x0461
! u0462 24      0       0x0462
! u0463 24      0       0x0463
! u0464 24      0       0x0464
! u0465 24      0       0x0465
! u0466 24      0       0x0466
! u0467 24      0       0x0467
! u0468 24      0       0x0468
! u0469 24      0       0x0469
! u046A 24      0       0x046A
! u046B 24      0       0x046B
! u046C 24      0       0x046C
! u046D 24      0       0x046D
! u046E 24      0       0x046E
! u046F 24      0       0x046F
! u0470 24      0       0x0470
! u0471 24      0       0x0471
! u0472 24      0       0x0472
! u0473 24      0       0x0473
! u0474 24      0       0x0474
! u0475 24      0       0x0475
! u0474_030F    24      0       0x0476
! u0475_030F    24      0       0x0477
! u0478 24      0       0x0478
! u0479 24      0       0x0479
! u047A 24      0       0x047A
! u047B 24      0       0x047B
! u047C 24      0       0x047C
! u047D 24      0       0x047D
! u047E 24      0       0x047E
! u047F 24      0       0x047F
! u0480 24      0       0x0480
! u0481 24      0       0x0481
! u0482 24      0       0x0482
! u0483 0       0       0x0483
! u0484 0       0       0x0484
! u0485 0       0       0x0485
! u0486 0       0       0x0486
! u0488 0       0       0x0488
! u0489 0       0       0x0489
! u048A 24      0       0x048A
! u048B 24      0       0x048B
! u048C 24      0       0x048C
! u048D 24      0       0x048D
! u048E 24      0       0x048E
! u048F 24      0       0x048F
! u0490 24      0       0x0490
! u0491 24      0       0x0491
! u0492 24      0       0x0492
! u0493 24      0       0x0493
! u0494 24      0       0x0494
! u0495 24      0       0x0495
! u0496 24      0       0x0496
! u0497 24      0       0x0497
! u0498 24      0       0x0498
! u0499 24      0       0x0499
! u049A 24      0       0x049A
! u049B 24      0       0x049B
! u049C 24      0       0x049C
! u049D 24      0       0x049D
! u049E 24      0       0x049E
! u049F 24      0       0x049F
! u04A0 24      0       0x04A0
! u04A1 24      0       0x04A1
! u04A2 24      0       0x04A2
! u04A3 24      0       0x04A3
! u04A4 24      0       0x04A4
! u04A5 24      0       0x04A5
! u04A6 24      0       0x04A6
! u04A7 24      0       0x04A7
! u04A8 24      0       0x04A8
! u04A9 24      0       0x04A9
! u04AA 24      0       0x04AA
! u04AB 24      0       0x04AB
! u04AC 24      0       0x04AC
! u04AD 24      0       0x04AD
! u04AE 24      0       0x04AE
! u04AF 24      0       0x04AF
! u04B0 24      0       0x04B0
! u04B1 24      0       0x04B1
! u04B2 24      0       0x04B2
! u04B3 24      0       0x04B3
! u04B4 24      0       0x04B4
! u04B5 24      0       0x04B5
! u04B6 24      0       0x04B6
! u04B7 24      0       0x04B7
! u04B8 24      0       0x04B8
! u04B9 24      0       0x04B9
! u04BA 24      0       0x04BA
! u04BB 24      0       0x04BB
! u04BC 24      0       0x04BC
! u04BD 24      0       0x04BD
! u04BE 24      0       0x04BE
! u04BF 24      0       0x04BF
! u04C0 24      0       0x04C0
! u0416_0306    24      0       0x04C1
! u0436_0306    24      0       0x04C2
! u04C3 24      0       0x04C3
! u04C4 24      0       0x04C4
! u04C5 24      0       0x04C5
! u04C6 24      0       0x04C6
! u04C7 24      0       0x04C7
! u04C8 24      0       0x04C8
! u04C9 24      0       0x04C9
! u04CA 24      0       0x04CA
! u04CB 24      0       0x04CB
! u04CC 24      0       0x04CC
! u04CD 24      0       0x04CD
! u04CE 24      0       0x04CE
! u0410_0306    24      0       0x04D0
! u0430_0306    24      0       0x04D1
! u0410_0308    24      0       0x04D2
! u0430_0308    24      0       0x04D3
! u04D4 24      0       0x04D4
! u04D5 24      0       0x04D5
! u0415_0306    24      0       0x04D6
! u0435_0306    24      0       0x04D7
! u04D8 24      0       0x04D8
! u04D9 24      0       0x04D9
! u04D8_0308    24      0       0x04DA
! u04D9_0308    24      0       0x04DB
! u0416_0308    24      0       0x04DC
! u0436_0308    24      0       0x04DD
! u0417_0308    24      0       0x04DE
! u0437_0308    24      0       0x04DF
! u04E0 24      0       0x04E0
! u04E1 24      0       0x04E1
! u0418_0304    24      0       0x04E2
! u0438_0304    24      0       0x04E3
! u0418_0308    24      0       0x04E4
! u0438_0308    24      0       0x04E5
! u041E_0308    24      0       0x04E6
! u043E_0308    24      0       0x04E7
! u04E8 24      0       0x04E8
! u04E9 24      0       0x04E9
! u04E8_0308    24      0       0x04EA
! u04E9_0308    24      0       0x04EB
! u042D_0308    24      0       0x04EC
! u044D_0308    24      0       0x04ED
! u0423_0304    24      0       0x04EE
! u0443_0304    24      0       0x04EF
! u0423_0308    24      0       0x04F0
! u0443_0308    24      0       0x04F1
! u0423_030B    24      0       0x04F2
! u0443_030B    24      0       0x04F3
! u0427_0308    24      0       0x04F4
! u0447_0308    24      0       0x04F5
! u042B_0308    24      0       0x04F8
! u044B_0308    24      0       0x04F9
! u0500 24      0       0x0500
! u0501 24      0       0x0501
! u0502 24      0       0x0502
! u0503 24      0       0x0503
! u0504 24      0       0x0504
! u0505 24      0       0x0505
! u0506 24      0       0x0506
! u0507 24      0       0x0507
! u0508 24      0       0x0508
! u0509 24      0       0x0509
! u050A 24      0       0x050A
! u050B 24      0       0x050B
! u050C 24      0       0x050C
! u050D 24      0       0x050D
! u050E 24      0       0x050E
! u050F 24      0       0x050F
! en    24      0       0x2013
! em    24      0       0x2014
! `     24      0       0x2018
  oq    "
! '     24      0       0x2019
  cq    "
! bq    24      0       0x201A
! lq    24      0       0x201C
! rq    24      0       0x201D
! Bq    24      0       0x201E
! dg    24      0       0x2020
! dd    24      0       0x2021
! bu    24      0       0x2022
! %0    24      0       0x2030
! fm    24      0       0x2032
! sd    24      0       0x2033
! fo    24      0       0x2039
! fc    24      0       0x203A
! rn    24      0       0x203E
! f/    24      0       0x2044
! Eu    24      0       0x20AC
  eu    "
! -h    24      0       0x210F
  hbar  "
! Im    24      0       0x2111
! wp    24      0       0x2118
! Re    24      0       0x211C
! tm    24      0       0x2122
! Ah    24      0       0x2135
! 18    24      0       0x215B
! 38    24      0       0x215C
! 58    24      0       0x215D
! 78    24      0       0x215E
! <-    24      0       0x2190
! ua    24      0       0x2191
! ->    24      0       0x2192
! da    24      0       0x2193
! <>    24      0       0x2194
! va    24      0       0x2195
! CR    24      0       0x21B5
! lA    24      0       0x21D0
! uA    24      0       0x21D1
! rA    24      0       0x21D2
! dA    24      0       0x21D3
! hA    24      0       0x21D4
! vA    24      0       0x21D5
! fa    24      0       0x2200
! pd    24      0       0x2202
! te    24      0       0x2203
! es    24      0       0x2205
! gr    24      0       0x2207
! mo    24      0       0x2208
! nm    24      0       0x2209
! st    24      0       0x220B
! product       24      0       0x220F
! coproduct     24      0       0x2210
! sum   24      0       0x2211
! \-    24      0       0x2212
  mi    "
! -+    24      0       0x2213
! **    24      0       0x2217
! sr    24      0       0x221A
  sqrt  "
! pt    24      0       0x221D
! if    24      0       0x221E
! /_    24      0       0x2220
! AN    24      0       0x2227
! OR    24      0       0x2228
! ca    24      0       0x2229
! cu    24      0       0x222A
! is    24      0       0x222B
  integral      "
! tf    24      0       0x2234
  3d    "
! ap    24      0       0x223C
! |=    24      0       0x2243
! =~    24      0       0x2245
! ~~    24      0       0x2248
  ~=    "
! !=    24      0       0x2260
! ==    24      0       0x2261
! ne    24      0       0x2262
! <=    24      0       0x2264
! >=    24      0       0x2265
! <<    24      0       0x226A
! >>    24      0       0x226B
! sb    24      0       0x2282
! sp    24      0       0x2283
! nb    24      0       0x2284
! nc    24      0       0x2285
! ib    24      0       0x2286
! ip    24      0       0x2287
! c+    24      0       0x2295
! c*    24      0       0x2297
! pp    24      0       0x22A5
! md    24      0       0x22C5
! lc    24      0       0x2308
! rc    24      0       0x2309
! lf    24      0       0x230A
! rf    24      0       0x230B
! la    24      0       0x2329
! ra    24      0       0x232A
! parenlefttp   24      0       0x239B
! parenleftex   24      0       0x239C
! parenleftbt   24      0       0x239D
! parenrighttp  24      0       0x239E
! parenrightex  24      0       0x239F
! parenrightbt  24      0       0x23A0
! bracketlefttp 24      0       0x23A1
! bracketleftex 24      0       0x23A2
! bracketleftbt 24      0       0x23A3
! bracketrighttp        24      0       0x23A4
! bracketrightex        24      0       0x23A5
! bracketrightbt        24      0       0x23A6
! lt    24      0       0x23A7
  bracelefttp   "
! lk    24      0       0x23A8
  braceleftmid  "
! lb    24      0       0x23A9
  braceleftbt   "
! bv    24      0       0x23AA
  braceex       "
  braceleftex   "
  bracerightex  "
! rt    24      0       0x23AB
  bracerighttp  "
! rk    24      0       0x23AC
  bracerightmid "
! rb    24      0       0x23AD
  bracerightbt  "
! u23AE 24      0       0x23AE
! an    24      0       0x23AF
! br    24      0       0x2502
! sq    24      0       0x25A1
! lz    24      0       0x25CA
! ci    24      0       0x25CB
! lh    24      0       0x261C
! rh    24      0       0x261E
! SP    24      0       0x2660
! CL    24      0       0x2663
! HE    24      0       0x2665
! DI    24      0       0x2666
! OK    24      0       0x2713
*** groff-20060113.orig/src/devices/grohtml/post-html.cpp       2006-01-22 
21:44:18.000000000 +0100
--- groff-20060113/src/devices/grohtml/post-html.cpp    2006-01-17 
00:12:15.000000000 +0100
***************
*** 67,73 ****
   *  prototypes
   */
  
! char *get_html_translation (font *f, const string &name);
  int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, 
int b, int and_single);
  
  
--- 67,74 ----
   *  prototypes
   */
  
! const char *get_html_translation (font *f, const string &name);
! static const char *get_html_entity(unsigned int code);
  int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, 
int b, int and_single);
  
  
***************
*** 1392,1398 ****
                           int is_tag)
  {
    string html_string;
!   char *html_glyph;
    int i=0;
  
    if (s->f == NULL)
--- 1393,1399 ----
                           int is_tag)
  {
    string html_string;
!   const char *html_glyph;
    int i=0;
  
    if (s->f == NULL)
***************
*** 4239,4250 ****
    if (sbuf_style.f == NULL)
      return;
  
!   char *html_glyph = NULL;
    unsigned int code = sbuf_style.f->get_code(idx);
  
    if (s.empty()) {
      if (sbuf_style.f->contains(idx))
!       html_glyph = (char *)sbuf_style.f->get_special_device_encoding(idx);
      else
        html_glyph = NULL;
      
--- 4240,4251 ----
    if (sbuf_style.f == NULL)
      return;
  
!   const char *html_glyph = NULL;
    unsigned int code = sbuf_style.f->get_code(idx);
  
    if (s.empty()) {
      if (sbuf_style.f->contains(idx))
!       html_glyph = get_html_entity(sbuf_style.f->get_code(idx));
      else
        html_glyph = NULL;
      
***************
*** 4297,4303 ****
   *                         return the device encoding for such character.
   */
  
! char *get_html_translation (font *f, const string &name)
  {
    int idx;
  
--- 4298,4304 ----
   *                         return the device encoding for such character.
   */
  
! const char *get_html_translation (font *f, const string &name)
  {
    int idx;
  
***************
*** 4306,4318 ****
    else {
      idx = f->name_to_index((char *)(name + '\0').contents());
      if (f->contains(idx))
!       return (char *)f->get_special_device_encoding(idx);
      else
        return NULL;
    }
  }
  
  /*
   *  overstrike - returns TRUE if the glyph (i, name) is going to overstrike
   *               a previous glyph in sbuf.
   *               If TRUE the font is changed to bold and the previous sbuf
--- 4307,4578 ----
    else {
      idx = f->name_to_index((char *)(name + '\0').contents());
      if (f->contains(idx))
!       return get_html_entity(f->get_code(idx));
      else
        return NULL;
    }
  }
  
  /*
+  * get_html_entity - given a Unicode character's code point, return a
+  *                   HTML entity that represents the character, if the
+  *                   character cannot represent itself in all contexts.
+  * The return value, if non-NULL, is allocated in a static buffer and is
+  * only valid until the next call of this function.
+  */
+ static const char *get_html_entity (unsigned int code)
+ {
+   if (code < UNICODE_DESC_START) {
+     switch (code) {
+       case 0x0022: return "&quot;";
+       case 0x0026: return "&amp;";
+       case 0x003C: return "&lt;";
+       case 0x003E: return "&gt;";
+       default: return NULL;
+     }
+   } else {
+     switch (code) {
+       case 0x00A0: return "&nbsp;";
+       case 0x00A1: return "&iexcl;";
+       case 0x00A2: return "&cent;";
+       case 0x00A3: return "&pound;";
+       case 0x00A4: return "&curren;";
+       case 0x00A5: return "&yen;";
+       case 0x00A6: return "&brvbar;";
+       case 0x00A7: return "&sect;";
+       case 0x00A8: return "&uml;";
+       case 0x00A9: return "&copy;";
+       case 0x00AA: return "&ordf;";
+       case 0x00AB: return "&laquo;";
+       case 0x00AC: return "&not;";
+       case 0x00AE: return "&reg;";
+       case 0x00AF: return "&macr;";
+       case 0x00B0: return "&deg;";
+       case 0x00B1: return "&plusmn;";
+       case 0x00B2: return "&sup2;";
+       case 0x00B3: return "&sup3;";
+       case 0x00B4: return "&acute;";
+       case 0x00B5: return "&micro;";
+       case 0x00B6: return "&para;";
+       case 0x00B7: return "&middot;";
+       case 0x00B8: return "&cedil;";
+       case 0x00B9: return "&sup1;";
+       case 0x00BA: return "&ordm;";
+       case 0x00BB: return "&raquo;";
+       case 0x00BC: return "&frac14;";
+       case 0x00BD: return "&frac12;";
+       case 0x00BE: return "&frac34;";
+       case 0x00BF: return "&iquest;";
+       case 0x00C0: return "&Agrave;";
+       case 0x00C1: return "&Aacute;";
+       case 0x00C2: return "&Acirc;";
+       case 0x00C3: return "&Atilde;";
+       case 0x00C4: return "&Auml;";
+       case 0x00C5: return "&Aring;";
+       case 0x00C6: return "&AElig;";
+       case 0x00C7: return "&Ccedil;";
+       case 0x00C8: return "&Egrave;";
+       case 0x00C9: return "&Eacute;";
+       case 0x00CA: return "&Ecirc;";
+       case 0x00CB: return "&Euml;";
+       case 0x00CC: return "&Igrave;";
+       case 0x00CD: return "&Iacute;";
+       case 0x00CE: return "&Icirc;";
+       case 0x00CF: return "&Iuml;";
+       case 0x00D0: return "&ETH;";
+       case 0x00D1: return "&Ntilde;";
+       case 0x00D2: return "&Ograve;";
+       case 0x00D3: return "&Oacute;";
+       case 0x00D4: return "&Ocirc;";
+       case 0x00D5: return "&Otilde;";
+       case 0x00D6: return "&Ouml;";
+       case 0x00D7: return "&times;";
+       case 0x00D8: return "&Oslash;";
+       case 0x00D9: return "&Ugrave;";
+       case 0x00DA: return "&Uacute;";
+       case 0x00DB: return "&Ucirc;";
+       case 0x00DC: return "&Uuml;";
+       case 0x00DD: return "&Yacute;";
+       case 0x00DE: return "&THORN;";
+       case 0x00DF: return "&szlig;";
+       case 0x00E0: return "&agrave;";
+       case 0x00E1: return "&aacute;";
+       case 0x00E2: return "&acirc;";
+       case 0x00E3: return "&atilde;";
+       case 0x00E4: return "&auml;";
+       case 0x00E5: return "&aring;";
+       case 0x00E6: return "&aelig;";
+       case 0x00E7: return "&ccedil;";
+       case 0x00E8: return "&egrave;";
+       case 0x00E9: return "&eacute;";
+       case 0x00EA: return "&ecirc;";
+       case 0x00EB: return "&euml;";
+       case 0x00EC: return "&igrave;";
+       case 0x00ED: return "&iacute;";
+       case 0x00EE: return "&icirc;";
+       case 0x00EF: return "&iuml;";
+       case 0x00F0: return "&eth;";
+       case 0x00F1: return "&ntilde;";
+       case 0x00F2: return "&ograve;";
+       case 0x00F3: return "&oacute;";
+       case 0x00F4: return "&ocirc;";
+       case 0x00F5: return "&otilde;";
+       case 0x00F6: return "&ouml;";
+       case 0x00F7: return "&divide;";
+       case 0x00F8: return "&oslash;";
+       case 0x00F9: return "&ugrave;";
+       case 0x00FA: return "&uacute;";
+       case 0x00FB: return "&ucirc;";
+       case 0x00FC: return "&uuml;";
+       case 0x00FD: return "&yacute;";
+       case 0x00FE: return "&thorn;";
+       case 0x00FF: return "&yuml;";
+       case 0x0152: return "&OElig;";
+       case 0x0153: return "&oelig;";
+       case 0x0160: return "&Scaron;";
+       case 0x0161: return "&scaron;";
+       case 0x0178: return "&Yuml;";
+       case 0x0192: return "&fnof;";
+       case 0x0391: return "&Alpha;";
+       case 0x0392: return "&Beta;";
+       case 0x0393: return "&Gamma;";
+       case 0x0394: return "&Delta;";
+       case 0x0395: return "&Epsilon;";
+       case 0x0396: return "&Zeta;";
+       case 0x0397: return "&Eta;";
+       case 0x0398: return "&Theta;";
+       case 0x0399: return "&Iota;";
+       case 0x039A: return "&Kappa;";
+       case 0x039B: return "&Lambda;";
+       case 0x039C: return "&Mu;";
+       case 0x039D: return "&Nu;";
+       case 0x039E: return "&Xi;";
+       case 0x039F: return "&Omicron;";
+       case 0x03A0: return "&Pi;";
+       case 0x03A1: return "&Rho;";
+       case 0x03A3: return "&Sigma;";
+       case 0x03A4: return "&Tau;";
+       case 0x03A5: return "&Upsilon;";
+       case 0x03A6: return "&Phi;";
+       case 0x03A7: return "&Chi;";
+       case 0x03A8: return "&Psi;";
+       case 0x03A9: return "&Omega;";
+       case 0x03B1: return "&alpha;";
+       case 0x03B2: return "&beta;";
+       case 0x03B3: return "&gamma;";
+       case 0x03B4: return "&delta;";
+       case 0x03B5: return "&epsilon;";
+       case 0x03B6: return "&zeta;";
+       case 0x03B7: return "&eta;";
+       case 0x03B8: return "&theta;";
+       case 0x03B9: return "&iota;";
+       case 0x03BA: return "&kappa;";
+       case 0x03BB: return "&lambda;";
+       case 0x03BC: return "&mu;";
+       case 0x03BD: return "&nu;";
+       case 0x03BE: return "&xi;";
+       case 0x03BF: return "&omicron;";
+       case 0x03C0: return "&pi;";
+       case 0x03C1: return "&rho;";
+       case 0x03C2: return "&sigmaf;";
+       case 0x03C3: return "&sigma;";
+       case 0x03C4: return "&tau;";
+       case 0x03C5: return "&upsilon;";
+       case 0x03C6: return "&phi;";
+       case 0x03C7: return "&chi;";
+       case 0x03C8: return "&psi;";
+       case 0x03C9: return "&omega;";
+       case 0x03D1: return "&thetasym;";
+       case 0x03D6: return "&piv;";
+       case 0x2013: return "&ndash;";
+       case 0x2014: return "&mdash;";
+       case 0x2018: return "&lsquo;";
+       case 0x2019: return "&rsquo;";
+       case 0x201A: return "&sbquo;";
+       case 0x201C: return "&ldquo;";
+       case 0x201D: return "&rdquo;";
+       case 0x201E: return "&bdquo;";
+       case 0x2020: return "&dagger;";
+       case 0x2021: return "&Dagger;";
+       case 0x2022: return "&bull;";
+       case 0x2030: return "&permil;";
+       case 0x2032: return "&prime;";
+       case 0x2033: return "&Prime;";
+       case 0x2039: return "&lsaquo;";
+       case 0x203A: return "&rsaquo;";
+       case 0x203E: return "&oline;";
+       case 0x2044: return "&frasl;";
+       case 0x20AC: return "&euro;";
+       case 0x2111: return "&image;";
+       case 0x2118: return "&weierp;";
+       case 0x211C: return "&real;";
+       case 0x2122: return "&trade;";
+       case 0x2135: return "&alefsym;";
+       case 0x2190: return "&larr;";
+       case 0x2191: return "&uarr;";
+       case 0x2192: return "&rarr;";
+       case 0x2193: return "&darr;";
+       case 0x2194: return "&harr;";
+       case 0x21D0: return "&lArr;";
+       case 0x21D1: return "&uArr;";
+       case 0x21D2: return "&rArr;";
+       case 0x21D3: return "&dArr;";
+       case 0x21D4: return "&hArr;";
+       case 0x2200: return "&forall;";
+       case 0x2202: return "&part;";
+       case 0x2203: return "&exist;";
+       case 0x2205: return "&empty;";
+       case 0x2207: return "&nabla;";
+       case 0x2208: return "&isin;";
+       case 0x2209: return "&notin;";
+       case 0x220B: return "&ni;";
+       case 0x220F: return "&prod;";
+       case 0x2211: return "&sum;";
+       case 0x2212: return "&minus;";
+       case 0x2217: return "&lowast;";
+       case 0x221A: return "&radic;";
+       case 0x221D: return "&prop;";
+       case 0x221E: return "&infin;";
+       case 0x2220: return "&ang;";
+       case 0x2227: return "&and;";
+       case 0x2228: return "&or;";
+       case 0x2229: return "&cap;";
+       case 0x222A: return "&cup;";
+       case 0x222B: return "&int;";
+       case 0x2234: return "&there4;";
+       case 0x223C: return "&sim;";
+       case 0x2245: return "&cong;";
+       case 0x2248: return "&asymp;";
+       case 0x2260: return "&ne;";
+       case 0x2261: return "&equiv;";
+       case 0x2264: return "&le;";
+       case 0x2265: return "&ge;";
+       case 0x2282: return "&sub;";
+       case 0x2283: return "&sup;";
+       case 0x2284: return "&nsub;";
+       case 0x2286: return "&sube;";
+       case 0x2287: return "&supe;";
+       case 0x2295: return "&oplus;";
+       case 0x2297: return "&otimes;";
+       case 0x22A5: return "&perp;";
+       case 0x22C5: return "&sdot;";
+       case 0x2308: return "&lceil;";
+       case 0x2309: return "&rceil;";
+       case 0x230A: return "&lfloor;";
+       case 0x230B: return "&rfloor;";
+       case 0x2329: return "&lang;";
+       case 0x232A: return "&rang;";
+       case 0x25CA: return "&loz;";
+       case 0x2660: return "&spades;";
+       case 0x2663: return "&clubs;";
+       case 0x2665: return "&hearts;";
+       case 0x2666: return "&diams;";
+       default: return to_unicode(code);
+     }
+   }
+ }
+  
+ /*
   *  overstrike - returns TRUE if the glyph (i, name) is going to overstrike
   *               a previous glyph in sbuf.
   *               If TRUE the font is changed to bold and the previous sbuf





reply via email to

[Prev in Thread] Current Thread [Next in Thread]