[gs-commits] rev 10886 - in branches/gs_2_colors: Resource/Init base doc examples/cjk freetype/include/freetype lib psi toolbin toolbin/localcluster toolbin/tests

robin at ghostscript.com robin at ghostscript.com
Tue Mar 9 14:55:52 UTC 2010


Author: robin
Date: 2010-03-09 14:55:48 +0000 (Tue, 09 Mar 2010)
New Revision: 10886

Added:
   branches/gs_2_colors/toolbin/localcluster/bmps2html.pl
   branches/gs_2_colors/toolbin/localcluster/pngs2html.pl
Modified:
   branches/gs_2_colors/Resource/Init/gs_agl.ps
   branches/gs_2_colors/Resource/Init/gs_ttf.ps
   branches/gs_2_colors/Resource/Init/pdf_main.ps
   branches/gs_2_colors/base/Makefile.in
   branches/gs_2_colors/base/configure.ac
   branches/gs_2_colors/base/freetype.mak
   branches/gs_2_colors/base/gdevpx.c
   branches/gs_2_colors/base/gdevtsep.c
   branches/gs_2_colors/base/gdevwts.c
   branches/gs_2_colors/base/gs.mak
   branches/gs_2_colors/base/gsnogc.c
   branches/gs_2_colors/base/gxipixel.c
   branches/gs_2_colors/base/winlib.mak
   branches/gs_2_colors/doc/Make.htm
   branches/gs_2_colors/doc/Use.htm
   branches/gs_2_colors/examples/cjk/gscjk_ak.ps
   branches/gs_2_colors/freetype/include/freetype/freetype.h
   branches/gs_2_colors/lib/mkcidfm.ps
   branches/gs_2_colors/psi/dmmain.c
   branches/gs_2_colors/psi/dmmain.r
   branches/gs_2_colors/psi/dxmain.c
   branches/gs_2_colors/psi/dxmainc.c
   branches/gs_2_colors/psi/fapi_ft.c
   branches/gs_2_colors/psi/int.mak
   branches/gs_2_colors/psi/msvc32.mak
   branches/gs_2_colors/psi/psromfs.mak
   branches/gs_2_colors/psi/zfapi.c
   branches/gs_2_colors/toolbin/bmpcmp.c
   branches/gs_2_colors/toolbin/bugsByEngineer.pl
   branches/gs_2_colors/toolbin/localcluster/build.pl
   branches/gs_2_colors/toolbin/localcluster/clustermaster.pl
   branches/gs_2_colors/toolbin/localcluster/clusterpush.pl
   branches/gs_2_colors/toolbin/localcluster/compare.pl
   branches/gs_2_colors/toolbin/localcluster/run.pl
   branches/gs_2_colors/toolbin/tests/fuzzy.c
Log:
Merge trunk up to gs_2_colors branch again (revisions 10813 to 10885).




Modified: branches/gs_2_colors/Resource/Init/gs_agl.ps
===================================================================
--- branches/gs_2_colors/Resource/Init/gs_agl.ps	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/Resource/Init/gs_agl.ps	2010-03-09 14:55:48 UTC (rev 10886)
@@ -15,1055 +15,4291 @@
 
 % $Id$
 
-% This file was derived from the Adobe Glyph List, version 1.2, dated
-% 22 Oct 1998, at
-%	http://partners.adobe.com/asn/developer/typeforum/glyphlist.txt
+% This file was derived from the Adobe Glyph List, version 2.0, dated
+% September 20, 2002.
+% See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
 % That file does not contain any copyright notice.
 
-% The AdobeGlyphList dictionary maps glyph names to Unicode values.
-% Nearly all names map to a single value; however, a few names map to
-% multiple values.  See the above file, and also
-%	http://www.adobe.com/devnet/opentype/archives/glyph.html
-% for more details.
-
-/AdobeGlyphList 1500 dict
-dup /A 16#0041 put
-dup /AE 16#00C6 put
-dup /AEacute 16#01FC put
-dup /AEsmall 16#F7E6 put
-dup /Aacute 16#00C1 put
-dup /Aacutesmall 16#F7E1 put
-dup /Abreve 16#0102 put
-dup /Acircumflex 16#00C2 put
-dup /Acircumflexsmall 16#F7E2 put
-dup /Acute 16#F6C9 put
-dup /Acutesmall 16#F7B4 put
-dup /Adieresis 16#00C4 put
-dup /Adieresissmall 16#F7E4 put
-dup /Agrave 16#00C0 put
-dup /Agravesmall 16#F7E0 put
-dup /Alpha 16#0391 put
-dup /Alphatonos 16#0386 put
-dup /Amacron 16#0100 put
-dup /Aogonek 16#0104 put
-dup /Aring 16#00C5 put
-dup /Aringacute 16#01FA put
-dup /Aringsmall 16#F7E5 put
-dup /Asmall 16#F761 put
-dup /Atilde 16#00C3 put
-dup /Atildesmall 16#F7E3 put
-dup /B 16#0042 put
-dup /Beta 16#0392 put
-dup /Brevesmall 16#F6F4 put
-dup /Bsmall 16#F762 put
-dup /C 16#0043 put
-dup /Cacute 16#0106 put
-dup /Caron 16#F6CA put
-dup /Caronsmall 16#F6F5 put
-dup /Ccaron 16#010C put
-dup /Ccedilla 16#00C7 put
-dup /Ccedillasmall 16#F7E7 put
-dup /Ccircumflex 16#0108 put
-dup /Cdotaccent 16#010A put
-dup /Cedillasmall 16#F7B8 put
-dup /Chi 16#03A7 put
-dup /Circumflexsmall 16#F6F6 put
-dup /Csmall 16#F763 put
-dup /D 16#0044 put
-dup /Dcaron 16#010E put
-dup /Dcroat 16#0110 put
-dup /Delta [16#2206 16#0394] put
-dup /Dieresis 16#F6CB put
-dup /DieresisAcute 16#F6CC put
-dup /DieresisGrave 16#F6CD put
-dup /Dieresissmall 16#F7A8 put
-dup /Dotaccentsmall 16#F6F7 put
-dup /Dsmall 16#F764 put
-dup /E 16#0045 put
-dup /Eacute 16#00C9 put
-dup /Eacutesmall 16#F7E9 put
-dup /Ebreve 16#0114 put
-dup /Ecaron 16#011A put
-dup /Ecircumflex 16#00CA put
-dup /Ecircumflexsmall 16#F7EA put
-dup /Edieresis 16#00CB put
-dup /Edieresissmall 16#F7EB put
-dup /Edotaccent 16#0116 put
-dup /Egrave 16#00C8 put
-dup /Egravesmall 16#F7E8 put
-dup /Emacron 16#0112 put
-dup /Eng 16#014A put
-dup /Eogonek 16#0118 put
-dup /Epsilon 16#0395 put
-dup /Epsilontonos 16#0388 put
-dup /Esmall 16#F765 put
-dup /Eta 16#0397 put
-dup /Etatonos 16#0389 put
-dup /Eth 16#00D0 put
-dup /Ethsmall 16#F7F0 put
-dup /Euro 16#20AC put
-dup /F 16#0046 put
-dup /Fsmall 16#F766 put
-dup /G 16#0047 put
-dup /Gamma 16#0393 put
-dup /Gbreve 16#011E put
-dup /Gcaron 16#01E6 put
-dup /Gcircumflex 16#011C put
-dup /Gcommaaccent 16#0122 put
-dup /Gdotaccent 16#0120 put
-dup /Grave 16#F6CE put
-dup /Gravesmall 16#F760 put
-dup /Gsmall 16#F767 put
-dup /H 16#0048 put
-dup /H18533 16#25CF put
-dup /H18543 16#25AA put
-dup /H18551 16#25AB put
-dup /H22073 16#25A1 put
-dup /Hbar 16#0126 put
-dup /Hcircumflex 16#0124 put
-dup /Hsmall 16#F768 put
-dup /Hungarumlaut 16#F6CF put
-dup /Hungarumlautsmall 16#F6F8 put
-dup /I 16#0049 put
-dup /IJ 16#0132 put
-dup /Iacute 16#00CD put
-dup /Iacutesmall 16#F7ED put
-dup /Ibreve 16#012C put
-dup /Icircumflex 16#00CE put
-dup /Icircumflexsmall 16#F7EE put
-dup /Idieresis 16#00CF put
-dup /Idieresissmall 16#F7EF put
-dup /Idotaccent 16#0130 put
-dup /Ifraktur 16#2111 put
-dup /Igrave 16#00CC put
-dup /Igravesmall 16#F7EC put
-dup /Imacron 16#012A put
-dup /Iogonek 16#012E put
-dup /Iota 16#0399 put
-dup /Iotadieresis 16#03AA put
-dup /Iotatonos 16#038A put
-dup /Ismall 16#F769 put
-dup /Itilde 16#0128 put
-dup /J 16#004A put
-dup /Jcircumflex 16#0134 put
-dup /Jsmall 16#F76A put
-dup /K 16#004B put
-dup /Kappa 16#039A put
-dup /Kcommaaccent 16#0136 put
-dup /Ksmall 16#F76B put
-dup /L 16#004C put
-dup /LL 16#F6BF put
-dup /Lacute 16#0139 put
-dup /Lambda 16#039B put
-dup /Lcaron 16#013D put
-dup /Lcommaaccent 16#013B put
-dup /Ldot 16#013F put
-dup /Lslash 16#0141 put
-dup /Lslashsmall 16#F6F9 put
-dup /Lsmall 16#F76C put
-dup /M 16#004D put
-dup /Macron 16#F6D0 put
-dup /Macronsmall 16#F7AF put
-dup /Msmall 16#F76D put
-dup /Mu 16#039C put
-dup /N 16#004E put
-dup /Nacute 16#0143 put
-dup /Ncaron 16#0147 put
-dup /Ncommaaccent 16#0145 put
-dup /Nsmall 16#F76E put
-dup /Ntilde 16#00D1 put
-dup /Ntildesmall 16#F7F1 put
-dup /Nu 16#039D put
-dup /O 16#004F put
-dup /OE 16#0152 put
-dup /OEsmall 16#F6FA put
-dup /Oacute 16#00D3 put
-dup /Oacutesmall 16#F7F3 put
-dup /Obreve 16#014E put
-dup /Ocircumflex 16#00D4 put
-dup /Ocircumflexsmall 16#F7F4 put
-dup /Odieresis 16#00D6 put
-dup /Odieresissmall 16#F7F6 put
-dup /Ogoneksmall 16#F6FB put
-dup /Ograve 16#00D2 put
-dup /Ogravesmall 16#F7F2 put
-dup /Ohorn 16#01A0 put
-dup /Ohungarumlaut 16#0150 put
-dup /Omacron 16#014C put
-dup /Omega [16#2126 16#03A9] put
-dup /Omegatonos 16#038F put
-dup /Omicron 16#039F put
-dup /Omicrontonos 16#038C put
-dup /Oslash 16#00D8 put
-dup /Oslashacute 16#01FE put
-dup /Oslashsmall 16#F7F8 put
-dup /Osmall 16#F76F put
-dup /Otilde 16#00D5 put
-dup /Otildesmall 16#F7F5 put
-dup /P 16#0050 put
-dup /Phi 16#03A6 put
-dup /Pi 16#03A0 put
-dup /Psi 16#03A8 put
-dup /Psmall 16#F770 put
-dup /Q 16#0051 put
-dup /Qsmall 16#F771 put
-dup /R 16#0052 put
-dup /Racute 16#0154 put
-dup /Rcaron 16#0158 put
-dup /Rcommaaccent 16#0156 put
-dup /Rfraktur 16#211C put
-dup /Rho 16#03A1 put
-dup /Ringsmall 16#F6FC put
-dup /Rsmall 16#F772 put
-dup /S 16#0053 put
-dup /SF010000 16#250C put
-dup /SF020000 16#2514 put
-dup /SF030000 16#2510 put
-dup /SF040000 16#2518 put
-dup /SF050000 16#253C put
-dup /SF060000 16#252C put
-dup /SF070000 16#2534 put
-dup /SF080000 16#251C put
-dup /SF090000 16#2524 put
-dup /SF100000 16#2500 put
-dup /SF110000 16#2502 put
-dup /SF190000 16#2561 put
-dup /SF200000 16#2562 put
-dup /SF210000 16#2556 put
-dup /SF220000 16#2555 put
-dup /SF230000 16#2563 put
-dup /SF240000 16#2551 put
-dup /SF250000 16#2557 put
-dup /SF260000 16#255D put
-dup /SF270000 16#255C put
-dup /SF280000 16#255B put
-dup /SF360000 16#255E put
-dup /SF370000 16#255F put
-dup /SF380000 16#255A put
-dup /SF390000 16#2554 put
-dup /SF400000 16#2569 put
-dup /SF410000 16#2566 put
-dup /SF420000 16#2560 put
-dup /SF430000 16#2550 put
-dup /SF440000 16#256C put
-dup /SF450000 16#2567 put
-dup /SF460000 16#2568 put
-dup /SF470000 16#2564 put
-dup /SF480000 16#2565 put
-dup /SF490000 16#2559 put
-dup /SF500000 16#2558 put
-dup /SF510000 16#2552 put
-dup /SF520000 16#2553 put
-dup /SF530000 16#256B put
-dup /SF540000 16#256A put
-dup /Sacute 16#015A put
-dup /Scaron 16#0160 put
-dup /Scaronsmall 16#F6FD put
-dup /Scedilla [16#015E 16#F6C1] put
-dup /Scircumflex 16#015C put
-dup /Scommaaccent 16#0218 put
-dup /Sigma 16#03A3 put
-dup /Ssmall 16#F773 put
-dup /T 16#0054 put
-dup /Tau 16#03A4 put
-dup /Tbar 16#0166 put
-dup /Tcaron 16#0164 put
-dup /Tcommaaccent [16#0162 16#021A] put
-dup /Theta 16#0398 put
-dup /Thorn 16#00DE put
-dup /Thornsmall 16#F7FE put
-dup /Tildesmall 16#F6FE put
-dup /Tsmall 16#F774 put
-dup /U 16#0055 put
-dup /Uacute 16#00DA put
-dup /Uacutesmall 16#F7FA put
-dup /Ubreve 16#016C put
-dup /Ucircumflex 16#00DB put
-dup /Ucircumflexsmall 16#F7FB put
-dup /Udieresis 16#00DC put
-dup /Udieresissmall 16#F7FC put
-dup /Ugrave 16#00D9 put
-dup /Ugravesmall 16#F7F9 put
-dup /Uhorn 16#01AF put
-dup /Uhungarumlaut 16#0170 put
-dup /Umacron 16#016A put
-dup /Uogonek 16#0172 put
-dup /Upsilon 16#03A5 put
-dup /Upsilon1 16#03D2 put
-dup /Upsilondieresis 16#03AB put
-dup /Upsilontonos 16#038E put
-dup /Uring 16#016E put
-dup /Usmall 16#F775 put
-dup /Utilde 16#0168 put
-dup /V 16#0056 put
-dup /Vsmall 16#F776 put
-dup /W 16#0057 put
-dup /Wacute 16#1E82 put
-dup /Wcircumflex 16#0174 put
-dup /Wdieresis 16#1E84 put
-dup /Wgrave 16#1E80 put
-dup /Wsmall 16#F777 put
-dup /X 16#0058 put
-dup /Xi 16#039E put
-dup /Xsmall 16#F778 put
-dup /Y 16#0059 put
-dup /Yacute 16#00DD put
-dup /Yacutesmall 16#F7FD put
-dup /Ycircumflex 16#0176 put
-dup /Ydieresis 16#0178 put
-dup /Ydieresissmall 16#F7FF put
-dup /Ygrave 16#1EF2 put
-dup /Ysmall 16#F779 put
-dup /Z 16#005A put
-dup /Zacute 16#0179 put
-dup /Zcaron 16#017D put
-dup /Zcaronsmall 16#F6FF put
-dup /Zdotaccent 16#017B put
-dup /Zeta 16#0396 put
-dup /Zsmall 16#F77A put
-dup /a 16#0061 put
-dup /aacute 16#00E1 put
-dup /abreve 16#0103 put
-dup /acircumflex 16#00E2 put
-dup /acute 16#00B4 put
-dup /acutecomb 16#0301 put
-dup /adieresis 16#00E4 put
-dup /ae 16#00E6 put
-dup /aeacute 16#01FD put
-dup /afii00208 16#2015 put
-dup /afii10017 16#0410 put
-dup /afii10018 16#0411 put
-dup /afii10019 16#0412 put
-dup /afii10020 16#0413 put
-dup /afii10021 16#0414 put
-dup /afii10022 16#0415 put
-dup /afii10023 16#0401 put
-dup /afii10024 16#0416 put
-dup /afii10025 16#0417 put
-dup /afii10026 16#0418 put
-dup /afii10027 16#0419 put
-dup /afii10028 16#041A put
-dup /afii10029 16#041B put
-dup /afii10030 16#041C put
-dup /afii10031 16#041D put
-dup /afii10032 16#041E put
-dup /afii10033 16#041F put
-dup /afii10034 16#0420 put
-dup /afii10035 16#0421 put
-dup /afii10036 16#0422 put
-dup /afii10037 16#0423 put
-dup /afii10038 16#0424 put
-dup /afii10039 16#0425 put
-dup /afii10040 16#0426 put
-dup /afii10041 16#0427 put
-dup /afii10042 16#0428 put
-dup /afii10043 16#0429 put
-dup /afii10044 16#042A put
-dup /afii10045 16#042B put
-dup /afii10046 16#042C put
-dup /afii10047 16#042D put
-dup /afii10048 16#042E put
-dup /afii10049 16#042F put
-dup /afii10050 16#0490 put
-dup /afii10051 16#0402 put
-dup /afii10052 16#0403 put
-dup /afii10053 16#0404 put
-dup /afii10054 16#0405 put
-dup /afii10055 16#0406 put
-dup /afii10056 16#0407 put
-dup /afii10057 16#0408 put
-dup /afii10058 16#0409 put
-dup /afii10059 16#040A put
-dup /afii10060 16#040B put
-dup /afii10061 16#040C put
-dup /afii10062 16#040E put
-dup /afii10063 16#F6C4 put
-dup /afii10064 16#F6C5 put
-dup /afii10065 16#0430 put
-dup /afii10066 16#0431 put
-dup /afii10067 16#0432 put
-dup /afii10068 16#0433 put
-dup /afii10069 16#0434 put
-dup /afii10070 16#0435 put
-dup /afii10071 16#0451 put
-dup /afii10072 16#0436 put
-dup /afii10073 16#0437 put
-dup /afii10074 16#0438 put
-dup /afii10075 16#0439 put
-dup /afii10076 16#043A put
-dup /afii10077 16#043B put
-dup /afii10078 16#043C put
-dup /afii10079 16#043D put
-dup /afii10080 16#043E put
-dup /afii10081 16#043F put
-dup /afii10082 16#0440 put
-dup /afii10083 16#0441 put
-dup /afii10084 16#0442 put
-dup /afii10085 16#0443 put
-dup /afii10086 16#0444 put
-dup /afii10087 16#0445 put
-dup /afii10088 16#0446 put
-dup /afii10089 16#0447 put
-dup /afii10090 16#0448 put
-dup /afii10091 16#0449 put
-dup /afii10092 16#044A put
-dup /afii10093 16#044B put
-dup /afii10094 16#044C put
-dup /afii10095 16#044D put
-dup /afii10096 16#044E put
-dup /afii10097 16#044F put
-dup /afii10098 16#0491 put
-dup /afii10099 16#0452 put
-dup /afii10100 16#0453 put
-dup /afii10101 16#0454 put
-dup /afii10102 16#0455 put
-dup /afii10103 16#0456 put
-dup /afii10104 16#0457 put
-dup /afii10105 16#0458 put
-dup /afii10106 16#0459 put
-dup /afii10107 16#045A put
-dup /afii10108 16#045B put
-dup /afii10109 16#045C put
-dup /afii10110 16#045E put
-dup /afii10145 16#040F put
-dup /afii10146 16#0462 put
-dup /afii10147 16#0472 put
-dup /afii10148 16#0474 put
-dup /afii10192 16#F6C6 put
-dup /afii10193 16#045F put
-dup /afii10194 16#0463 put
-dup /afii10195 16#0473 put
-dup /afii10196 16#0475 put
-dup /afii10831 16#F6C7 put
-dup /afii10832 16#F6C8 put
-dup /afii10846 16#04D9 put
-dup /afii299 16#200E put
-dup /afii300 16#200F put
-dup /afii301 16#200D put
-dup /afii57381 16#066A put
-dup /afii57388 16#060C put
-dup /afii57392 16#0660 put
-dup /afii57393 16#0661 put
-dup /afii57394 16#0662 put
-dup /afii57395 16#0663 put
-dup /afii57396 16#0664 put
-dup /afii57397 16#0665 put
-dup /afii57398 16#0666 put
-dup /afii57399 16#0667 put
-dup /afii57400 16#0668 put
-dup /afii57401 16#0669 put
-dup /afii57403 16#061B put
-dup /afii57407 16#061F put
-dup /afii57409 16#0621 put
-dup /afii57410 16#0622 put
-dup /afii57411 16#0623 put
-dup /afii57412 16#0624 put
-dup /afii57413 16#0625 put
-dup /afii57414 16#0626 put
-dup /afii57415 16#0627 put
-dup /afii57416 16#0628 put
-dup /afii57417 16#0629 put
-dup /afii57418 16#062A put
-dup /afii57419 16#062B put
-dup /afii57420 16#062C put
-dup /afii57421 16#062D put
-dup /afii57422 16#062E put
-dup /afii57423 16#062F put
-dup /afii57424 16#0630 put
-dup /afii57425 16#0631 put
-dup /afii57426 16#0632 put
-dup /afii57427 16#0633 put
-dup /afii57428 16#0634 put
-dup /afii57429 16#0635 put
-dup /afii57430 16#0636 put
-dup /afii57431 16#0637 put
-dup /afii57432 16#0638 put
-dup /afii57433 16#0639 put
-dup /afii57434 16#063A put
-dup /afii57440 16#0640 put
-dup /afii57441 16#0641 put
-dup /afii57442 16#0642 put
-dup /afii57443 16#0643 put
-dup /afii57444 16#0644 put
-dup /afii57445 16#0645 put
-dup /afii57446 16#0646 put
-dup /afii57448 16#0648 put
-dup /afii57449 16#0649 put
-dup /afii57450 16#064A put
-dup /afii57451 16#064B put
-dup /afii57452 16#064C put
-dup /afii57453 16#064D put
-dup /afii57454 16#064E put
-dup /afii57455 16#064F put
-dup /afii57456 16#0650 put
-dup /afii57457 16#0651 put
-dup /afii57458 16#0652 put
-dup /afii57470 16#0647 put
-dup /afii57505 16#06A4 put
-dup /afii57506 16#067E put
-dup /afii57507 16#0686 put
-dup /afii57508 16#0698 put
-dup /afii57509 16#06AF put
-dup /afii57511 16#0679 put
-dup /afii57512 16#0688 put
-dup /afii57513 16#0691 put
-dup /afii57514 16#06BA put
-dup /afii57519 16#06D2 put
-dup /afii57534 16#06D5 put
-dup /afii57636 16#20AA put
-dup /afii57645 16#05BE put
-dup /afii57658 16#05C3 put
-dup /afii57664 16#05D0 put
-dup /afii57665 16#05D1 put
-dup /afii57666 16#05D2 put
-dup /afii57667 16#05D3 put
-dup /afii57668 16#05D4 put
-dup /afii57669 16#05D5 put
-dup /afii57670 16#05D6 put
-dup /afii57671 16#05D7 put
-dup /afii57672 16#05D8 put
-dup /afii57673 16#05D9 put
-dup /afii57674 16#05DA put
-dup /afii57675 16#05DB put
-dup /afii57676 16#05DC put
-dup /afii57677 16#05DD put
-dup /afii57678 16#05DE put
-dup /afii57679 16#05DF put
-dup /afii57680 16#05E0 put
-dup /afii57681 16#05E1 put
-dup /afii57682 16#05E2 put
-dup /afii57683 16#05E3 put
-dup /afii57684 16#05E4 put
-dup /afii57685 16#05E5 put
-dup /afii57686 16#05E6 put
-dup /afii57687 16#05E7 put
-dup /afii57688 16#05E8 put
-dup /afii57689 16#05E9 put
-dup /afii57690 16#05EA put
-dup /afii57694 16#FB2A put
-dup /afii57695 16#FB2B put
-dup /afii57700 16#FB4B put
-dup /afii57705 16#FB1F put
-dup /afii57716 16#05F0 put
-dup /afii57717 16#05F1 put
-dup /afii57718 16#05F2 put
-dup /afii57723 16#FB35 put
-dup /afii57793 16#05B4 put
-dup /afii57794 16#05B5 put
-dup /afii57795 16#05B6 put
-dup /afii57796 16#05BB put
-dup /afii57797 16#05B8 put
-dup /afii57798 16#05B7 put
-dup /afii57799 16#05B0 put
-dup /afii57800 16#05B2 put
-dup /afii57801 16#05B1 put
-dup /afii57802 16#05B3 put
-dup /afii57803 16#05C2 put
-dup /afii57804 16#05C1 put
-dup /afii57806 16#05B9 put
-dup /afii57807 16#05BC put
-dup /afii57839 16#05BD put
-dup /afii57841 16#05BF put
-dup /afii57842 16#05C0 put
-dup /afii57929 16#02BC put
-dup /afii61248 16#2105 put
-dup /afii61289 16#2113 put
-dup /afii61352 16#2116 put
-dup /afii61573 16#202C put
-dup /afii61574 16#202D put
-dup /afii61575 16#202E put
-dup /afii61664 16#200C put
-dup /afii63167 16#066D put
-dup /afii64937 16#02BD put
-dup /agrave 16#00E0 put
-dup /aleph 16#2135 put
-dup /alpha 16#03B1 put
-dup /alphatonos 16#03AC put
-dup /amacron 16#0101 put
-dup /ampersand 16#0026 put
-dup /ampersandsmall 16#F726 put
-dup /angle 16#2220 put
-dup /angleleft 16#2329 put
-dup /angleright 16#232A put
-dup /anoteleia 16#0387 put
-dup /aogonek 16#0105 put
-dup /approxequal 16#2248 put
-dup /aring 16#00E5 put
-dup /aringacute 16#01FB put
-dup /arrowboth 16#2194 put
-dup /arrowdblboth 16#21D4 put
-dup /arrowdbldown 16#21D3 put
-dup /arrowdblleft 16#21D0 put
-dup /arrowdblright 16#21D2 put
-dup /arrowdblup 16#21D1 put
-dup /arrowdown 16#2193 put
-dup /arrowhorizex 16#F8E7 put
-dup /arrowleft 16#2190 put
-dup /arrowright 16#2192 put
-dup /arrowup 16#2191 put
-dup /arrowupdn 16#2195 put
-dup /arrowupdnbse 16#21A8 put
-dup /arrowvertex 16#F8E6 put
-dup /asciicircum 16#005E put
-dup /asciitilde 16#007E put
-dup /asterisk 16#002A put
-dup /asteriskmath 16#2217 put
-dup /asuperior 16#F6E9 put
-dup /at 16#0040 put
-dup /atilde 16#00E3 put
-dup /b 16#0062 put
-dup /backslash 16#005C put
-dup /bar 16#007C put
-dup /beta 16#03B2 put
-dup /block 16#2588 put
-dup /braceex 16#F8F4 put
-dup /braceleft 16#007B put
-dup /braceleftbt 16#F8F3 put
-dup /braceleftmid 16#F8F2 put
-dup /bracelefttp 16#F8F1 put
-dup /braceright 16#007D put
-dup /bracerightbt 16#F8FE put
-dup /bracerightmid 16#F8FD put
-dup /bracerighttp 16#F8FC put
-dup /bracketleft 16#005B put
-dup /bracketleftbt 16#F8F0 put
-dup /bracketleftex 16#F8EF put
-dup /bracketlefttp 16#F8EE put
-dup /bracketright 16#005D put
-dup /bracketrightbt 16#F8FB put
-dup /bracketrightex 16#F8FA put
-dup /bracketrighttp 16#F8F9 put
-dup /breve 16#02D8 put
-dup /brokenbar 16#00A6 put
-dup /bsuperior 16#F6EA put
-dup /bullet 16#2022 put
-dup /c 16#0063 put
-dup /cacute 16#0107 put
-dup /caron 16#02C7 put
-dup /carriagereturn 16#21B5 put
-dup /ccaron 16#010D put
-dup /ccedilla 16#00E7 put
-dup /ccircumflex 16#0109 put
-dup /cdotaccent 16#010B put
-dup /cedilla 16#00B8 put
-dup /cent 16#00A2 put
-dup /centinferior 16#F6DF put
-dup /centoldstyle 16#F7A2 put
-dup /centsuperior 16#F6E0 put
-dup /chi 16#03C7 put
-dup /circle 16#25CB put
-dup /circlemultiply 16#2297 put
-dup /circleplus 16#2295 put
-dup /circumflex 16#02C6 put
-dup /club 16#2663 put
-dup /colon 16#003A put
-dup /colonmonetary 16#20A1 put
-dup /comma 16#002C put
-dup /commaaccent 16#F6C3 put
-dup /commainferior 16#F6E1 put
-dup /commasuperior 16#F6E2 put
-dup /congruent 16#2245 put
-dup /copyright 16#00A9 put
-dup /copyrightsans 16#F8E9 put
-dup /copyrightserif 16#F6D9 put
-dup /currency 16#00A4 put
-dup /cyrBreve 16#F6D1 put
-dup /cyrFlex 16#F6D2 put
-dup /cyrbreve 16#F6D4 put
-dup /cyrflex 16#F6D5 put
-dup /d 16#0064 put
-dup /dagger 16#2020 put
-dup /daggerdbl 16#2021 put
-dup /dblGrave 16#F6D3 put
-dup /dblgrave 16#F6D6 put
-dup /dcaron 16#010F put
-dup /dcroat 16#0111 put
-dup /degree 16#00B0 put
-dup /delta 16#03B4 put
-dup /diamond 16#2666 put
-dup /dieresis 16#00A8 put
-dup /dieresisacute 16#F6D7 put
-dup /dieresisgrave 16#F6D8 put
-dup /dieresistonos 16#0385 put
-dup /divide 16#00F7 put
-dup /dkshade 16#2593 put
-dup /dnblock 16#2584 put
-dup /dollar 16#0024 put
-dup /dollarinferior 16#F6E3 put
-dup /dollaroldstyle 16#F724 put
-dup /dollarsuperior 16#F6E4 put
-dup /dong 16#20AB put
-dup /dotaccent 16#02D9 put
-dup /dotbelowcomb 16#0323 put
-dup /dotlessi 16#0131 put
-dup /dotlessj 16#F6BE put
-dup /dotmath 16#22C5 put
-dup /dsuperior 16#F6EB put
-dup /e 16#0065 put
-dup /eacute 16#00E9 put
-dup /ebreve 16#0115 put
-dup /ecaron 16#011B put
-dup /ecircumflex 16#00EA put
-dup /edieresis 16#00EB put
-dup /edotaccent 16#0117 put
-dup /egrave 16#00E8 put
-dup /eight 16#0038 put
-dup /eightinferior 16#2088 put
-dup /eightoldstyle 16#F738 put
-dup /eightsuperior 16#2078 put
-dup /element 16#2208 put
-dup /ellipsis 16#2026 put
-dup /emacron 16#0113 put
-dup /emdash 16#2014 put
-dup /emptyset 16#2205 put
-dup /endash 16#2013 put
-dup /eng 16#014B put
-dup /eogonek 16#0119 put
-dup /epsilon 16#03B5 put
-dup /epsilontonos 16#03AD put
-dup /equal 16#003D put
-dup /equivalence 16#2261 put
-dup /estimated 16#212E put
-dup /esuperior 16#F6EC put
-dup /eta 16#03B7 put
-dup /etatonos 16#03AE put
-dup /eth 16#00F0 put
-dup /exclam 16#0021 put
-dup /exclamdbl 16#203C put
-dup /exclamdown 16#00A1 put
-dup /exclamdownsmall 16#F7A1 put
-dup /exclamsmall 16#F721 put
-dup /existential 16#2203 put
-dup /f 16#0066 put
-dup /female 16#2640 put
-dup /ff 16#FB00 put
-dup /ffi 16#FB03 put
-dup /ffl 16#FB04 put
-dup /fi 16#FB01 put
-dup /figuredash 16#2012 put
-dup /filledbox 16#25A0 put
-dup /filledrect 16#25AC put
-dup /five 16#0035 put
-dup /fiveeighths 16#215D put
-dup /fiveinferior 16#2085 put
-dup /fiveoldstyle 16#F735 put
-dup /fivesuperior 16#2075 put
-dup /fl 16#FB02 put
-dup /florin 16#0192 put
-dup /four 16#0034 put
-dup /fourinferior 16#2084 put
-dup /fouroldstyle 16#F734 put
-dup /foursuperior 16#2074 put
-dup /fraction [16#2044 16#2215] put
-dup /franc 16#20A3 put
-dup /g 16#0067 put
-dup /gamma 16#03B3 put
-dup /gbreve 16#011F put
-dup /gcaron 16#01E7 put
-dup /gcircumflex 16#011D put
-dup /gcommaaccent 16#0123 put
-dup /gdotaccent 16#0121 put
-dup /germandbls 16#00DF put
-dup /gradient 16#2207 put
-dup /grave 16#0060 put
-dup /gravecomb 16#0300 put
-dup /greater 16#003E put
-dup /greaterequal 16#2265 put
-dup /guillemotleft 16#00AB put
-dup /guillemotright 16#00BB put
-dup /guilsinglleft 16#2039 put
-dup /guilsinglright 16#203A put
-dup /h 16#0068 put
-dup /hbar 16#0127 put
-dup /hcircumflex 16#0125 put
-dup /heart 16#2665 put
-dup /hookabovecomb 16#0309 put
-dup /house 16#2302 put
-dup /hungarumlaut 16#02DD put
-dup /hyphen [16#002D 16#00AD] put
-dup /hypheninferior 16#F6E5 put
-dup /hyphensuperior 16#F6E6 put
-dup /i 16#0069 put
-dup /iacute 16#00ED put
-dup /ibreve 16#012D put
-dup /icircumflex 16#00EE put
-dup /idieresis 16#00EF put
-dup /igrave 16#00EC put
-dup /ij 16#0133 put
-dup /imacron 16#012B put
-dup /infinity 16#221E put
-dup /integral 16#222B put
-dup /integralbt 16#2321 put
-dup /integralex 16#F8F5 put
-dup /integraltp 16#2320 put
-dup /intersection 16#2229 put
-dup /invbullet 16#25D8 put
-dup /invcircle 16#25D9 put
-dup /invsmileface 16#263B put
-dup /iogonek 16#012F put
-dup /iota 16#03B9 put
-dup /iotadieresis 16#03CA put
-dup /iotadieresistonos 16#0390 put
-dup /iotatonos 16#03AF put
-dup /isuperior 16#F6ED put
-dup /itilde 16#0129 put
-dup /j 16#006A put
-dup /jcircumflex 16#0135 put
-dup /k 16#006B put
-dup /kappa 16#03BA put
-dup /kcommaaccent 16#0137 put
-dup /kgreenlandic 16#0138 put
-dup /l 16#006C put
-dup /lacute 16#013A put
-dup /lambda 16#03BB put
-dup /lcaron 16#013E put
-dup /lcommaaccent 16#013C put
-dup /ldot 16#0140 put
-dup /less 16#003C put
-dup /lessequal 16#2264 put
-dup /lfblock 16#258C put
-dup /lira 16#20A4 put
-dup /ll 16#F6C0 put
-dup /logicaland 16#2227 put
-dup /logicalnot 16#00AC put
-dup /logicalor 16#2228 put
-dup /longs 16#017F put
-dup /lozenge 16#25CA put
-dup /lslash 16#0142 put
-dup /lsuperior 16#F6EE put
-dup /ltshade 16#2591 put
-dup /m 16#006D put
-dup /macron [16#00AF 16#02C9] put
-dup /male 16#2642 put
-dup /minus 16#2212 put
-dup /minute 16#2032 put
-dup /msuperior 16#F6EF put
-dup /mu [16#00B5 16#03BC] put
-dup /multiply 16#00D7 put
-dup /musicalnote 16#266A put
-dup /musicalnotedbl 16#266B put
-dup /n 16#006E put
-dup /nacute 16#0144 put
-dup /napostrophe 16#0149 put
-dup /ncaron 16#0148 put
-dup /ncommaaccent 16#0146 put
-dup /nine 16#0039 put
-dup /nineinferior 16#2089 put
-dup /nineoldstyle 16#F739 put
-dup /ninesuperior 16#2079 put
-dup /notelement 16#2209 put
-dup /notequal 16#2260 put
-dup /notsubset 16#2284 put
-dup /nsuperior 16#207F put
-dup /ntilde 16#00F1 put
-dup /nu 16#03BD put
-dup /numbersign 16#0023 put
-dup /o 16#006F put
-dup /oacute 16#00F3 put
-dup /obreve 16#014F put
-dup /ocircumflex 16#00F4 put
-dup /odieresis 16#00F6 put
-dup /oe 16#0153 put
-dup /ogonek 16#02DB put
-dup /ograve 16#00F2 put
-dup /ohorn 16#01A1 put
-dup /ohungarumlaut 16#0151 put
-dup /omacron 16#014D put
-dup /omega 16#03C9 put
-dup /omega1 16#03D6 put
-dup /omegatonos 16#03CE put
-dup /omicron 16#03BF put
-dup /omicrontonos 16#03CC put
-dup /one 16#0031 put
-dup /onedotenleader 16#2024 put
-dup /oneeighth 16#215B put
-dup /onefitted 16#F6DC put
-dup /onehalf 16#00BD put
-dup /oneinferior 16#2081 put
-dup /oneoldstyle 16#F731 put
-dup /onequarter 16#00BC put
-dup /onesuperior 16#00B9 put
-dup /onethird 16#2153 put
-dup /openbullet 16#25E6 put
-dup /ordfeminine 16#00AA put
-dup /ordmasculine 16#00BA put
-dup /orthogonal 16#221F put
-dup /oslash 16#00F8 put
-dup /oslashacute 16#01FF put
-dup /osuperior 16#F6F0 put
-dup /otilde 16#00F5 put
-dup /p 16#0070 put
-dup /paragraph 16#00B6 put
-dup /parenleft 16#0028 put
-dup /parenleftbt 16#F8ED put
-dup /parenleftex 16#F8EC put
-dup /parenleftinferior 16#208D put
-dup /parenleftsuperior 16#207D put
-dup /parenlefttp 16#F8EB put
-dup /parenright 16#0029 put
-dup /parenrightbt 16#F8F8 put
-dup /parenrightex 16#F8F7 put
-dup /parenrightinferior 16#208E put
-dup /parenrightsuperior 16#207E put
-dup /parenrighttp 16#F8F6 put
-dup /partialdiff 16#2202 put
-dup /percent 16#0025 put
-dup /period 16#002E put
-dup /periodcentered [16#00B7 16#2219] put
-dup /periodinferior 16#F6E7 put
-dup /periodsuperior 16#F6E8 put
-dup /perpendicular 16#22A5 put
-dup /perthousand 16#2030 put
-dup /peseta 16#20A7 put
-dup /phi 16#03C6 put
-dup /phi1 16#03D5 put
-dup /pi 16#03C0 put
-dup /plus 16#002B put
-dup /plusminus 16#00B1 put
-dup /prescription 16#211E put
-dup /product 16#220F put
-dup /propersubset 16#2282 put
-dup /propersuperset 16#2283 put
-dup /proportional 16#221D put
-dup /psi 16#03C8 put
-dup /q 16#0071 put
-dup /question 16#003F put
-dup /questiondown 16#00BF put
-dup /questiondownsmall 16#F7BF put
-dup /questionsmall 16#F73F put
-dup /quotedbl 16#0022 put
-dup /quotedblbase 16#201E put
-dup /quotedblleft 16#201C put
-dup /quotedblright 16#201D put
-dup /quoteleft 16#2018 put
-dup /quotereversed 16#201B put
-dup /quoteright 16#2019 put
-dup /quotesinglbase 16#201A put
-dup /quotesingle 16#0027 put
-dup /r 16#0072 put
-dup /racute 16#0155 put
-dup /radical 16#221A put
-dup /radicalex 16#F8E5 put
-dup /rcaron 16#0159 put
-dup /rcommaaccent 16#0157 put
-dup /reflexsubset 16#2286 put
-dup /reflexsuperset 16#2287 put
-dup /registered 16#00AE put
-dup /registersans 16#F8E8 put
-dup /registerserif 16#F6DA put
-dup /revlogicalnot 16#2310 put
-dup /rho 16#03C1 put
-dup /ring 16#02DA put
-dup /rsuperior 16#F6F1 put
-dup /rtblock 16#2590 put
-dup /rupiah 16#F6DD put
-dup /s 16#0073 put
-dup /sacute 16#015B put
-dup /scaron 16#0161 put
-dup /scedilla [16#015F 16#F6C2] put
-dup /scircumflex 16#015D put
-dup /scommaaccent 16#0219 put
-dup /second 16#2033 put
-dup /section 16#00A7 put
-dup /semicolon 16#003B put
-dup /seven 16#0037 put
-dup /seveneighths 16#215E put
-dup /seveninferior 16#2087 put
-dup /sevenoldstyle 16#F737 put
-dup /sevensuperior 16#2077 put
-dup /shade 16#2592 put
-dup /sigma 16#03C3 put
-dup /sigma1 16#03C2 put
-dup /similar 16#223C put
-dup /six 16#0036 put
-dup /sixinferior 16#2086 put
-dup /sixoldstyle 16#F736 put
-dup /sixsuperior 16#2076 put
-dup /slash 16#002F put
-dup /smileface 16#263A put
-dup /space [16#0020 16#00A0] put
-dup /spade 16#2660 put
-dup /ssuperior 16#F6F2 put
-dup /sterling 16#00A3 put
-dup /suchthat 16#220B put
-dup /summation 16#2211 put
-dup /sun 16#263C put
-dup /t 16#0074 put
-dup /tau 16#03C4 put
-dup /tbar 16#0167 put
-dup /tcaron 16#0165 put
-dup /tcommaaccent [16#0163 16#021B] put
-dup /therefore 16#2234 put
-dup /theta 16#03B8 put
-dup /theta1 16#03D1 put
-dup /thorn 16#00FE put
-dup /three 16#0033 put
-dup /threeeighths 16#215C put
-dup /threeinferior 16#2083 put
-dup /threeoldstyle 16#F733 put
-dup /threequarters 16#00BE put
-dup /threequartersemdash 16#F6DE put
-dup /threesuperior 16#00B3 put
-dup /tilde 16#02DC put
-dup /tildecomb 16#0303 put
-dup /tonos 16#0384 put
-dup /trademark 16#2122 put
-dup /trademarksans 16#F8EA put
-dup /trademarkserif 16#F6DB put
-dup /triagdn 16#25BC put
-dup /triaglf 16#25C4 put
-dup /triagrt 16#25BA put
-dup /triagup 16#25B2 put
-dup /tsuperior 16#F6F3 put
-dup /two 16#0032 put
-dup /twodotenleader 16#2025 put
-dup /twoinferior 16#2082 put
-dup /twooldstyle 16#F732 put
-dup /twosuperior 16#00B2 put
-dup /twothirds 16#2154 put
-dup /u 16#0075 put
-dup /uacute 16#00FA put
-dup /ubreve 16#016D put
-dup /ucircumflex 16#00FB put
-dup /udieresis 16#00FC put
-dup /ugrave 16#00F9 put
-dup /uhorn 16#01B0 put
-dup /uhungarumlaut 16#0171 put
-dup /umacron 16#016B put
-dup /underscore 16#005F put
-dup /underscoredbl 16#2017 put
-dup /union 16#222A put
-dup /universal 16#2200 put
-dup /uogonek 16#0173 put
-dup /upblock 16#2580 put
-dup /upsilon 16#03C5 put
-dup /upsilondieresis 16#03CB put
-dup /upsilondieresistonos 16#03B0 put
-dup /upsilontonos 16#03CD put
-dup /uring 16#016F put
-dup /utilde 16#0169 put
-dup /v 16#0076 put
-dup /w 16#0077 put
-dup /wacute 16#1E83 put
-dup /wcircumflex 16#0175 put
-dup /wdieresis 16#1E85 put
-dup /weierstrass 16#2118 put
-dup /wgrave 16#1E81 put
-dup /x 16#0078 put
-dup /xi 16#03BE put
-dup /y 16#0079 put
-dup /yacute 16#00FD put
-dup /ycircumflex 16#0177 put
-dup /ydieresis 16#00FF put
-dup /yen 16#00A5 put
-dup /ygrave 16#1EF3 put
-dup /z 16#007A put
-dup /zacute 16#017A put
-dup /zcaron 16#017E put
-dup /zdotaccent 16#017C put
-dup /zero 16#0030 put
-dup /zeroinferior 16#2080 put
-dup /zerooldstyle 16#F730 put
-dup /zerosuperior 16#2070 put
-dup /zeta 16#03B6 put
-def
+/AdobeGlyphList mark
+/A 16#0041
+/AE 16#00C6
+/AEacute 16#01FC
+/AEmacron 16#01E2
+/AEsmall 16#F7E6
+/Aacute 16#00C1
+/Aacutesmall 16#F7E1
+/Abreve 16#0102
+/Abreveacute 16#1EAE
+/Abrevecyrillic 16#04D0
+/Abrevedotbelow 16#1EB6
+/Abrevegrave 16#1EB0
+/Abrevehookabove 16#1EB2
+/Abrevetilde 16#1EB4
+/Acaron 16#01CD
+/Acircle 16#24B6
+/Acircumflex 16#00C2
+/Acircumflexacute 16#1EA4
+/Acircumflexdotbelow 16#1EAC
+/Acircumflexgrave 16#1EA6
+/Acircumflexhookabove 16#1EA8
+/Acircumflexsmall 16#F7E2
+/Acircumflextilde 16#1EAA
+/Acute 16#F6C9
+/Acutesmall 16#F7B4
+/Acyrillic 16#0410
+/Adblgrave 16#0200
+/Adieresis 16#00C4
+/Adieresiscyrillic 16#04D2
+/Adieresismacron 16#01DE
+/Adieresissmall 16#F7E4
+/Adotbelow 16#1EA0
+/Adotmacron 16#01E0
+/Agrave 16#00C0
+/Agravesmall 16#F7E0
+/Ahookabove 16#1EA2
+/Aiecyrillic 16#04D4
+/Ainvertedbreve 16#0202
+/Alpha 16#0391
+/Alphatonos 16#0386
+/Amacron 16#0100
+/Amonospace 16#FF21
+/Aogonek 16#0104
+/Aring 16#00C5
+/Aringacute 16#01FA
+/Aringbelow 16#1E00
+/Aringsmall 16#F7E5
+/Asmall 16#F761
+/Atilde 16#00C3
+/Atildesmall 16#F7E3
+/Aybarmenian 16#0531
+/B 16#0042
+/Bcircle 16#24B7
+/Bdotaccent 16#1E02
+/Bdotbelow 16#1E04
+/Becyrillic 16#0411
+/Benarmenian 16#0532
+/Beta 16#0392
+/Bhook 16#0181
+/Blinebelow 16#1E06
+/Bmonospace 16#FF22
+/Brevesmall 16#F6F4
+/Bsmall 16#F762
+/Btopbar 16#0182
+/C 16#0043
+/Caarmenian 16#053E
+/Cacute 16#0106
+/Caron 16#F6CA
+/Caronsmall 16#F6F5
+/Ccaron 16#010C
+/Ccedilla 16#00C7
+/Ccedillaacute 16#1E08
+/Ccedillasmall 16#F7E7
+/Ccircle 16#24B8
+/Ccircumflex 16#0108
+/Cdot 16#010A
+/Cdotaccent 16#010A
+/Cedillasmall 16#F7B8
+/Chaarmenian 16#0549
+/Cheabkhasiancyrillic 16#04BC
+/Checyrillic 16#0427
+/Chedescenderabkhasiancyrillic 16#04BE
+/Chedescendercyrillic 16#04B6
+/Chedieresiscyrillic 16#04F4
+/Cheharmenian 16#0543
+/Chekhakassiancyrillic 16#04CB
+/Cheverticalstrokecyrillic 16#04B8
+/Chi 16#03A7
+/Chook 16#0187
+/Circumflexsmall 16#F6F6
+/Cmonospace 16#FF23
+/Coarmenian 16#0551
+/Csmall 16#F763
+/D 16#0044
+/DZ 16#01F1
+/DZcaron 16#01C4
+/Daarmenian 16#0534
+/Dafrican 16#0189
+/Dcaron 16#010E
+/Dcedilla 16#1E10
+/Dcircle 16#24B9
+/Dcircumflexbelow 16#1E12
+/Dcroat 16#0110
+/Ddotaccent 16#1E0A
+/Ddotbelow 16#1E0C
+/Decyrillic 16#0414
+/Deicoptic 16#03EE
+/Delta 16#2206
+/Deltagreek 16#0394
+/Dhook 16#018A
+/Dieresis 16#F6CB
+/DieresisAcute 16#F6CC
+/DieresisGrave 16#F6CD
+/Dieresissmall 16#F7A8
+/Digammagreek 16#03DC
+/Djecyrillic 16#0402
+/Dlinebelow 16#1E0E
+/Dmonospace 16#FF24
+/Dotaccentsmall 16#F6F7
+/Dslash 16#0110
+/Dsmall 16#F764
+/Dtopbar 16#018B
+/Dz 16#01F2
+/Dzcaron 16#01C5
+/Dzeabkhasiancyrillic 16#04E0
+/Dzecyrillic 16#0405
+/Dzhecyrillic 16#040F
+/E 16#0045
+/Eacute 16#00C9
+/Eacutesmall 16#F7E9
+/Ebreve 16#0114
+/Ecaron 16#011A
+/Ecedillabreve 16#1E1C
+/Echarmenian 16#0535
+/Ecircle 16#24BA
+/Ecircumflex 16#00CA
+/Ecircumflexacute 16#1EBE
+/Ecircumflexbelow 16#1E18
+/Ecircumflexdotbelow 16#1EC6
+/Ecircumflexgrave 16#1EC0
+/Ecircumflexhookabove 16#1EC2
+/Ecircumflexsmall 16#F7EA
+/Ecircumflextilde 16#1EC4
+/Ecyrillic 16#0404
+/Edblgrave 16#0204
+/Edieresis 16#00CB
+/Edieresissmall 16#F7EB
+/Edot 16#0116
+/Edotaccent 16#0116
+/Edotbelow 16#1EB8
+/Efcyrillic 16#0424
+/Egrave 16#00C8
+/Egravesmall 16#F7E8
+/Eharmenian 16#0537
+/Ehookabove 16#1EBA
+/Eightroman 16#2167
+/Einvertedbreve 16#0206
+/Eiotifiedcyrillic 16#0464
+/Elcyrillic 16#041B
+/Elevenroman 16#216A
+/Emacron 16#0112
+/Emacronacute 16#1E16
+/Emacrongrave 16#1E14
+/Emcyrillic 16#041C
+/Emonospace 16#FF25
+/Encyrillic 16#041D
+/Endescendercyrillic 16#04A2
+/Eng 16#014A
+/Enghecyrillic 16#04A4
+/Enhookcyrillic 16#04C7
+/Eogonek 16#0118
+/Eopen 16#0190
+/Epsilon 16#0395
+/Epsilontonos 16#0388
+/Ercyrillic 16#0420
+/Ereversed 16#018E
+/Ereversedcyrillic 16#042D
+/Escyrillic 16#0421
+/Esdescendercyrillic 16#04AA
+/Esh 16#01A9
+/Esmall 16#F765
+/Eta 16#0397
+/Etarmenian 16#0538
+/Etatonos 16#0389
+/Eth 16#00D0
+/Ethsmall 16#F7F0
+/Etilde 16#1EBC
+/Etildebelow 16#1E1A
+/Euro 16#20AC
+/Ezh 16#01B7
+/Ezhcaron 16#01EE
+/Ezhreversed 16#01B8
+/F 16#0046
+/Fcircle 16#24BB
+/Fdotaccent 16#1E1E
+/Feharmenian 16#0556
+/Feicoptic 16#03E4
+/Fhook 16#0191
+/Fitacyrillic 16#0472
+/Fiveroman 16#2164
+/Fmonospace 16#FF26
+/Fourroman 16#2163
+/Fsmall 16#F766
+/G 16#0047
+/GBsquare 16#3387
+/Gacute 16#01F4
+/Gamma 16#0393
+/Gammaafrican 16#0194
+/Gangiacoptic 16#03EA
+/Gbreve 16#011E
+/Gcaron 16#01E6
+/Gcedilla 16#0122
+/Gcircle 16#24BC
+/Gcircumflex 16#011C
+/Gcommaaccent 16#0122
+/Gdot 16#0120
+/Gdotaccent 16#0120
+/Gecyrillic 16#0413
+/Ghadarmenian 16#0542
+/Ghemiddlehookcyrillic 16#0494
+/Ghestrokecyrillic 16#0492
+/Gheupturncyrillic 16#0490
+/Ghook 16#0193
+/Gimarmenian 16#0533
+/Gjecyrillic 16#0403
+/Gmacron 16#1E20
+/Gmonospace 16#FF27
+/Grave 16#F6CE
+/Gravesmall 16#F760
+/Gsmall 16#F767
+/Gsmallhook 16#029B
+/Gstroke 16#01E4
+/H 16#0048
+/H18533 16#25CF
+/H18543 16#25AA
+/H18551 16#25AB
+/H22073 16#25A1
+/HPsquare 16#33CB
+/Haabkhasiancyrillic 16#04A8
+/Hadescendercyrillic 16#04B2
+/Hardsigncyrillic 16#042A
+/Hbar 16#0126
+/Hbrevebelow 16#1E2A
+/Hcedilla 16#1E28
+/Hcircle 16#24BD
+/Hcircumflex 16#0124
+/Hdieresis 16#1E26
+/Hdotaccent 16#1E22
+/Hdotbelow 16#1E24
+/Hmonospace 16#FF28
+/Hoarmenian 16#0540
+/Horicoptic 16#03E8
+/Hsmall 16#F768
+/Hungarumlaut 16#F6CF
+/Hungarumlautsmall 16#F6F8
+/Hzsquare 16#3390
+/I 16#0049
+/IAcyrillic 16#042F
+/IJ 16#0132
+/IUcyrillic 16#042E
+/Iacute 16#00CD
+/Iacutesmall 16#F7ED
+/Ibreve 16#012C
+/Icaron 16#01CF
+/Icircle 16#24BE
+/Icircumflex 16#00CE
+/Icircumflexsmall 16#F7EE
+/Icyrillic 16#0406
+/Idblgrave 16#0208
+/Idieresis 16#00CF
+/Idieresisacute 16#1E2E
+/Idieresiscyrillic 16#04E4
+/Idieresissmall 16#F7EF
+/Idot 16#0130
+/Idotaccent 16#0130
+/Idotbelow 16#1ECA
+/Iebrevecyrillic 16#04D6
+/Iecyrillic 16#0415
+/Ifraktur 16#2111
+/Igrave 16#00CC
+/Igravesmall 16#F7EC
+/Ihookabove 16#1EC8
+/Iicyrillic 16#0418
+/Iinvertedbreve 16#020A
+/Iishortcyrillic 16#0419
+/Imacron 16#012A
+/Imacroncyrillic 16#04E2
+/Imonospace 16#FF29
+/Iniarmenian 16#053B
+/Iocyrillic 16#0401
+/Iogonek 16#012E
+/Iota 16#0399
+/Iotaafrican 16#0196
+/Iotadieresis 16#03AA
+/Iotatonos 16#038A
+/Ismall 16#F769
+/Istroke 16#0197
+/Itilde 16#0128
+/Itildebelow 16#1E2C
+/Izhitsacyrillic 16#0474
+/Izhitsadblgravecyrillic 16#0476
+/J 16#004A
+/Jaarmenian 16#0541
+/Jcircle 16#24BF
+/Jcircumflex 16#0134
+/Jecyrillic 16#0408
+/Jheharmenian 16#054B
+/Jmonospace 16#FF2A
+/Jsmall 16#F76A
+/K 16#004B
+/KBsquare 16#3385
+/KKsquare 16#33CD
+/Kabashkircyrillic 16#04A0
+/Kacute 16#1E30
+/Kacyrillic 16#041A
+/Kadescendercyrillic 16#049A
+/Kahookcyrillic 16#04C3
+/Kappa 16#039A
+/Kastrokecyrillic 16#049E
+/Kaverticalstrokecyrillic 16#049C
+/Kcaron 16#01E8
+/Kcedilla 16#0136
+/Kcircle 16#24C0
+/Kcommaaccent 16#0136
+/Kdotbelow 16#1E32
+/Keharmenian 16#0554
+/Kenarmenian 16#053F
+/Khacyrillic 16#0425
+/Kheicoptic 16#03E6
+/Khook 16#0198
+/Kjecyrillic 16#040C
+/Klinebelow 16#1E34
+/Kmonospace 16#FF2B
+/Koppacyrillic 16#0480
+/Koppagreek 16#03DE
+/Ksicyrillic 16#046E
+/Ksmall 16#F76B
+/L 16#004C
+/LJ 16#01C7
+/LL 16#F6BF
+/Lacute 16#0139
+/Lambda 16#039B
+/Lcaron 16#013D
+/Lcedilla 16#013B
+/Lcircle 16#24C1
+/Lcircumflexbelow 16#1E3C
+/Lcommaaccent 16#013B
+/Ldot 16#013F
+/Ldotaccent 16#013F
+/Ldotbelow 16#1E36
+/Ldotbelowmacron 16#1E38
+/Liwnarmenian 16#053C
+/Lj 16#01C8
+/Ljecyrillic 16#0409
+/Llinebelow 16#1E3A
+/Lmonospace 16#FF2C
+/Lslash 16#0141
+/Lslashsmall 16#F6F9
+/Lsmall 16#F76C
+/M 16#004D
+/MBsquare 16#3386
+/Macron 16#F6D0
+/Macronsmall 16#F7AF
+/Macute 16#1E3E
+/Mcircle 16#24C2
+/Mdotaccent 16#1E40
+/Mdotbelow 16#1E42
+/Menarmenian 16#0544
+/Mmonospace 16#FF2D
+/Msmall 16#F76D
+/Mturned 16#019C
+/Mu 16#039C
+/N 16#004E
+/NJ 16#01CA
+/Nacute 16#0143
+/Ncaron 16#0147
+/Ncedilla 16#0145
+/Ncircle 16#24C3
+/Ncircumflexbelow 16#1E4A
+/Ncommaaccent 16#0145
+/Ndotaccent 16#1E44
+/Ndotbelow 16#1E46
+/Nhookleft 16#019D
+/Nineroman 16#2168
+/Nj 16#01CB
+/Njecyrillic 16#040A
+/Nlinebelow 16#1E48
+/Nmonospace 16#FF2E
+/Nowarmenian 16#0546
+/Nsmall 16#F76E
+/Ntilde 16#00D1
+/Ntildesmall 16#F7F1
+/Nu 16#039D
+/O 16#004F
+/OE 16#0152
+/OEsmall 16#F6FA
+/Oacute 16#00D3
+/Oacutesmall 16#F7F3
+/Obarredcyrillic 16#04E8
+/Obarreddieresiscyrillic 16#04EA
+/Obreve 16#014E
+/Ocaron 16#01D1
+/Ocenteredtilde 16#019F
+/Ocircle 16#24C4
+/Ocircumflex 16#00D4
+/Ocircumflexacute 16#1ED0
+/Ocircumflexdotbelow 16#1ED8
+/Ocircumflexgrave 16#1ED2
+/Ocircumflexhookabove 16#1ED4
+/Ocircumflexsmall 16#F7F4
+/Ocircumflextilde 16#1ED6
+/Ocyrillic 16#041E
+/Odblacute 16#0150
+/Odblgrave 16#020C
+/Odieresis 16#00D6
+/Odieresiscyrillic 16#04E6
+/Odieresissmall 16#F7F6
+/Odotbelow 16#1ECC
+/Ogoneksmall 16#F6FB
+/Ograve 16#00D2
+/Ogravesmall 16#F7F2
+/Oharmenian 16#0555
+/Ohm 16#2126
+/Ohookabove 16#1ECE
+/Ohorn 16#01A0
+/Ohornacute 16#1EDA
+/Ohorndotbelow 16#1EE2
+/Ohorngrave 16#1EDC
+/Ohornhookabove 16#1EDE
+/Ohorntilde 16#1EE0
+/Ohungarumlaut 16#0150
+/Oi 16#01A2
+/Oinvertedbreve 16#020E
+/Omacron 16#014C
+/Omacronacute 16#1E52
+/Omacrongrave 16#1E50
+/Omega 16#2126
+/Omegacyrillic 16#0460
+/Omegagreek 16#03A9
+/Omegaroundcyrillic 16#047A
+/Omegatitlocyrillic 16#047C
+/Omegatonos 16#038F
+/Omicron 16#039F
+/Omicrontonos 16#038C
+/Omonospace 16#FF2F
+/Oneroman 16#2160
+/Oogonek 16#01EA
+/Oogonekmacron 16#01EC
+/Oopen 16#0186
+/Oslash 16#00D8
+/Oslashacute 16#01FE
+/Oslashsmall 16#F7F8
+/Osmall 16#F76F
+/Ostrokeacute 16#01FE
+/Otcyrillic 16#047E
+/Otilde 16#00D5
+/Otildeacute 16#1E4C
+/Otildedieresis 16#1E4E
+/Otildesmall 16#F7F5
+/P 16#0050
+/Pacute 16#1E54
+/Pcircle 16#24C5
+/Pdotaccent 16#1E56
+/Pecyrillic 16#041F
+/Peharmenian 16#054A
+/Pemiddlehookcyrillic 16#04A6
+/Phi 16#03A6
+/Phook 16#01A4
+/Pi 16#03A0
+/Piwrarmenian 16#0553
+/Pmonospace 16#FF30
+/Psi 16#03A8
+/Psicyrillic 16#0470
+/Psmall 16#F770
+/Q 16#0051
+/Qcircle 16#24C6
+/Qmonospace 16#FF31
+/Qsmall 16#F771
+/R 16#0052
+/Raarmenian 16#054C
+/Racute 16#0154
+/Rcaron 16#0158
+/Rcedilla 16#0156
+/Rcircle 16#24C7
+/Rcommaaccent 16#0156
+/Rdblgrave 16#0210
+/Rdotaccent 16#1E58
+/Rdotbelow 16#1E5A
+/Rdotbelowmacron 16#1E5C
+/Reharmenian 16#0550
+/Rfraktur 16#211C
+/Rho 16#03A1
+/Ringsmall 16#F6FC
+/Rinvertedbreve 16#0212
+/Rlinebelow 16#1E5E
+/Rmonospace 16#FF32
+/Rsmall 16#F772
+/Rsmallinverted 16#0281
+/Rsmallinvertedsuperior 16#02B6
+/S 16#0053
+/SF010000 16#250C
+/SF020000 16#2514
+/SF030000 16#2510
+/SF040000 16#2518
+/SF050000 16#253C
+/SF060000 16#252C
+/SF070000 16#2534
+/SF080000 16#251C
+/SF090000 16#2524
+/SF100000 16#2500
+/SF110000 16#2502
+/SF190000 16#2561
+/SF200000 16#2562
+/SF210000 16#2556
+/SF220000 16#2555
+/SF230000 16#2563
+/SF240000 16#2551
+/SF250000 16#2557
+/SF260000 16#255D
+/SF270000 16#255C
+/SF280000 16#255B
+/SF360000 16#255E
+/SF370000 16#255F
+/SF380000 16#255A
+/SF390000 16#2554
+/SF400000 16#2569
+/SF410000 16#2566
+/SF420000 16#2560
+/SF430000 16#2550
+/SF440000 16#256C
+/SF450000 16#2567
+/SF460000 16#2568
+/SF470000 16#2564
+/SF480000 16#2565
+/SF490000 16#2559
+/SF500000 16#2558
+/SF510000 16#2552
+/SF520000 16#2553
+/SF530000 16#256B
+/SF540000 16#256A
+/Sacute 16#015A
+/Sacutedotaccent 16#1E64
+/Sampigreek 16#03E0
+/Scaron 16#0160
+/Scarondotaccent 16#1E66
+/Scaronsmall 16#F6FD
+/Scedilla 16#015E
+/Schwa 16#018F
+/Schwacyrillic 16#04D8
+/Schwadieresiscyrillic 16#04DA
+/Scircle 16#24C8
+/Scircumflex 16#015C
+/Scommaaccent 16#0218
+/Sdotaccent 16#1E60
+/Sdotbelow 16#1E62
+/Sdotbelowdotaccent 16#1E68
+/Seharmenian 16#054D
+/Sevenroman 16#2166
+/Shaarmenian 16#0547
+/Shacyrillic 16#0428
+/Shchacyrillic 16#0429
+/Sheicoptic 16#03E2
+/Shhacyrillic 16#04BA
+/Shimacoptic 16#03EC
+/Sigma 16#03A3
+/Sixroman 16#2165
+/Smonospace 16#FF33
+/Softsigncyrillic 16#042C
+/Ssmall 16#F773
+/Stigmagreek 16#03DA
+/T 16#0054
+/Tau 16#03A4
+/Tbar 16#0166
+/Tcaron 16#0164
+/Tcedilla 16#0162
+/Tcircle 16#24C9
+/Tcircumflexbelow 16#1E70
+/Tcommaaccent 16#0162
+/Tdotaccent 16#1E6A
+/Tdotbelow 16#1E6C
+/Tecyrillic 16#0422
+/Tedescendercyrillic 16#04AC
+/Tenroman 16#2169
+/Tetsecyrillic 16#04B4
+/Theta 16#0398
+/Thook 16#01AC
+/Thorn 16#00DE
+/Thornsmall 16#F7FE
+/Threeroman 16#2162
+/Tildesmall 16#F6FE
+/Tiwnarmenian 16#054F
+/Tlinebelow 16#1E6E
+/Tmonospace 16#FF34
+/Toarmenian 16#0539
+/Tonefive 16#01BC
+/Tonesix 16#0184
+/Tonetwo 16#01A7
+/Tretroflexhook 16#01AE
+/Tsecyrillic 16#0426
+/Tshecyrillic 16#040B
+/Tsmall 16#F774
+/Twelveroman 16#216B
+/Tworoman 16#2161
+/U 16#0055
+/Uacute 16#00DA
+/Uacutesmall 16#F7FA
+/Ubreve 16#016C
+/Ucaron 16#01D3
+/Ucircle 16#24CA
+/Ucircumflex 16#00DB
+/Ucircumflexbelow 16#1E76
+/Ucircumflexsmall 16#F7FB
+/Ucyrillic 16#0423
+/Udblacute 16#0170
+/Udblgrave 16#0214
+/Udieresis 16#00DC
+/Udieresisacute 16#01D7
+/Udieresisbelow 16#1E72
+/Udieresiscaron 16#01D9
+/Udieresiscyrillic 16#04F0
+/Udieresisgrave 16#01DB
+/Udieresismacron 16#01D5
+/Udieresissmall 16#F7FC
+/Udotbelow 16#1EE4
+/Ugrave 16#00D9
+/Ugravesmall 16#F7F9
+/Uhookabove 16#1EE6
+/Uhorn 16#01AF
+/Uhornacute 16#1EE8
+/Uhorndotbelow 16#1EF0
+/Uhorngrave 16#1EEA
+/Uhornhookabove 16#1EEC
+/Uhorntilde 16#1EEE
+/Uhungarumlaut 16#0170
+/Uhungarumlautcyrillic 16#04F2
+/Uinvertedbreve 16#0216
+/Ukcyrillic 16#0478
+/Umacron 16#016A
+/Umacroncyrillic 16#04EE
+/Umacrondieresis 16#1E7A
+/Umonospace 16#FF35
+/Uogonek 16#0172
+/Upsilon 16#03A5
+/Upsilon1 16#03D2
+/Upsilonacutehooksymbolgreek 16#03D3
+/Upsilonafrican 16#01B1
+/Upsilondieresis 16#03AB
+/Upsilondieresishooksymbolgreek 16#03D4
+/Upsilonhooksymbol 16#03D2
+/Upsilontonos 16#038E
+/Uring 16#016E
+/Ushortcyrillic 16#040E
+/Usmall 16#F775
+/Ustraightcyrillic 16#04AE
+/Ustraightstrokecyrillic 16#04B0
+/Utilde 16#0168
+/Utildeacute 16#1E78
+/Utildebelow 16#1E74
+/V 16#0056
+/Vcircle 16#24CB
+/Vdotbelow 16#1E7E
+/Vecyrillic 16#0412
+/Vewarmenian 16#054E
+/Vhook 16#01B2
+/Vmonospace 16#FF36
+/Voarmenian 16#0548
+/Vsmall 16#F776
+/Vtilde 16#1E7C
+/W 16#0057
+/Wacute 16#1E82
+/Wcircle 16#24CC
+/Wcircumflex 16#0174
+/Wdieresis 16#1E84
+/Wdotaccent 16#1E86
+/Wdotbelow 16#1E88
+/Wgrave 16#1E80
+/Wmonospace 16#FF37
+/Wsmall 16#F777
+/X 16#0058
+/Xcircle 16#24CD
+/Xdieresis 16#1E8C
+/Xdotaccent 16#1E8A
+/Xeharmenian 16#053D
+/Xi 16#039E
+/Xmonospace 16#FF38
+/Xsmall 16#F778
+/Y 16#0059
+/Yacute 16#00DD
+/Yacutesmall 16#F7FD
+/Yatcyrillic 16#0462
+/Ycircle 16#24CE
+/Ycircumflex 16#0176
+/Ydieresis 16#0178
+/Ydieresissmall 16#F7FF
+/Ydotaccent 16#1E8E
+/Ydotbelow 16#1EF4
+/Yericyrillic 16#042B
+/Yerudieresiscyrillic 16#04F8
+/Ygrave 16#1EF2
+/Yhook 16#01B3
+/Yhookabove 16#1EF6
+/Yiarmenian 16#0545
+/Yicyrillic 16#0407
+/Yiwnarmenian 16#0552
+/Ymonospace 16#FF39
+/Ysmall 16#F779
+/Ytilde 16#1EF8
+/Yusbigcyrillic 16#046A
+/Yusbigiotifiedcyrillic 16#046C
+/Yuslittlecyrillic 16#0466
+/Yuslittleiotifiedcyrillic 16#0468
+/Z 16#005A
+/Zaarmenian 16#0536
+/Zacute 16#0179
+/Zcaron 16#017D
+/Zcaronsmall 16#F6FF
+/Zcircle 16#24CF
+/Zcircumflex 16#1E90
+/Zdot 16#017B
+/Zdotaccent 16#017B
+/Zdotbelow 16#1E92
+/Zecyrillic 16#0417
+/Zedescendercyrillic 16#0498
+/Zedieresiscyrillic 16#04DE
+/Zeta 16#0396
+/Zhearmenian 16#053A
+/Zhebrevecyrillic 16#04C1
+/Zhecyrillic 16#0416
+/Zhedescendercyrillic 16#0496
+/Zhedieresiscyrillic 16#04DC
+/Zlinebelow 16#1E94
+/Zmonospace 16#FF3A
+/Zsmall 16#F77A
+/Zstroke 16#01B5
+/a 16#0061
+/aabengali 16#0986
+/aacute 16#00E1
+/aadeva 16#0906
+/aagujarati 16#0A86
+/aagurmukhi 16#0A06
+/aamatragurmukhi 16#0A3E
+/aarusquare 16#3303
+/aavowelsignbengali 16#09BE
+/aavowelsigndeva 16#093E
+/aavowelsigngujarati 16#0ABE
+/abbreviationmarkarmenian 16#055F
+/abbreviationsigndeva 16#0970
+/abengali 16#0985
+/abopomofo 16#311A
+/abreve 16#0103
+/abreveacute 16#1EAF
+/abrevecyrillic 16#04D1
+/abrevedotbelow 16#1EB7
+/abrevegrave 16#1EB1
+/abrevehookabove 16#1EB3
+/abrevetilde 16#1EB5
+/acaron 16#01CE
+/acircle 16#24D0
+/acircumflex 16#00E2
+/acircumflexacute 16#1EA5
+/acircumflexdotbelow 16#1EAD
+/acircumflexgrave 16#1EA7
+/acircumflexhookabove 16#1EA9
+/acircumflextilde 16#1EAB
+/acute 16#00B4
+/acutebelowcmb 16#0317
+/acutecmb 16#0301
+/acutecomb 16#0301
+/acutedeva 16#0954
+/acutelowmod 16#02CF
+/acutetonecmb 16#0341
+/acyrillic 16#0430
+/adblgrave 16#0201
+/addakgurmukhi 16#0A71
+/adeva 16#0905
+/adieresis 16#00E4
+/adieresiscyrillic 16#04D3
+/adieresismacron 16#01DF
+/adotbelow 16#1EA1
+/adotmacron 16#01E1
+/ae 16#00E6
+/aeacute 16#01FD
+/aekorean 16#3150
+/aemacron 16#01E3
+/afii00208 16#2015
+/afii08941 16#20A4
+/afii10017 16#0410
+/afii10018 16#0411
+/afii10019 16#0412
+/afii10020 16#0413
+/afii10021 16#0414
+/afii10022 16#0415
+/afii10023 16#0401
+/afii10024 16#0416
+/afii10025 16#0417
+/afii10026 16#0418
+/afii10027 16#0419
+/afii10028 16#041A
+/afii10029 16#041B
+/afii10030 16#041C
+/afii10031 16#041D
+/afii10032 16#041E
+/afii10033 16#041F
+/afii10034 16#0420
+/afii10035 16#0421
+/afii10036 16#0422
+/afii10037 16#0423
+/afii10038 16#0424
+/afii10039 16#0425
+/afii10040 16#0426
+/afii10041 16#0427
+/afii10042 16#0428
+/afii10043 16#0429
+/afii10044 16#042A
+/afii10045 16#042B
+/afii10046 16#042C
+/afii10047 16#042D
+/afii10048 16#042E
+/afii10049 16#042F
+/afii10050 16#0490
+/afii10051 16#0402
+/afii10052 16#0403
+/afii10053 16#0404
+/afii10054 16#0405
+/afii10055 16#0406
+/afii10056 16#0407
+/afii10057 16#0408
+/afii10058 16#0409
+/afii10059 16#040A
+/afii10060 16#040B
+/afii10061 16#040C
+/afii10062 16#040E
+/afii10063 16#F6C4
+/afii10064 16#F6C5
+/afii10065 16#0430
+/afii10066 16#0431
+/afii10067 16#0432
+/afii10068 16#0433
+/afii10069 16#0434
+/afii10070 16#0435
+/afii10071 16#0451
+/afii10072 16#0436
+/afii10073 16#0437
+/afii10074 16#0438
+/afii10075 16#0439
+/afii10076 16#043A
+/afii10077 16#043B
+/afii10078 16#043C
+/afii10079 16#043D
+/afii10080 16#043E
+/afii10081 16#043F
+/afii10082 16#0440
+/afii10083 16#0441
+/afii10084 16#0442
+/afii10085 16#0443
+/afii10086 16#0444
+/afii10087 16#0445
+/afii10088 16#0446
+/afii10089 16#0447
+/afii10090 16#0448
+/afii10091 16#0449
+/afii10092 16#044A
+/afii10093 16#044B
+/afii10094 16#044C
+/afii10095 16#044D
+/afii10096 16#044E
+/afii10097 16#044F
+/afii10098 16#0491
+/afii10099 16#0452
+/afii10100 16#0453
+/afii10101 16#0454
+/afii10102 16#0455
+/afii10103 16#0456
+/afii10104 16#0457
+/afii10105 16#0458
+/afii10106 16#0459
+/afii10107 16#045A
+/afii10108 16#045B
+/afii10109 16#045C
+/afii10110 16#045E
+/afii10145 16#040F
+/afii10146 16#0462
+/afii10147 16#0472
+/afii10148 16#0474
+/afii10192 16#F6C6
+/afii10193 16#045F
+/afii10194 16#0463
+/afii10195 16#0473
+/afii10196 16#0475
+/afii10831 16#F6C7
+/afii10832 16#F6C8
+/afii10846 16#04D9
+/afii299 16#200E
+/afii300 16#200F
+/afii301 16#200D
+/afii57381 16#066A
+/afii57388 16#060C
+/afii57392 16#0660
+/afii57393 16#0661
+/afii57394 16#0662
+/afii57395 16#0663
+/afii57396 16#0664
+/afii57397 16#0665
+/afii57398 16#0666
+/afii57399 16#0667
+/afii57400 16#0668
+/afii57401 16#0669
+/afii57403 16#061B
+/afii57407 16#061F
+/afii57409 16#0621
+/afii57410 16#0622
+/afii57411 16#0623
+/afii57412 16#0624
+/afii57413 16#0625
+/afii57414 16#0626
+/afii57415 16#0627
+/afii57416 16#0628
+/afii57417 16#0629
+/afii57418 16#062A
+/afii57419 16#062B
+/afii57420 16#062C
+/afii57421 16#062D
+/afii57422 16#062E
+/afii57423 16#062F
+/afii57424 16#0630
+/afii57425 16#0631
+/afii57426 16#0632
+/afii57427 16#0633
+/afii57428 16#0634
+/afii57429 16#0635
+/afii57430 16#0636
+/afii57431 16#0637
+/afii57432 16#0638
+/afii57433 16#0639
+/afii57434 16#063A
+/afii57440 16#0640
+/afii57441 16#0641
+/afii57442 16#0642
+/afii57443 16#0643
+/afii57444 16#0644
+/afii57445 16#0645
+/afii57446 16#0646
+/afii57448 16#0648
+/afii57449 16#0649
+/afii57450 16#064A
+/afii57451 16#064B
+/afii57452 16#064C
+/afii57453 16#064D
+/afii57454 16#064E
+/afii57455 16#064F
+/afii57456 16#0650
+/afii57457 16#0651
+/afii57458 16#0652
+/afii57470 16#0647
+/afii57505 16#06A4
+/afii57506 16#067E
+/afii57507 16#0686
+/afii57508 16#0698
+/afii57509 16#06AF
+/afii57511 16#0679
+/afii57512 16#0688
+/afii57513 16#0691
+/afii57514 16#06BA
+/afii57519 16#06D2
+/afii57534 16#06D5
+/afii57636 16#20AA
+/afii57645 16#05BE
+/afii57658 16#05C3
+/afii57664 16#05D0
+/afii57665 16#05D1
+/afii57666 16#05D2
+/afii57667 16#05D3
+/afii57668 16#05D4
+/afii57669 16#05D5
+/afii57670 16#05D6
+/afii57671 16#05D7
+/afii57672 16#05D8
+/afii57673 16#05D9
+/afii57674 16#05DA
+/afii57675 16#05DB
+/afii57676 16#05DC
+/afii57677 16#05DD
+/afii57678 16#05DE
+/afii57679 16#05DF
+/afii57680 16#05E0
+/afii57681 16#05E1
+/afii57682 16#05E2
+/afii57683 16#05E3
+/afii57684 16#05E4
+/afii57685 16#05E5
+/afii57686 16#05E6
+/afii57687 16#05E7
+/afii57688 16#05E8
+/afii57689 16#05E9
+/afii57690 16#05EA
+/afii57694 16#FB2A
+/afii57695 16#FB2B
+/afii57700 16#FB4B
+/afii57705 16#FB1F
+/afii57716 16#05F0
+/afii57717 16#05F1
+/afii57718 16#05F2
+/afii57723 16#FB35
+/afii57793 16#05B4
+/afii57794 16#05B5
+/afii57795 16#05B6
+/afii57796 16#05BB
+/afii57797 16#05B8
+/afii57798 16#05B7
+/afii57799 16#05B0
+/afii57800 16#05B2
+/afii57801 16#05B1
+/afii57802 16#05B3
+/afii57803 16#05C2
+/afii57804 16#05C1
+/afii57806 16#05B9
+/afii57807 16#05BC
+/afii57839 16#05BD
+/afii57841 16#05BF
+/afii57842 16#05C0
+/afii57929 16#02BC
+/afii61248 16#2105
+/afii61289 16#2113
+/afii61352 16#2116
+/afii61573 16#202C
+/afii61574 16#202D
+/afii61575 16#202E
+/afii61664 16#200C
+/afii63167 16#066D
+/afii64937 16#02BD
+/agrave 16#00E0
+/agujarati 16#0A85
+/agurmukhi 16#0A05
+/ahiragana 16#3042
+/ahookabove 16#1EA3
+/aibengali 16#0990
+/aibopomofo 16#311E
+/aideva 16#0910
+/aiecyrillic 16#04D5
+/aigujarati 16#0A90
+/aigurmukhi 16#0A10
+/aimatragurmukhi 16#0A48
+/ainarabic 16#0639
+/ainfinalarabic 16#FECA
+/aininitialarabic 16#FECB
+/ainmedialarabic 16#FECC
+/ainvertedbreve 16#0203
+/aivowelsignbengali 16#09C8
+/aivowelsigndeva 16#0948
+/aivowelsigngujarati 16#0AC8
+/akatakana 16#30A2
+/akatakanahalfwidth 16#FF71
+/akorean 16#314F
+/alef 16#05D0
+/alefarabic 16#0627
+/alefdageshhebrew 16#FB30
+/aleffinalarabic 16#FE8E
+/alefhamzaabovearabic 16#0623
+/alefhamzaabovefinalarabic 16#FE84
+/alefhamzabelowarabic 16#0625
+/alefhamzabelowfinalarabic 16#FE88
+/alefhebrew 16#05D0
+/aleflamedhebrew 16#FB4F
+/alefmaddaabovearabic 16#0622
+/alefmaddaabovefinalarabic 16#FE82
+/alefmaksuraarabic 16#0649
+/alefmaksurafinalarabic 16#FEF0
+/alefmaksurainitialarabic 16#FEF3
+/alefmaksuramedialarabic 16#FEF4
+/alefpatahhebrew 16#FB2E
+/alefqamatshebrew 16#FB2F
+/aleph 16#2135
+/allequal 16#224C
+/alpha 16#03B1
+/alphatonos 16#03AC
+/amacron 16#0101
+/amonospace 16#FF41
+/ampersand 16#0026
+/ampersandmonospace 16#FF06
+/ampersandsmall 16#F726
+/amsquare 16#33C2
+/anbopomofo 16#3122
+/angbopomofo 16#3124
+/angkhankhuthai 16#0E5A
+/angle 16#2220
+/anglebracketleft 16#3008
+/anglebracketleftvertical 16#FE3F
+/anglebracketright 16#3009
+/anglebracketrightvertical 16#FE40
+/angleleft 16#2329
+/angleright 16#232A
+/angstrom 16#212B
+/anoteleia 16#0387
+/anudattadeva 16#0952
+/anusvarabengali 16#0982
+/anusvaradeva 16#0902
+/anusvaragujarati 16#0A82
+/aogonek 16#0105
+/apaatosquare 16#3300
+/aparen 16#249C
+/apostrophearmenian 16#055A
+/apostrophemod 16#02BC
+/apple 16#F8FF
+/approaches 16#2250
+/approxequal 16#2248
+/approxequalorimage 16#2252
+/approximatelyequal 16#2245
+/araeaekorean 16#318E
+/araeakorean 16#318D
+/arc 16#2312
+/arighthalfring 16#1E9A
+/aring 16#00E5
+/aringacute 16#01FB
+/aringbelow 16#1E01
+/arrowboth 16#2194
+/arrowdashdown 16#21E3
+/arrowdashleft 16#21E0
+/arrowdashright 16#21E2
+/arrowdashup 16#21E1
+/arrowdblboth 16#21D4
+/arrowdbldown 16#21D3
+/arrowdblleft 16#21D0
+/arrowdblright 16#21D2
+/arrowdblup 16#21D1
+/arrowdown 16#2193
+/arrowdownleft 16#2199
+/arrowdownright 16#2198
+/arrowdownwhite 16#21E9
+/arrowheaddownmod 16#02C5
+/arrowheadleftmod 16#02C2
+/arrowheadrightmod 16#02C3
+/arrowheadupmod 16#02C4
+/arrowhorizex 16#F8E7
+/arrowleft 16#2190
+/arrowleftdbl 16#21D0
+/arrowleftdblstroke 16#21CD
+/arrowleftoverright 16#21C6
+/arrowleftwhite 16#21E6
+/arrowright 16#2192
+/arrowrightdblstroke 16#21CF
+/arrowrightheavy 16#279E
+/arrowrightoverleft 16#21C4
+/arrowrightwhite 16#21E8
+/arrowtableft 16#21E4
+/arrowtabright 16#21E5
+/arrowup 16#2191
+/arrowupdn 16#2195
+/arrowupdnbse 16#21A8
+/arrowupdownbase 16#21A8
+/arrowupleft 16#2196
+/arrowupleftofdown 16#21C5
+/arrowupright 16#2197
+/arrowupwhite 16#21E7
+/arrowvertex 16#F8E6
+/asciicircum 16#005E
+/asciicircummonospace 16#FF3E
+/asciitilde 16#007E
+/asciitildemonospace 16#FF5E
+/ascript 16#0251
+/ascriptturned 16#0252
+/asmallhiragana 16#3041
+/asmallkatakana 16#30A1
+/asmallkatakanahalfwidth 16#FF67
+/asterisk 16#002A
+/asteriskaltonearabic 16#066D
+/asteriskarabic 16#066D
+/asteriskmath 16#2217
+/asteriskmonospace 16#FF0A
+/asterisksmall 16#FE61
+/asterism 16#2042
+/asuperior 16#F6E9
+/asymptoticallyequal 16#2243
+/at 16#0040
+/atilde 16#00E3
+/atmonospace 16#FF20
+/atsmall 16#FE6B
+/aturned 16#0250
+/aubengali 16#0994
+/aubopomofo 16#3120
+/audeva 16#0914
+/augujarati 16#0A94
+/augurmukhi 16#0A14
+/aulengthmarkbengali 16#09D7
+/aumatragurmukhi 16#0A4C
+/auvowelsignbengali 16#09CC
+/auvowelsigndeva 16#094C
+/auvowelsigngujarati 16#0ACC
+/avagrahadeva 16#093D
+/aybarmenian 16#0561
+/ayin 16#05E2
+/ayinaltonehebrew 16#FB20
+/ayinhebrew 16#05E2
+/b 16#0062
+/babengali 16#09AC
+/backslash 16#005C
+/backslashmonospace 16#FF3C
+/badeva 16#092C
+/bagujarati 16#0AAC
+/bagurmukhi 16#0A2C
+/bahiragana 16#3070
+/bahtthai 16#0E3F
+/bakatakana 16#30D0
+/bar 16#007C
+/barmonospace 16#FF5C
+/bbopomofo 16#3105
+/bcircle 16#24D1
+/bdotaccent 16#1E03
+/bdotbelow 16#1E05
+/beamedsixteenthnotes 16#266C
+/because 16#2235
+/becyrillic 16#0431
+/beharabic 16#0628
+/behfinalarabic 16#FE90
+/behinitialarabic 16#FE91
+/behiragana 16#3079
+/behmedialarabic 16#FE92
+/behmeeminitialarabic 16#FC9F
+/behmeemisolatedarabic 16#FC08
+/behnoonfinalarabic 16#FC6D
+/bekatakana 16#30D9
+/benarmenian 16#0562
+/bet 16#05D1
+/beta 16#03B2
+/betasymbolgreek 16#03D0
+/betdagesh 16#FB31
+/betdageshhebrew 16#FB31
+/bethebrew 16#05D1
+/betrafehebrew 16#FB4C
+/bhabengali 16#09AD
+/bhadeva 16#092D
+/bhagujarati 16#0AAD
+/bhagurmukhi 16#0A2D
+/bhook 16#0253
+/bihiragana 16#3073
+/bikatakana 16#30D3
+/bilabialclick 16#0298
+/bindigurmukhi 16#0A02
+/birusquare 16#3331
+/blackcircle 16#25CF
+/blackdiamond 16#25C6
+/blackdownpointingtriangle 16#25BC
+/blackleftpointingpointer 16#25C4
+/blackleftpointingtriangle 16#25C0
+/blacklenticularbracketleft 16#3010
+/blacklenticularbracketleftvertical 16#FE3B
+/blacklenticularbracketright 16#3011
+/blacklenticularbracketrightvertical 16#FE3C
+/blacklowerlefttriangle 16#25E3
+/blacklowerrighttriangle 16#25E2
+/blackrectangle 16#25AC
+/blackrightpointingpointer 16#25BA
+/blackrightpointingtriangle 16#25B6
+/blacksmallsquare 16#25AA
+/blacksmilingface 16#263B
+/blacksquare 16#25A0
+/blackstar 16#2605
+/blackupperlefttriangle 16#25E4
+/blackupperrighttriangle 16#25E5
+/blackuppointingsmalltriangle 16#25B4
+/blackuppointingtriangle 16#25B2
+/blank 16#2423
+/blinebelow 16#1E07
+/block 16#2588
+/bmonospace 16#FF42
+/bobaimaithai 16#0E1A
+/bohiragana 16#307C
+/bokatakana 16#30DC
+/bparen 16#249D
+/bqsquare 16#33C3
+/braceex 16#F8F4
+/braceleft 16#007B
+/braceleftbt 16#F8F3
+/braceleftmid 16#F8F2
+/braceleftmonospace 16#FF5B
+/braceleftsmall 16#FE5B
+/bracelefttp 16#F8F1
+/braceleftvertical 16#FE37
+/braceright 16#007D
+/bracerightbt 16#F8FE
+/bracerightmid 16#F8FD
+/bracerightmonospace 16#FF5D
+/bracerightsmall 16#FE5C
+/bracerighttp 16#F8FC
+/bracerightvertical 16#FE38
+/bracketleft 16#005B
+/bracketleftbt 16#F8F0
+/bracketleftex 16#F8EF
+/bracketleftmonospace 16#FF3B
+/bracketlefttp 16#F8EE
+/bracketright 16#005D
+/bracketrightbt 16#F8FB
+/bracketrightex 16#F8FA
+/bracketrightmonospace 16#FF3D
+/bracketrighttp 16#F8F9
+/breve 16#02D8
+/brevebelowcmb 16#032E
+/brevecmb 16#0306
+/breveinvertedbelowcmb 16#032F
+/breveinvertedcmb 16#0311
+/breveinverteddoublecmb 16#0361
+/bridgebelowcmb 16#032A
+/bridgeinvertedbelowcmb 16#033A
+/brokenbar 16#00A6
+/bstroke 16#0180
+/bsuperior 16#F6EA
+/btopbar 16#0183
+/buhiragana 16#3076
+/bukatakana 16#30D6
+/bullet 16#2022
+/bulletinverse 16#25D8
+/bulletoperator 16#2219
+/bullseye 16#25CE
+/c 16#0063
+/caarmenian 16#056E
+/cabengali 16#099A
+/cacute 16#0107
+/cadeva 16#091A
+/cagujarati 16#0A9A
+/cagurmukhi 16#0A1A
+/calsquare 16#3388
+/candrabindubengali 16#0981
+/candrabinducmb 16#0310
+/candrabindudeva 16#0901
+/candrabindugujarati 16#0A81
+/capslock 16#21EA
+/careof 16#2105
+/caron 16#02C7
+/caronbelowcmb 16#032C
+/caroncmb 16#030C
+/carriagereturn 16#21B5
+/cbopomofo 16#3118
+/ccaron 16#010D
+/ccedilla 16#00E7
+/ccedillaacute 16#1E09
+/ccircle 16#24D2
+/ccircumflex 16#0109
+/ccurl 16#0255
+/cdot 16#010B
+/cdotaccent 16#010B
+/cdsquare 16#33C5
+/cedilla 16#00B8
+/cedillacmb 16#0327
+/cent 16#00A2
+/centigrade 16#2103
+/centinferior 16#F6DF
+/centmonospace 16#FFE0
+/centoldstyle 16#F7A2
+/centsuperior 16#F6E0
+/chaarmenian 16#0579
+/chabengali 16#099B
+/chadeva 16#091B
+/chagujarati 16#0A9B
+/chagurmukhi 16#0A1B
+/chbopomofo 16#3114
+/cheabkhasiancyrillic 16#04BD
+/checkmark 16#2713
+/checyrillic 16#0447
+/chedescenderabkhasiancyrillic 16#04BF
+/chedescendercyrillic 16#04B7
+/chedieresiscyrillic 16#04F5
+/cheharmenian 16#0573
+/chekhakassiancyrillic 16#04CC
+/cheverticalstrokecyrillic 16#04B9
+/chi 16#03C7
+/chieuchacirclekorean 16#3277
+/chieuchaparenkorean 16#3217
+/chieuchcirclekorean 16#3269
+/chieuchkorean 16#314A
+/chieuchparenkorean 16#3209
+/chochangthai 16#0E0A
+/chochanthai 16#0E08
+/chochingthai 16#0E09
+/chochoethai 16#0E0C
+/chook 16#0188
+/cieucacirclekorean 16#3276
+/cieucaparenkorean 16#3216
+/cieuccirclekorean 16#3268
+/cieuckorean 16#3148
+/cieucparenkorean 16#3208
+/cieucuparenkorean 16#321C
+/circle 16#25CB
+/circlemultiply 16#2297
+/circleot 16#2299
+/circleplus 16#2295
+/circlepostalmark 16#3036
+/circlewithlefthalfblack 16#25D0
+/circlewithrighthalfblack 16#25D1
+/circumflex 16#02C6
+/circumflexbelowcmb 16#032D
+/circumflexcmb 16#0302
+/clear 16#2327
+/clickalveolar 16#01C2
+/clickdental 16#01C0
+/clicklateral 16#01C1
+/clickretroflex 16#01C3
+/club 16#2663
+/clubsuitblack 16#2663
+/clubsuitwhite 16#2667
+/cmcubedsquare 16#33A4
+/cmonospace 16#FF43
+/cmsquaredsquare 16#33A0
+/coarmenian 16#0581
+/colon 16#003A
+/colonmonetary 16#20A1
+/colonmonospace 16#FF1A
+/colonsign 16#20A1
+/colonsmall 16#FE55
+/colontriangularhalfmod 16#02D1
+/colontriangularmod 16#02D0
+/comma 16#002C
+/commaabovecmb 16#0313
+/commaaboverightcmb 16#0315
+/commaaccent 16#F6C3
+/commaarabic 16#060C
+/commaarmenian 16#055D
+/commainferior 16#F6E1
+/commamonospace 16#FF0C
+/commareversedabovecmb 16#0314
+/commareversedmod 16#02BD
+/commasmall 16#FE50
+/commasuperior 16#F6E2
+/commaturnedabovecmb 16#0312
+/commaturnedmod 16#02BB
+/compass 16#263C
+/congruent 16#2245
+/contourintegral 16#222E
+/control 16#2303
+/controlACK 16#0006
+/controlBEL 16#0007
+/controlBS 16#0008
+/controlCAN 16#0018
+/controlCR 16#000D
+/controlDC1 16#0011
+/controlDC2 16#0012
+/controlDC3 16#0013
+/controlDC4 16#0014
+/controlDEL 16#007F
+/controlDLE 16#0010
+/controlEM 16#0019
+/controlENQ 16#0005
+/controlEOT 16#0004
+/controlESC 16#001B
+/controlETB 16#0017
+/controlETX 16#0003
+/controlFF 16#000C
+/controlFS 16#001C
+/controlGS 16#001D
+/controlHT 16#0009
+/controlLF 16#000A
+/controlNAK 16#0015
+/controlRS 16#001E
+/controlSI 16#000F
+/controlSO 16#000E
+/controlSOT 16#0002
+/controlSTX 16#0001
+/controlSUB 16#001A
+/controlSYN 16#0016
+/controlUS 16#001F
+/controlVT 16#000B
+/copyright 16#00A9
+/copyrightsans 16#F8E9
+/copyrightserif 16#F6D9
+/cornerbracketleft 16#300C
+/cornerbracketlefthalfwidth 16#FF62
+/cornerbracketleftvertical 16#FE41
+/cornerbracketright 16#300D
+/cornerbracketrighthalfwidth 16#FF63
+/cornerbracketrightvertical 16#FE42
+/corporationsquare 16#337F
+/cosquare 16#33C7
+/coverkgsquare 16#33C6
+/cparen 16#249E
+/cruzeiro 16#20A2
+/cstretched 16#0297
+/curlyand 16#22CF
+/curlyor 16#22CE
+/currency 16#00A4
+/cyrBreve 16#F6D1
+/cyrFlex 16#F6D2
+/cyrbreve 16#F6D4
+/cyrflex 16#F6D5
+/d 16#0064
+/daarmenian 16#0564
+/dabengali 16#09A6
+/dadarabic 16#0636
+/dadeva 16#0926
+/dadfinalarabic 16#FEBE
+/dadinitialarabic 16#FEBF
+/dadmedialarabic 16#FEC0
+/dagesh 16#05BC
+/dageshhebrew 16#05BC
+/dagger 16#2020
+/daggerdbl 16#2021
+/dagujarati 16#0AA6
+/dagurmukhi 16#0A26
+/dahiragana 16#3060
+/dakatakana 16#30C0
+/dalarabic 16#062F
+/dalet 16#05D3
+/daletdagesh 16#FB33
+/daletdageshhebrew 16#FB33
+% /dalethatafpatah 16#05D3 16#05B2
+% /dalethatafpatahhebrew 16#05D3 16#05B2
+% /dalethatafsegol 16#05D3 16#05B1
+% /dalethatafsegolhebrew 16#05D3 16#05B1
+/dalethebrew 16#05D3
+% /dalethiriq 16#05D3 16#05B4
+% /dalethiriqhebrew 16#05D3 16#05B4
+% /daletholam 16#05D3 16#05B9
+% /daletholamhebrew 16#05D3 16#05B9
+% /daletpatah 16#05D3 16#05B7
+% /daletpatahhebrew 16#05D3 16#05B7
+% /daletqamats 16#05D3 16#05B8
+% /daletqamatshebrew 16#05D3 16#05B8
+% /daletqubuts 16#05D3 16#05BB
+% /daletqubutshebrew 16#05D3 16#05BB
+% /daletsegol 16#05D3 16#05B6
+% /daletsegolhebrew 16#05D3 16#05B6
+% /daletsheva 16#05D3 16#05B0
+% /daletshevahebrew 16#05D3 16#05B0
+% /dalettsere 16#05D3 16#05B5
+% /dalettserehebrew 16#05D3 16#05B5
+/dalfinalarabic 16#FEAA
+/dammaarabic 16#064F
+/dammalowarabic 16#064F
+/dammatanaltonearabic 16#064C
+/dammatanarabic 16#064C
+/danda 16#0964
+/dargahebrew 16#05A7
+/dargalefthebrew 16#05A7
+/dasiapneumatacyrilliccmb 16#0485
+/dblGrave 16#F6D3
+/dblanglebracketleft 16#300A
+/dblanglebracketleftvertical 16#FE3D
+/dblanglebracketright 16#300B
+/dblanglebracketrightvertical 16#FE3E
+/dblarchinvertedbelowcmb 16#032B
+/dblarrowleft 16#21D4
+/dblarrowright 16#21D2
+/dbldanda 16#0965
+/dblgrave 16#F6D6
+/dblgravecmb 16#030F
+/dblintegral 16#222C
+/dbllowline 16#2017
+/dbllowlinecmb 16#0333
+/dbloverlinecmb 16#033F
+/dblprimemod 16#02BA
+/dblverticalbar 16#2016
+/dblverticallineabovecmb 16#030E
+/dbopomofo 16#3109
+/dbsquare 16#33C8
+/dcaron 16#010F
+/dcedilla 16#1E11
+/dcircle 16#24D3
+/dcircumflexbelow 16#1E13
+/dcroat 16#0111
+/ddabengali 16#09A1
+/ddadeva 16#0921
+/ddagujarati 16#0AA1
+/ddagurmukhi 16#0A21
+/ddalarabic 16#0688
+/ddalfinalarabic 16#FB89
+/dddhadeva 16#095C
+/ddhabengali 16#09A2
+/ddhadeva 16#0922
+/ddhagujarati 16#0AA2
+/ddhagurmukhi 16#0A22
+/ddotaccent 16#1E0B
+/ddotbelow 16#1E0D
+/decimalseparatorarabic 16#066B
+/decimalseparatorpersian 16#066B
+/decyrillic 16#0434
+/degree 16#00B0
+/dehihebrew 16#05AD
+/dehiragana 16#3067
+/deicoptic 16#03EF
+/dekatakana 16#30C7
+/deleteleft 16#232B
+/deleteright 16#2326
+/delta 16#03B4
+/deltaturned 16#018D
+/denominatorminusonenumeratorbengali 16#09F8
+/dezh 16#02A4
+/dhabengali 16#09A7
+/dhadeva 16#0927
+/dhagujarati 16#0AA7
+/dhagurmukhi 16#0A27
+/dhook 16#0257
+/dialytikatonos 16#0385
+/dialytikatonoscmb 16#0344
+/diamond 16#2666
+/diamondsuitwhite 16#2662
+/dieresis 16#00A8
+/dieresisacute 16#F6D7
+/dieresisbelowcmb 16#0324
+/dieresiscmb 16#0308
+/dieresisgrave 16#F6D8
+/dieresistonos 16#0385
+/dihiragana 16#3062
+/dikatakana 16#30C2
+/dittomark 16#3003
+/divide 16#00F7
+/divides 16#2223
+/divisionslash 16#2215
+/djecyrillic 16#0452
+/dkshade 16#2593
+/dlinebelow 16#1E0F
+/dlsquare 16#3397
+/dmacron 16#0111
+/dmonospace 16#FF44
+/dnblock 16#2584
+/dochadathai 16#0E0E
+/dodekthai 16#0E14
+/dohiragana 16#3069
+/dokatakana 16#30C9
+/dollar 16#0024
+/dollarinferior 16#F6E3
+/dollarmonospace 16#FF04
+/dollaroldstyle 16#F724
+/dollarsmall 16#FE69
+/dollarsuperior 16#F6E4
+/dong 16#20AB
+/dorusquare 16#3326
+/dotaccent 16#02D9
+/dotaccentcmb 16#0307
+/dotbelowcmb 16#0323
+/dotbelowcomb 16#0323
+/dotkatakana 16#30FB
+/dotlessi 16#0131
+/dotlessj 16#F6BE
+/dotlessjstrokehook 16#0284
+/dotmath 16#22C5
+/dottedcircle 16#25CC
+/doubleyodpatah 16#FB1F
+/doubleyodpatahhebrew 16#FB1F
+/downtackbelowcmb 16#031E
+/downtackmod 16#02D5
+/dparen 16#249F
+/dsuperior 16#F6EB
+/dtail 16#0256
+/dtopbar 16#018C
+/duhiragana 16#3065
+/dukatakana 16#30C5
+/dz 16#01F3
+/dzaltone 16#02A3
+/dzcaron 16#01C6
+/dzcurl 16#02A5
+/dzeabkhasiancyrillic 16#04E1
+/dzecyrillic 16#0455
+/dzhecyrillic 16#045F
+/e 16#0065
+/eacute 16#00E9
+/earth 16#2641
+/ebengali 16#098F
+/ebopomofo 16#311C
+/ebreve 16#0115
+/ecandradeva 16#090D
+/ecandragujarati 16#0A8D
+/ecandravowelsigndeva 16#0945
+/ecandravowelsigngujarati 16#0AC5
+/ecaron 16#011B
+/ecedillabreve 16#1E1D
+/echarmenian 16#0565
+/echyiwnarmenian 16#0587
+/ecircle 16#24D4
+/ecircumflex 16#00EA
+/ecircumflexacute 16#1EBF
+/ecircumflexbelow 16#1E19
+/ecircumflexdotbelow 16#1EC7
+/ecircumflexgrave 16#1EC1
+/ecircumflexhookabove 16#1EC3
+/ecircumflextilde 16#1EC5
+/ecyrillic 16#0454
+/edblgrave 16#0205
+/edeva 16#090F
+/edieresis 16#00EB
+/edot 16#0117
+/edotaccent 16#0117
+/edotbelow 16#1EB9
+/eegurmukhi 16#0A0F
+/eematragurmukhi 16#0A47
+/efcyrillic 16#0444
+/egrave 16#00E8
+/egujarati 16#0A8F
+/eharmenian 16#0567
+/ehbopomofo 16#311D
+/ehiragana 16#3048
+/ehookabove 16#1EBB
+/eibopomofo 16#311F
+/eight 16#0038
+/eightarabic 16#0668
+/eightbengali 16#09EE
+/eightcircle 16#2467
+/eightcircleinversesansserif 16#2791
+/eightdeva 16#096E
+/eighteencircle 16#2471
+/eighteenparen 16#2485
+/eighteenperiod 16#2499
+/eightgujarati 16#0AEE
+/eightgurmukhi 16#0A6E
+/eighthackarabic 16#0668
+/eighthangzhou 16#3028
+/eighthnotebeamed 16#266B
+/eightideographicparen 16#3227
+/eightinferior 16#2088
+/eightmonospace 16#FF18
+/eightoldstyle 16#F738
+/eightparen 16#247B
+/eightperiod 16#248F
+/eightpersian 16#06F8
+/eightroman 16#2177
+/eightsuperior 16#2078
+/eightthai 16#0E58
+/einvertedbreve 16#0207
+/eiotifiedcyrillic 16#0465
+/ekatakana 16#30A8
+/ekatakanahalfwidth 16#FF74
+/ekonkargurmukhi 16#0A74
+/ekorean 16#3154
+/elcyrillic 16#043B
+/element 16#2208
+/elevencircle 16#246A
+/elevenparen 16#247E
+/elevenperiod 16#2492
+/elevenroman 16#217A
+/ellipsis 16#2026
+/ellipsisvertical 16#22EE
+/emacron 16#0113
+/emacronacute 16#1E17
+/emacrongrave 16#1E15
+/emcyrillic 16#043C
+/emdash 16#2014
+/emdashvertical 16#FE31
+/emonospace 16#FF45
+/emphasismarkarmenian 16#055B
+/emptyset 16#2205
+/enbopomofo 16#3123
+/encyrillic 16#043D
+/endash 16#2013
+/endashvertical 16#FE32
+/endescendercyrillic 16#04A3
+/eng 16#014B
+/engbopomofo 16#3125
+/enghecyrillic 16#04A5
+/enhookcyrillic 16#04C8
+/enspace 16#2002
+/eogonek 16#0119
+/eokorean 16#3153
+/eopen 16#025B
+/eopenclosed 16#029A
+/eopenreversed 16#025C
+/eopenreversedclosed 16#025E
+/eopenreversedhook 16#025D
+/eparen 16#24A0
+/epsilon 16#03B5
+/epsilontonos 16#03AD
+/equal 16#003D
+/equalmonospace 16#FF1D
+/equalsmall 16#FE66
+/equalsuperior 16#207C
+/equivalence 16#2261
+/erbopomofo 16#3126
+/ercyrillic 16#0440
+/ereversed 16#0258
+/ereversedcyrillic 16#044D
+/escyrillic 16#0441
+/esdescendercyrillic 16#04AB
+/esh 16#0283
+/eshcurl 16#0286
+/eshortdeva 16#090E
+/eshortvowelsigndeva 16#0946
+/eshreversedloop 16#01AA
+/eshsquatreversed 16#0285
+/esmallhiragana 16#3047
+/esmallkatakana 16#30A7
+/esmallkatakanahalfwidth 16#FF6A
+/estimated 16#212E
+/esuperior 16#F6EC
+/eta 16#03B7
+/etarmenian 16#0568
+/etatonos 16#03AE
+/eth 16#00F0
+/etilde 16#1EBD
+/etildebelow 16#1E1B
+/etnahtafoukhhebrew 16#0591
+/etnahtafoukhlefthebrew 16#0591
+/etnahtahebrew 16#0591
+/etnahtalefthebrew 16#0591
+/eturned 16#01DD
+/eukorean 16#3161
+/euro 16#20AC
+/evowelsignbengali 16#09C7
+/evowelsigndeva 16#0947
+/evowelsigngujarati 16#0AC7
+/exclam 16#0021
+/exclamarmenian 16#055C
+/exclamdbl 16#203C
+/exclamdown 16#00A1
+/exclamdownsmall 16#F7A1
+/exclammonospace 16#FF01
+/exclamsmall 16#F721
+/existential 16#2203
+/ezh 16#0292
+/ezhcaron 16#01EF
+/ezhcurl 16#0293
+/ezhreversed 16#01B9
+/ezhtail 16#01BA
+/f 16#0066
+/fadeva 16#095E
+/fagurmukhi 16#0A5E
+/fahrenheit 16#2109
+/fathaarabic 16#064E
+/fathalowarabic 16#064E
+/fathatanarabic 16#064B
+/fbopomofo 16#3108
+/fcircle 16#24D5
+/fdotaccent 16#1E1F
+/feharabic 16#0641
+/feharmenian 16#0586
+/fehfinalarabic 16#FED2
+/fehinitialarabic 16#FED3
+/fehmedialarabic 16#FED4
+/feicoptic 16#03E5
+/female 16#2640
+/ff 16#FB00
+/ffi 16#FB03
+/ffl 16#FB04
+/fi 16#FB01
+/fifteencircle 16#246E
+/fifteenparen 16#2482
+/fifteenperiod 16#2496
+/figuredash 16#2012
+/filledbox 16#25A0
+/filledrect 16#25AC
+/finalkaf 16#05DA
+/finalkafdagesh 16#FB3A
+/finalkafdageshhebrew 16#FB3A
+/finalkafhebrew 16#05DA
+% /finalkafqamats 16#05DA 16#05B8
+% /finalkafqamatshebrew 16#05DA 16#05B8
+% /finalkafsheva 16#05DA 16#05B0
+% /finalkafshevahebrew 16#05DA 16#05B0
+/finalmem 16#05DD
+/finalmemhebrew 16#05DD
+/finalnun 16#05DF
+/finalnunhebrew 16#05DF
+/finalpe 16#05E3
+/finalpehebrew 16#05E3
+/finaltsadi 16#05E5
+/finaltsadihebrew 16#05E5
+/firsttonechinese 16#02C9
+/fisheye 16#25C9
+/fitacyrillic 16#0473
+/five 16#0035
+/fivearabic 16#0665
+/fivebengali 16#09EB
+/fivecircle 16#2464
+/fivecircleinversesansserif 16#278E
+/fivedeva 16#096B
+/fiveeighths 16#215D
+/fivegujarati 16#0AEB
+/fivegurmukhi 16#0A6B
+/fivehackarabic 16#0665
+/fivehangzhou 16#3025
+/fiveideographicparen 16#3224
+/fiveinferior 16#2085
+/fivemonospace 16#FF15
+/fiveoldstyle 16#F735
+/fiveparen 16#2478
+/fiveperiod 16#248C
+/fivepersian 16#06F5
+/fiveroman 16#2174
+/fivesuperior 16#2075
+/fivethai 16#0E55
+/fl 16#FB02
+/florin 16#0192
+/fmonospace 16#FF46
+/fmsquare 16#3399
+/fofanthai 16#0E1F
+/fofathai 16#0E1D
+/fongmanthai 16#0E4F
+/forall 16#2200
+/four 16#0034
+/fourarabic 16#0664
+/fourbengali 16#09EA
+/fourcircle 16#2463
+/fourcircleinversesansserif 16#278D
+/fourdeva 16#096A
+/fourgujarati 16#0AEA
+/fourgurmukhi 16#0A6A
+/fourhackarabic 16#0664
+/fourhangzhou 16#3024
+/fourideographicparen 16#3223
+/fourinferior 16#2084
+/fourmonospace 16#FF14
+/fournumeratorbengali 16#09F7
+/fouroldstyle 16#F734
+/fourparen 16#2477
+/fourperiod 16#248B
+/fourpersian 16#06F4
+/fourroman 16#2173
+/foursuperior 16#2074
+/fourteencircle 16#246D
+/fourteenparen 16#2481
+/fourteenperiod 16#2495
+/fourthai 16#0E54
+/fourthtonechinese 16#02CB
+/fparen 16#24A1
+/fraction 16#2044
+/franc 16#20A3
+/g 16#0067
+/gabengali 16#0997
+/gacute 16#01F5
+/gadeva 16#0917
+/gafarabic 16#06AF
+/gaffinalarabic 16#FB93
+/gafinitialarabic 16#FB94
+/gafmedialarabic 16#FB95
+/gagujarati 16#0A97
+/gagurmukhi 16#0A17
+/gahiragana 16#304C
+/gakatakana 16#30AC
+/gamma 16#03B3
+/gammalatinsmall 16#0263
+/gammasuperior 16#02E0
+/gangiacoptic 16#03EB
+/gbopomofo 16#310D
+/gbreve 16#011F
+/gcaron 16#01E7
+/gcedilla 16#0123
+/gcircle 16#24D6
+/gcircumflex 16#011D
+/gcommaaccent 16#0123
+/gdot 16#0121
+/gdotaccent 16#0121
+/gecyrillic 16#0433
+/gehiragana 16#3052
+/gekatakana 16#30B2
+/geometricallyequal 16#2251
+/gereshaccenthebrew 16#059C
+/gereshhebrew 16#05F3
+/gereshmuqdamhebrew 16#059D
+/germandbls 16#00DF
+/gershayimaccenthebrew 16#059E
+/gershayimhebrew 16#05F4
+/getamark 16#3013
+/ghabengali 16#0998
+/ghadarmenian 16#0572
+/ghadeva 16#0918
+/ghagujarati 16#0A98
+/ghagurmukhi 16#0A18
+/ghainarabic 16#063A
+/ghainfinalarabic 16#FECE
+/ghaininitialarabic 16#FECF
+/ghainmedialarabic 16#FED0
+/ghemiddlehookcyrillic 16#0495
+/ghestrokecyrillic 16#0493
+/gheupturncyrillic 16#0491
+/ghhadeva 16#095A
+/ghhagurmukhi 16#0A5A
+/ghook 16#0260
+/ghzsquare 16#3393
+/gihiragana 16#304E
+/gikatakana 16#30AE
+/gimarmenian 16#0563
+/gimel 16#05D2
+/gimeldagesh 16#FB32
+/gimeldageshhebrew 16#FB32
+/gimelhebrew 16#05D2
+/gjecyrillic 16#0453
+/glottalinvertedstroke 16#01BE
+/glottalstop 16#0294
+/glottalstopinverted 16#0296
+/glottalstopmod 16#02C0
+/glottalstopreversed 16#0295
+/glottalstopreversedmod 16#02C1
+/glottalstopreversedsuperior 16#02E4
+/glottalstopstroke 16#02A1
+/glottalstopstrokereversed 16#02A2
+/gmacron 16#1E21
+/gmonospace 16#FF47
+/gohiragana 16#3054
+/gokatakana 16#30B4
+/gparen 16#24A2
+/gpasquare 16#33AC
+/gradient 16#2207
+/grave 16#0060
+/gravebelowcmb 16#0316
+/gravecmb 16#0300
+/gravecomb 16#0300
+/gravedeva 16#0953
+/gravelowmod 16#02CE
+/gravemonospace 16#FF40
+/gravetonecmb 16#0340
+/greater 16#003E
+/greaterequal 16#2265
+/greaterequalorless 16#22DB
+/greatermonospace 16#FF1E
+/greaterorequivalent 16#2273
+/greaterorless 16#2277
+/greateroverequal 16#2267
+/greatersmall 16#FE65
+/gscript 16#0261
+/gstroke 16#01E5
+/guhiragana 16#3050
+/guillemotleft 16#00AB
+/guillemotright 16#00BB
+/guilsinglleft 16#2039
+/guilsinglright 16#203A
+/gukatakana 16#30B0
+/guramusquare 16#3318
+/gysquare 16#33C9
+/h 16#0068
+/haabkhasiancyrillic 16#04A9
+/haaltonearabic 16#06C1
+/habengali 16#09B9
+/hadescendercyrillic 16#04B3
+/hadeva 16#0939
+/hagujarati 16#0AB9
+/hagurmukhi 16#0A39
+/haharabic 16#062D
+/hahfinalarabic 16#FEA2
+/hahinitialarabic 16#FEA3
+/hahiragana 16#306F
+/hahmedialarabic 16#FEA4
+/haitusquare 16#332A
+/hakatakana 16#30CF
+/hakatakanahalfwidth 16#FF8A
+/halantgurmukhi 16#0A4D
+/hamzaarabic 16#0621
+% /hamzadammaarabic 16#0621 16#064F
+% /hamzadammatanarabic 16#0621 16#064C
+% /hamzafathaarabic 16#0621 16#064E
+% /hamzafathatanarabic 16#0621 16#064B
+/hamzalowarabic 16#0621
+% /hamzalowkasraarabic 16#0621 16#0650
+% /hamzalowkasratanarabic 16#0621 16#064D
+% /hamzasukunarabic 16#0621 16#0652
+/hangulfiller 16#3164
+/hardsigncyrillic 16#044A
+/harpoonleftbarbup 16#21BC
+/harpoonrightbarbup 16#21C0
+/hasquare 16#33CA
+/hatafpatah 16#05B2
+/hatafpatah16 16#05B2
+/hatafpatah23 16#05B2
+/hatafpatah2f 16#05B2
+/hatafpatahhebrew 16#05B2
+/hatafpatahnarrowhebrew 16#05B2
+/hatafpatahquarterhebrew 16#05B2
+/hatafpatahwidehebrew 16#05B2
+/hatafqamats 16#05B3
+/hatafqamats1b 16#05B3
+/hatafqamats28 16#05B3
+/hatafqamats34 16#05B3
+/hatafqamatshebrew 16#05B3
+/hatafqamatsnarrowhebrew 16#05B3
+/hatafqamatsquarterhebrew 16#05B3
+/hatafqamatswidehebrew 16#05B3
+/hatafsegol 16#05B1
+/hatafsegol17 16#05B1
+/hatafsegol24 16#05B1
+/hatafsegol30 16#05B1
+/hatafsegolhebrew 16#05B1
+/hatafsegolnarrowhebrew 16#05B1
+/hatafsegolquarterhebrew 16#05B1
+/hatafsegolwidehebrew 16#05B1
+/hbar 16#0127
+/hbopomofo 16#310F
+/hbrevebelow 16#1E2B
+/hcedilla 16#1E29
+/hcircle 16#24D7
+/hcircumflex 16#0125
+/hdieresis 16#1E27
+/hdotaccent 16#1E23
+/hdotbelow 16#1E25
+/he 16#05D4
+/heart 16#2665
+/heartsuitblack 16#2665
+/heartsuitwhite 16#2661
+/hedagesh 16#FB34
+/hedageshhebrew 16#FB34
+/hehaltonearabic 16#06C1
+/heharabic 16#0647
+/hehebrew 16#05D4
+/hehfinalaltonearabic 16#FBA7
+/hehfinalalttwoarabic 16#FEEA
+/hehfinalarabic 16#FEEA
+/hehhamzaabovefinalarabic 16#FBA5
+/hehhamzaaboveisolatedarabic 16#FBA4
+/hehinitialaltonearabic 16#FBA8
+/hehinitialarabic 16#FEEB
+/hehiragana 16#3078
+/hehmedialaltonearabic 16#FBA9
+/hehmedialarabic 16#FEEC
+/heiseierasquare 16#337B
+/hekatakana 16#30D8
+/hekatakanahalfwidth 16#FF8D
+/hekutaarusquare 16#3336
+/henghook 16#0267
+/herutusquare 16#3339
+/het 16#05D7
+/hethebrew 16#05D7
+/hhook 16#0266
+/hhooksuperior 16#02B1
+/hieuhacirclekorean 16#327B
+/hieuhaparenkorean 16#321B
+/hieuhcirclekorean 16#326D
+/hieuhkorean 16#314E
+/hieuhparenkorean 16#320D
+/hihiragana 16#3072
+/hikatakana 16#30D2
+/hikatakanahalfwidth 16#FF8B
+/hiriq 16#05B4
+/hiriq14 16#05B4
+/hiriq21 16#05B4
+/hiriq2d 16#05B4
+/hiriqhebrew 16#05B4
+/hiriqnarrowhebrew 16#05B4
+/hiriqquarterhebrew 16#05B4
+/hiriqwidehebrew 16#05B4
+/hlinebelow 16#1E96
+/hmonospace 16#FF48
+/hoarmenian 16#0570
+/hohipthai 16#0E2B
+/hohiragana 16#307B
+/hokatakana 16#30DB
+/hokatakanahalfwidth 16#FF8E
+/holam 16#05B9
+/holam19 16#05B9
+/holam26 16#05B9
+/holam32 16#05B9
+/holamhebrew 16#05B9
+/holamnarrowhebrew 16#05B9
+/holamquarterhebrew 16#05B9
+/holamwidehebrew 16#05B9
+/honokhukthai 16#0E2E
+/hookabovecomb 16#0309
+/hookcmb 16#0309
+/hookpalatalizedbelowcmb 16#0321
+/hookretroflexbelowcmb 16#0322
+/hoonsquare 16#3342
+/horicoptic 16#03E9
+/horizontalbar 16#2015
+/horncmb 16#031B
+/hotsprings 16#2668
+/house 16#2302
+/hparen 16#24A3
+/hsuperior 16#02B0
+/hturned 16#0265
+/huhiragana 16#3075
+/huiitosquare 16#3333
+/hukatakana 16#30D5
+/hukatakanahalfwidth 16#FF8C
+/hungarumlaut 16#02DD
+/hungarumlautcmb 16#030B
+/hv 16#0195
+/hyphen 16#002D
+/hypheninferior 16#F6E5
+/hyphenmonospace 16#FF0D
+/hyphensmall 16#FE63
+/hyphensuperior 16#F6E6
+/hyphentwo 16#2010
+/i 16#0069
+/iacute 16#00ED
+/iacyrillic 16#044F
+/ibengali 16#0987
+/ibopomofo 16#3127
+/ibreve 16#012D
+/icaron 16#01D0
+/icircle 16#24D8
+/icircumflex 16#00EE
+/icyrillic 16#0456
+/idblgrave 16#0209
+/ideographearthcircle 16#328F
+/ideographfirecircle 16#328B
+/ideographicallianceparen 16#323F
+/ideographiccallparen 16#323A
+/ideographiccentrecircle 16#32A5
+/ideographicclose 16#3006
+/ideographiccomma 16#3001
+/ideographiccommaleft 16#FF64
+/ideographiccongratulationparen 16#3237
+/ideographiccorrectcircle 16#32A3
+/ideographicearthparen 16#322F
+/ideographicenterpriseparen 16#323D
+/ideographicexcellentcircle 16#329D
+/ideographicfestivalparen 16#3240
+/ideographicfinancialcircle 16#3296
+/ideographicfinancialparen 16#3236
+/ideographicfireparen 16#322B
+/ideographichaveparen 16#3232
+/ideographichighcircle 16#32A4
+/ideographiciterationmark 16#3005
+/ideographiclaborcircle 16#3298
+/ideographiclaborparen 16#3238
+/ideographicleftcircle 16#32A7
+/ideographiclowcircle 16#32A6
+/ideographicmedicinecircle 16#32A9
+/ideographicmetalparen 16#322E
+/ideographicmoonparen 16#322A
+/ideographicnameparen 16#3234
+/ideographicperiod 16#3002
+/ideographicprintcircle 16#329E
+/ideographicreachparen 16#3243
+/ideographicrepresentparen 16#3239
+/ideographicresourceparen 16#323E
+/ideographicrightcircle 16#32A8
+/ideographicsecretcircle 16#3299
+/ideographicselfparen 16#3242
+/ideographicsocietyparen 16#3233
+/ideographicspace 16#3000
+/ideographicspecialparen 16#3235
+/ideographicstockparen 16#3231
+/ideographicstudyparen 16#323B
+/ideographicsunparen 16#3230
+/ideographicsuperviseparen 16#323C
+/ideographicwaterparen 16#322C
+/ideographicwoodparen 16#322D
+/ideographiczero 16#3007
+/ideographmetalcircle 16#328E
+/ideographmooncircle 16#328A
+/ideographnamecircle 16#3294
+/ideographsuncircle 16#3290
+/ideographwatercircle 16#328C
+/ideographwoodcircle 16#328D
+/ideva 16#0907
+/idieresis 16#00EF
+/idieresisacute 16#1E2F
+/idieresiscyrillic 16#04E5
+/idotbelow 16#1ECB
+/iebrevecyrillic 16#04D7
+/iecyrillic 16#0435
+/ieungacirclekorean 16#3275
+/ieungaparenkorean 16#3215
+/ieungcirclekorean 16#3267
+/ieungkorean 16#3147
+/ieungparenkorean 16#3207
+/igrave 16#00EC
+/igujarati 16#0A87
+/igurmukhi 16#0A07
+/ihiragana 16#3044
+/ihookabove 16#1EC9
+/iibengali 16#0988
+/iicyrillic 16#0438
+/iideva 16#0908
+/iigujarati 16#0A88
+/iigurmukhi 16#0A08
+/iimatragurmukhi 16#0A40
+/iinvertedbreve 16#020B
+/iishortcyrillic 16#0439
+/iivowelsignbengali 16#09C0
+/iivowelsigndeva 16#0940
+/iivowelsigngujarati 16#0AC0
+/ij 16#0133
+/ikatakana 16#30A4
+/ikatakanahalfwidth 16#FF72
+/ikorean 16#3163
+/ilde 16#02DC
+/iluyhebrew 16#05AC
+/imacron 16#012B
+/imacroncyrillic 16#04E3
+/imageorapproximatelyequal 16#2253
+/imatragurmukhi 16#0A3F
+/imonospace 16#FF49
+/increment 16#2206
+/infinity 16#221E
+/iniarmenian 16#056B
+/integral 16#222B
+/integralbottom 16#2321
+/integralbt 16#2321
+/integralex 16#F8F5
+/integraltop 16#2320
+/integraltp 16#2320
+/intersection 16#2229
+/intisquare 16#3305
+/invbullet 16#25D8
+/invcircle 16#25D9
+/invsmileface 16#263B
+/iocyrillic 16#0451
+/iogonek 16#012F
+/iota 16#03B9
+/iotadieresis 16#03CA
+/iotadieresistonos 16#0390
+/iotalatin 16#0269
+/iotatonos 16#03AF
+/iparen 16#24A4
+/irigurmukhi 16#0A72
+/ismallhiragana 16#3043
+/ismallkatakana 16#30A3
+/ismallkatakanahalfwidth 16#FF68
+/issharbengali 16#09FA
+/istroke 16#0268
+/isuperior 16#F6ED
+/iterationhiragana 16#309D
+/iterationkatakana 16#30FD
+/itilde 16#0129
+/itildebelow 16#1E2D
+/iubopomofo 16#3129
+/iucyrillic 16#044E
+/ivowelsignbengali 16#09BF
+/ivowelsigndeva 16#093F
+/ivowelsigngujarati 16#0ABF
+/izhitsacyrillic 16#0475
+/izhitsadblgravecyrillic 16#0477
+/j 16#006A
+/jaarmenian 16#0571
+/jabengali 16#099C
+/jadeva 16#091C
+/jagujarati 16#0A9C
+/jagurmukhi 16#0A1C
+/jbopomofo 16#3110
+/jcaron 16#01F0
+/jcircle 16#24D9
+/jcircumflex 16#0135
+/jcrossedtail 16#029D
+/jdotlessstroke 16#025F
+/jecyrillic 16#0458
+/jeemarabic 16#062C
+/jeemfinalarabic 16#FE9E
+/jeeminitialarabic 16#FE9F
+/jeemmedialarabic 16#FEA0
+/jeharabic 16#0698
+/jehfinalarabic 16#FB8B
+/jhabengali 16#099D
+/jhadeva 16#091D
+/jhagujarati 16#0A9D
+/jhagurmukhi 16#0A1D
+/jheharmenian 16#057B
+/jis 16#3004
+/jmonospace 16#FF4A
+/jparen 16#24A5
+/jsuperior 16#02B2
+/k 16#006B
+/kabashkircyrillic 16#04A1
+/kabengali 16#0995
+/kacute 16#1E31
+/kacyrillic 16#043A
+/kadescendercyrillic 16#049B
+/kadeva 16#0915
+/kaf 16#05DB
+/kafarabic 16#0643
+/kafdagesh 16#FB3B
+/kafdageshhebrew 16#FB3B
+/kaffinalarabic 16#FEDA
+/kafhebrew 16#05DB
+/kafinitialarabic 16#FEDB
+/kafmedialarabic 16#FEDC
+/kafrafehebrew 16#FB4D
+/kagujarati 16#0A95
+/kagurmukhi 16#0A15
+/kahiragana 16#304B
+/kahookcyrillic 16#04C4
+/kakatakana 16#30AB
+/kakatakanahalfwidth 16#FF76
+/kappa 16#03BA
+/kappasymbolgreek 16#03F0
+/kapyeounmieumkorean 16#3171
+/kapyeounphieuphkorean 16#3184
+/kapyeounpieupkorean 16#3178
+/kapyeounssangpieupkorean 16#3179
+/karoriisquare 16#330D
+/kashidaautoarabic 16#0640
+/kashidaautonosidebearingarabic 16#0640
+/kasmallkatakana 16#30F5
+/kasquare 16#3384
+/kasraarabic 16#0650
+/kasratanarabic 16#064D
+/kastrokecyrillic 16#049F
+/katahiraprolongmarkhalfwidth 16#FF70
+/kaverticalstrokecyrillic 16#049D
+/kbopomofo 16#310E
+/kcalsquare 16#3389
+/kcaron 16#01E9
+/kcedilla 16#0137
+/kcircle 16#24DA
+/kcommaaccent 16#0137
+/kdotbelow 16#1E33
+/keharmenian 16#0584
+/kehiragana 16#3051
+/kekatakana 16#30B1
+/kekatakanahalfwidth 16#FF79
+/kenarmenian 16#056F
+/kesmallkatakana 16#30F6
+/kgreenlandic 16#0138
+/khabengali 16#0996
+/khacyrillic 16#0445
+/khadeva 16#0916
+/khagujarati 16#0A96
+/khagurmukhi 16#0A16
+/khaharabic 16#062E
+/khahfinalarabic 16#FEA6
+/khahinitialarabic 16#FEA7
+/khahmedialarabic 16#FEA8
+/kheicoptic 16#03E7
+/khhadeva 16#0959
+/khhagurmukhi 16#0A59
+/khieukhacirclekorean 16#3278
+/khieukhaparenkorean 16#3218
+/khieukhcirclekorean 16#326A
+/khieukhkorean 16#314B
+/khieukhparenkorean 16#320A
+/khokhaithai 16#0E02
+/khokhonthai 16#0E05
+/khokhuatthai 16#0E03
+/khokhwaithai 16#0E04
+/khomutthai 16#0E5B
+/khook 16#0199
+/khorakhangthai 16#0E06
+/khzsquare 16#3391
+/kihiragana 16#304D
+/kikatakana 16#30AD
+/kikatakanahalfwidth 16#FF77
+/kiroguramusquare 16#3315
+/kiromeetorusquare 16#3316
+/kirosquare 16#3314
+/kiyeokacirclekorean 16#326E
+/kiyeokaparenkorean 16#320E
+/kiyeokcirclekorean 16#3260
+/kiyeokkorean 16#3131
+/kiyeokparenkorean 16#3200
+/kiyeoksioskorean 16#3133
+/kjecyrillic 16#045C
+/klinebelow 16#1E35
+/klsquare 16#3398
+/kmcubedsquare 16#33A6
+/kmonospace 16#FF4B
+/kmsquaredsquare 16#33A2
+/kohiragana 16#3053
+/kohmsquare 16#33C0
+/kokaithai 16#0E01
+/kokatakana 16#30B3
+/kokatakanahalfwidth 16#FF7A
+/kooposquare 16#331E
+/koppacyrillic 16#0481
+/koreanstandardsymbol 16#327F
+/koroniscmb 16#0343
+/kparen 16#24A6
+/kpasquare 16#33AA
+/ksicyrillic 16#046F
+/ktsquare 16#33CF
+/kturned 16#029E
+/kuhiragana 16#304F
+/kukatakana 16#30AF
+/kukatakanahalfwidth 16#FF78
+/kvsquare 16#33B8
+/kwsquare 16#33BE
+/l 16#006C
+/labengali 16#09B2
+/lacute 16#013A
+/ladeva 16#0932
+/lagujarati 16#0AB2
+/lagurmukhi 16#0A32
+/lakkhangyaothai 16#0E45
+/lamaleffinalarabic 16#FEFC
+/lamalefhamzaabovefinalarabic 16#FEF8
+/lamalefhamzaaboveisolatedarabic 16#FEF7
+/lamalefhamzabelowfinalarabic 16#FEFA
+/lamalefhamzabelowisolatedarabic 16#FEF9
+/lamalefisolatedarabic 16#FEFB
+/lamalefmaddaabovefinalarabic 16#FEF6
+/lamalefmaddaaboveisolatedarabic 16#FEF5
+/lamarabic 16#0644
+/lambda 16#03BB
+/lambdastroke 16#019B
+/lamed 16#05DC
+/lameddagesh 16#FB3C
+/lameddageshhebrew 16#FB3C
+/lamedhebrew 16#05DC
+% /lamedholam 16#05DC 16#05B9
+% /lamedholamdagesh 16#05DC 16#05B9 16#05BC
+% /lamedholamdageshhebrew 16#05DC 16#05B9 16#05BC
+% /lamedholamhebrew 16#05DC 16#05B9
+/lamfinalarabic 16#FEDE
+/lamhahinitialarabic 16#FCCA
+/laminitialarabic 16#FEDF
+/lamjeeminitialarabic 16#FCC9
+/lamkhahinitialarabic 16#FCCB
+/lamlamhehisolatedarabic 16#FDF2
+/lammedialarabic 16#FEE0
+/lammeemhahinitialarabic 16#FD88
+/lammeeminitialarabic 16#FCCC
+% /lammeemjeeminitialarabic 16#FEDF 16#FEE4 16#FEA0
+% /lammeemkhahinitialarabic 16#FEDF 16#FEE4 16#FEA8
+/largecircle 16#25EF
+/lbar 16#019A
+/lbelt 16#026C
+/lbopomofo 16#310C
+/lcaron 16#013E
+/lcedilla 16#013C
+/lcircle 16#24DB
+/lcircumflexbelow 16#1E3D
+/lcommaaccent 16#013C
+/ldot 16#0140
+/ldotaccent 16#0140
+/ldotbelow 16#1E37
+/ldotbelowmacron 16#1E39
+/leftangleabovecmb 16#031A
+/lefttackbelowcmb 16#0318
+/less 16#003C
+/lessequal 16#2264
+/lessequalorgreater 16#22DA
+/lessmonospace 16#FF1C
+/lessorequivalent 16#2272
+/lessorgreater 16#2276
+/lessoverequal 16#2266
+/lesssmall 16#FE64
+/lezh 16#026E
+/lfblock 16#258C
+/lhookretroflex 16#026D
+/lira 16#20A4
+/liwnarmenian 16#056C
+/lj 16#01C9
+/ljecyrillic 16#0459
+/ll 16#F6C0
+/lladeva 16#0933
+/llagujarati 16#0AB3
+/llinebelow 16#1E3B
+/llladeva 16#0934
+/llvocalicbengali 16#09E1
+/llvocalicdeva 16#0961
+/llvocalicvowelsignbengali 16#09E3
+/llvocalicvowelsigndeva 16#0963
+/lmiddletilde 16#026B
+/lmonospace 16#FF4C
+/lmsquare 16#33D0
+/lochulathai 16#0E2C
+/logicaland 16#2227
+/logicalnot 16#00AC
+/logicalnotreversed 16#2310
+/logicalor 16#2228
+/lolingthai 16#0E25
+/longs 16#017F
+/lowlinecenterline 16#FE4E
+/lowlinecmb 16#0332
+/lowlinedashed 16#FE4D
+/lozenge 16#25CA
+/lparen 16#24A7
+/lslash 16#0142
+/lsquare 16#2113
+/lsuperior 16#F6EE
+/ltshade 16#2591
+/luthai 16#0E26
+/lvocalicbengali 16#098C
+/lvocalicdeva 16#090C
+/lvocalicvowelsignbengali 16#09E2
+/lvocalicvowelsigndeva 16#0962
+/lxsquare 16#33D3
+/m 16#006D
+/mabengali 16#09AE
+/macron 16#00AF
+/macronbelowcmb 16#0331
+/macroncmb 16#0304
+/macronlowmod 16#02CD
+/macronmonospace 16#FFE3
+/macute 16#1E3F
+/madeva 16#092E
+/magujarati 16#0AAE
+/magurmukhi 16#0A2E
+/mahapakhhebrew 16#05A4
+/mahapakhlefthebrew 16#05A4
+/mahiragana 16#307E
+/maichattawalowleftthai 16#F895
+/maichattawalowrightthai 16#F894
+/maichattawathai 16#0E4B
+/maichattawaupperleftthai 16#F893
+/maieklowleftthai 16#F88C
+/maieklowrightthai 16#F88B
+/maiekthai 16#0E48
+/maiekupperleftthai 16#F88A
+/maihanakatleftthai 16#F884
+/maihanakatthai 16#0E31
+/maitaikhuleftthai 16#F889
+/maitaikhuthai 16#0E47
+/maitholowleftthai 16#F88F
+/maitholowrightthai 16#F88E
+/maithothai 16#0E49
+/maithoupperleftthai 16#F88D
+/maitrilowleftthai 16#F892
+/maitrilowrightthai 16#F891
+/maitrithai 16#0E4A
+/maitriupperleftthai 16#F890
+/maiyamokthai 16#0E46
+/makatakana 16#30DE
+/makatakanahalfwidth 16#FF8F
+/male 16#2642
+/mansyonsquare 16#3347
+/maqafhebrew 16#05BE
+/mars 16#2642
+/masoracirclehebrew 16#05AF
+/masquare 16#3383
+/mbopomofo 16#3107
+/mbsquare 16#33D4
+/mcircle 16#24DC
+/mcubedsquare 16#33A5
+/mdotaccent 16#1E41
+/mdotbelow 16#1E43
+/meemarabic 16#0645
+/meemfinalarabic 16#FEE2
+/meeminitialarabic 16#FEE3
+/meemmedialarabic 16#FEE4
+/meemmeeminitialarabic 16#FCD1
+/meemmeemisolatedarabic 16#FC48
+/meetorusquare 16#334D
+/mehiragana 16#3081
+/meizierasquare 16#337E
+/mekatakana 16#30E1
+/mekatakanahalfwidth 16#FF92
+/mem 16#05DE
+/memdagesh 16#FB3E
+/memdageshhebrew 16#FB3E
+/memhebrew 16#05DE
+/menarmenian 16#0574
+/merkhahebrew 16#05A5
+/merkhakefulahebrew 16#05A6
+/merkhakefulalefthebrew 16#05A6
+/merkhalefthebrew 16#05A5
+/mhook 16#0271
+/mhzsquare 16#3392
+/middledotkatakanahalfwidth 16#FF65
+/middot 16#00B7
+/mieumacirclekorean 16#3272
+/mieumaparenkorean 16#3212
+/mieumcirclekorean 16#3264
+/mieumkorean 16#3141
+/mieumpansioskorean 16#3170
+/mieumparenkorean 16#3204
+/mieumpieupkorean 16#316E
+/mieumsioskorean 16#316F
+/mihiragana 16#307F
+/mikatakana 16#30DF
+/mikatakanahalfwidth 16#FF90
+/minus 16#2212
+/minusbelowcmb 16#0320
+/minuscircle 16#2296
+/minusmod 16#02D7
+/minusplus 16#2213
+/minute 16#2032
+/miribaarusquare 16#334A
+/mirisquare 16#3349
+/mlonglegturned 16#0270
+/mlsquare 16#3396
+/mmcubedsquare 16#33A3
+/mmonospace 16#FF4D
+/mmsquaredsquare 16#339F
+/mohiragana 16#3082
+/mohmsquare 16#33C1
+/mokatakana 16#30E2
+/mokatakanahalfwidth 16#FF93
+/molsquare 16#33D6
+/momathai 16#0E21
+/moverssquare 16#33A7
+/moverssquaredsquare 16#33A8
+/mparen 16#24A8
+/mpasquare 16#33AB
+/mssquare 16#33B3
+/msuperior 16#F6EF
+/mturned 16#026F
+/mu 16#00B5
+/mu1 16#00B5
+/muasquare 16#3382
+/muchgreater 16#226B
+/muchless 16#226A
+/mufsquare 16#338C
+/mugreek 16#03BC
+/mugsquare 16#338D
+/muhiragana 16#3080
+/mukatakana 16#30E0
+/mukatakanahalfwidth 16#FF91
+/mulsquare 16#3395
+/multiply 16#00D7
+/mumsquare 16#339B
+/munahhebrew 16#05A3
+/munahlefthebrew 16#05A3
+/musicalnote 16#266A
+/musicalnotedbl 16#266B
+/musicflatsign 16#266D
+/musicsharpsign 16#266F
+/mussquare 16#33B2
+/muvsquare 16#33B6
+/muwsquare 16#33BC
+/mvmegasquare 16#33B9
+/mvsquare 16#33B7
+/mwmegasquare 16#33BF
+/mwsquare 16#33BD
+/n 16#006E
+/nabengali 16#09A8
+/nabla 16#2207
+/nacute 16#0144
+/nadeva 16#0928
+/nagujarati 16#0AA8
+/nagurmukhi 16#0A28
+/nahiragana 16#306A
+/nakatakana 16#30CA
+/nakatakanahalfwidth 16#FF85
+/napostrophe 16#0149
+/nasquare 16#3381
+/nbopomofo 16#310B
+/nbspace 16#00A0
+/ncaron 16#0148
+/ncedilla 16#0146
+/ncircle 16#24DD
+/ncircumflexbelow 16#1E4B
+/ncommaaccent 16#0146
+/ndotaccent 16#1E45
+/ndotbelow 16#1E47
+/nehiragana 16#306D
+/nekatakana 16#30CD
+/nekatakanahalfwidth 16#FF88
+/newsheqelsign 16#20AA
+/nfsquare 16#338B
+/ngabengali 16#0999
+/ngadeva 16#0919
+/ngagujarati 16#0A99
+/ngagurmukhi 16#0A19
+/ngonguthai 16#0E07
+/nhiragana 16#3093
+/nhookleft 16#0272
+/nhookretroflex 16#0273
+/nieunacirclekorean 16#326F
+/nieunaparenkorean 16#320F
+/nieuncieuckorean 16#3135
+/nieuncirclekorean 16#3261
+/nieunhieuhkorean 16#3136
+/nieunkorean 16#3134
+/nieunpansioskorean 16#3168
+/nieunparenkorean 16#3201
+/nieunsioskorean 16#3167
+/nieuntikeutkorean 16#3166
+/nihiragana 16#306B
+/nikatakana 16#30CB
+/nikatakanahalfwidth 16#FF86
+/nikhahitleftthai 16#F899
+/nikhahitthai 16#0E4D
+/nine 16#0039
+/ninearabic 16#0669
+/ninebengali 16#09EF
+/ninecircle 16#2468
+/ninecircleinversesansserif 16#2792
+/ninedeva 16#096F
+/ninegujarati 16#0AEF
+/ninegurmukhi 16#0A6F
+/ninehackarabic 16#0669
+/ninehangzhou 16#3029
+/nineideographicparen 16#3228
+/nineinferior 16#2089
+/ninemonospace 16#FF19
+/nineoldstyle 16#F739
+/nineparen 16#247C
+/nineperiod 16#2490
+/ninepersian 16#06F9
+/nineroman 16#2178
+/ninesuperior 16#2079
+/nineteencircle 16#2472
+/nineteenparen 16#2486
+/nineteenperiod 16#249A
+/ninethai 16#0E59
+/nj 16#01CC
+/njecyrillic 16#045A
+/nkatakana 16#30F3
+/nkatakanahalfwidth 16#FF9D
+/nlegrightlong 16#019E
+/nlinebelow 16#1E49
+/nmonospace 16#FF4E
+/nmsquare 16#339A
+/nnabengali 16#09A3
+/nnadeva 16#0923
+/nnagujarati 16#0AA3
+/nnagurmukhi 16#0A23
+/nnnadeva 16#0929
+/nohiragana 16#306E
+/nokatakana 16#30CE
+/nokatakanahalfwidth 16#FF89
+/nonbreakingspace 16#00A0
+/nonenthai 16#0E13
+/nonuthai 16#0E19
+/noonarabic 16#0646
+/noonfinalarabic 16#FEE6
+/noonghunnaarabic 16#06BA
+/noonghunnafinalarabic 16#FB9F
+% /noonhehinitialarabic 16#FEE7 16#FEEC
+/nooninitialarabic 16#FEE7
+/noonjeeminitialarabic 16#FCD2
+/noonjeemisolatedarabic 16#FC4B
+/noonmedialarabic 16#FEE8
+/noonmeeminitialarabic 16#FCD5
+/noonmeemisolatedarabic 16#FC4E
+/noonnoonfinalarabic 16#FC8D
+/notcontains 16#220C
+/notelement 16#2209
+/notelementof 16#2209
+/notequal 16#2260
+/notgreater 16#226F
+/notgreaternorequal 16#2271
+/notgreaternorless 16#2279
+/notidentical 16#2262
+/notless 16#226E
+/notlessnorequal 16#2270
+/notparallel 16#2226
+/notprecedes 16#2280
+/notsubset 16#2284
+/notsucceeds 16#2281
+/notsuperset 16#2285
+/nowarmenian 16#0576
+/nparen 16#24A9
+/nssquare 16#33B1
+/nsuperior 16#207F
+/ntilde 16#00F1
+/nu 16#03BD
+/nuhiragana 16#306C
+/nukatakana 16#30CC
+/nukatakanahalfwidth 16#FF87
+/nuktabengali 16#09BC
+/nuktadeva 16#093C
+/nuktagujarati 16#0ABC
+/nuktagurmukhi 16#0A3C
+/numbersign 16#0023
+/numbersignmonospace 16#FF03
+/numbersignsmall 16#FE5F
+/numeralsigngreek 16#0374
+/numeralsignlowergreek 16#0375
+/numero 16#2116
+/nun 16#05E0
+/nundagesh 16#FB40
+/nundageshhebrew 16#FB40
+/nunhebrew 16#05E0
+/nvsquare 16#33B5
+/nwsquare 16#33BB
+/nyabengali 16#099E
+/nyadeva 16#091E
+/nyagujarati 16#0A9E
+/nyagurmukhi 16#0A1E
+/o 16#006F
+/oacute 16#00F3
+/oangthai 16#0E2D
+/obarred 16#0275
+/obarredcyrillic 16#04E9
+/obarreddieresiscyrillic 16#04EB
+/obengali 16#0993
+/obopomofo 16#311B
+/obreve 16#014F
+/ocandradeva 16#0911
+/ocandragujarati 16#0A91
+/ocandravowelsigndeva 16#0949
+/ocandravowelsigngujarati 16#0AC9
+/ocaron 16#01D2
+/ocircle 16#24DE
+/ocircumflex 16#00F4
+/ocircumflexacute 16#1ED1
+/ocircumflexdotbelow 16#1ED9
+/ocircumflexgrave 16#1ED3
+/ocircumflexhookabove 16#1ED5
+/ocircumflextilde 16#1ED7
+/ocyrillic 16#043E
+/odblacute 16#0151
+/odblgrave 16#020D
+/odeva 16#0913
+/odieresis 16#00F6
+/odieresiscyrillic 16#04E7
+/odotbelow 16#1ECD
+/oe 16#0153
+/oekorean 16#315A
+/ogonek 16#02DB
+/ogonekcmb 16#0328
+/ograve 16#00F2
+/ogujarati 16#0A93
+/oharmenian 16#0585
+/ohiragana 16#304A
+/ohookabove 16#1ECF
+/ohorn 16#01A1
+/ohornacute 16#1EDB
+/ohorndotbelow 16#1EE3
+/ohorngrave 16#1EDD
+/ohornhookabove 16#1EDF
+/ohorntilde 16#1EE1
+/ohungarumlaut 16#0151
+/oi 16#01A3
+/oinvertedbreve 16#020F
+/okatakana 16#30AA
+/okatakanahalfwidth 16#FF75
+/okorean 16#3157
+/olehebrew 16#05AB
+/omacron 16#014D
+/omacronacute 16#1E53
+/omacrongrave 16#1E51
+/omdeva 16#0950
+/omega 16#03C9
+/omega1 16#03D6
+/omegacyrillic 16#0461
+/omegalatinclosed 16#0277
+/omegaroundcyrillic 16#047B
+/omegatitlocyrillic 16#047D
+/omegatonos 16#03CE
+/omgujarati 16#0AD0
+/omicron 16#03BF
+/omicrontonos 16#03CC
+/omonospace 16#FF4F
+/one 16#0031
+/onearabic 16#0661
+/onebengali 16#09E7
+/onecircle 16#2460
+/onecircleinversesansserif 16#278A
+/onedeva 16#0967
+/onedotenleader 16#2024
+/oneeighth 16#215B
+/onefitted 16#F6DC
+/onegujarati 16#0AE7
+/onegurmukhi 16#0A67
+/onehackarabic 16#0661
+/onehalf 16#00BD
+/onehangzhou 16#3021
+/oneideographicparen 16#3220
+/oneinferior 16#2081
+/onemonospace 16#FF11
+/onenumeratorbengali 16#09F4
+/oneoldstyle 16#F731
+/oneparen 16#2474
+/oneperiod 16#2488
+/onepersian 16#06F1
+/onequarter 16#00BC
+/oneroman 16#2170
+/onesuperior 16#00B9
+/onethai 16#0E51
+/onethird 16#2153
+/oogonek 16#01EB
+/oogonekmacron 16#01ED
+/oogurmukhi 16#0A13
+/oomatragurmukhi 16#0A4B
+/oopen 16#0254
+/oparen 16#24AA
+/openbullet 16#25E6
+/option 16#2325
+/ordfeminine 16#00AA
+/ordmasculine 16#00BA
+/orthogonal 16#221F
+/oshortdeva 16#0912
+/oshortvowelsigndeva 16#094A
+/oslash 16#00F8
+/oslashacute 16#01FF
+/osmallhiragana 16#3049
+/osmallkatakana 16#30A9
+/osmallkatakanahalfwidth 16#FF6B
+/ostrokeacute 16#01FF
+/osuperior 16#F6F0
+/otcyrillic 16#047F
+/otilde 16#00F5
+/otildeacute 16#1E4D
+/otildedieresis 16#1E4F
+/oubopomofo 16#3121
+/overline 16#203E
+/overlinecenterline 16#FE4A
+/overlinecmb 16#0305
+/overlinedashed 16#FE49
+/overlinedblwavy 16#FE4C
+/overlinewavy 16#FE4B
+/overscore 16#00AF
+/ovowelsignbengali 16#09CB
+/ovowelsigndeva 16#094B
+/ovowelsigngujarati 16#0ACB
+/p 16#0070
+/paampssquare 16#3380
+/paasentosquare 16#332B
+/pabengali 16#09AA
+/pacute 16#1E55
+/padeva 16#092A
+/pagedown 16#21DF
+/pageup 16#21DE
+/pagujarati 16#0AAA
+/pagurmukhi 16#0A2A
+/pahiragana 16#3071
+/paiyannoithai 16#0E2F
+/pakatakana 16#30D1
+/palatalizationcyrilliccmb 16#0484
+/palochkacyrillic 16#04C0
+/pansioskorean 16#317F
+/paragraph 16#00B6
+/parallel 16#2225
+/parenleft 16#0028
+/parenleftaltonearabic 16#FD3E
+/parenleftbt 16#F8ED
+/parenleftex 16#F8EC
+/parenleftinferior 16#208D
+/parenleftmonospace 16#FF08
+/parenleftsmall 16#FE59
+/parenleftsuperior 16#207D
+/parenlefttp 16#F8EB
+/parenleftvertical 16#FE35
+/parenright 16#0029
+/parenrightaltonearabic 16#FD3F
+/parenrightbt 16#F8F8
+/parenrightex 16#F8F7
+/parenrightinferior 16#208E
+/parenrightmonospace 16#FF09
+/parenrightsmall 16#FE5A
+/parenrightsuperior 16#207E
+/parenrighttp 16#F8F6
+/parenrightvertical 16#FE36
+/partialdiff 16#2202
+/paseqhebrew 16#05C0
+/pashtahebrew 16#0599
+/pasquare 16#33A9
+/patah 16#05B7
+/patah11 16#05B7
+/patah1d 16#05B7
+/patah2a 16#05B7
+/patahhebrew 16#05B7
+/patahnarrowhebrew 16#05B7
+/patahquarterhebrew 16#05B7
+/patahwidehebrew 16#05B7
+/pazerhebrew 16#05A1
+/pbopomofo 16#3106
+/pcircle 16#24DF
+/pdotaccent 16#1E57
+/pe 16#05E4
+/pecyrillic 16#043F
+/pedagesh 16#FB44
+/pedageshhebrew 16#FB44
+/peezisquare 16#333B
+/pefinaldageshhebrew 16#FB43
+/peharabic 16#067E
+/peharmenian 16#057A
+/pehebrew 16#05E4
+/pehfinalarabic 16#FB57
+/pehinitialarabic 16#FB58
+/pehiragana 16#307A
+/pehmedialarabic 16#FB59
+/pekatakana 16#30DA
+/pemiddlehookcyrillic 16#04A7
+/perafehebrew 16#FB4E
+/percent 16#0025
+/percentarabic 16#066A
+/percentmonospace 16#FF05
+/percentsmall 16#FE6A
+/period 16#002E
+/periodarmenian 16#0589
+/periodcentered 16#00B7
+/periodhalfwidth 16#FF61
+/periodinferior 16#F6E7
+/periodmonospace 16#FF0E
+/periodsmall 16#FE52
+/periodsuperior 16#F6E8
+/perispomenigreekcmb 16#0342
+/perpendicular 16#22A5
+/perthousand 16#2030
+/peseta 16#20A7
+/pfsquare 16#338A
+/phabengali 16#09AB
+/phadeva 16#092B
+/phagujarati 16#0AAB
+/phagurmukhi 16#0A2B
+/phi 16#03C6
+/phi1 16#03D5
+/phieuphacirclekorean 16#327A
+/phieuphaparenkorean 16#321A
+/phieuphcirclekorean 16#326C
+/phieuphkorean 16#314D
+/phieuphparenkorean 16#320C
+/philatin 16#0278
+/phinthuthai 16#0E3A
+/phisymbolgreek 16#03D5
+/phook 16#01A5
+/phophanthai 16#0E1E
+/phophungthai 16#0E1C
+/phosamphaothai 16#0E20
+/pi 16#03C0
+/pieupacirclekorean 16#3273
+/pieupaparenkorean 16#3213
+/pieupcieuckorean 16#3176
+/pieupcirclekorean 16#3265
+/pieupkiyeokkorean 16#3172
+/pieupkorean 16#3142
+/pieupparenkorean 16#3205
+/pieupsioskiyeokkorean 16#3174
+/pieupsioskorean 16#3144
+/pieupsiostikeutkorean 16#3175
+/pieupthieuthkorean 16#3177
+/pieuptikeutkorean 16#3173
+/pihiragana 16#3074
+/pikatakana 16#30D4
+/pisymbolgreek 16#03D6
+/piwrarmenian 16#0583
+/plus 16#002B
+/plusbelowcmb 16#031F
+/pluscircle 16#2295
+/plusminus 16#00B1
+/plusmod 16#02D6
+/plusmonospace 16#FF0B
+/plussmall 16#FE62
+/plussuperior 16#207A
+/pmonospace 16#FF50
+/pmsquare 16#33D8
+/pohiragana 16#307D
+/pointingindexdownwhite 16#261F
+/pointingindexleftwhite 16#261C
+/pointingindexrightwhite 16#261E
+/pointingindexupwhite 16#261D
+/pokatakana 16#30DD
+/poplathai 16#0E1B
+/postalmark 16#3012
+/postalmarkface 16#3020
+/pparen 16#24AB
+/precedes 16#227A
+/prescription 16#211E
+/primemod 16#02B9
+/primereversed 16#2035
+/product 16#220F
+/projective 16#2305
+/prolongedkana 16#30FC
+/propellor 16#2318
+/propersubset 16#2282
+/propersuperset 16#2283
+/proportion 16#2237
+/proportional 16#221D
+/psi 16#03C8
+/psicyrillic 16#0471
+/psilipneumatacyrilliccmb 16#0486
+/pssquare 16#33B0
+/puhiragana 16#3077
+/pukatakana 16#30D7
+/pvsquare 16#33B4
+/pwsquare 16#33BA
+/q 16#0071
+/qadeva 16#0958
+/qadmahebrew 16#05A8
+/qafarabic 16#0642
+/qaffinalarabic 16#FED6
+/qafinitialarabic 16#FED7
+/qafmedialarabic 16#FED8
+/qamats 16#05B8
+/qamats10 16#05B8
+/qamats1a 16#05B8
+/qamats1c 16#05B8
+/qamats27 16#05B8
+/qamats29 16#05B8
+/qamats33 16#05B8
+/qamatsde 16#05B8
+/qamatshebrew 16#05B8
+/qamatsnarrowhebrew 16#05B8
+/qamatsqatanhebrew 16#05B8
+/qamatsqatannarrowhebrew 16#05B8
+/qamatsqatanquarterhebrew 16#05B8
+/qamatsqatanwidehebrew 16#05B8
+/qamatsquarterhebrew 16#05B8
+/qamatswidehebrew 16#05B8
+/qarneyparahebrew 16#059F
+/qbopomofo 16#3111
+/qcircle 16#24E0
+/qhook 16#02A0
+/qmonospace 16#FF51
+/qof 16#05E7
+/qofdagesh 16#FB47
+/qofdageshhebrew 16#FB47
+% /qofhatafpatah 16#05E7 16#05B2
+% /qofhatafpatahhebrew 16#05E7 16#05B2
+% /qofhatafsegol 16#05E7 16#05B1
+% /qofhatafsegolhebrew 16#05E7 16#05B1
+/qofhebrew 16#05E7
+% /qofhiriq 16#05E7 16#05B4
+% /qofhiriqhebrew 16#05E7 16#05B4
+% /qofholam 16#05E7 16#05B9
+% /qofholamhebrew 16#05E7 16#05B9
+% /qofpatah 16#05E7 16#05B7
+% /qofpatahhebrew 16#05E7 16#05B7
+% /qofqamats 16#05E7 16#05B8
+% /qofqamatshebrew 16#05E7 16#05B8
+% /qofqubuts 16#05E7 16#05BB
+% /qofqubutshebrew 16#05E7 16#05BB
+% /qofsegol 16#05E7 16#05B6
+% /qofsegolhebrew 16#05E7 16#05B6
+% /qofsheva 16#05E7 16#05B0
+% /qofshevahebrew 16#05E7 16#05B0
+% /qoftsere 16#05E7 16#05B5
+% /qoftserehebrew 16#05E7 16#05B5
+/qparen 16#24AC
+/quarternote 16#2669
+/qubuts 16#05BB
+/qubuts18 16#05BB
+/qubuts25 16#05BB
+/qubuts31 16#05BB
+/qubutshebrew 16#05BB
+/qubutsnarrowhebrew 16#05BB
+/qubutsquarterhebrew 16#05BB
+/qubutswidehebrew 16#05BB
+/question 16#003F
+/questionarabic 16#061F
+/questionarmenian 16#055E
+/questiondown 16#00BF
+/questiondownsmall 16#F7BF
+/questiongreek 16#037E
+/questionmonospace 16#FF1F
+/questionsmall 16#F73F
+/quotedbl 16#0022
+/quotedblbase 16#201E
+/quotedblleft 16#201C
+/quotedblmonospace 16#FF02
+/quotedblprime 16#301E
+/quotedblprimereversed 16#301D
+/quotedblright 16#201D
+/quoteleft 16#2018
+/quoteleftreversed 16#201B
+/quotereversed 16#201B
+/quoteright 16#2019
+/quoterightn 16#0149
+/quotesinglbase 16#201A
+/quotesingle 16#0027
+/quotesinglemonospace 16#FF07
+/r 16#0072
+/raarmenian 16#057C
+/rabengali 16#09B0
+/racute 16#0155
+/radeva 16#0930
+/radical 16#221A
+/radicalex 16#F8E5
+/radoverssquare 16#33AE
+/radoverssquaredsquare 16#33AF
+/radsquare 16#33AD
+/rafe 16#05BF
+/rafehebrew 16#05BF
+/ragujarati 16#0AB0
+/ragurmukhi 16#0A30
+/rahiragana 16#3089
+/rakatakana 16#30E9
+/rakatakanahalfwidth 16#FF97
+/ralowerdiagonalbengali 16#09F1
+/ramiddlediagonalbengali 16#09F0
+/ramshorn 16#0264
+/ratio 16#2236
+/rbopomofo 16#3116
+/rcaron 16#0159
+/rcedilla 16#0157
+/rcircle 16#24E1
+/rcommaaccent 16#0157
+/rdblgrave 16#0211
+/rdotaccent 16#1E59
+/rdotbelow 16#1E5B
+/rdotbelowmacron 16#1E5D
+/referencemark 16#203B
+/reflexsubset 16#2286
+/reflexsuperset 16#2287
+/registered 16#00AE
+/registersans 16#F8E8
+/registerserif 16#F6DA
+/reharabic 16#0631
+/reharmenian 16#0580
+/rehfinalarabic 16#FEAE
+/rehiragana 16#308C
+% /rehyehaleflamarabic 16#0631 16#FEF3 16#FE8E 16#0644
+/rekatakana 16#30EC
+/rekatakanahalfwidth 16#FF9A
+/resh 16#05E8
+/reshdageshhebrew 16#FB48
+% /reshhatafpatah 16#05E8 16#05B2
+% /reshhatafpatahhebrew 16#05E8 16#05B2
+% /reshhatafsegol 16#05E8 16#05B1
+% /reshhatafsegolhebrew 16#05E8 16#05B1
+/reshhebrew 16#05E8
+% /reshhiriq 16#05E8 16#05B4
+% /reshhiriqhebrew 16#05E8 16#05B4
+% /reshholam 16#05E8 16#05B9
+% /reshholamhebrew 16#05E8 16#05B9
+% /reshpatah 16#05E8 16#05B7
+% /reshpatahhebrew 16#05E8 16#05B7
+% /reshqamats 16#05E8 16#05B8
+% /reshqamatshebrew 16#05E8 16#05B8
+% /reshqubuts 16#05E8 16#05BB
+% /reshqubutshebrew 16#05E8 16#05BB
+% /reshsegol 16#05E8 16#05B6
+% /reshsegolhebrew 16#05E8 16#05B6
+% /reshsheva 16#05E8 16#05B0
+% /reshshevahebrew 16#05E8 16#05B0
+% /reshtsere 16#05E8 16#05B5
+% /reshtserehebrew 16#05E8 16#05B5
+/reversedtilde 16#223D
+/reviahebrew 16#0597
+/reviamugrashhebrew 16#0597
+/revlogicalnot 16#2310
+/rfishhook 16#027E
+/rfishhookreversed 16#027F
+/rhabengali 16#09DD
+/rhadeva 16#095D
+/rho 16#03C1
+/rhook 16#027D
+/rhookturned 16#027B
+/rhookturnedsuperior 16#02B5
+/rhosymbolgreek 16#03F1
+/rhotichookmod 16#02DE
+/rieulacirclekorean 16#3271
+/rieulaparenkorean 16#3211
+/rieulcirclekorean 16#3263
+/rieulhieuhkorean 16#3140
+/rieulkiyeokkorean 16#313A
+/rieulkiyeoksioskorean 16#3169
+/rieulkorean 16#3139
+/rieulmieumkorean 16#313B
+/rieulpansioskorean 16#316C
+/rieulparenkorean 16#3203
+/rieulphieuphkorean 16#313F
+/rieulpieupkorean 16#313C
+/rieulpieupsioskorean 16#316B
+/rieulsioskorean 16#313D
+/rieulthieuthkorean 16#313E
+/rieultikeutkorean 16#316A
+/rieulyeorinhieuhkorean 16#316D
+/rightangle 16#221F
+/righttackbelowcmb 16#0319
+/righttriangle 16#22BF
+/rihiragana 16#308A
+/rikatakana 16#30EA
+/rikatakanahalfwidth 16#FF98
+/ring 16#02DA
+/ringbelowcmb 16#0325
+/ringcmb 16#030A
+/ringhalfleft 16#02BF
+/ringhalfleftarmenian 16#0559
+/ringhalfleftbelowcmb 16#031C
+/ringhalfleftcentered 16#02D3
+/ringhalfright 16#02BE
+/ringhalfrightbelowcmb 16#0339
+/ringhalfrightcentered 16#02D2
+/rinvertedbreve 16#0213
+/rittorusquare 16#3351
+/rlinebelow 16#1E5F
+/rlongleg 16#027C
+/rlonglegturned 16#027A
+/rmonospace 16#FF52
+/rohiragana 16#308D
+/rokatakana 16#30ED
+/rokatakanahalfwidth 16#FF9B
+/roruathai 16#0E23
+/rparen 16#24AD
+/rrabengali 16#09DC
+/rradeva 16#0931
+/rragurmukhi 16#0A5C
+/rreharabic 16#0691
+/rrehfinalarabic 16#FB8D
+/rrvocalicbengali 16#09E0
+/rrvocalicdeva 16#0960
+/rrvocalicgujarati 16#0AE0
+/rrvocalicvowelsignbengali 16#09C4
+/rrvocalicvowelsigndeva 16#0944
+/rrvocalicvowelsigngujarati 16#0AC4
+/rsuperior 16#F6F1
+/rtblock 16#2590
+/rturned 16#0279
+/rturnedsuperior 16#02B4
+/ruhiragana 16#308B
+/rukatakana 16#30EB
+/rukatakanahalfwidth 16#FF99
+/rupeemarkbengali 16#09F2
+/rupeesignbengali 16#09F3
+/rupiah 16#F6DD
+/ruthai 16#0E24
+/rvocalicbengali 16#098B
+/rvocalicdeva 16#090B
+/rvocalicgujarati 16#0A8B
+/rvocalicvowelsignbengali 16#09C3
+/rvocalicvowelsigndeva 16#0943
+/rvocalicvowelsigngujarati 16#0AC3
+/s 16#0073
+/sabengali 16#09B8
+/sacute 16#015B
+/sacutedotaccent 16#1E65
+/sadarabic 16#0635
+/sadeva 16#0938
+/sadfinalarabic 16#FEBA
+/sadinitialarabic 16#FEBB
+/sadmedialarabic 16#FEBC
+/sagujarati 16#0AB8
+/sagurmukhi 16#0A38
+/sahiragana 16#3055
+/sakatakana 16#30B5
+/sakatakanahalfwidth 16#FF7B
+/sallallahoualayhewasallamarabic 16#FDFA
+/samekh 16#05E1
+/samekhdagesh 16#FB41
+/samekhdageshhebrew 16#FB41
+/samekhhebrew 16#05E1
+/saraaathai 16#0E32
+/saraaethai 16#0E41
+/saraaimaimalaithai 16#0E44
+/saraaimaimuanthai 16#0E43
+/saraamthai 16#0E33
+/saraathai 16#0E30
+/saraethai 16#0E40
+/saraiileftthai 16#F886
+/saraiithai 16#0E35
+/saraileftthai 16#F885
+/saraithai 16#0E34
+/saraothai 16#0E42
+/saraueeleftthai 16#F888
+/saraueethai 16#0E37
+/saraueleftthai 16#F887
+/sarauethai 16#0E36
+/sarauthai 16#0E38
+/sarauuthai 16#0E39
+/sbopomofo 16#3119
+/scaron 16#0161
+/scarondotaccent 16#1E67
+/scedilla 16#015F
+/schwa 16#0259
+/schwacyrillic 16#04D9
+/schwadieresiscyrillic 16#04DB
+/schwahook 16#025A
+/scircle 16#24E2
+/scircumflex 16#015D
+/scommaaccent 16#0219
+/sdotaccent 16#1E61
+/sdotbelow 16#1E63
+/sdotbelowdotaccent 16#1E69
+/seagullbelowcmb 16#033C
+/second 16#2033
+/secondtonechinese 16#02CA
+/section 16#00A7
+/seenarabic 16#0633
+/seenfinalarabic 16#FEB2
+/seeninitialarabic 16#FEB3
+/seenmedialarabic 16#FEB4
+/segol 16#05B6
+/segol13 16#05B6
+/segol1f 16#05B6
+/segol2c 16#05B6
+/segolhebrew 16#05B6
+/segolnarrowhebrew 16#05B6
+/segolquarterhebrew 16#05B6
+/segoltahebrew 16#0592
+/segolwidehebrew 16#05B6
+/seharmenian 16#057D
+/sehiragana 16#305B
+/sekatakana 16#30BB
+/sekatakanahalfwidth 16#FF7E
+/semicolon 16#003B
+/semicolonarabic 16#061B
+/semicolonmonospace 16#FF1B
+/semicolonsmall 16#FE54
+/semivoicedmarkkana 16#309C
+/semivoicedmarkkanahalfwidth 16#FF9F
+/sentisquare 16#3322
+/sentosquare 16#3323
+/seven 16#0037
+/sevenarabic 16#0667
+/sevenbengali 16#09ED
+/sevencircle 16#2466
+/sevencircleinversesansserif 16#2790
+/sevendeva 16#096D
+/seveneighths 16#215E
+/sevengujarati 16#0AED
+/sevengurmukhi 16#0A6D
+/sevenhackarabic 16#0667
+/sevenhangzhou 16#3027
+/sevenideographicparen 16#3226
+/seveninferior 16#2087
+/sevenmonospace 16#FF17
+/sevenoldstyle 16#F737
+/sevenparen 16#247A
+/sevenperiod 16#248E
+/sevenpersian 16#06F7
+/sevenroman 16#2176
+/sevensuperior 16#2077
+/seventeencircle 16#2470
+/seventeenparen 16#2484
+/seventeenperiod 16#2498
+/seventhai 16#0E57
+/sfthyphen 16#00AD
+/shaarmenian 16#0577
+/shabengali 16#09B6
+/shacyrillic 16#0448
+/shaddaarabic 16#0651
+/shaddadammaarabic 16#FC61
+/shaddadammatanarabic 16#FC5E
+/shaddafathaarabic 16#FC60
+% /shaddafathatanarabic 16#0651 16#064B
+/shaddakasraarabic 16#FC62
+/shaddakasratanarabic 16#FC5F
+/shade 16#2592
+/shadedark 16#2593
+/shadelight 16#2591
+/shademedium 16#2592
+/shadeva 16#0936
+/shagujarati 16#0AB6
+/shagurmukhi 16#0A36
+/shalshelethebrew 16#0593
+/shbopomofo 16#3115
+/shchacyrillic 16#0449
+/sheenarabic 16#0634
+/sheenfinalarabic 16#FEB6
+/sheeninitialarabic 16#FEB7
+/sheenmedialarabic 16#FEB8
+/sheicoptic 16#03E3
+/sheqel 16#20AA
+/sheqelhebrew 16#20AA
+/sheva 16#05B0
+/sheva115 16#05B0
+/sheva15 16#05B0
+/sheva22 16#05B0
+/sheva2e 16#05B0
+/shevahebrew 16#05B0
+/shevanarrowhebrew 16#05B0
+/shevaquarterhebrew 16#05B0
+/shevawidehebrew 16#05B0
+/shhacyrillic 16#04BB
+/shimacoptic 16#03ED
+/shin 16#05E9
+/shindagesh 16#FB49
+/shindageshhebrew 16#FB49
+/shindageshshindot 16#FB2C
+/shindageshshindothebrew 16#FB2C
+/shindageshsindot 16#FB2D
+/shindageshsindothebrew 16#FB2D
+/shindothebrew 16#05C1
+/shinhebrew 16#05E9
+/shinshindot 16#FB2A
+/shinshindothebrew 16#FB2A
+/shinsindot 16#FB2B
+/shinsindothebrew 16#FB2B
+/shook 16#0282
+/sigma 16#03C3
+/sigma1 16#03C2
+/sigmafinal 16#03C2
+/sigmalunatesymbolgreek 16#03F2
+/sihiragana 16#3057
+/sikatakana 16#30B7
+/sikatakanahalfwidth 16#FF7C
+/siluqhebrew 16#05BD
+/siluqlefthebrew 16#05BD
+/similar 16#223C
+/sindothebrew 16#05C2
+/siosacirclekorean 16#3274
+/siosaparenkorean 16#3214
+/sioscieuckorean 16#317E
+/sioscirclekorean 16#3266
+/sioskiyeokkorean 16#317A
+/sioskorean 16#3145
+/siosnieunkorean 16#317B
+/siosparenkorean 16#3206
+/siospieupkorean 16#317D
+/siostikeutkorean 16#317C
+/six 16#0036
+/sixarabic 16#0666
+/sixbengali 16#09EC
+/sixcircle 16#2465
+/sixcircleinversesansserif 16#278F
+/sixdeva 16#096C
+/sixgujarati 16#0AEC
+/sixgurmukhi 16#0A6C
+/sixhackarabic 16#0666
+/sixhangzhou 16#3026
+/sixideographicparen 16#3225
+/sixinferior 16#2086
+/sixmonospace 16#FF16
+/sixoldstyle 16#F736
+/sixparen 16#2479
+/sixperiod 16#248D
+/sixpersian 16#06F6
+/sixroman 16#2175
+/sixsuperior 16#2076
+/sixteencircle 16#246F
+/sixteencurrencydenominatorbengali 16#09F9
+/sixteenparen 16#2483
+/sixteenperiod 16#2497
+/sixthai 16#0E56
+/slash 16#002F
+/slashmonospace 16#FF0F
+/slong 16#017F
+/slongdotaccent 16#1E9B
+/smileface 16#263A
+/smonospace 16#FF53
+/sofpasuqhebrew 16#05C3
+/softhyphen 16#00AD
+/softsigncyrillic 16#044C
+/sohiragana 16#305D
+/sokatakana 16#30BD
+/sokatakanahalfwidth 16#FF7F
+/soliduslongoverlaycmb 16#0338
+/solidusshortoverlaycmb 16#0337
+/sorusithai 16#0E29
+/sosalathai 16#0E28
+/sosothai 16#0E0B
+/sosuathai 16#0E2A
+/space 16#0020
+/spacehackarabic 16#0020
+/spade 16#2660
+/spadesuitblack 16#2660
+/spadesuitwhite 16#2664
+/sparen 16#24AE
+/squarebelowcmb 16#033B
+/squarecc 16#33C4
+/squarecm 16#339D
+/squarediagonalcrosshatchfill 16#25A9
+/squarehorizontalfill 16#25A4
+/squarekg 16#338F
+/squarekm 16#339E
+/squarekmcapital 16#33CE
+/squareln 16#33D1
+/squarelog 16#33D2
+/squaremg 16#338E
+/squaremil 16#33D5
+/squaremm 16#339C
+/squaremsquared 16#33A1
+/squareorthogonalcrosshatchfill 16#25A6
+/squareupperlefttolowerrightfill 16#25A7
+/squareupperrighttolowerleftfill 16#25A8
+/squareverticalfill 16#25A5
+/squarewhitewithsmallblack 16#25A3
+/srsquare 16#33DB
+/ssabengali 16#09B7
+/ssadeva 16#0937
+/ssagujarati 16#0AB7
+/ssangcieuckorean 16#3149
+/ssanghieuhkorean 16#3185
+/ssangieungkorean 16#3180
+/ssangkiyeokkorean 16#3132
+/ssangnieunkorean 16#3165
+/ssangpieupkorean 16#3143
+/ssangsioskorean 16#3146
+/ssangtikeutkorean 16#3138
+/ssuperior 16#F6F2
+/sterling 16#00A3
+/sterlingmonospace 16#FFE1
+/strokelongoverlaycmb 16#0336
+/strokeshortoverlaycmb 16#0335
+/subset 16#2282
+/subsetnotequal 16#228A
+/subsetorequal 16#2286
+/succeeds 16#227B
+/suchthat 16#220B
+/suhiragana 16#3059
+/sukatakana 16#30B9
+/sukatakanahalfwidth 16#FF7D
+/sukunarabic 16#0652
+/summation 16#2211
+/sun 16#263C
+/superset 16#2283
+/supersetnotequal 16#228B
+/supersetorequal 16#2287
+/svsquare 16#33DC
+/syouwaerasquare 16#337C
+/t 16#0074
+/tabengali 16#09A4
+/tackdown 16#22A4
+/tackleft 16#22A3
+/tadeva 16#0924
+/tagujarati 16#0AA4
+/tagurmukhi 16#0A24
+/taharabic 16#0637
+/tahfinalarabic 16#FEC2
+/tahinitialarabic 16#FEC3
+/tahiragana 16#305F
+/tahmedialarabic 16#FEC4
+/taisyouerasquare 16#337D
+/takatakana 16#30BF
+/takatakanahalfwidth 16#FF80
+/tatweelarabic 16#0640
+/tau 16#03C4
+/tav 16#05EA
+/tavdages 16#FB4A
+/tavdagesh 16#FB4A
+/tavdageshhebrew 16#FB4A
+/tavhebrew 16#05EA
+/tbar 16#0167
+/tbopomofo 16#310A
+/tcaron 16#0165
+/tccurl 16#02A8
+/tcedilla 16#0163
+/tcheharabic 16#0686
+/tchehfinalarabic 16#FB7B
+/tchehinitialarabic 16#FB7C
+/tchehmedialarabic 16#FB7D
+% /tchehmeeminitialarabic 16#FB7C 16#FEE4
+/tcircle 16#24E3
+/tcircumflexbelow 16#1E71
+/tcommaaccent 16#0163
+/tdieresis 16#1E97
+/tdotaccent 16#1E6B
+/tdotbelow 16#1E6D
+/tecyrillic 16#0442
+/tedescendercyrillic 16#04AD
+/teharabic 16#062A
+/tehfinalarabic 16#FE96
+/tehhahinitialarabic 16#FCA2
+/tehhahisolatedarabic 16#FC0C
+/tehinitialarabic 16#FE97
+/tehiragana 16#3066
+/tehjeeminitialarabic 16#FCA1
+/tehjeemisolatedarabic 16#FC0B
+/tehmarbutaarabic 16#0629
+/tehmarbutafinalarabic 16#FE94
+/tehmedialarabic 16#FE98
+/tehmeeminitialarabic 16#FCA4
+/tehmeemisolatedarabic 16#FC0E
+/tehnoonfinalarabic 16#FC73
+/tekatakana 16#30C6
+/tekatakanahalfwidth 16#FF83
+/telephone 16#2121
+/telephoneblack 16#260E
+/telishagedolahebrew 16#05A0
+/telishaqetanahebrew 16#05A9
+/tencircle 16#2469
+/tenideographicparen 16#3229
+/tenparen 16#247D
+/tenperiod 16#2491
+/tenroman 16#2179
+/tesh 16#02A7
+/tet 16#05D8
+/tetdagesh 16#FB38
+/tetdageshhebrew 16#FB38
+/tethebrew 16#05D8
+/tetsecyrillic 16#04B5
+/tevirhebrew 16#059B
+/tevirlefthebrew 16#059B
+/thabengali 16#09A5
+/thadeva 16#0925
+/thagujarati 16#0AA5
+/thagurmukhi 16#0A25
+/thalarabic 16#0630
+/thalfinalarabic 16#FEAC
+/thanthakhatlowleftthai 16#F898
+/thanthakhatlowrightthai 16#F897
+/thanthakhatthai 16#0E4C
+/thanthakhatupperleftthai 16#F896
+/theharabic 16#062B
+/thehfinalarabic 16#FE9A
+/thehinitialarabic 16#FE9B
+/thehmedialarabic 16#FE9C
+/thereexists 16#2203
+/therefore 16#2234
+/theta 16#03B8
+/theta1 16#03D1
+/thetasymbolgreek 16#03D1
+/thieuthacirclekorean 16#3279
+/thieuthaparenkorean 16#3219
+/thieuthcirclekorean 16#326B
+/thieuthkorean 16#314C
+/thieuthparenkorean 16#320B
+/thirteencircle 16#246C
+/thirteenparen 16#2480
+/thirteenperiod 16#2494
+/thonangmonthothai 16#0E11
+/thook 16#01AD
+/thophuthaothai 16#0E12
+/thorn 16#00FE
+/thothahanthai 16#0E17
+/thothanthai 16#0E10
+/thothongthai 16#0E18
+/thothungthai 16#0E16
+/thousandcyrillic 16#0482
+/thousandsseparatorarabic 16#066C
+/thousandsseparatorpersian 16#066C
+/three 16#0033
+/threearabic 16#0663
+/threebengali 16#09E9
+/threecircle 16#2462
+/threecircleinversesansserif 16#278C
+/threedeva 16#0969
+/threeeighths 16#215C
+/threegujarati 16#0AE9
+/threegurmukhi 16#0A69
+/threehackarabic 16#0663
+/threehangzhou 16#3023
+/threeideographicparen 16#3222
+/threeinferior 16#2083
+/threemonospace 16#FF13
+/threenumeratorbengali 16#09F6
+/threeoldstyle 16#F733
+/threeparen 16#2476
+/threeperiod 16#248A
+/threepersian 16#06F3
+/threequarters 16#00BE
+/threequartersemdash 16#F6DE
+/threeroman 16#2172
+/threesuperior 16#00B3
+/threethai 16#0E53
+/thzsquare 16#3394
+/tihiragana 16#3061
+/tikatakana 16#30C1
+/tikatakanahalfwidth 16#FF81
+/tikeutacirclekorean 16#3270
+/tikeutaparenkorean 16#3210
+/tikeutcirclekorean 16#3262
+/tikeutkorean 16#3137
+/tikeutparenkorean 16#3202
+/tilde 16#02DC
+/tildebelowcmb 16#0330
+/tildecmb 16#0303
+/tildecomb 16#0303
+/tildedoublecmb 16#0360
+/tildeoperator 16#223C
+/tildeoverlaycmb 16#0334
+/tildeverticalcmb 16#033E
+/timescircle 16#2297
+/tipehahebrew 16#0596
+/tipehalefthebrew 16#0596
+/tippigurmukhi 16#0A70
+/titlocyrilliccmb 16#0483
+/tiwnarmenian 16#057F
+/tlinebelow 16#1E6F
+/tmonospace 16#FF54
+/toarmenian 16#0569
+/tohiragana 16#3068
+/tokatakana 16#30C8
+/tokatakanahalfwidth 16#FF84
+/tonebarextrahighmod 16#02E5
+/tonebarextralowmod 16#02E9
+/tonebarhighmod 16#02E6
+/tonebarlowmod 16#02E8
+/tonebarmidmod 16#02E7
+/tonefive 16#01BD
+/tonesix 16#0185
+/tonetwo 16#01A8
+/tonos 16#0384
+/tonsquare 16#3327
+/topatakthai 16#0E0F
+/tortoiseshellbracketleft 16#3014
+/tortoiseshellbracketleftsmall 16#FE5D
+/tortoiseshellbracketleftvertical 16#FE39
+/tortoiseshellbracketright 16#3015
+/tortoiseshellbracketrightsmall 16#FE5E
+/tortoiseshellbracketrightvertical 16#FE3A
+/totaothai 16#0E15
+/tpalatalhook 16#01AB
+/tparen 16#24AF
+/trademark 16#2122
+/trademarksans 16#F8EA
+/trademarkserif 16#F6DB
+/tretroflexhook 16#0288
+/triagdn 16#25BC
+/triaglf 16#25C4
+/triagrt 16#25BA
+/triagup 16#25B2
+/ts 16#02A6
+/tsadi 16#05E6
+/tsadidagesh 16#FB46
+/tsadidageshhebrew 16#FB46
+/tsadihebrew 16#05E6
+/tsecyrillic 16#0446
+/tsere 16#05B5
+/tsere12 16#05B5
+/tsere1e 16#05B5
+/tsere2b 16#05B5
+/tserehebrew 16#05B5
+/tserenarrowhebrew 16#05B5
+/tserequarterhebrew 16#05B5
+/tserewidehebrew 16#05B5
+/tshecyrillic 16#045B
+/tsuperior 16#F6F3
+/ttabengali 16#099F
+/ttadeva 16#091F
+/ttagujarati 16#0A9F
+/ttagurmukhi 16#0A1F
+/tteharabic 16#0679
+/ttehfinalarabic 16#FB67
+/ttehinitialarabic 16#FB68
+/ttehmedialarabic 16#FB69
+/tthabengali 16#09A0
+/tthadeva 16#0920
+/tthagujarati 16#0AA0
+/tthagurmukhi 16#0A20
+/tturned 16#0287
+/tuhiragana 16#3064
+/tukatakana 16#30C4
+/tukatakanahalfwidth 16#FF82
+/tusmallhiragana 16#3063
+/tusmallkatakana 16#30C3
+/tusmallkatakanahalfwidth 16#FF6F
+/twelvecircle 16#246B
+/twelveparen 16#247F
+/twelveperiod 16#2493
+/twelveroman 16#217B
+/twentycircle 16#2473
+/twentyhangzhou 16#5344
+/twentyparen 16#2487
+/twentyperiod 16#249B
+/two 16#0032
+/twoarabic 16#0662
+/twobengali 16#09E8
+/twocircle 16#2461
+/twocircleinversesansserif 16#278B
+/twodeva 16#0968
+/twodotenleader 16#2025
+/twodotleader 16#2025
+/twodotleadervertical 16#FE30
+/twogujarati 16#0AE8
+/twogurmukhi 16#0A68
+/twohackarabic 16#0662
+/twohangzhou 16#3022
+/twoideographicparen 16#3221
+/twoinferior 16#2082
+/twomonospace 16#FF12
+/twonumeratorbengali 16#09F5
+/twooldstyle 16#F732
+/twoparen 16#2475
+/twoperiod 16#2489
+/twopersian 16#06F2
+/tworoman 16#2171
+/twostroke 16#01BB
+/twosuperior 16#00B2
+/twothai 16#0E52
+/twothirds 16#2154
+/u 16#0075
+/uacute 16#00FA
+/ubar 16#0289
+/ubengali 16#0989
+/ubopomofo 16#3128
+/ubreve 16#016D
+/ucaron 16#01D4
+/ucircle 16#24E4
+/ucircumflex 16#00FB
+/ucircumflexbelow 16#1E77
+/ucyrillic 16#0443
+/udattadeva 16#0951
+/udblacute 16#0171
+/udblgrave 16#0215
+/udeva 16#0909
+/udieresis 16#00FC
+/udieresisacute 16#01D8
+/udieresisbelow 16#1E73
+/udieresiscaron 16#01DA
+/udieresiscyrillic 16#04F1
+/udieresisgrave 16#01DC
+/udieresismacron 16#01D6
+/udotbelow 16#1EE5
+/ugrave 16#00F9
+/ugujarati 16#0A89
+/ugurmukhi 16#0A09
+/uhiragana 16#3046
+/uhookabove 16#1EE7
+/uhorn 16#01B0
+/uhornacute 16#1EE9
+/uhorndotbelow 16#1EF1
+/uhorngrave 16#1EEB
+/uhornhookabove 16#1EED
+/uhorntilde 16#1EEF
+/uhungarumlaut 16#0171
+/uhungarumlautcyrillic 16#04F3
+/uinvertedbreve 16#0217
+/ukatakana 16#30A6
+/ukatakanahalfwidth 16#FF73
+/ukcyrillic 16#0479
+/ukorean 16#315C
+/umacron 16#016B
+/umacroncyrillic 16#04EF
+/umacrondieresis 16#1E7B
+/umatragurmukhi 16#0A41
+/umonospace 16#FF55
+/underscore 16#005F
+/underscoredbl 16#2017
+/underscoremonospace 16#FF3F
+/underscorevertical 16#FE33
+/underscorewavy 16#FE4F
+/union 16#222A
+/universal 16#2200
+/uogonek 16#0173
+/uparen 16#24B0
+/upblock 16#2580
+/upperdothebrew 16#05C4
+/upsilon 16#03C5
+/upsilondieresis 16#03CB
+/upsilondieresistonos 16#03B0
+/upsilonlatin 16#028A
+/upsilontonos 16#03CD
+/uptackbelowcmb 16#031D
+/uptackmod 16#02D4
+/uragurmukhi 16#0A73
+/uring 16#016F
+/ushortcyrillic 16#045E
+/usmallhiragana 16#3045
+/usmallkatakana 16#30A5
+/usmallkatakanahalfwidth 16#FF69
+/ustraightcyrillic 16#04AF
+/ustraightstrokecyrillic 16#04B1
+/utilde 16#0169
+/utildeacute 16#1E79
+/utildebelow 16#1E75
+/uubengali 16#098A
+/uudeva 16#090A
+/uugujarati 16#0A8A
+/uugurmukhi 16#0A0A
+/uumatragurmukhi 16#0A42
+/uuvowelsignbengali 16#09C2
+/uuvowelsigndeva 16#0942
+/uuvowelsigngujarati 16#0AC2
+/uvowelsignbengali 16#09C1
+/uvowelsigndeva 16#0941
+/uvowelsigngujarati 16#0AC1
+/v 16#0076
+/vadeva 16#0935
+/vagujarati 16#0AB5
+/vagurmukhi 16#0A35
+/vakatakana 16#30F7
+/vav 16#05D5
+/vavdagesh 16#FB35
+/vavdagesh65 16#FB35
+/vavdageshhebrew 16#FB35
+/vavhebrew 16#05D5
+/vavholam 16#FB4B
+/vavholamhebrew 16#FB4B
+/vavvavhebrew 16#05F0
+/vavyodhebrew 16#05F1
+/vcircle 16#24E5
+/vdotbelow 16#1E7F
+/vecyrillic 16#0432
+/veharabic 16#06A4
+/vehfinalarabic 16#FB6B
+/vehinitialarabic 16#FB6C
+/vehmedialarabic 16#FB6D
+/vekatakana 16#30F9
+/venus 16#2640
+/verticalbar 16#007C
+/verticallineabovecmb 16#030D
+/verticallinebelowcmb 16#0329
+/verticallinelowmod 16#02CC
+/verticallinemod 16#02C8
+/vewarmenian 16#057E
+/vhook 16#028B
+/vikatakana 16#30F8
+/viramabengali 16#09CD
+/viramadeva 16#094D
+/viramagujarati 16#0ACD
+/visargabengali 16#0983
+/visargadeva 16#0903
+/visargagujarati 16#0A83
+/vmonospace 16#FF56
+/voarmenian 16#0578
+/voicediterationhiragana 16#309E
+/voicediterationkatakana 16#30FE
+/voicedmarkkana 16#309B
+/voicedmarkkanahalfwidth 16#FF9E
+/vokatakana 16#30FA
+/vparen 16#24B1
+/vtilde 16#1E7D
+/vturned 16#028C
+/vuhiragana 16#3094
+/vukatakana 16#30F4
+/w 16#0077
+/wacute 16#1E83
+/waekorean 16#3159
+/wahiragana 16#308F
+/wakatakana 16#30EF
+/wakatakanahalfwidth 16#FF9C
+/wakorean 16#3158
+/wasmallhiragana 16#308E
+/wasmallkatakana 16#30EE
+/wattosquare 16#3357
+/wavedash 16#301C
+/wavyunderscorevertical 16#FE34
+/wawarabic 16#0648
+/wawfinalarabic 16#FEEE
+/wawhamzaabovearabic 16#0624
+/wawhamzaabovefinalarabic 16#FE86
+/wbsquare 16#33DD
+/wcircle 16#24E6
+/wcircumflex 16#0175
+/wdieresis 16#1E85
+/wdotaccent 16#1E87
+/wdotbelow 16#1E89
+/wehiragana 16#3091
+/weierstrass 16#2118
+/wekatakana 16#30F1
+/wekorean 16#315E
+/weokorean 16#315D
+/wgrave 16#1E81
+/whitebullet 16#25E6
+/whitecircle 16#25CB
+/whitecircleinverse 16#25D9
+/whitecornerbracketleft 16#300E
+/whitecornerbracketleftvertical 16#FE43
+/whitecornerbracketright 16#300F
+/whitecornerbracketrightvertical 16#FE44
+/whitediamond 16#25C7
+/whitediamondcontainingblacksmalldiamond 16#25C8
+/whitedownpointingsmalltriangle 16#25BF
+/whitedownpointingtriangle 16#25BD
+/whiteleftpointingsmalltriangle 16#25C3
+/whiteleftpointingtriangle 16#25C1
+/whitelenticularbracketleft 16#3016
+/whitelenticularbracketright 16#3017
+/whiterightpointingsmalltriangle 16#25B9
+/whiterightpointingtriangle 16#25B7
+/whitesmallsquare 16#25AB
+/whitesmilingface 16#263A
+/whitesquare 16#25A1
+/whitestar 16#2606
+/whitetelephone 16#260F
+/whitetortoiseshellbracketleft 16#3018
+/whitetortoiseshellbracketright 16#3019
+/whiteuppointingsmalltriangle 16#25B5
+/whiteuppointingtriangle 16#25B3
+/wihiragana 16#3090
+/wikatakana 16#30F0
+/wikorean 16#315F
+/wmonospace 16#FF57
+/wohiragana 16#3092
+/wokatakana 16#30F2
+/wokatakanahalfwidth 16#FF66
+/won 16#20A9
+/wonmonospace 16#FFE6
+/wowaenthai 16#0E27
+/wparen 16#24B2
+/wring 16#1E98
+/wsuperior 16#02B7
+/wturned 16#028D
+/wynn 16#01BF
+/x 16#0078
+/xabovecmb 16#033D
+/xbopomofo 16#3112
+/xcircle 16#24E7
+/xdieresis 16#1E8D
+/xdotaccent 16#1E8B
+/xeharmenian 16#056D
+/xi 16#03BE
+/xmonospace 16#FF58
+/xparen 16#24B3
+/xsuperior 16#02E3
+/y 16#0079
+/yaadosquare 16#334E
+/yabengali 16#09AF
+/yacute 16#00FD
+/yadeva 16#092F
+/yaekorean 16#3152
+/yagujarati 16#0AAF
+/yagurmukhi 16#0A2F
+/yahiragana 16#3084
+/yakatakana 16#30E4
+/yakatakanahalfwidth 16#FF94
+/yakorean 16#3151
+/yamakkanthai 16#0E4E
+/yasmallhiragana 16#3083
+/yasmallkatakana 16#30E3
+/yasmallkatakanahalfwidth 16#FF6C
+/yatcyrillic 16#0463
+/ycircle 16#24E8
+/ycircumflex 16#0177
+/ydieresis 16#00FF
+/ydotaccent 16#1E8F
+/ydotbelow 16#1EF5
+/yeharabic 16#064A
+/yehbarreearabic 16#06D2
+/yehbarreefinalarabic 16#FBAF
+/yehfinalarabic 16#FEF2
+/yehhamzaabovearabic 16#0626
+/yehhamzaabovefinalarabic 16#FE8A
+/yehhamzaaboveinitialarabic 16#FE8B
+/yehhamzaabovemedialarabic 16#FE8C
+/yehinitialarabic 16#FEF3
+/yehmedialarabic 16#FEF4
+/yehmeeminitialarabic 16#FCDD
+/yehmeemisolatedarabic 16#FC58
+/yehnoonfinalarabic 16#FC94
+/yehthreedotsbelowarabic 16#06D1
+/yekorean 16#3156
+/yen 16#00A5
+/yenmonospace 16#FFE5
+/yeokorean 16#3155
+/yeorinhieuhkorean 16#3186
+/yerahbenyomohebrew 16#05AA
+/yerahbenyomolefthebrew 16#05AA
+/yericyrillic 16#044B
+/yerudieresiscyrillic 16#04F9
+/yesieungkorean 16#3181
+/yesieungpansioskorean 16#3183
+/yesieungsioskorean 16#3182
+/yetivhebrew 16#059A
+/ygrave 16#1EF3
+/yhook 16#01B4
+/yhookabove 16#1EF7
+/yiarmenian 16#0575
+/yicyrillic 16#0457
+/yikorean 16#3162
+/yinyang 16#262F
+/yiwnarmenian 16#0582
+/ymonospace 16#FF59
+/yod 16#05D9
+/yoddagesh 16#FB39
+/yoddageshhebrew 16#FB39
+/yodhebrew 16#05D9
+/yodyodhebrew 16#05F2
+/yodyodpatahhebrew 16#FB1F
+/yohiragana 16#3088
+/yoikorean 16#3189
+/yokatakana 16#30E8
+/yokatakanahalfwidth 16#FF96
+/yokorean 16#315B
+/yosmallhiragana 16#3087
+/yosmallkatakana 16#30E7
+/yosmallkatakanahalfwidth 16#FF6E
+/yotgreek 16#03F3
+/yoyaekorean 16#3188
+/yoyakorean 16#3187
+/yoyakthai 16#0E22
+/yoyingthai 16#0E0D
+/yparen 16#24B4
+/ypogegrammeni 16#037A
+/ypogegrammenigreekcmb 16#0345
+/yr 16#01A6
+/yring 16#1E99
+/ysuperior 16#02B8
+/ytilde 16#1EF9
+/yturned 16#028E
+/yuhiragana 16#3086
+/yuikorean 16#318C
+/yukatakana 16#30E6
+/yukatakanahalfwidth 16#FF95
+/yukorean 16#3160
+/yusbigcyrillic 16#046B
+/yusbigiotifiedcyrillic 16#046D
+/yuslittlecyrillic 16#0467
+/yuslittleiotifiedcyrillic 16#0469
+/yusmallhiragana 16#3085
+/yusmallkatakana 16#30E5
+/yusmallkatakanahalfwidth 16#FF6D
+/yuyekorean 16#318B
+/yuyeokorean 16#318A
+/yyabengali 16#09DF
+/yyadeva 16#095F
+/z 16#007A
+/zaarmenian 16#0566
+/zacute 16#017A
+/zadeva 16#095B
+/zagurmukhi 16#0A5B
+/zaharabic 16#0638
+/zahfinalarabic 16#FEC6
+/zahinitialarabic 16#FEC7
+/zahiragana 16#3056
+/zahmedialarabic 16#FEC8
+/zainarabic 16#0632
+/zainfinalarabic 16#FEB0
+/zakatakana 16#30B6
+/zaqefgadolhebrew 16#0595
+/zaqefqatanhebrew 16#0594
+/zarqahebrew 16#0598
+/zayin 16#05D6
+/zayindagesh 16#FB36
+/zayindageshhebrew 16#FB36
+/zayinhebrew 16#05D6
+/zbopomofo 16#3117
+/zcaron 16#017E
+/zcircle 16#24E9
+/zcircumflex 16#1E91
+/zcurl 16#0291
+/zdot 16#017C
+/zdotaccent 16#017C
+/zdotbelow 16#1E93
+/zecyrillic 16#0437
+/zedescendercyrillic 16#0499
+/zedieresiscyrillic 16#04DF
+/zehiragana 16#305C
+/zekatakana 16#30BC
+/zero 16#0030
+/zeroarabic 16#0660
+/zerobengali 16#09E6
+/zerodeva 16#0966
+/zerogujarati 16#0AE6
+/zerogurmukhi 16#0A66
+/zerohackarabic 16#0660
+/zeroinferior 16#2080
+/zeromonospace 16#FF10
+/zerooldstyle 16#F730
+/zeropersian 16#06F0
+/zerosuperior 16#2070
+/zerothai 16#0E50
+/zerowidthjoiner 16#FEFF
+/zerowidthnonjoiner 16#200C
+/zerowidthspace 16#200B
+/zeta 16#03B6
+/zhbopomofo 16#3113
+/zhearmenian 16#056A
+/zhebrevecyrillic 16#04C2
+/zhecyrillic 16#0436
+/zhedescendercyrillic 16#0497
+/zhedieresiscyrillic 16#04DD
+/zihiragana 16#3058
+/zikatakana 16#30B8
+/zinorhebrew 16#05AE
+/zlinebelow 16#1E95
+/zmonospace 16#FF5A
+/zohiragana 16#305E
+/zokatakana 16#30BE
+/zparen 16#24B5
+/zretroflexhook 16#0290
+/zstroke 16#01B6
+/zuhiragana 16#305A
+/zukatakana 16#30BA
+.dicttomark readonly def

Modified: branches/gs_2_colors/Resource/Init/gs_ttf.ps
===================================================================
--- branches/gs_2_colors/Resource/Init/gs_ttf.ps	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/Resource/Init/gs_ttf.ps	2010-03-09 14:55:48 UTC (rev 10886)
@@ -1850,7 +1850,7 @@
             TTFDEBUG { ( redefine codepoint by AdobeGlyphList, ) print dup == flush } if
             put                                                    % <<AGL>> <<pbe>>
           } {                                                      % <<AGL>> <<pbe>> <glyphname>
-            TTFDEBUG { ( unknown glyphname, leave as it is ) print flush } if
+            TTFDEBUG { ( unknown glyphname, leave as it is ) = flush } if
             pop                                                    % <<AGL>> <<pbe>>
           } ifelse
         } forall

Modified: branches/gs_2_colors/Resource/Init/pdf_main.ps
===================================================================
--- branches/gs_2_colors/Resource/Init/pdf_main.ps	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/Resource/Init/pdf_main.ps	2010-03-09 14:55:48 UTC (rev 10886)
@@ -1382,30 +1382,46 @@
  { /DSCPageCount DSCPageCount 1 add store
  } bind def
 
-/get_media_box { % <pagedict> get_media_box <box>
-  /MediaBox pget not {
+/get_media_box { % <pagedict> get_media_box <box> <bool>
+  /MediaBox pget {
+    oforce_array //true
+  } {
     (   **** Page has no /MediaBox attribute. Using the current page size.\n)
     pdfformaterror
-    [ 0 0 currentpagedevice /PageSize get aload pop ]
-  } if
+    [ 0 0 currentpagedevice /PageSize get aload pop ] //false
+  } ifelse
 } bind def
 
 /get_any_box { % <pagedict> get_any_box <box name> <box>
   //systemdict /UseTrimBox .knownget dup { and } if {
     dup /TrimBox pget {
-      exch pop /TrimBox exch
+      /TrimBox exch
     } if
   } if
   dup type /arraytype ne {
     //systemdict /UseCropBox .knownget dup { and } if {
       dup /CropBox pget {
-        exch pop /CropBox exch
+        /CropBox exch
       } if
     } if
   } if
   dup type /arraytype ne {
-    /MediaBox exch get_media_box
-  } if
+    /MediaBox exch get_media_box pop
+  } {
+    oforce_elems              % <<pdict>> /SomeBox x0 y0 x1 y1
+    6 -1 roll get_media_box { % /SomeBox x0 y0 x1 y1 [MediaBox]
+      aload pop               % /SomeBox x0 y0 x1 y1 X0 Y0 X1 Y1 
+      5 -1 roll .min exch     % /SomeBox x0 y0 x1 X0 Y0 mY1 X1
+      5 -1 roll .min exch     % /SomeBox x0 y0 X0 Y0 mX1 mY1
+      4 2 roll                % /SomeBox x0 y0 mX1 mY1 X0 Y0
+      5 -1 roll .max exch     % /SomeBox x0 mX1 mY1 mY0 X0 
+      5 -1 roll .max exch     % /SomeBox mX1 mY1 mX0 mY0
+      4 2 roll                % /SomeBox mX0 mY0 mX1 mY1
+    } {
+      pop
+    } ifelse
+    4 array astore            % /SomeBox [mX0 mY0 mX1 mY1]
+  } ifelse
 } bind def
 
 % Compute the matrix that transforms the PDF->PS "default" user space
@@ -1637,7 +1653,7 @@
 	1 index /CropBox pget {
           /CropBox exch
         } {
-	  1 index get_media_box /MediaBox exch
+	  1 index get_media_box pop /MediaBox exch
 	} ifelse
         oforce_elems normrect_elems fix_empty_rect_elems 4 array astore .beginformgroup {
 	  showpagecontents

Modified: branches/gs_2_colors/base/Makefile.in
===================================================================
--- branches/gs_2_colors/base/Makefile.in	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/Makefile.in	2010-03-09 14:55:48 UTC (rev 10886)
@@ -144,6 +144,16 @@
 DEBUGRELDIR=../debugobj
 PGRELDIR=../pgobj
 
+# Define whether to compile in the FreeType library, and if so, where
+# the source tree is location. Otherwise, what library name to use
+# in linking to a shared implementation.
+
+FT_BRIDGE=@FT_BRIDGE@
+SHARE_FT=@SHARE_FT@
+FTSRCDIR=@FTSRCDIR@
+FT_CFLAGS=@FT_CFLAGS@
+FT_LIBS=@FT_LIBS@
+
 # Define the directory where the IJG JPEG library sources are stored,
 # and the major version of the library that is stored there.
 # You may need to change this if the IJG library version changes.
@@ -496,6 +506,7 @@
 include $(PSSRCDIR)/psromfs.mak
 include $(GLSRCDIR)/lib.mak
 include $(PSSRCDIR)/int.mak
+include $(GLSRCDIR)/freetype.mak
 include $(GLSRCDIR)/jpeg.mak
 # zlib.mak must precede libpng.mak
 include $(GLSRCDIR)/zlib.mak
@@ -520,7 +531,7 @@
 # Clean up after the autotools scripts
 # configure.ac and Makefile.in are symlinks from a subdir 
 # (created by autogen.sh) and so are safe to remove
-distclean : clean config-clean soclean debugclean
+distclean : clean config-clean soclean pgclean debugclean
 	-$(RM_) -r $(BINDIR) $(GLOBJDIR) $(PSOBJDIR)
 	-$(RM_) -r autom4te.cache
 	-$(RM_) config.log config.status

Modified: branches/gs_2_colors/base/configure.ac
===================================================================
--- branches/gs_2_colors/base/configure.ac	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/configure.ac	2010-03-09 14:55:48 UTC (rev 10886)
@@ -77,6 +77,9 @@
 AC_PROG_RANLIB
 #AC_PROG_INSTALL
 
+dnl pkg-config is used for several tests now...
+AC_PATH_PROG(PKGCONFIG, pkg-config)
+
 dnl --------------------------------------------------  
 dnl Allow excluding the contributed drivers
 dnl --------------------------------------------------  
@@ -283,9 +286,6 @@
     CFLAGS="$CFLAGS -DUSE_LIBPAPER"
 fi
 
-dnl pkg-config is used for several tests now...
-AC_PATH_PROG(PKGCONFIG, pkg-config)
-
 dnl Fontconfig support
 HAVE_FONTCONFIG=""
 FONTCONFIG_CFLAGS=""
@@ -322,6 +322,49 @@
 
 AC_CHECK_LIB(dl, dlopen)
 
+AC_ARG_ENABLE([freetype], AC_HELP_STRING([--enable-freetype],
+	[Use freetype for font rasterization]))
+FT_BRIDGE=0
+SHARE_FT=0
+FTSRCDIR=
+FT_CFLAGS=
+FT_LIBS=
+if test x"$enable_freetype" == xyes; then
+  AC_MSG_CHECKING([for local freetype library source])
+  dnl We prefer freetype2 over freetype, so it is easy to override
+  dnl the included freetype source with a checkout from upstream.
+  for dir in freetype2 freetype; do
+    if test -f $dir/src/base/ftbbox.c; then
+	AC_MSG_RESULT([$dir])
+	SHARE_FT=0
+	FTSRCDIR="$dir"
+	FT_CFLAGS="-I$dir/include"
+	FT_BRIDGE=1
+	break;
+    fi
+  done
+  if test -z $FTSRCDIR; then
+    AC_MSG_RESULT([no])
+    if test "x$PKGCONFIG" != x; then
+	AC_MSG_CHECKING(for system freetype with pkg-config)
+	    if $PKGCONFIG --exists freetype2; then
+		AC_MSG_RESULT(yes)
+		FT_CFLAGS="$CFLAGS `$PKGCONFIG --cflags freetype2`"
+		FT_LIBS="`$PKGCONFIG --libs freetype2`"
+		FT_BRIDGE=1
+	    else
+		AC_MSG_RESULT(no)
+		AC_MSG_WARN([freetype library source not found...using native rasterizer])
+	    fi
+    fi
+  fi
+fi
+AC_SUBST(FT_BRIDGE)
+AC_SUBST(SHARE_FT)
+AC_SUBST(FTSRCDIR)
+AC_SUBST(FT_CFLAGS)
+AC_SUBST(FT_LIBS)
+  
 AC_MSG_CHECKING([for local jpeg library source])
 dnl At present, we give the local source priority over the shared
 dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.

Modified: branches/gs_2_colors/base/freetype.mak
===================================================================
--- branches/gs_2_colors/base/freetype.mak	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/freetype.mak	2010-03-09 14:55:48 UTC (rev 10886)
@@ -17,8 +17,9 @@
 #	FTSRCDIR    - the source directory
 #	FTGENDIR    - the generated intermediate file directory
 #	FTOBJDIR    - the object file directory
+#	FT_CFLAGS   - The include options for the freetype library
 #	SHARE_FT - 0 to compile in freetype, 1 to link a shared library
-#	FT_NAME  - if SHARE_FT=1, the name of the shared library
+#	FT_LIBS  - if SHARE_FT=1, the link options for the shared library
 
 # (Rename directories.)
 FTSRC=$(FTSRCDIR)$(D)src$(D)
@@ -57,7 +58,26 @@
 	$(FTOBJ)ftsnames.$(OBJ) \
 	$(FTOBJ)ftstream.$(OBJ) \
 	$(FTOBJ)fttrigon.$(OBJ) \
-	$(FTOBJ)ftutil.$(OBJ)
+	$(FTOBJ)ftutil.$(OBJ) \
+	$(FTOBJ)ftbbox.$(OBJ) \
+	$(FTOBJ)ftbdf.$(OBJ) \
+	$(FTOBJ)ftbitmap.$(OBJ) \
+	$(FTOBJ)ftdebug.$(OBJ) \
+	$(FTOBJ)ftgasp.$(OBJ) \
+	$(FTOBJ)ftglyph.$(OBJ) \
+	$(FTOBJ)ftgxval.$(OBJ) \
+	$(FTOBJ)ftinit.$(OBJ) \
+	$(FTOBJ)ftlcdfil.$(OBJ) \
+	$(FTOBJ)ftmm.$(OBJ) \
+	$(FTOBJ)ftotval.$(OBJ) \
+	$(FTOBJ)ftpfr.$(OBJ) \
+	$(FTOBJ)ftstroke.$(OBJ) \
+	$(FTOBJ)ftsynth.$(OBJ) \
+	$(FTOBJ)ftsystem.$(OBJ) \
+	$(FTOBJ)fttype1.$(OBJ) \
+	$(FTOBJ)ftwinfnt.$(OBJ) \
+	$(FTOBJ)ftxf86.$(OBJ) \
+	$(FTOBJ)ftpatent.$(OBJ)
 
 ft_bdf=\
 	$(FTOBJ)bdflib.$(OBJ) \
@@ -90,7 +110,7 @@
 
 ft_gzip=$(FTOBJ)ftgzip.$(OBJ)
 
-ft_lwz=$(FTOBJ)ftlzw.$(OBJ)
+ft_lzw=$(FTOBJ)ftlzw.$(OBJ)
 
 ft_pcf=\
 	$(FTOBJ)pcfdrivr.$(OBJ) \
@@ -169,12 +189,16 @@
 
 ft_winfonts=$(FTOBJ)winfnt.$(OBJ)
 
+# instantiate the requested build option (shared or compiled in)
+$(FTGEN)freetype.dev : $(TOP_MAKEFILES) $(FTGEN)freetype_$(SHARE_FT).dev
+	$(CP_) $(FTGEN)freetype_$(SHARE_FT).dev $(FTGEN)freetype.dev
+
 # Define the shared version.
 $(FTGEN)freetype_1.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE)
-	$(SETMOD) $(FTGEN)freetype_1 -lib $(FT_NAME)
+	$(SETMOD) $(FTGEN)freetype_1 -link $(FT_LIBS)
 
 # Define the non-shared version.
-$(FTGEN)freetype_0.dev : $(FT_MAK) $(ECHOGS_XE) \
+$(FTGEN)freetype_0.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE) \
     $(ft_autofit) $(ft_base) $(ft_bdf) $(ft_cache) $(ft_cff) $(ft_cid) \
     $(ft_gzip) $(ft_lzw) $(ft_pcf) $(ft_pfr) $(ft_psaux) $(ft_pshinter) \
     $(ft_psnames) $(ft_raster) $(ft_smooth) $(ft_sfnt) $(ft_truetype) \
@@ -267,6 +291,63 @@
 $(FTOBJ)ftutil.$(OBJ) : $(FTSRC)base$(D)ftutil.c
 	$(FTCC) $(FTO_)ftutil.$(OBJ) $(C_) $(FTSRC)base$(D)ftutil.c
 
+$(FTOBJ)ftbbox.$(OBJ) : $(FTSRC)base$(D)ftbbox.c
+	$(FTCC) $(FTO_)ftbbox.$(OBJ) $(C_) $(FTSRC)base$(D)ftbbox.c
+
+$(FTOBJ)ftbdf.$(OBJ) : $(FTSRC)base$(D)ftbdf.c
+	$(FTCC) $(FTO_)ftbdf.$(OBJ) $(C_) $(FTSRC)base$(D)ftbdf.c
+
+$(FTOBJ)ftbitmap.$(OBJ) : $(FTSRC)base$(D)ftbitmap.c
+	$(FTCC) $(FTO_)ftbitmap.$(OBJ) $(C_) $(FTSRC)base$(D)ftbitmap.c
+
+$(FTOBJ)ftdebug.$(OBJ) : $(FTSRC)base$(D)ftdebug.c
+	$(FTCC) $(FTO_)ftdebug.$(OBJ) $(C_) $(FTSRC)base$(D)ftdebug.c
+
+$(FTOBJ)ftgasp.$(OBJ) : $(FTSRC)base$(D)ftgasp.c
+	$(FTCC) $(FTO_)ftgasp.$(OBJ) $(C_) $(FTSRC)base$(D)ftgasp.c
+
+$(FTOBJ)ftglyph.$(OBJ) : $(FTSRC)base$(D)ftglyph.c
+	$(FTCC) $(FTO_)ftglyph.$(OBJ) $(C_) $(FTSRC)base$(D)ftglyph.c
+
+$(FTOBJ)ftgxval.$(OBJ) : $(FTSRC)base$(D)ftgxval.c
+	$(FTCC) $(FTO_)ftgxval.$(OBJ) $(C_) $(FTSRC)base$(D)ftgxval.c
+
+$(FTOBJ)ftinit.$(OBJ) : $(FTSRC)base$(D)ftinit.c
+	$(FTCC) $(FTO_)ftinit.$(OBJ) $(C_) $(FTSRC)base$(D)ftinit.c
+
+$(FTOBJ)ftlcdfil.$(OBJ) : $(FTSRC)base$(D)ftlcdfil.c
+	$(FTCC) $(FTO_)ftlcdfil.$(OBJ) $(C_) $(FTSRC)base$(D)ftlcdfil.c
+
+$(FTOBJ)ftmm.$(OBJ) : $(FTSRC)base$(D)ftmm.c
+	$(FTCC) $(FTO_)ftmm.$(OBJ) $(C_) $(FTSRC)base$(D)ftmm.c
+
+$(FTOBJ)ftotval.$(OBJ) : $(FTSRC)base$(D)ftotval.c
+	$(FTCC) $(FTO_)ftotval.$(OBJ) $(C_) $(FTSRC)base$(D)ftotval.c
+
+$(FTOBJ)ftpfr.$(OBJ) : $(FTSRC)base$(D)ftpfr.c
+	$(FTCC) $(FTO_)ftpfr.$(OBJ) $(C_) $(FTSRC)base$(D)ftpfr.c
+
+$(FTOBJ)ftstroke.$(OBJ) : $(FTSRC)base$(D)ftstroke.c
+	$(FTCC) $(FTO_)ftstroke.$(OBJ) $(C_) $(FTSRC)base$(D)ftstroke.c
+
+$(FTOBJ)ftsynth.$(OBJ) : $(FTSRC)base$(D)ftsynth.c
+	$(FTCC) $(FTO_)ftsynth.$(OBJ) $(C_) $(FTSRC)base$(D)ftsynth.c
+
+$(FTOBJ)ftsystem.$(OBJ) : $(FTSRC)base$(D)ftsystem.c
+	$(FTCC) $(FTO_)ftsystem.$(OBJ) $(C_) $(FTSRC)base$(D)ftsystem.c
+
+$(FTOBJ)fttype1.$(OBJ) : $(FTSRC)base$(D)fttype1.c
+	$(FTCC) $(FTO_)fttype1.$(OBJ) $(C_) $(FTSRC)base$(D)fttype1.c
+
+$(FTOBJ)ftwinfnt.$(OBJ) : $(FTSRC)base$(D)ftwinfnt.c
+	$(FTCC) $(FTO_)ftwinfnt.$(OBJ) $(C_) $(FTSRC)base$(D)ftwinfnt.c
+
+$(FTOBJ)ftxf86.$(OBJ) : $(FTSRC)base$(D)ftxf86.c
+	$(FTCC) $(FTO_)ftxf86.$(OBJ) $(C_) $(FTSRC)base$(D)ftxf86.c
+
+$(FTOBJ)ftpatent.$(OBJ) : $(FTSRC)base$(D)ftpatent.c
+	$(FTCC) $(FTO_)ftpatent.$(OBJ) $(C_) $(FTSRC)base$(D)ftpatent.c
+
 $(FTOBJ)bdflib.$(OBJ) : $(FTSRC)bdf$(D)bdflib.c
 	$(FTCC) $(FTO_)bdflib.$(OBJ) $(C_) $(FTSRC)bdf$(D)bdflib.c
 


Property changes on: branches/gs_2_colors/base/freetype.mak
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Modified: branches/gs_2_colors/base/gdevpx.c
===================================================================
--- branches/gs_2_colors/base/gdevpx.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gdevpx.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -730,8 +730,10 @@
                                "pclxl_write_image_data_DeltaRow(buf)");
     prow = gs_alloc_bytes(xdev->v_memory, width_bytes, "pclxl_write_image_data_DeltaRow(prow)");
     /* the RLE routine can write uncompressed without extra-allocation */
-    if ((buf == 0) || (prow == 0))
-        return pclxl_write_image_data_RLE(xdev, data, data_bit, raster, width_bits, y, height);
+    if ((buf == 0) || (prow == 0)) {
+        pclxl_write_image_data_RLE(xdev, data, data_bit, raster, width_bits, y, height);
+	return;
+    }
     /* initialize the seed row */
     memset(prow, 0, width_bytes);
     cdata = buf;
@@ -760,8 +762,10 @@
 		       uint raster, uint width_bits, int y, int height)
 {
     /* If we only have 1 line, it does not make sense to do DeltaRow */
-    if (height < 2)
-    return pclxl_write_image_data_RLE(xdev, data, data_bit, raster, width_bits, y, height);
+    if (height < 2) {
+        pclxl_write_image_data_RLE(xdev, data, data_bit, raster, width_bits, y, height);
+        return;
+    }
 
     switch(xdev->CompressMode){
     case eDeltaRowCompression:

Modified: branches/gs_2_colors/base/gdevtsep.c
===================================================================
--- branches/gs_2_colors/base/gdevtsep.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gdevtsep.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -286,7 +286,7 @@
 {	open,\
 	gx_default_get_initial_matrix,\
 	NULL,				/* sync_output */\
-	gdev_prn_output_page,		/* output_page */\
+	tiff_output_page,		/* output_page */\
 	close,				/* close */\
 	NULL,				/* map_rgb_color - not used */\
 	tiffsep_decode_color,		/* map_color_rgb */\
@@ -704,7 +704,7 @@
 tiffsep1_prn_open(gx_device * pdev)
 {
     tiffsep1_device * const tfdev = (tiffsep1_device *)pdev;
-    int code = gdev_prn_open(pdev);
+    int code = tiff_open(pdev);
 
 #if !USE_COMPRESSED_ENCODING
     /*
@@ -1016,7 +1016,7 @@
 int
 tiffsep_prn_open(gx_device * pdev)
 {
-    int code = gdev_prn_open(pdev);
+    int code = tiff_open(pdev);
 
 #if !USE_COMPRESSED_ENCODING
     /*
@@ -1396,7 +1396,7 @@
 	/* Open the separation file, if not already open */
 	if (tfdev->sep_file[comp_num] == NULL) {
 	    code = gx_device_open_output_file((gx_device *)pdev, name,
-		    true, false, &(tfdev->sep_file[comp_num]));
+		    true, true, &(tfdev->sep_file[comp_num]));
 	    if (code < 0)
 	        return code;
             tfdev->tiff[comp_num] = tiff_from_filep(name,
@@ -1568,7 +1568,7 @@
 	/* Open the separation file, if not already open */
 	if (tfdev->sep_file[comp_num] == NULL) {
 	    code = gx_device_open_output_file((gx_device *)pdev, name,
-		    true, false, &(tfdev->sep_file[comp_num]));
+		    true, true, &(tfdev->sep_file[comp_num]));
 	    if (code < 0)
 	        return code;
 	    tfdev->tiff[comp_num] = tiff_from_filep(name,

Modified: branches/gs_2_colors/base/gdevwts.c
===================================================================
--- branches/gs_2_colors/base/gdevwts.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gdevwts.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -963,6 +963,13 @@
     return code;
 }
 
+/* Unfortunately there are many bugs associated with optimizing away
+ *   raster operations to avoid creating a contone buffer (ie bug
+ *   #691154).  Until those are fixed the following should remain true.
+ */
+
+const bool ALWAYS_CONTONE = true;
+
 /*
  * We need to create custom memory buffer devices.  We use the default
  * create_buf_device routine and then we set our custom device procedures.
@@ -975,7 +982,7 @@
     int code = gx_default_create_buf_device(pbdev, target, y,
 	render_plane, mem, band_complexity);
     /* Now set our custom device procedures. */
-    if (band_complexity && band_complexity->nontrivial_rops) {
+    if ((band_complexity && band_complexity->nontrivial_rops) || ALWAYS_CONTONE) {
 	set_dev_proc(*pbdev, get_bits_rectangle,
 		     wtsimdi_contone_get_bits_rectangle);
     } else {

Modified: branches/gs_2_colors/base/gs.mak
===================================================================
--- branches/gs_2_colors/base/gs.mak	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gs.mak	2010-03-09 14:55:48 UTC (rev 10886)
@@ -34,10 +34,15 @@
 #	    look for files in the current directory first).
 #	GS_DOCDIR - the directory where documentation will be available
 #	    at run time.
+#	FTSRCDIR - the directory where there the FreeType library
+#	    source code is stored, relative to the source directory.
 #	JSRCDIR - the directory where the IJG JPEG library source code
 #	    is stored (at compilation time).
 #	PNGSRCDIR - the same for libpng.
 #	ZSRCDIR - the same for zlib.
+#	SHARE_FT - normally 0; if set to 1, asks the linker to use
+#	    and existing compiled freetype library instead of compiling
+#	    in the source code availabel in FTSRCDIR.
 #	SHARE_JPEG - normally 0; if set to 1, asks the linker to use
 #	    an existing compiled libjpeg (-ljpeg) instead of compiling and
 #	    linking libjpeg explicitly.  (We strongly recommend against
@@ -204,6 +209,8 @@
 #	    such as paths that must be defined by all top-level makefiles.
 
 #**************** PATCHES
+FTGENDIR=$(GLGENDIR)
+FTOBJDIR=$(GLOBJDIR)
 JGENDIR=$(GLGENDIR)
 JOBJDIR=$(GLOBJDIR)
 PNGGENDIR=$(GLGENDIR)

Modified: branches/gs_2_colors/base/gsnogc.c
===================================================================
--- branches/gs_2_colors/base/gsnogc.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gsnogc.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -32,7 +32,7 @@
 static void
 nogc_free_string(gs_memory_t * mem, byte * str, uint size, client_name_t cname)
 {
-    return gs_free_object(mem, str, cname);
+    gs_free_object(mem, str, cname);
 }
 
 static byte *
@@ -80,12 +80,12 @@
 
 	mem_prev = mem;
         set_procs(mem);
-        gs_consolidate_free(mem);
+        gs_consolidate_free((gs_memory_t *)mem);
 	if (mem->stable_memory != (gs_memory_t *)mem &&
 	    mem->stable_memory != 0
 	    ) {
-            set_procs(mem->stable_memory);
-            gs_consolidate_free(mem->stable_memory);
+            set_procs((gs_ref_memory_t *)mem->stable_memory);
+            gs_consolidate_free((gs_memory_t *)mem->stable_memory);
         }
     }
 }

Modified: branches/gs_2_colors/base/gxipixel.c
===================================================================
--- branches/gs_2_colors/base/gxipixel.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/gxipixel.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -331,19 +331,7 @@
 	/* that we implement less expensively. */
 	if (!pim->CombineWithColor)
 	    lop = rop3_know_T_0(lop) & ~lop_T_transparent;
-	else {
-	    if (rop3_uses_T(lop))
-		switch (color_draws_b_w(dev, pdcolor)) {
-		    case 0:
-			lop = rop3_know_T_0(lop);
-			break;
-		    case 1:
-			lop = rop3_know_T_1(lop);
-			break;
-		    default:
-			;
-		}
-	}
+
 	if (lop != rop3_S &&	/* if best case, no more work needed */
 	    !rop3_uses_T(lop) && bps == 1 && spp == 1 &&
 	    (b_w_color =

Modified: branches/gs_2_colors/base/winlib.mak
===================================================================
--- branches/gs_2_colors/base/winlib.mak	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/base/winlib.mak	2010-03-09 14:55:48 UTC (rev 10886)
@@ -20,6 +20,7 @@
 
 # Note that built-in third-party libraries aren't available.
 
+SHARE_FT=0
 SHARE_JPEG=0
 SHARE_LIBPNG=0
 SHARE_LIBTIFF=0
@@ -78,15 +79,10 @@
 UFST_LIB_EXT=.lib
 !endif
 
-# Define conditinal name for FreeType bridge :
-!ifdef FT_ROOT
-FT_BRIDGE = 1
-FT_CFLAGS=$(I_)$(FT_ROOT)$(D)include$(_I)
-!ifndef FT_LIB
-FT_LIB = freetype238MT_D
+# Define conditinal for FreeType bridge :
+!ifndef FT_BRIDGE
+FT_BRIDGE = 0
 !endif
-FT_LIBS=$(FT_ROOT)$(D)objs$(D)$(FT_LIB).lib
-!endif
 
 # Define the files to be removed by `make clean'.
 # nmake expands macros when encountered, not when used,
@@ -103,6 +99,7 @@
 #!include $(COMMONDIR)/generic.mak
 !include $(GLSRCDIR)\gs.mak
 !include $(GLSRCDIR)\lib.mak
+!include $(GLSRCDIR)\freetype.mak
 !include $(GLSRCDIR)\jpeg.mak
 # zlib.mak must precede libpng.mak
 !include $(GLSRCDIR)\zlib.mak

Modified: branches/gs_2_colors/doc/Make.htm
===================================================================
--- branches/gs_2_colors/doc/Make.htm	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/doc/Make.htm	2010-03-09 14:55:48 UTC (rev 10886)
@@ -2730,62 +2730,27 @@
 <h2><a name="FT_build"></a>How to build Ghostscript with FreeType</h2>
 
 <p>
-<em>Note: This section is only for users who wish to use Ghostscript with FreeType font renderer.
-Other users please skip this section.
+<em>Note: This section is only for users who wish to use Ghostscript with
+the FreeType font renderer. Other users please skip this section.
 </em>
 
 <p>
-Ghostscript sources do not include a copy of the FreeType sources.
-You need to obtain them from the 
-<a href="http://freetype.org/">FreeType Project</a>. 
-Ghostscript includes only some source modules that provide a 
-bridge to FreeType.
+Ghostscript sources include a copy of the the FreeType libary, or you
+can use a recent release which enables the incremental font interface.
 
 <p>
-Ghostscript makefiles do not include any script for building FreeType 
-libraries. Refer to FreeType manual how to build them. FreeType object 
-libraries must be built before building Ghostscript with the FreeType 
-bridge.
-
+With the autoconf build (Linux, MacOS X, Solaris, etc.) just pass
+<tt>--enable-freetype</tt> to the configure script. This will compile
+in the freetype source code and enable the font api bridge to freetype.
 <p>
-Note that Ghostscript requires FreeType to be built with the optional 
-incremental font support. Check that FT_CONFIG_OPTION_INCREMENTAL is 
-defined in the headers for your FreeType build. 
-<p>
-To build Ghostscript with FreeType, specify these additional options for 
-"make" either on the command line, or in the top-level makefile:
 
-<dl>
-<dt><code>FT_BRIDGE=1</code>
-<dd>Enables the FreeType bridge.
+<p>For Windows/MSVC you need to define FT_BRIGE=1 on the nmake
+command line. For example:
 
-<dt><code>FT_CFLAGS=<i>options</i></code>
-<dd>Specifies C compiler include directives and options for FreeType 
-library. Refer to the FreeType manual for information about them.
+<blockquote><pre>nmake -f psi\msvc32.mak FT_BRIDGE=1</pre></blockquote>
 
-<dt><code>FT_LIBS=<i>link-options</i></code>
-<dd>Specifies the path the the object library or options for linking 
-with FreeType. You must use the appropriate one for your platform and 
-linker.
-</dl>
+</p>
 
-<p>An example for Unix/GCC :
-<blockquote>
-<tt>make FT_BRIDGE=1 FT_CFLAGS=-Ifreetype/include FT_LIBS=freetype/objs/libfreetype.a</tt>
-</blockquote>
-or
-<blockquote>
-<tt>make FT_BRIDGE=1 FT_CFLAGS=`pkg-config --cflags freetype2` FT_LIBS=`pkg-config --libs freetype2`</tt>
-</blockquote>
-
-<p>For Windows/MSVC you need only specify FT_ROOT to be the path to the 
-top level source directory of your FreeType build.
-msvc32.mak sets the other options automatically. However,
-because the freetype project files for MSVC embed the version and build
-type in the library filename, it may be necessary to override the default
-library name, by passing for example FT_LIB=freetype241MT. FT_LIB only
-has an effect on the MSVC build, unlike FT_LIBS which is used by all the builds.
-
 <p>
 
 <!-- [2.0 end contents] ==================================================== -->

Modified: branches/gs_2_colors/doc/Use.htm
===================================================================
--- branches/gs_2_colors/doc/Use.htm	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/doc/Use.htm	2010-03-09 14:55:48 UTC (rev 10886)
@@ -1315,6 +1315,15 @@
 /STHeiti-Regular /SimHei ;<br>
 </code></blockquote>
 
+<p>The win32 installer of recent version of ghostscript has a checkbox for
+"Use Windows TrueType fonts for Chinese, Japanese and Korean" to optionally update
+lib/cidfmap with the common CJK fonts provided by Microsoft products. The script
+can also be run separately (e.g. against a network drive with windows CJK fonts):
+
+<blockquote><code>
+gswin32c -q -dBATCH -sFONTDIR=c:/windows/fonts -sCIDFMAP=lib/cidfmap lib/mkcidfm.ps
+</code></blockquote>
+
 <p>
 Note that the font file path uses Postscript syntax.
 Because of this, backslashes in the paths must be 

Modified: branches/gs_2_colors/examples/cjk/gscjk_ak.ps
===================================================================
--- branches/gs_2_colors/examples/cjk/gscjk_ak.ps	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/examples/cjk/gscjk_ak.ps	2010-03-09 14:55:48 UTC (rev 10886)
@@ -77,10 +77,10 @@
 %%EndProlog
 /HYSMyeongJo-Medium--KSC-EUC-V *findfont 25 scalefont setfont
 500 625 moveto
-(ÖÄŒžÇѱ¹¾î ¼¼·Î¾²±â Àμâ) show
+(ÖÄù¶ Çѱ¹¾î ¼¼·Î¾²±â Àμâ) show
 /HYSMyeongJo-Medium--KSC-EUC-H *findfont 25 scalefont setfont
 50 600 moveto
-(ÖÄŒžGhostscript) show
+(ÖÄù¶ Ghostscript) show
 50 550 moveto
 (Çѱ¹¾î Korean) show
 50 500 moveto
@@ -100,10 +100,10 @@
 (MyeongJo Typeface ¸íÁ¶) show
 /HYGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
 150 375 moveto
-(Gothic Typeface °íµŠ show
+(Gothic Typeface °íµñ) show
 /HYRGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
 150 350 moveto
-(Rounded Gothic Typeface µÕ±Ù°íµŠ show
+(Rounded Gothic Typeface µÕ±Ù°íµñ) show
 %
 /Times-Roman findfont 13 scalefont setfont
 50 200 moveto

Modified: branches/gs_2_colors/freetype/include/freetype/freetype.h
===================================================================
--- branches/gs_2_colors/freetype/include/freetype/freetype.h	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/freetype/include/freetype/freetype.h	2010-03-09 14:55:48 UTC (rev 10886)
@@ -147,7 +147,7 @@
   /*    FT_OPEN_PATHNAME                                                   */
   /*    FT_OPEN_DRIVER                                                     */
   /*    FT_OPEN_PARAMS                                                     */
-  /*                                                                       */
+	  /*                                                                       */
   /*    FT_LOAD_DEFAULT                                                    */
   /*    FT_LOAD_RENDER                                                     */
   /*    FT_LOAD_MONOCHROME                                                 */

Modified: branches/gs_2_colors/lib/mkcidfm.ps
===================================================================
--- branches/gs_2_colors/lib/mkcidfm.ps	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/lib/mkcidfm.ps	2010-03-09 14:55:48 UTC (rev 10886)
@@ -31,6 +31,8 @@
 % The initial list contains only font files found in Windows XP.
 % Please submit corrections and additions.
 %
+% See the end of file for references and further information.
+%
 % Font filenames must match case.  
 % All font filenames are currently lower case.
 %
@@ -50,34 +52,48 @@
 % The first matching substitution in the array will be used.
 /fontaliases
 <<
+  % otf's /AdobeMingStd-Light /AdobeHeitiStd-Regular /AdobeSongStd-Light
+  % /KozMinPr6N-Regular /AdobeMyungjoStd-Medium came with Acroread 9 unix CJK pack.
+
+  % ArialUnicode and a common font are used as a last-resort catch-all
+  % in most cases.
+
   % Traditional Chinese
-  /MSung-Light [ /MingLiU ]
-  /MSung-Medium [ /MingLiU ]
-  /MHei-Medium [ /MingLiU ]
-  /MKai-Medium [ /Arial-Unicode-MS /MingLiU ]
+  % Mingliu and Kaiu are known to use patented TT instructions
+  /MSung-Light [ /MingLiU /ArialUnicodeMS-CNS ]
+  /MSung-Medium [ /MingLiU /ArialUnicodeMS-CNS ]
+  /MHei-Medium [ /MicrosoftJhengHeiRegular /ArialUnicodeMS-CNS /MingLiU ]
+  /MKai-Medium [ /DFKaiShu-SB-Estd-BF /Arial-Unicode-MS /MingLiU /ArialUnicodeMS-CNS ]
+  /AdobeMingStd-Light [ /MingLiU /ArialUnicodeMS-CNS ]
 
   % Simplified Chinese
-  /STSong-Light [ /SimSun ]
-  /STFangsong-Light [ /SimSun ]
-  /STHeiti-Regular [ /SimHei ]
-  /STKaiti-Regular [ /SimHei ]
+  /STSong-Light [ /SimSun /SimSun-18030 /ArialUnicodeMS-GB ]
+  /STFangsong-Light [ /FangSong /SimSun /ArialUnicodeMS-GB ]
+  /STHeiti-Regular [ /MicrosoftYaHei /SimHei /ArialUnicodeMS-GB ]
+  /STKaiti-Regular [ /KaiTi /SimHei /ArialUnicodeMS-GB ]
+  /AdobeHeitiStd-Regular [ /MicrosoftYaHei /SimHei /ArialUnicodeMS-GB ]
+  /AdobeSongStd-Light [ /SimSun /ArialUnicodeMS-GB ]
 
   % Japanese
-  /Ryumin-Light [ /MS-Mincho ]
-  /Ryumin-Medium [ /MS-Mincho ]
-  /GothicBBB-Medium [ /MS-Gothic ]
-  /HeiseiMin-W3 [ /MS-Mincho ]
-  /HeiseiKakuGo-W5 [ /MS-Gothic ]
+  /Ryumin-Light [ /MS-Mincho /ArialUnicodeMS-JP ]
+  /Ryumin-Medium [ /MS-Mincho /ArialUnicodeMS-JP ]
+  /GothicBBB-Medium [ /MS-Gothic /Meiryo /ArialUnicodeMS-JP ]
+  /HeiseiMin-W3 [ /MS-Mincho /ArialUnicodeMS-JP ]
+  /HeiseiKakuGo-W5 [ /MS-Gothic /Meiryo /ArialUnicodeMS-JP ]
+  /KozMinPr6N-Regular [ /MS-Mincho /ArialUnicodeMS-JP ]
 
   % Korean
-  /HYSMyeongJo-Medium [ /Batang ]
-  /HYRGoThic-Medium [ /Gulim ]
-  /HYGoThic-Medium [ /Dotum ]
+  % Malgun seems to have a full set of Hangu but not much of Kanji glyphs
+  /HYSMyeongJo-Medium [ /Batang /GulimChe /ArialUnicodeMS-KR /MalgunGothicRegular ]
+  /HYRGoThic-Medium [ /Gulim /GulimChe /ArialUnicodeMS-KR /MalgunGothicRegular ]
+  /HYGoThic-Medium [ /Dotum /GulimChe /ArialUnicodeMS-KR /MalgunGothicRegular ]
+  /AdobeMyungjoStd-Medium [ /Batang /GulimChe /ArialUnicodeMS-KR /MalgunGothicRegular ]
 >>
 def
 
 
 % This dictionary contains a list of CID substitutions
+%  Many ttc's have an older ttf version - be sure to put the ttf entries later.
 /cidsubs 
 <<
   % Simplified Chinese
@@ -105,6 +121,102 @@
    /CSI [(GB1) 2]
   >>
 
+  /SimSun-oldttf
+  <<
+   /FileType /TrueType
+   /Path (simsun.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /KaiTi
+  <<
+   /FileType /TrueType
+   /Path (simkai.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /LiSu
+  <<
+   /FileType /TrueType
+   /Path (simli.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /SimSun-18030
+  <<
+   /FileType /TrueType
+   /Path (simsun18030.ttc)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /NSimSun-18030
+  <<
+   /FileType /TrueType
+   /Path (simsun18030.ttc)
+   /SubfontID 1
+   /CSI [(GB1) 2]
+  >>
+
+  /YouYuan
+  <<
+   /FileType /TrueType
+   /Path (simyou.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /FangSong
+  <<
+   /FileType /TrueType
+   /Path (simfang.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /MicrosoftYaHei
+  <<
+   /FileType /TrueType
+   /Path (msyh.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /MicrosoftYaHeiBold
+  <<
+   /FileType /TrueType
+   /Path (msyhbd.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /MS-Song
+  <<
+   /FileType /TrueType
+   /Path (mssong.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /MS-Hei
+  <<
+   /FileType /TrueType
+   /Path (mshei.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
+  /ArialUnicodeMS-GB
+  <<
+   /FileType /TrueType
+   /Path (arialuni.ttf)
+   /SubfontID 0
+   /CSI [(GB1) 2]
+  >>
+
   % Traditional Chinese
   /MingLiU
   <<
@@ -122,6 +234,7 @@
    /CSI [(CNS1) 2]
   >>
 
+  % It probably should be ttf (ttc a typo), but we'll keep this entry just in case.
   /Arial-Unicode-MS
   <<
    /FileType /TrueType
@@ -130,6 +243,46 @@
    /CSI [(CNS1) 2]
   >>
 
+  /MicrosoftJhengHeiRegular
+  <<
+   /FileType /TrueType
+   /Path (msjh.ttf)
+   /SubfontID 0
+   /CSI [(CNS1) 2]
+  >>
+
+  /MicrosoftJhengHeiBold
+  <<
+   /FileType /TrueType
+   /Path (msjhbd.ttf)
+   /SubfontID 0
+   /CSI [(CNS1) 2]
+  >>
+
+  /MingLiU-oldttf
+  <<
+   /FileType /TrueType
+   /Path (mingliu.ttf)
+   /SubfontID 0
+   /CSI [(CNS1) 2]
+  >>
+
+  /DFKaiShu-SB-Estd-BF
+  <<
+   /FileType /TrueType
+   /Path (kaiu.ttf)
+   /SubfontID 0
+   /CSI [(CNS1) 2]
+  >>
+
+  /ArialUnicodeMS-CNS
+  <<
+    /FileType /TrueType
+    /Path (arialuni.ttf)
+    /SubfontID 0
+    /CSI [(CNS1) 2]
+  >>
+
   % Japanese
   /MS-Gothic
   <<
@@ -171,6 +324,63 @@
    /CSI [(Japan1) 3]
   >>
 
+  /MS-Mincho-oldttf
+  <<
+   /FileType /TrueType
+   /Path (msmincho.ttf)
+   /SubfontID 0
+   /CSI [(Japan1) 3]
+  >>
+
+  /MS-Gothic-oldttf
+  <<
+   /FileType /TrueType
+   /Path (msgothic.ttf)
+   /SubfontID 0
+   /CSI [(Japan1) 3]
+  >>
+
+  % Newer meiryo.ttc and meiryob.ttc have subfont 2,3. Leave those out for the time being
+  /Meiryo
+  <<
+   /FileType /TrueType
+   /Path (meiryo.ttc)
+   /SubfontID 0
+   /CSI [(Japan1) 3]
+  >>
+
+  /Meiryo-Italic
+  <<
+   /FileType /TrueType
+   /Path (meiryo.ttc)
+   /SubfontID 1
+   /CSI [(Japan1) 3]
+  >>
+
+  /Meiryo-Bold
+  <<
+   /FileType /TrueType
+   /Path (meiryob.ttc)
+   /SubfontID 0
+   /CSI [(Japan1) 3]
+  >>
+
+  /Meiryo-BoldItalic
+  <<
+   /FileType /TrueType
+   /Path (meiryob.ttc)
+   /SubfontID 1
+   /CSI [(Japan1) 3]
+  >>
+
+  /ArialUnicodeMS-JP
+  <<
+   /FileType /TrueType
+   /Path (arialuni.ttf)
+   /SubfontID 0
+   /CSI [(Japan1) 3]
+  >>
+
   % Korean
   /Batang
   <<
@@ -236,6 +446,37 @@
    /CSI [(Korea1) 3]
   >>
 
+  /MalgunGothicRegular
+  <<
+   /FileType /TrueType
+   /Path (malgun.ttf)
+   /SubfontID 0
+   /CSI [(Korea1) 3]
+  >>
+
+  /MalgunGothicBold
+  <<
+   /FileType /TrueType
+   /Path (malgunbd.ttf)
+   /SubfontID 0
+   /CSI [(Korea1) 3]
+  >>
+
+  /GulimChe-oldttf
+  <<
+   /FileType /TrueType
+   /Path (gulimche.ttf)
+   /SubfontID 0
+   /CSI [(Korea1) 3]
+  >>
+
+  /ArialUnicodeMS-KR
+  <<
+   /FileType /TrueType
+   /Path (arialuni.ttf)
+   /SubfontID 0
+   /CSI [(Korea1) 3]
+  >>
 >>
 def
 
@@ -253,11 +494,28 @@
   } loop
 } def
 
+% Convert string (font file name) to lowercase, take care not to touch
+% non-upper case letters. There are a few similiar routines elsewhere
+% for reference:
+%   /.ToLower in lib/pdf2dsc.ps
+%   /toupper in lib/printafm.ps
+%   /.lowerstring in Resource/Init/gs_fonts.ps
+/lowercase {
+  dup length 1 sub  -1 0 {
+      1 index exch 2 copy
+      get
+      dup dup 65 ge exch 90 le and {
+          2#00100000 or
+          } if
+      put
+      } for
+} def
 
 % Check if a font basename matches one of the possible cid substitutions.  
 % If it does, add the font and full path to the foundfonts dictionary
 /checkfont {
   dup basename
+  lowercase
   cidsubs
   {
     /Path get
@@ -286,7 +544,7 @@
 
 % Write out a cid substition, using the full font path
 % name is the font name, e.g. /MS-Mincho
-% path is the full path to the font file, e.g. (c:\windows\fonts\msmincho.ps)
+% path is the full path to the font file, e.g. (c:\windows\fonts\msmincho.ttc)
 % subs is the dictionary for CID font substition, from cidsubs
 /emitsubs { % name path subs -- 
   3 -1 roll cidfmap exch write==only % name
@@ -357,3 +615,99 @@
 
 
 FONTDIR writecidfmap
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% For what fonts ship with which microsoft product, see:
+% http://www.microsoft.com/typography/Fonts/product.aspx
+%
+% A reasonably clean Vista box comes with:
+%  ARIALUNI.TTF  meiryob.ttc   msjh.ttf      simhei.ttf
+%  batang.ttc    meiryo.ttc    msmincho.ttc  simkai.ttf
+%  gulim.ttc     mingliub.ttc  MSMINCHO.TTF  simsunb.ttf
+%  kaiu.ttf      mingliu.ttc   msyhbd.ttf    simsun.ttc
+%  malgunbd.ttf  msgothic.ttc  msyh.ttf
+%  malgun.ttf    msjhbd.ttf    simfang.ttf
+%
+% Here is a non-exhaustive list of CJK fonts found on various MS systems for reference:
+% File            Size         Version    Glyphs     Charmaps          Postscript Name                          Codepage
+% ======================================================================================================================
+% arialuni.ttf    24172892     0.86       51180      (1,0)(3,1)        ArialUnicodeMS
+% arialuni.ttf    23275812     1.01       50377      (3,1)             ArialUnicodeMS                           932,936,949,950
+% batang.ttc      16258580     2.21       39680      (3,1)             Batang/BatangChe/Gungsuh/GungsuhChe
+% batang.ttc      16265128     2.21       39680      (3,1)             Batang/BatangChe/Gungsuh/GungsuhChe
+% batang.ttc      16264732     5.00       39680      (3,1)             Batang/BatangChe/Gungsuh/GungsuhChe      949
+% gulimche.ttf    5512432      1.00       20792      (3,1)             GulimChe
+% gulim.ttc       13518660     2.21       40194      (3,1)             Gulim/GulimChe/Dotum/DotumChe
+% gulim.ttc       13525204     2.21       40194      (3,1)             Gulim/GulimChe/Dotum/DotumChe
+% gulim.ttc       13524720     5.00       40194      (3,1)             Gulim/GulimChe/Dotum/DotumChe            949
+% kaiu.ttf        4282984      2.00       18193      (1,0)(3,1)        DFKaiShu-SB-Estd-BF
+% kaiu.ttf        4279576      2.10       18193      (1,0)(3,1)        DFKaiShu-SB-Estd-BF
+% kaiu.ttf        5172084      3.00       22134      (1,0)(3,1)        DFKaiShu-SB-Estd-BF
+% kaiu.ttf        5178844      5.00       22134      (1,0)(3,1)        DFKaiShu-SB-Estd-BF                      950
+% malgun.ttf      4337480      0.85       12747      (0,3)(3,1)        MalgunGothicRegular
+% malgun.ttf      4337080      1.00       12747      (0,3)(3,1)        MalgunGothicRegular
+% malgun.ttf      4337104      5.00       12747      (0,3)(3,1)        MalgunGothicRegular
+% malgun.ttf      4337296      6.11       12747      (0,3)(3,1)        MalgunGothicRegular                      949
+% malgunbd.ttf    4514980      0.85       12740      (0,3)(3,1)        MalgunGothicBold
+% malgunbd.ttf    4513504      1.00       12740      (0,3)(3,1)        MalgunGothicBold
+% malgunbd.ttf    4513520      5.00       12740      (0,3)(3,1)        MalgunGothicBold
+% malgunbd.ttf    4515044      6.00       12740      (0,3)(3,1)        MalgunGothicBold
+% meiryo.ttc      7682568      0.97       20682      (0,3)(3,1)(3,10)  Meiryo/Meiryo-Italic                     932
+% meiryo.ttc      7815292      5.00       20684      (0,3)(3,1)(3,10)  Meiryo/Meiryo-Italic
+% meiryo.ttc      9533888      6.02       23942      (0,3)(3,1)(3,10)  Meiryo/Meiryo-Italic/MeiryoUI/MeiryoUI-Italic
+% meiryob.ttc     7924644      0.97       20682      (0,3)(3,1)(3,10)  Meiryo-Bold/Meiryo-BoldItalic
+% meiryob.ttc     8054096      5.00       20684      (0,3)(3,1)(3,10)  Meiryo-Bold/Meiryo-BoldItalic
+% meiryob.ttc     9749256      6.02       23942      (0,3)(3,1)(3,10)  Meiryo-Bold/Meiryo-BoldItalic/MeiryoUI-Bold/MeiryoUI-BoldItalic
+% mingliu.ttf     6272080      2.00       18362      (1,0)(3,1)        MingLiU
+% mingliu.ttc     8823308      3.21       22753      (1,0)(3,1)        MingLiU/PMingLiU
+% mingliu.ttc     8829856      3.21       22753      (1,0)(3,1)        MingLiU/PMingLiU
+% mingliu.ttc     27496184     6.02       33987      (3,1)             MingLiU/PMingLiU/Ming-Lt-HKSCS-UNI-H
+% mingliu.ttc     32217124     7.00       34046      (3,1)             MingLiU/PMingLiU/Ming-Lt-HKSCS-UNI-H     950
+% mingliub.ttc    33791880     5.00       44857      (3,1)(3,10)       MingLiU-ExtB/PMingLiU-ExtB/Ming-Lt-HKSCS-ExtB
+% mingliub.ttc    33805700     7.00       44875      (3,1)(3,10)       MingLiU-ExtB/PMingLiU-ExtB/Ming-Lt-HKSCS-ExtB
+% msgothic.ttf    4170144      2.00       13104      (1,0)(3,1)        MS-Gothic
+% msgothic.ttc    8272028      2.30       20458      (1,0)(3,1)        MS-Gothic/MS-PGothic/MS-UIGothic
+% msgothic.ttc    8278584      2.30       20458      (1,0)(3,1)        MS-Gothic/MS-PGothic/MS-UIGothic
+% msgothic.ttc    9165480      5.00       22213      (3,1)(3,10)       MS-Gothic/MS-PGothic/MS-UIGothic
+% msgothic.ttc    9176636      5.01       22213      (3,1)(3,10)       MS-Gothic/MS-PGothic/MS-UIGothic         932
+% mshei.ttf       1902464      1.00       26272      (1,0)(3,1)        MS Hei
+% mshei.ttf       1902556      1.00       26272      (1,0)(3,1)        MS Hei
+% msjh.ttf        14698792     0.71       28969      (0,3)(3,1)        MicrosoftJhengHeiRegular                 950
+% msjh.ttf        14713712     0.75       28969      (0,3)(3,1)        MicrosoftJhengHeiRegular
+% msjh.ttf        14713760     5.00       28969      (0,3)(3,1)        MicrosoftJhengHeiRegular
+% msjh.ttf        21663376     6.02       29220      (0,3)(3,1)        MicrosoftJhengHeiRegular
+% msjhbd.ttf      14498048     0.71       28961      (0,3)(3.1)        MicrosoftJhengHeiBold
+% msjhbd.ttf      14509708     0.75       28961      (0,3)(3.1)        MicrosoftJhengHeiBold
+% msjhbd.ttf      14509756     5.00       28961      (0,3)(3.1)        MicrosoftJhengHeiBold
+% msmincho.ttf    5151192      2.00       13104      (1,0)(3,1)        MS-Mincho
+% msmincho.ttc    9136456      2.30       17807      (1,0)(3,1)        MS-Mincho/MS-PMincho
+% msmincho.ttc    9135960      2.31       17807      (1,0)(3,1)        MS-Mincho/MS-PMincho
+% msmincho.ttc    9142516      2.31       17807      (1,0)(3,1)        MS-Mincho/MS-PMincho
+% msmincho.ttc    10056872     5.00       19321      (3,1)(3,10)       MS-Mincho/MS-PMincho
+% msmincho.ttc    10057108     5.01       19321      (3,1)(3,10)       MS-Mincho/MS-PMincho                     932
+% mssong.ttf      2569040      1.00       26304      (1,0)(3,1)        MS Song
+% mssong.ttf      2569116      1.00       26304      (1,0)(3,1)        MS Song
+% msyh.ttf        15067744     0.71       29207      (0,3)(3,1)(3,10)  MicrosoftYaHei
+% msyh.ttf        15043584     0.75       29126      (0,3)(3,1)(3,10)  MicrosoftYaHei
+% msyh.ttf        15044440     5.00       29126      (0,3)(3,1)(3,10)  MicrosoftYaHei
+% msyh.ttf        21767952     6.02       29354      (0,3)(3,1)        MicrosoftYaHei                           936
+% msyhbd.ttf      14707012     0.71       29240      (0,3)(3,1)(3,10)  MicrosoftYaHei
+% msyhbd.ttf      14685876     5.00       29126      (0,3)(3,1)(3,10)  MicrosoftYaHei
+% simfang.ttf     3996872      2.00       7580       (1,0)(3,1)        FangSong_GB2312
+% simfang.ttf     10576012     5.01       28562      (3,1)             FangSong                                 936
+% simhei.ttf      10044356     3.02       22021      (1,0)(3,1)        SimHei
+% simhei.ttf      10050868     3.02       22021      (1,0)(3,1)        SimHei
+% simhei.ttf      9751960      5.01       28562      (3,1)             SimHei                                   936
+% simkai.ttf      4135804      2.00       7580       (1,0)(3,1)        KaiTi_GB2312
+% simkai.ttf      11785184     5.01       28562      (3,1)             KaiTi                                    936
+% simli.ttf       9317908      3.00       21992      (1,0)(3,1)        LiSu
+% simsun.ttc      10500792     3.03       22141      (1,0)(3,1)        SimSun/NSimSun
+% simsun.ttc      10507340     3.03       22141      (1,0)(3,1)        SimSun/NSimSun
+% simsun.ttc      13747080     5.00       28762      (1,0)(3,1)        SimSun/NSimSun
+% simsun.ttc      15323200     5.03       28762      (1,0)(3,1)        SimSun/NSimSun                           936
+% simsun18030.ttc 12642204     2.06       30533      (1,0)(3,1)        SimSun-18030/NSimSun-18030
+% simsunb.ttf     15406216     0.90       42809      (1,0)(3,1)(3,10)  SimSun-ExtB
+% simsunb.ttf     15406288     5.00       42809      (1,0)(3,1)(3,10)  SimSun-ExtB
+% simyou.ttf      6794984      3.00       21991      (1,0)(3,1)        YouYuan
+% simyou.ttf      6788204      3.00       21991      (1,0)(3,1)        YouYuan


Property changes on: branches/gs_2_colors/psi/dmmain.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/smask_work/base/dmmain.c:9134-9665
/trunk/gs/psi/dmmain.c:10650-10813
   + /branches/smask_work/base/dmmain.c:9134-9665
/trunk/gs/psi/dmmain.c:10650-10885


Property changes on: branches/gs_2_colors/psi/dmmain.r
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/smask_work/base/dmmain.r:9134-9665
/trunk/gs/psi/dmmain.r:10650-10813
   + /branches/smask_work/base/dmmain.r:9134-9665
/trunk/gs/psi/dmmain.r:10650-10885


Property changes on: branches/gs_2_colors/psi/dxmain.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/gs/psi/dxmain.c:10650-10813
   + /trunk/gs/psi/dxmain.c:10650-10885


Property changes on: branches/gs_2_colors/psi/dxmainc.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/gs/psi/dxmainc.c:10650-10813
   + /trunk/gs/psi/dxmainc.c:10650-10885

Modified: branches/gs_2_colors/psi/fapi_ft.c
===================================================================
--- branches/gs_2_colors/psi/fapi_ft.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/psi/fapi_ft.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -199,7 +199,13 @@
 get_fapi_glyph_metrics(FT_Incremental a_info, FT_UInt a_glyph_index,
 	FT_Bool bVertical, FT_Incremental_MetricsRec *a_metrics)
 {
-    /* fixme : bVertical is not implemented. */
+    /* FreeType will create synthetic vertical metrics, including a vertical
+     * advance, if none is present. We don't want this, so if the font is a type 42
+     * and the WMode is not 1 (vertical) we ignore the advance by setting it to 0
+     */
+    if (bVertical && !a_info->fapi_font->is_type1 && !a_info->fapi_font->is_cid)
+	a_metrics->advance = 0;
+
     if (a_info->glyph_metrics_index == a_glyph_index)
     {
 	switch (a_info->metrics_type)
@@ -212,6 +218,8 @@
 		break;
 	    case FAPI_METRICS_REPLACE:
 		*a_metrics = a_info->glyph_metrics;
+		/* We are replacing the horizontal metrics, so the vertical must be 0 */
+		a_metrics->advance_v = 0;
 		break;
 	    default:
 		/* This can't happen. */
@@ -422,20 +430,51 @@
 static void
 transform_decompose(FT_Matrix *a_transform, FT_Fixed *a_x_scale, FT_Fixed *a_y_scale)
 {
-    float a = a_transform->xx / 65536.0;
-    float b = a_transform->xy / 65536.0;
-    float c = a_transform->yx / 65536.0;
-    float d = a_transform->yy / 65536.0;
-
-    float scale = sqrt(fabs(a * d - b * c));
-
-    a_transform->xx = a / scale * 65536.0;
-    a_transform->xy = b / scale * 65536.0;
-    a_transform->yx = c / scale * 65536.0;
-    a_transform->yy = d / scale * 65536.0;
-
-    *a_x_scale = scale * 65536.0;
-    *a_y_scale = scale * 65536.0;
+    double scalex, scaley, fact = 1.0;
+    FT_Matrix ftscale_mat;
+    
+    scalex = hypot ((double)a_transform->xx, (double)a_transform->xy) / 65536.0;
+    scaley = hypot ((double)a_transform->yx, (double)a_transform->yy) / 65536.0;
+    
+    /* FT clamps the width and height to a lower limit of 1.0 units
+     * (note: as FT stores it in 64ths of a unit, that is 64)
+     * So if either the width or the height are <1.0 here, we scale
+     * the width and height appropriately, and then compensate using
+     * the "final" matrix for FT
+     */
+    /* We use 1 1/64th to calculate the scale, so that we *guarantee* the
+     * scalex/y we calculate will be >64 after rounding.
+     */
+    if (scalex > scaley)
+    {
+        if (scaley < 1.0)
+	{
+	    fact = 1.016 / scaley;
+	    scaley = scaley * fact;
+	    scalex = scalex * fact;
+	}
+    }
+    else
+    {
+        if (scalex < 1.0)
+	{
+	    fact = 1.016 / scalex;
+	    scalex = scalex * fact;
+	    scaley = scaley * fact;
+	}
+    }
+    
+    ftscale_mat.xx = ((1.0 / scalex)) * 65536.0;
+    ftscale_mat.xy = 0;
+    ftscale_mat.yx = 0;
+    ftscale_mat.yy = ((1.0 / scaley)) * 65536.0;
+    
+    FT_Matrix_Multiply (a_transform, &ftscale_mat);
+    memcpy(a_transform, &ftscale_mat, sizeof(FT_Matrix));
+        
+    /* Return values ready scaled for FT */
+    *a_x_scale = scalex * 64;
+    *a_y_scale = scaley * 64;
 }
 
 /*
@@ -580,10 +619,9 @@
      */
     if (face)
     {
-	static const FT_Matrix ft_reflection = { 65536, 0, 0, -65536 };
 	FT_Matrix ft_transform;
 	FT_F26Dot6 width, height;
-
+	
 	/* Convert the GS transform into an FT transform.
 	 * Ignore the translation elements because they contain very large values
 	 * derived from the current transformation matrix and so are of no use.
@@ -597,10 +635,7 @@
 	 * transform.
 	 */
 	transform_decompose(&ft_transform, &width, &height);
-
-	/* Convert width and height to 64ths of pixels and set the FreeType sizes. */
-	width >>= 10;
-	height >>= 10;
+		
 	ft_error = FT_Set_Char_Size(face->ft_face, width, height,
 		a_font_scale->HWResolution[0] >> 16,
 		a_font_scale->HWResolution[1] >> 16);

Modified: branches/gs_2_colors/psi/int.mak
===================================================================
--- branches/gs_2_colors/psi/int.mak	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/psi/int.mak	2010-03-09 14:55:48 UTC (rev 10886)
@@ -1804,19 +1804,19 @@
 # FreeType bridge :
 
 # the top-level makefile should define
-# FT_CFLAGS for the include directive and other switches, and
-# FT_LIBS for the the library link command
+# FT_CFLAGS for the include directive and other switches
 
 wrfont_h=$(stdpre_h) $(PSSRC)wrfont.h
 write_t1_h=$(ifapi_h) $(PSSRC)write_t1.h
 write_t2_h=$(ifapi_h) $(PSSRC)write_t2.h
 
 $(PSD)fapif1.dev : $(INT_MAK) $(ECHOGS_XE) $(PSOBJ)fapi_ft.$(OBJ) \
- $(PSOBJ)write_t1.$(OBJ) $(PSOBJ)write_t2.$(OBJ) $(PSOBJ)wrfont.$(OBJ)
+ $(PSOBJ)write_t1.$(OBJ) $(PSOBJ)write_t2.$(OBJ) $(PSOBJ)wrfont.$(OBJ) \
+ $(GLD)freetype.dev
 	$(SETMOD) $(PSD)fapif1 $(PSOBJ)fapi_ft.$(OBJ) $(PSOBJ)write_t1.$(OBJ)
 	$(ADDMOD) $(PSD)fapif1 $(PSOBJ)write_t2.$(OBJ) $(PSOBJ)wrfont.$(OBJ)
 	$(ADDMOD) $(PSD)fapif1 -plugin fapi_ft
-	$(ADDMOD) $(PSD)fapif1 -link $(FT_LIBS)
+	$(ADDMOD) $(PSD)fapif1 -include $(GLD)freetype
 
 $(PSOBJ)fapi_ft.$(OBJ) : $(PSSRC)fapi_ft.c $(AK)\
  $(stdio__h) $(math__h) $(ifapi_h) $(gserror_h)\
@@ -1837,8 +1837,8 @@
 
 # stub for FreeType bridge :
 
-$(PSD)fapif.dev : $(INT_MAK) $(ECHOGS_XE)
-	$(SETMOD) $(PSD)fapif
+$(PSD)fapif0.dev : $(INT_MAK) $(ECHOGS_XE)
+	$(SETMOD) $(PSD)fapif0
 
 
 # ---------------- Custom color dummy callback ---------------- #

Modified: branches/gs_2_colors/psi/msvc32.mak
===================================================================
--- branches/gs_2_colors/psi/msvc32.mak	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/psi/msvc32.mak	2010-03-09 14:55:48 UTC (rev 10886)
@@ -1,4 +1,4 @@
-#  Copyright (C) 2001-2007 Artifex Software, Inc.
+#  Copyright (C) 2001-2010 Artifex Software, Inc.
 #  All Rights Reserved.
 #
 #  This software is provided AS-IS with no warranty, either express or
@@ -178,6 +178,16 @@
 MAKEDLL=1
 !endif
 
+# Define the directory where the FreeType2 library sources are stored.
+# See freetype.mak for more information.
+
+!ifndef FTSRCDIR
+FTSRCDIR=freetype
+!ifndef FT_CFLAGS
+FT_CFLAGS=-I$(FTSRCDIR)\include
+!endif
+!endif
+
 # Define the directory where the IJG JPEG library sources are stored,
 # and the major version of the library that is stored there.
 # You may need to change this if the IJG library version changes.


Property changes on: branches/gs_2_colors/psi/psromfs.mak
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/gs/psi/psromfs.mak:10650-10813
   + /trunk/gs/psi/psromfs.mak:10650-10885

Modified: branches/gs_2_colors/psi/zfapi.c
===================================================================
--- branches/gs_2_colors/psi/zfapi.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/psi/zfapi.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -577,7 +577,9 @@
 
     switch((int)var_id) {
         case FAPI_FONT_FEATURE_FontMatrix:
+#if 0
             {   double FontMatrix_div = (ff->is_cid && !IsCIDFont(pbfont) ? 1000 : 1);
+		
                 switch(index) {
                     case 0 : return pbfont->base->FontMatrix.xx / FontMatrix_div;
                     case 1 : return pbfont->base->FontMatrix.xy / FontMatrix_div;
@@ -587,6 +589,19 @@
                     case 5 : return pbfont->base->FontMatrix.ty / FontMatrix_div;
                 }
             } 
+#else
+            /* Temporary: replace with a FAPI call to check *if* the library needs a replacement matrix */
+	    {		
+                switch(index) {
+                    case 0 : return 1.0;
+                    case 1 : return 0.0;
+                    case 2 : return 0.0;
+                    case 3 : return 1.0;
+                    case 4 : return 0.0;
+                    case 5 : return 0.0;
+                }
+            } 
+#endif
         case FAPI_FONT_FEATURE_WeightVector: 
 	    {   ref *Array, value; 
 
@@ -1364,10 +1379,16 @@
 
 static void compute_em_scale(const gs_font_base *pbfont, FAPI_metrics *metrics, double FontMatrix_div, double *em_scale_x, double *em_scale_y)
 {   /* optimize : move this stuff to FAPI_refine_font */
+    gs_matrix mat;
     gs_matrix *m = &pbfont->base->orig_FontMatrix;
     int rounding_x, rounding_y; /* Striking out the 'float' representation error in FontMatrix. */
     double sx, sy;
-
+    
+    /* Temporary: replace with a FAPI call to check *if* the library needs a replacement matrix */
+    m = &mat;
+    memset(m, 0x00, sizeof(gs_matrix));
+    m->xx = m->yy = 1.0;
+    
     if (m->xx == 0 && m->xy == 0 && m->yx == 0 && m->yy == 0)
 	m = &pbfont->base->FontMatrix;
     sx = hypot(m->xx, m->xy) * metrics->em_x / FontMatrix_div;
@@ -1478,12 +1499,18 @@
 		    int dx = arith_rshift_slow((pgs->ctm.tx_fixed >> shift_rd) + rast_orig_x + rounding, frac_pixel_shift);
 		    int dy = arith_rshift_slow((pgs->ctm.ty_fixed >> shift_rd) + rast_orig_y + rounding, frac_pixel_shift);
 
-		    if (dx + rast.left_indent < 0 || dx + rast.left_indent + rast.black_width > dev1->width)
+		    if (dx + rast.left_indent < 0 || dx + rast.left_indent + rast.black_width > dev1->width) {
 			eprintf2("Warning : Cropping a FAPI glyph while caching : dx=%d,%d.\n", 
 				dx + rast.left_indent, dx + rast.left_indent + rast.black_width - dev1->width);
-		    if (dy + rast.top_indent < 0 || dy + rast.top_indent + rast.black_height > dev1->height)
+			if (dx + rast.left_indent < 0)
+			    dx -= dx + rast.left_indent;
+		    }
+		    if (dy + rast.top_indent < 0 || dy + rast.top_indent + rast.black_height > dev1->height) {
 			eprintf2("Warning : Cropping a FAPI glyph while caching : dx=%d,%d.\n", 
 				dy + rast.top_indent, dy + rast.top_indent + rast.black_height - dev1->height);
+			if (dy + rast.top_indent < 0)
+			    dy -= dy + rast.top_indent;
+		    }
 		    if ((code = fapi_copy_mono(dev1, &rast, dx, dy)) < 0)
 			return code;
 
@@ -1614,7 +1641,7 @@
 	I->face.HWResolution[1] != dev->HWResolution[1]
        ) {
 	FAPI_font_scale font_scale = {{1, 0, 0, 1, 0, 0}, {0, 0}, {1, 1}, true};
-        gs_matrix *base_font_matrix = &I->initial_FontMatrix;
+        gs_matrix imat, scale_mat, scale_ctm, *base_font_matrix;
         double dx, dy;
 
 	I->face.font_id = pbfont->id;
@@ -1628,6 +1655,32 @@
 	font_scale.subpixels[1] = 1 << log2_scale.y;
 	font_scale.align_to_pixels = align_to_pixels;
 
+#if 1
+	/* We apply the entire transform to the glyph (that is ctm x FontMatrix)
+	 * at render time.
+	 */
+	
+	memset(&scale_ctm, 0x00, sizeof(gs_matrix));
+	scale_ctm.xx = dev->HWResolution[0]/72;
+	scale_ctm.yy = dev->HWResolution[1]/72;
+
+	code = gs_matrix_invert((const gs_matrix *)&scale_ctm, &scale_ctm);
+	
+	code = gs_matrix_multiply(ctm, &scale_ctm, &scale_mat);		/* scale_mat ==  CTM - resolution scaling */
+        
+	font_scale.matrix[0] =  (FracInt)(scale_mat.xx * FontMatrix_div * scale + 0.5);
+	font_scale.matrix[1] =  -(FracInt)(scale_mat.xy * FontMatrix_div * scale + 0.5);
+        font_scale.matrix[2] =  (FracInt)(scale_mat.yx * FontMatrix_div * scale + 0.5);
+        font_scale.matrix[3] =  -(FracInt)(scale_mat.yy * FontMatrix_div * scale + 0.5);
+        font_scale.matrix[4] =  (FracInt)(scale_mat.tx * FontMatrix_div * scale + 0.5);
+        font_scale.matrix[5] =  (FracInt)(scale_mat.ty * FontMatrix_div * scale + 0.5);
+#else
+
+#  if 1
+	base_font_matrix = &I->initial_FontMatrix;
+#  else
+	base_font_matrix = &pbfont->base->orig_FontMatrix;
+#  endif
 	if (base_font_matrix->xx == 0 && base_font_matrix->xy == 0 &&
 	    base_font_matrix->yx == 0 && base_font_matrix->yy == 0)
 	    base_font_matrix = &pbfont->base->FontMatrix;
@@ -1643,13 +1696,14 @@
             for X and Y. It is not clear what to do when base_font_matrix is anisotropic
             (i.e. dx != dy), but we did not meet such fonts before now.
         */
-        font_scale.matrix[0] =  (FracInt)(ctm->xx * FontMatrix_div / dx * 72 / dev->HWResolution[0] * scale + 0.5);
-        font_scale.matrix[1] = -(FracInt)(ctm->xy * FontMatrix_div / dy * 72 / dev->HWResolution[0] * scale + 0.5);
+	font_scale.matrix[0] =  (FracInt)(ctm->xx * FontMatrix_div / dx * 72 / dev->HWResolution[0] * scale + 0.5);
+	font_scale.matrix[1] = -(FracInt)(ctm->xy * FontMatrix_div / dy * 72 / dev->HWResolution[0] * scale + 0.5);
         font_scale.matrix[2] =  (FracInt)(ctm->yx * FontMatrix_div / dx * 72 / dev->HWResolution[1] * scale + 0.5);
         font_scale.matrix[3] = -(FracInt)(ctm->yy * FontMatrix_div / dy * 72 / dev->HWResolution[1] * scale + 0.5);
         font_scale.matrix[4] =  (FracInt)(ctm->tx * FontMatrix_div / dx * 72 / dev->HWResolution[0] * scale + 0.5);
         font_scale.matrix[5] =  (FracInt)(ctm->ty * FontMatrix_div / dy * 72 / dev->HWResolution[1] * scale + 0.5);
-        /* Note: the ctm mapping here is upside down. */
+#endif
+	/* Note: the ctm mapping here is upside down. */
 	font_scale.HWResolution[0] = (FracInt)((double)dev->HWResolution[0] * font_scale.subpixels[0] * scale);
 	font_scale.HWResolution[1] = (FracInt)((double)dev->HWResolution[1] * font_scale.subpixels[1] * scale);
 

Modified: branches/gs_2_colors/toolbin/bmpcmp.c
===================================================================
--- branches/gs_2_colors/toolbin/bmpcmp.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/bmpcmp.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -7,6 +7,10 @@
 #include <string.h>
 #include <ctype.h>
 
+#ifdef HAVE_LIBPNG
+#include <png.h>
+#endif
+
 #define MINX (300)
 #define MINY (320)
 #define MAXX (600)
@@ -30,7 +34,7 @@
     
     block = malloc(size);
     if (block == NULL) {
-        fprintf(stderr, "Failed to malloc %u bytes\n", (unsigned int) size);
+        fprintf(stderr, "Failed to malloc %u bytes\n", (unsigned int)size);
         exit(EXIT_FAILURE);
     }
     return block;
@@ -136,9 +140,11 @@
     }
   }
 
+  if (src_bpp == 24)
+      src_bpp = 32;
   dst_bpp = src_bpp;
-  if ((src_bpp < 8) || (src_bpp == 24))
-      src_bpp = 32;
+  if (dst_bpp <= 8)
+      dst_bpp = 32;
 
   /* Read the palette */
   if (src_bpp <= 8) {
@@ -157,7 +163,7 @@
   }
 
   byte_width  = (width+7)>>3;
-  word_width  = width * (src_bpp>>3);
+  word_width  = width * ((dst_bpp+7)>>3);
   word_width += 3;
   word_width &= ~3;
 
@@ -264,7 +270,7 @@
   *span       = word_width;
   *width_ret  = width;
   *height_ret = height;
-  *bpp        = src_bpp;
+  *bpp        = dst_bpp;
 
   return dst - word_width*height;
 }
@@ -300,6 +306,45 @@
     return data;
 }
 
+static int get_uncommented_char(FILE *file)
+{
+    int c;
+    
+    do
+    {
+        c = fgetc(file);
+        if (c != '#')
+            return c;
+        do {
+            c = fgetc(file);
+        } while ((c != EOF) && (c != '\n') && (c != '\r'));
+    }
+    while (c != EOF);
+
+    return EOF;
+}
+
+static int get_pnm_num(FILE *file)
+{
+    int c;
+    int val = 0;
+    
+    /* Skip over any whitespace */
+    do {
+        c = get_uncommented_char(file);
+    } while (isspace(c));
+    
+    /* Read the number */
+    while (isdigit(c))
+    {
+        val = val*10 + c - '0';
+        c = get_uncommented_char(file);
+    }
+    
+    /* assume the last c is whitespace */
+    return val;
+}
+
 static void pbm_read(FILE          *file,
                      int            width,
                      int            height,
@@ -309,6 +354,8 @@
     int w;
     int byte, mask, g;
     
+    bmp += width*(height-1)<<2;
+    
     for (; height>0; height--) {
         mask = 0;
         for (w=width; w>0; w--) {
@@ -320,12 +367,14 @@
             g = byte & mask;
             if (g != 0)
                 g = 255;
+            g=255-g;
             mask >>= 1;
             *bmp++ = g;
             *bmp++ = g;
             *bmp++ = g;
             *bmp++ = 0;
         }
+        bmp -= width<<3;
     }
 }
 
@@ -337,6 +386,8 @@
 {
     int w;
     
+    bmp += width*(height-1)<<2;
+    
     if (maxval == 255)
     {
         for (; height>0; height--) {
@@ -347,6 +398,7 @@
                 *bmp++ = g;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     } else if (maxval < 255) {
         for (; height>0; height--) {
@@ -357,6 +409,7 @@
                 *bmp++ = g;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     } else {
         for (; height>0; height--) {
@@ -367,6 +420,7 @@
                 *bmp++ = g;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     }
 }
@@ -377,76 +431,156 @@
                      int            maxval,
                      unsigned char *bmp)
 {
+    int r,g,b;
     int w;
+
+    bmp += width*(height-1)<<2;
     
     if (maxval == 255)
     {
         for (; height>0; height--) {
             for (w=width; w>0; w--) {
-                *bmp++ = fgetc(file);
-                *bmp++ = fgetc(file);
-                *bmp++ = fgetc(file);
+                r = fgetc(file);
+                g = fgetc(file);
+                b = fgetc(file);
+                *bmp++ = b;
+                *bmp++ = g;
+                *bmp++ = r;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     } else if (maxval < 255) {
         for (; height>0; height--) {
             for (w=width; w>0; w--) {
-                *bmp++ = fgetc(file)*255/maxval;
-                *bmp++ = fgetc(file)*255/maxval;
-                *bmp++ = fgetc(file)*255/maxval;
+                r = fgetc(file)*255/maxval;
+                g = fgetc(file)*255/maxval;
+                b = fgetc(file)*255/maxval;
+                *bmp++ = b;
+                *bmp++ = g;
+                *bmp++ = r;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     } else {
         for (; height>0; height--) {
             for (w=width; w>0; w--) {
-                *bmp++ = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
-                *bmp++ = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
-                *bmp++ = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
+                r = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
+                g = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
+                b = ((fgetc(file)<<8) + (fgetc(file)))*255/maxval;
+                *bmp++ = b;
+                *bmp++ = g;
+                *bmp++ = r;
                 *bmp++ = 0;
             }
+            bmp -= width<<3;
         }
     }
 }
 
-static int get_uncommented_char(FILE *file)
+static void pbm_read_plain(FILE          *file,
+                           int            width,
+                           int            height,
+                           int            maxval,
+                           unsigned char *bmp)
 {
-    int c;
+    int w;
+    int g;
     
-    do
+    bmp += width*(height-1)<<2;
+    
+    for (; height>0; height--) {
+        for (w=width; w>0; w--) {
+            g = get_pnm_num(file);
+            if (g != 0)
+                g = 255;
+            *bmp++ = g;
+            *bmp++ = g;
+            *bmp++ = g;
+            *bmp++ = 0;
+        }
+        bmp -= width<<3;
+    }
+}
+
+static void pgm_read_plain(FILE          *file,
+                           int            width,
+                           int            height,
+                           int            maxval,
+                           unsigned char *bmp)
+{
+    int w;
+    
+    bmp += width*(height-1)<<2;
+    
+    if (maxval == 255)
     {
-        c = fgetc(file);
-        if (c != '#')
-            return c;
-        do {
-            c = fgetc(file);
-        } while ((c != EOF) && (c != '\n') && (c != '\r'));
+        for (; height>0; height--) {
+            for (w=width; w>0; w--) {
+                int g = get_pnm_num(file);
+                *bmp++ = g;
+                *bmp++ = g;
+                *bmp++ = g;
+                *bmp++ = 0;
+            }
+            bmp -= width<<3;
+        }
+    } else {
+        for (; height>0; height--) {
+            for (w=width; w>0; w--) {
+                int g = get_pnm_num(file)*255/maxval;
+                *bmp++ = g;
+                *bmp++ = g;
+                *bmp++ = g;
+                *bmp++ = 0;
+            }
+            bmp -= width<<3;
+        }
     }
-    while (c != EOF);
-
-    return EOF;
 }
 
-static int get_pnm_num(FILE *file)
+static void ppm_read_plain(FILE          *file,
+                           int            width,
+                           int            height,
+                           int            maxval,
+                           unsigned char *bmp)
 {
-    int c;
-    int val = 0;
+    int r,g,b;
+    int w;
     
-    /* Skip over any whitespace */
-    do {
-        c = get_uncommented_char(file);
-    } while (isspace(c));
+    bmp += width*(height-1)<<2;
     
-    /* Read the number */
-    while (isdigit(c))
+    if (maxval == 255)
     {
-        val = val*10 + c - '0';
-        c = get_uncommented_char(file);
+        for (; height>0; height--) {
+            for (w=width; w>0; w--) {
+                r = get_pnm_num(file);
+                g = get_pnm_num(file);
+                b = get_pnm_num(file);
+                *bmp++ = b;
+                *bmp++ = g;
+                *bmp++ = r;
+                *bmp++ = 0;
+            }
+            bmp -= width<<3;
+        }
     }
-    
-    /* assume the last c is whitespace */
-    return val;
+    else
+    {
+        for (; height>0; height--) {
+            for (w=width; w>0; w--) {
+                r = get_pnm_num(file)*255/maxval;
+                g = get_pnm_num(file)*255/maxval;
+                b = get_pnm_num(file)*255/maxval;
+                *bmp++ = b;
+                *bmp++ = g;
+                *bmp++ = r;
+                *bmp++ = 0;
+            }
+            bmp -= width<<3;
+        }
+    }
 }
 
 static void *pnm_read(ImageReader *im,
@@ -469,17 +603,14 @@
     switch (get_pnm_num(im->file))
     {
         case 1:
-            /* Plain PBM - we don't support that */
-            fprintf(stderr, "Plain PBM unsupported!\n");
-            return NULL;
+            read = pbm_read_plain;
+            break;
         case 2:
-            /* Plain PGM - we don't support that */
-            fprintf(stderr, "Plain PGM unsupported!\n");
-            return NULL;
+            read = pgm_read_plain;
+            break;
         case 3:
-            /* Plain PPM - we don't support that */
-            fprintf(stderr, "Plain PPM unsupported!\n");
-            return NULL;
+            read = ppm_read_plain;
+            break;
         case 4:
             read = pbm_read;
             break;
@@ -876,12 +1007,12 @@
                      int            bpp,
                      char          *str)
 {
-    FILE *file;
-    char  bmp[14+40];
-    int   word_width;
-    int   src_bypp;
-    int   width, height;
-    int   x, y;
+    FILE          *file;
+    unsigned char  bmp[14+40];
+    int            word_width;
+    int            src_bypp;
+    int            width, height;
+    int            x, y;
 
     file = fopen(str, "wb");
     if (file == NULL)
@@ -943,6 +1074,82 @@
     fclose(file);
 }
 
+#ifdef HAVE_LIBPNG
+static void save_png(unsigned char *data,
+                     BBox          *bbox,
+                     int            span,
+                     int            bpp,
+                     char          *str)
+{
+    FILE *file;
+    png_structp png;
+    png_infop   info;
+    png_bytep   *rows;
+    int   word_width;
+    int   src_bypp;
+    int   bpc;
+    int   width, height;
+    int   y;
+    
+    file = fopen(str, "wb");
+    if (file == NULL)
+        return;
+
+    png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+    if (png == NULL) {
+        fclose(file);
+        return;
+    }
+    info = png_create_info_struct(png);
+    if (info == NULL)
+        /* info being set to NULL above makes this safe */
+        goto png_cleanup;
+    
+    /* libpng using longjmp() for error 'callback' */
+    if (setjmp(png_jmpbuf(png)))
+        goto png_cleanup;
+    
+    /* hook the png writer up to our FILE pointer */
+    png_init_io(png, file);
+    
+    /* fill out the image header */
+    width  = bbox->xmax - bbox->xmin;
+    height = bbox->ymax - bbox->ymin;
+    bpc = 8; /* FIXME */
+    png_set_IHDR(png, info, width, height, bpc, PNG_COLOR_TYPE_RGB,
+                 PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
+                 PNG_FILTER_TYPE_DEFAULT);
+
+    /* fill out pointers to each row */
+    /* we use bmp coordinates where the zero-th row is at the bottom */
+    src_bypp = (bpp == 16 ? 2 : 4);
+    if (bpp == 16)
+        word_width = width*2;
+    else
+        word_width = width*3;
+    word_width += 3;
+    word_width &= ~3;
+    rows = malloc(sizeof(*rows)*height);
+    if (rows == NULL)
+        goto png_cleanup;
+    for (y = 0; y < height; y++)
+      rows[height - y - 1] = &data[(y + bbox->ymin)*span + bbox->xmin * src_bypp - 1];
+    png_set_rows(png, info, rows);
+    
+    /* write out the image */
+    png_write_png(png, info,
+        PNG_TRANSFORM_STRIP_FILLER_BEFORE| 
+        PNG_TRANSFORM_BGR, NULL);
+
+    free(rows);
+
+png_cleanup:
+    png_destroy_write_struct(&png, &info);
+    fclose(file);
+    return;
+}
+#endif /* HAVE_LIBPNG */
+
 int main(int argc, char *argv[])
 {
     int            w,  h,  s,  bpp;
@@ -1102,10 +1309,17 @@
                 rediff(bmp, bmp2, s, bpp, boxlist);
                 if (!BBox_valid(boxlist))
                     continue;
+#ifdef HAVE_LIBPNG
+                sprintf(str1, "%s.%05d.png", argv[3], n);
+                sprintf(str2, "%s.%05d.png", argv[3], n+1);
+                save_png(bmp,  boxlist, s, bpp, str1);
+                save_png(bmp2, boxlist, s, bpp, str2);
+#else
                 sprintf(str1, "%s.%05d.bmp", argv[3], n);
                 sprintf(str2, "%s.%05d.bmp", argv[3], n+1);
                 save_bmp(bmp,  boxlist, s, bpp, str1);
                 save_bmp(bmp2, boxlist, s, bpp, str2);
+#endif
                 sprintf(str4, "%s.%05d.meta", argv[3], n);
                 save_meta(boxlist, str4, w, h, imagecount);
                 n += 3;
@@ -1121,8 +1335,13 @@
                 boxlist++;
                 if (!BBox_valid(boxlist))
                     continue;
+#ifdef HAVE_LIBPNG
+                sprintf(str3, "%s.%05d.png", argv[3], n+2);
+                save_png(bmp, boxlist, s, bpp, str3);
+#else
                 sprintf(str3, "%s.%05d.bmp", argv[3], n+2);
                 save_bmp(bmp, boxlist, s, bpp, str3);
+#endif
                 n += 3;
             }
         }

Modified: branches/gs_2_colors/toolbin/bugsByEngineer.pl
===================================================================
--- branches/gs_2_colors/toolbin/bugsByEngineer.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/bugsByEngineer.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -82,7 +82,10 @@
 my @a;
 my %bugList;
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&field0-0-0=Customer\\&type0-0-0=greaterthan\\&value0-0-0=0`;
+#$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&field0-0-0=Customer\\&type0-0-0=greaterthan\\&value0-0-0=0`;
+#$a=`lynx -nolist -width 1024 -dump "http://bugs.ghostscript.com/buglist.cgi?emailassigned_to1=1;query_format=advanced;field0-0-0=cf_customer;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;email1=$engineer;type0-0-0=greaterthan;value0-0-0=0;emailtype1=substring"`;
+$a=`lynx -nolist -width 1024 -dump "http://bugs.ghostscript.com/buglist.cgi?emailassigned_to1=1&query_format=advanced&field0-0-0=cf_customer&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=$engineer&type0-0-0=greaterthan&value0-0-0=0&emailtype1=substring"`;
+#print "$a\n";  exit;
 @a=split '\n',$a;
 foreach (@a) {
   chomp;
@@ -91,7 +94,8 @@
   }
 }
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=enhancement\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&field0-0-0=Customer\\&type0-0-0=greaterthan\\&value0-0-0=0`;
+#$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=enhancement\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&field0-0-0=Customer\\&type0-0-0=greaterthan\\&value0-0-0=0`;
+$a=`lynx -nolist -width 1024 -dump "http://bugs.ghostscript.com/buglist.cgi?emailassigned_to1=1;query_format=advanced;field0-0-0=cf_customer;bug_severity=enhancement;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;email1=$engineer;type0-0-0=greaterthan;value0-0-0=0;emailtype1=substring"`;
 @a=split '\n',$a;
 foreach (@a) {
   chomp;
@@ -101,22 +105,14 @@
 }
 
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=CLOSED\\&resolution=LATER\\&resolution=REMIND\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&field0-0-0=Customer\\&type0-0-0=greaterthan\\&value0-0-0=0`;
- at a=split '\n',$a;
-foreach (@a) {
-  chomp;
-  if (m/(\d\d\d\d\d\d) ... P. /) {
-#   $bugList{$1}="Customer";
-  }
-}
-
-foreach my $i (keys %bugList) {
-# print "$i\n";
-}
+#foreach my $i (sort keys %bugList) {
+#  print "$i\n";
+#}
 #exit;
 
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=Regression%3A\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now`;
+#$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=Regression%3A\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now`;
+$a=`lynx -nolist -width 1024 -dump "http://bugs.ghostscript.com/buglist.cgi?emailassigned_to1=1;query_format=advanced;short_desc=Regression%3A;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;short_desc_type=allwordssubstr;email1=$engineer;emailtype1=substring"`;
 @a=split '\n',$a;
 foreach (@a) {
   chomp;
@@ -125,17 +121,9 @@
   }
 }
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=Regression%3A\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=CLOSED\\&resolution=LATER\\&resolution=REMIND\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now`;
- at a=split '\n',$a;
-foreach (@a) {
-  chomp;
-  if (m/(\d\d\d\d\d\d) ... P. /) {
-#   $bugList{$1}="Regression" if (!exists $bugList{$1});
-  }
-}
 
-
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&priority=P1`;
+#$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=UNCONFIRMED\\&bug_status=NEW\\&bug_status=ASSIGNED\\&bug_status=REOPENED\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&priority=P1`;
+$a=`lynx -nolist -width 1024 -dump "http://bugs.ghostscript.com/buglist.cgi?priority=P1;emailassigned_to1=1;query_format=advanced;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;email1=$engineer;emailtype1=substring"`;
 @a=split '\n',$a;
 foreach (@a) {
   chomp;
@@ -144,14 +132,7 @@
   }
 }
 
-$a=`lynx -nolist -width 1024 -dump http://bugs.ghostscript.com/buglist.cgi?short_desc_type=allwordssubstr\\&short_desc=\\&long_desc_type=allwordssubstr\\&long_desc=\\&keywords_type=allwords\\&bug_status=CLOSED\\&resolution=LATER\\&resolution=REMIND\\&bug_severity=blocker\\&bug_severity=critical\\&bug_severity=major\\&bug_severity=normal\\&bug_severity=minor\\&bug_severity=trivial\\&emailassigned_to1=1\\&emailtype1=substring\\&email1=$engineer\\&emailassigned_to2=1\\&bugidtype=include\\&chfieldto=Now\\&priority=P1`;
- at a=split '\n',$a;
-foreach (@a) {
-  chomp;
-  if (m/(\d\d\d\d\d\d) ... P. /) {
-#   $bugList{$1}="P1" if (!exists $bugList{$1});
-  }
-}
+#print Dumper(\%bugList);  exit;
 
 
 
@@ -173,32 +154,39 @@
     my @b=split '\n',$b;
     foreach (@b) {
       chomp;
-      if (m/Opened: (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/) {
+      if (m/Reported: (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/) {
         $opened=$1;
         $commentedUpon=$opened if ($entered eq $assigned);
       }
-      $modified=$1 if (m/Additional Comment .+ (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/);
+      $modified=$1 if (m/Modified: (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/);
       $entered=$1 if (m/Reporter: \S+ \((.+)\)$/);
-      $assigned=$1 if (m/Assigned To: \S+ \((.+)\)$/);
-      $comment=$1 if (m/Additional Comment #\d+ From (.+?) 20/);
-      $commentedUpon=$modified if ($comment eq $assigned);
+      $assigned=$1 if (m/Assigned To: (.+)$/);
+      if (m/Comment \d+ (.+?) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/) {
+        $comment=$1;
+        $commentedUpon=$2 if ($comment eq $assigned);
+      }
     }
 
+#print "$bugNumber\n$opened\n$modified\n$dateAssigned\n$customerNumber\n$entered\n$assigned\n$comment\n$commentedUpon\n";  exit;
 
+
     if ($bugList{$bugNumber} eq "Customer" || $bugList{$bugNumber} eq "Enhancement") {
       my $url="http://bugs.ghostscript.com/show_bug.cgi?id=$bugNumber";
       $b=get $url;
   
-      $customerNumber=$1 if ($b =~ m/"Customer"\s.+?value="(.+?)"/s);
-#print "$bugNumber $customerNumber\n";
+#     $customerNumber=$1 if ($b =~ m/"Customer"\s.+?value="(.+?)"/s);
+      $customerNumber=$1 if ($b =~ m/"field_container_cf_customer"\s.+?>(.+?)</s);
+
+#     id="field_container_cf_customer"  colspan="2">870</td>
+#     print "$b  $bugNumber $customerNumber\n";  exit;
     } else {
       $customerNumber=$bugList{$bugNumber};
     }
 
     $b=`lynx -nolist -width 1025 -dump http://bugs.ghostscript.com/show_activity.cgi?id=$bugNumber`;
-    $dateAssigned=$1 if ($b =~ m/.*(\d\d\d\d-\d\d-\d\d \d\d:\d\d):\d\d AssignedTo/s);
-
-#   print "$opened\t$modified\t$dateAssigned\t$customerNumber\n";
+    $dateAssigned=$1 if ($b =~ m/.*(\d\d\d\d-\d\d-\d\d \d\d:\d\d):\d\d .+ Assignee/s);
+#print "$b\n";
+#print "$opened\t$modified\t$dateAssigned\t$customerNumber\n";
     $dateAssigned=$opened if ($dateAssigned eq "0000-00-00 00:00");  # bugs that are automatically assigned when they are entered don't show AssignedTo on the activity page
     $modified    =$opened if ($modified     eq "0000-00-00 00:00");
 
@@ -234,6 +222,7 @@
 
 
   printReport("Alex");
+  printReport("Chris");
   printReport("Henry");
   printReport("Ken");
   printReport("Marcos");
@@ -241,8 +230,8 @@
   printReport("Michael");
   printReport("Ralph");
   printReport("Ray");
+  printReport("Robin");
   printReport("Tor");
-  printReport("robin");
   printReport("htl");
   printReport("larsu");
   printReport("support");

Copied: branches/gs_2_colors/toolbin/localcluster/bmps2html.pl (from rev 10885, trunk/gs/toolbin/localcluster/bmps2html.pl)
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/bmps2html.pl	                        (rev 0)
+++ branches/gs_2_colors/toolbin/localcluster/bmps2html.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -0,0 +1,450 @@
+#!/usr/bin/perl
+
+# #include <disclaimer.h>
+# If you speak perl, and are offended by the code herein, I apologise.
+# Please feel free to tidy it up.
+
+# Syntax: bmps2html <inputdir> <outputdir>
+
+########################################################################
+# SETUP SECTION
+
+# The path to the executables.
+$convertexe= "convert"; # ImageMagick
+
+# Set the following to the maximum number (approx) of bitmap sets that
+# should be put into a single HTML file.
+$maxsets = 100;
+
+# Set the following to true to convert bmps to pngs (useful to save space
+# if you want to show people this across the web).
+$pngize = 1;
+
+# Set the following to true if you want to use parallel dispatch of jobs
+$parallel = 0;
+
+# If set, use iframes rather than copying the content of the frames into
+# the top html file.
+$iframes = 0;
+
+# END SETUP SECTION
+########################################################################
+
+########################################################################
+# EXTERNAL USES
+use Errno qw(EAGAIN);
+
+########################################################################
+
+########################################################################
+# FUNCTIONS
+
+sub getfilename {
+    my ($num) = @_;
+    my $filename = "compare";
+    
+    if ($num != 0)
+    {
+        $filename .= $num;
+    }
+    $filename .= ".html";
+    return $filename;
+}
+
+sub openiframe {
+    $framedir = sprintf("%05d",$framenum);
+    $outdir   = $baseoutdir."/".$framedir;
+
+    if ($iframes)
+    {
+        print $html "<IFRAME src=\"".$framedir."/frame.html\" WIDTH=\"100%\" FRAMEBORDER=\"0\" id=\"iframe".$framedir."\" scrolling=\"off\"></IFRAME><BR>";
+    }
+
+    mkdir $outdir;
+    open($iframe, ">", $outdir."/frame.html");
+        
+    print $iframe "<HTML><HEAD><TITLE>Bitmap Comparison</TITLE>";
+    print $iframe "$javascript</HEAD><BODY onLoad=\"parent.document.getElementById('iframe".$framedir."').style.height=document.getElementById('content').offsetHeight;parent.document.getElementById('iframe".$framedir."').style.width=document.getElementById('content').offsetWidth;\">";
+    print $iframe "<DIV id=\"content\">";
+}
+
+sub closeiframe {
+    if ($iframes)
+    {
+        print $iframe "</DIV></BODY>";
+        close $iframe;
+    }
+    $framenum++;
+}
+
+sub openhtml {
+    $setsthisfile = 0;
+    open($html, ">", $baseoutdir."/".getfilename($filenum));
+
+    $javascript  = "<SCRIPT LANGUAGE=\"JavaScript\">";
+    $javascript .= "function swap(n){";
+    $javascript .=   "var n0 = '00000'+3*Math.floor(n/3));"
+    $javascript .=   "n0=n0.substring(n0.length-5,n0.length);"
+    $javascript .=   "var n1 = '00000'+3*Math.floor(n/3)+1);"
+    $javascript .=   "n1=n1.substring(n1.length-5,n1.length);"
+    $javascript .=   "var x = document.images['compare'+n0].src;";
+    $javascript .=   "document.images['compare'+n0].src=document.images['compare'+n1].src;";
+    $javascript .=   "document.images['compare'+n1].src = x;";
+    $javascript .= "}";
+    $javascript .= "var undef;";
+    $javascript .= "function findPosX(obj){";
+    $javascript .=   "var curLeft = 0;";
+    $javascript .=   "if (obj.offsetParent){";
+    $javascript .=     "while(1) {";
+    $javascript .=       "curLeft += obj.offsetLeft;";
+    $javascript .=       "if (!obj.offsetParent)";
+    $javascript .=         "break;";
+    $javascript .=       "obj = obj.offsetParent;";
+    $javascript .=     "}";
+    $javascript .=   "} else if (obj.x)";
+    $javascript .=     "curLeft += obj.x;";
+    $javascript .=   "return curLeft;";
+    $javascript .= "}";
+    $javascript .= "function findPosY(obj){";
+    $javascript .=   "var curTop = 0;";
+    $javascript .=   "if (obj.offsetParent){";
+    $javascript .=     "while(1) {";
+    $javascript .=       "curTop += obj.offsetTop;";
+    $javascript .=       "if (!obj.offsetParent)";
+    $javascript .=         "break;";
+    $javascript .=       "obj = obj.offsetParent;";
+    $javascript .=     "}";
+    $javascript .=   "} else if (obj.x)";
+    $javascript .=     "curTop += obj.x;";
+    $javascript .=   "return curTop;";
+    $javascript .= "}";
+    $javascript .= "function coord(event,obj,n,x,y){";
+    $javascript .=   "if (event.offsetX == undef) {";
+    $javascript .=     "x += event.pageX-findPosX(obj)-1;";
+    $javascript .=     "y += event.pageY-findPosY(obj)-1;";
+    $javascript .=   "} else {";
+    $javascript .=     "x += event.offsetX;";
+    $javascript .=     "y += event.offsetY;";
+    $javascript .=   "}";
+    $javascript .=   "document['Coord'+n].X.value = x;";
+    $javascript .=   "document['Coord'+n].Y.value = y;";
+    $javascript .= "}</SCRIPT>";
+    print $html "<HTML><HEAD><TITLE>Bitmap Comparison</TITLE>";
+    print $html "$javascript</HEAD><BODY>\n";
+    
+    if ($filenum > 0) {
+        print $html "<P>";
+        if ($num > 1)
+        {
+            print $html "<A href=\"".getfilename(0)."\">First</A>&nbsp;&nbsp;";
+        }
+        print $html "<A href=\"".getfilename($filenum-1)."\">Previous(".($filenum-1).")</A>";
+        print $html "</P>\n";
+    }
+    $filenum++;
+}
+
+sub closehtml {
+    print $html "</BODY>";
+    close $html;
+}
+
+sub nexthtml {
+    print $html "<P><A href=\"".getfilename($filenum)."\">Next(".$filenum.")</A>";
+    closehtml();
+    openhtml();
+}
+
+sub dprint {
+    my ($f1, $f2, $str) = @_;
+    
+    if (!$iframes) {
+        print $f1 $str;
+    }
+    print $f2 $str;
+}
+
+sub runjobs {
+    my ($cmd, $cmd2, $html, $html2, $pre1, $pre2, $post) = @_;
+    my $ret, $ret2, $pid;
+    
+    if ($parallel) {
+        FORK: {
+            if ($pid = fork) {
+                $ret  = system($cmd);
+                waitpid($pid, 0);
+                $ret2 = $?;
+            } elsif (defined $pid) {
+                exec($cmd2);
+            } elsif ($! == EAGAIN) {
+                sleep 5;
+                redo FORK;
+            } else {
+                die "Can't fork!: $!\n";
+            }
+        }
+    } else {
+        $ret  = system($cmd);
+        $ret2 = system($cmd2);
+    }
+        
+    if ($ret != 0)
+    {
+        print $pre1." ".$post." failed with exit code ".$ret."\n";
+        print "Command was: ".$cmd."\n";
+        dprint($html,$html2,"<P>".$pre1." ".$post." failed with exit code ");
+        dprint($html,$html2,$ret."<br>Command was: ".$cmd."</P>\n");
+        next;
+    }
+    if ($ret2 != 0)
+    {
+        print $pre2." ".$post." failed with exit code ".$ret2."\n";
+        print "Command was: ".$cmd2."\n";
+        dprint($html,$html2,"<P>Ref bitmap generation failed with exit code ");
+        dprint($html,$html2,$ret2."<br>Command was: ".$cmd2."</P>\n");
+        next;
+    }
+    
+    return (($ret | $ret2) != 0);
+}
+
+sub runjobs3 {
+    my ($cmd, $cmd2, $cmd3, $html, $html2) = @_;
+    my $ret, $ret2, $ret3, $pid;
+
+#print STDERR "runjobs3: $cmd $cmd2 $cmd3\n";
+    
+    if ($parallel) {
+        FORK: {
+            if ($pid = fork) {
+                $ret  = system($cmd);
+                waitpid($pid, 0);
+                $ret2 = $?;
+            } elsif (defined $pid) {
+                FORK2 : {
+                    if ($pid = fork) {
+                        $ret2 = system($cmd2);
+                        waitpid($pid, 0);
+                        $ret3 = $?;
+                        if ($ret2 = 0) {
+                            $ret2 = $ret3;
+                        }
+                        exit($ret2);
+                    } elsif (defined $pid) {
+                        exec($cmd3);
+                    } elsif ($! == EAGAIN) {
+                        sleep 5;
+                        redo FORK2;
+                    } else {
+                        die "Can't fork!: $!\n";
+                    }
+                }
+            } elsif ($! == EAGAIN) {
+                sleep 5;
+                redo FORK;
+            } else {
+                die "Can't fork!: $!\n";
+            }
+        }
+    } else {
+        $ret  = system($cmd);
+        $ret2 = system($cmd2);
+        $ret3 = system($cmd3);
+    }
+        
+    if ($ret != 0)
+    {
+        print "Bitmap conversion failed with exit code ".$ret."\n";
+        print "Command was: ".$cmd."\n";
+        dprint($html,$html2,"<P>Bitmap conversion failed with exit code ");
+        dprint($html,$html2,$ret."<br>Command was: ".$cmd."</P>\n");
+        next;
+    }
+    if ($ret2 != 0)
+    {
+        print "Bitmap conversion failed with exit code ".$ret2."\n";
+        print "Command was: ".$cmd2." or ".$cmd3."\n";
+        dprint($html,$html2,"<P>Bitmap conversion failed with exit code ");
+        dprint($html,$html2,$ret2."<br>Command was: ".$cmd2." or ".$cmd3."</P>\n");
+        next;
+    }
+}
+
+# END FUNCTIONS
+########################################################################
+
+########################################################################
+# Here follows todays lesson. Abandon hope all who enter here. Etc. Etc.
+$indir    = $ARGV[0];
+shift @ARGV;
+$baseoutdir = $ARGV[0];
+shift @ARGV;
+$filenum  = 0;
+$framenum = 0;
+
+# Create the output dir/html file
+mkdir $baseoutdir;
+openhtml();
+
+# Open the index
+open(INDEX, "ls $indir/*.meta.gz| sed s/\.\[0-9]\*\.meta.gz// | sort -u |");
+
+# Now run through the list of files
+while (<INDEX>)
+{
+    chomp;
+
+    # Keep everything after the last
+    ($path,$_) = $_ =~ m/(.*)\/([^\/]+)/;
+
+    # Put the filename into infile
+    $infile = $_;
+    ($res,$band) = $_ =~ m/.*\.(\d+)\.(\d+)/;
+    $file = $infile;
+    $file =~ s/__/\//g;
+    
+    # Start a new file if required
+    if ($setsthisfile >= $maxsets)
+    {
+        nexthtml();
+    }
+    
+    # Open the iframe
+    openiframe();
+
+    # Output the title
+    dprint($html,$iframe,"<H1>".$framenum.": ".$file." (".$res."dpi)</H1></BR>\n");
+    print "Processing: $framenum: $file ($res)";
+
+    # Add the files to the HTML, converting to PNG if required.
+    my $imageCount = 1;
+    $images=sprintf "%05d",$imageCount;
+    my $image0=sprintf "%05d",$imageCount+0;
+    my $image1=sprintf "%05d",$imageCount+1;
+    my $image2=sprintf "%05d",$imageCount+2;
+#print STDERR "$indir/$infile.$images.bmp.gz\n";
+    while (stat("$indir/$infile.$images.bmp.gz"))
+    {
+	print ".";
+        if ($pngize)
+        {
+            $cmd   = "zcat ".$indir."/".$infile.".".$images.".bmp.gz| ";
+            $cmd  .= $convertexe." - ";
+            $cmd  .= $outdir."/out.".$images.".png";
+            $cmd2  = "zcat ".$indir."/".$infile.".".($image1).".bmp.gz| ";
+            $cmd2 .= $convertexe." - ";
+            $cmd2 .= $outdir."/out.".($image1).".png";
+            $cmd3  = "zcat ".$indir."/".$infile.".".($image2).".bmp.gz| ";
+            $cmd3 .= $convertexe." - ";
+            $cmd3 .= $outdir."/out.".($image2).".png";
+            runjobs3($cmd, $cmd2, $cmd3, $html, $iframe, "convert");
+            #unlink $outdir."/out.".$images.".bmp";
+            #unlink $outdir."/out.".($image1).".bmp";
+            #unlink $outdir."/out.".($image2).".bmp";
+            $suffix = ".png";
+        }
+        else
+        {
+            # Uncompress
+            $cmd   = "zcat $indir/$infile.$images.bmp.gz > ";
+            $cmd  .= "$outdir/out.$images.bmp";
+            $cmd2  = "zcat $indir/$infile.".($image1).".bmp.gz> ";
+            $cmd2 .= "$outdir/out.".($image1).".bmp";
+            $cmd3  = "zcat $indir/$infile.".($image2).".bmp.gz> ";
+            $cmd3 .= "$outdir/out.".($image2).".bmp";
+            runjobs3($cmd, $cmd2, $cmd3, $html, $iframe, "convert");
+            $suffix = ".bmp";
+        }
+            
+        $metafile = "$indir/$infile.$images.meta.gz";
+        $meta{"X"}    = 0;
+        $meta{"Y"}    = 0;
+        $meta{"PW"}   = 0;
+        $meta{"PH"}   = 0;
+        $meta{"W"}    = 0;
+        $meta{"H"}    = 0;
+        $meta{"PAGE"} = 0;
+        if (stat($metafile))
+        {
+            open(METADATA, "zcat $metafile |");
+            while (<METADATA>) {
+                chomp;
+                s/#.*//;
+                s/^\s+//;
+                s/\s+$//;
+                next unless length;
+                my ($var,$value) = split(/\s*=\s*/, $_, 2);
+                $meta{$var}=$value;
+            }
+            close METADATA;
+        }
+            
+        $page = $meta{"PAGE"};
+        $mousemove = "onmousemove=\"coord(event,this,'$images',".$meta{"X"}.",".$meta{"Y"}.")\"";
+            
+        print $iframe "<TABLE><TR><TD><IMG SRC=\"out.$images$suffix\" onMouseOver=\"swap($images)\" onMouseOut=\"swap(".($image1).")\" NAME=\"compare$images\" BORDER=1 TITLE=\"Candidate<->Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+        print $iframe "<TD><IMG SRC=\"out.".($image1)."$suffix\" NAME=\"compare".($image1)."\" BORDER=1 TITLE=\"Reference: $file page=$page res=$res\" $mousemove.></TD>\n";
+        print $iframe "<TD><IMG SRC=\"out.".($image2)."$suffix\" BORDER=1 TITLE=\"Diff: $file page=$page res=$res\" $mousemove></TD></TR>\n";
+        print $iframe "<TR><TD COLSPAN=3><FORM name=\"Coord$images\"><LABEL for=\"X\">Page=$page PageSize=".$meta{"PW"}."x".$meta{"PH"}." Res=$res TopLeft=(".$meta{"X"}.",".$meta{"Y"}.") W=".$meta{"W"}." H=".$meta{"H"}." </LABEL><INPUT type=\"text\" name=\"X\" value=0 size=3>X<INPUT type=\"text\" name=\"Y\" value=0 size=3>Y</FORM></TD></TR></TABLE><BR>\n";
+
+        if (!$iframes) {
+            print $html "<TABLE><TR><TD><IMG SRC=\"$framedir/out.$images$suffix\" onMouseOver=\"swap($images)\" onMouseOut=\"swap(".($image1).")\" NAME=\"compare$images\" BORDER=1 TITLE=\"Candidate<->Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+            print $html "<TD><IMG SRC=\"$framedir/out.".($image1)."$suffix\" NAME=\"compare".($image1)."\" BORDER=1 TITLE=\"Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+            print $html "<TD><IMG SRC=\"$framedir/out.".($image2)."$suffix\" BORDER=1 TITLE=\"Diff: $file page=$page res=$res\" $mousemove></TD></TR>\n";
+            print $html "<TR><TD COLSPAN=3><FORM name=\"Coord$images\"><LABEL for=\"X\">Page=$page PageSize=".$meta{"PW"}."x".$meta{"PH"}." Res=$res TopLeft=(".$meta{"X"}.",".$meta{"Y"}.") W=".$meta{"W"}." H=".$meta{"H"}." </LABEL><INPUT type=\"text\" name=\"X\" value=0 size=3>X<INPUT type=\"text\" name=\"Y\" value=0 size=3>Y</FORM></TD></TR></TABLE><BR>\n";
+	}
+        $imageCount += 3;
+        $images=sprintf "%05d",$imageCount;
+        $image0=sprintf "%05d",$imageCount+0;
+        $image1=sprintf "%05d",$imageCount+1;
+        $image2=sprintf "%05d",$imageCount+1;
+        $diffs++;
+        $setsthisfile++;
+    }
+    print "\n";
+    
+    closeiframe();
+}
+
+close INDEX;
+
+# List the errored files. If no stdout files this prints and error, but seems
+# to continue.
+open(INDEX, "ls $indir/*.stdout.gz | sort -u |");
+
+# Now run through the list of files
+print $html "<H1>Files that produced errors</H1></BR><DL>\n";
+while (<INDEX>)
+{
+    chomp;
+
+    # Keep everything between the last / and .stdout.gz
+    ($path,$_) = $_ =~ m/(.*)\/([^\/]+).stdout.gz/;
+
+    # Put the filename into infile
+    $infile = $_;
+    ($res,$band) = $_ =~ m/.*\.(\d+)\.(\d+)/;
+    $file = $infile;
+    $file =~ s/__/\//g;
+
+    $framedir = sprintf("%05d",$framenum);
+    $outdir   = $baseoutdir."/".$framedir;
+    mkdir $outdir;
+
+    # Uncompress stdout/stderr - FIXME: Maybe should rewrite to html?
+    $cmd   = "zcat $indir/$infile.stdout.gz > $outdir/stdout.txt";
+    $cmd2  = "zcat $indir/$infile.stderr.gz > $outdir/stderr.txt";
+    runjobs($cmd, $cmd2, $html, $undef, "stdout", "stderr", "decompression");
+
+    # Output HTML fragment
+    print $html "<DT>$framenum: $file ($res dpi)</DT>\n";
+    print $html "<DD><A href=\"$framedir/stdout.txt\">stdout</A>\n";
+    print $html "<A href=\"$framedir/stderr.txt\">stderr</A></DT>\n";
+    $framenum++;
+}
+print $html "</DL>";
+
+close INDEX;
+
+# Finish off the HTML file
+closehtml();

Modified: branches/gs_2_colors/toolbin/localcluster/build.pl
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/build.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/localcluster/build.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -20,6 +20,8 @@
 my $lowres=0;
 my $highres=0;
 my %products;
+my $bmpcmp=0;
+my $filename="";
 
 my $t;
 
@@ -31,6 +33,10 @@
     $lowres=1;
   } elsif ($t eq "highres") {
     $highres=1;
+  } elsif ($t eq "bmpcmp") {
+    $bmpcmp=1;
+    $filename=shift;
+    $filename.=".txt";
   } else {
     $products{$t}=1;
     die "usage: build.pl [gs] [pcl] [xps] [svg] [mupdf]" if (!exists $allowedProducts{$t});
@@ -266,6 +272,9 @@
 }
 }
 
+
+if (!$bmpcmp) {
+
 foreach my $testSource (sort keys %testSource) {
   if (scalar keys %products==0 || exists $products{$testSource{$testSource}} || ($testSource{$testSource} eq 'gs' && exists $products{'mupdf'})) {
 #print "$testSource\n";
@@ -295,14 +304,16 @@
     }
   }
 }
+}
 
 #print Dumper(\%testfiles); exit;
 
-sub build($$$$) {
+sub build($$$$$) {
   my $product=shift;  # gs|pcl|xps|svg
   my $inputFilename=shift;
   my $options=shift;
   my $md5sumOnly=shift;
+  my $bmpcmp=shift;
 
   if ($md5sumOnly) {
     $niceCommand = 'nice';
@@ -311,7 +322,9 @@
   }
 
   my $cmd="";
-  my $cmd1="";
+  my $cmd1a="";
+  my $cmd1b="";
+  my $cmd1c="";
   my $cmd2a="";
   my $cmd2b="";
   my $cmd2c="";
@@ -338,7 +351,7 @@
   # $cmd .= " touch $logFilename ; rm -f $logFilename ";
 
   $cmd  .= " true ";
-  $cmd  .= "; touch $md5Filename" if (!$updateBaseline);
+  $cmd  .= "; touch $md5Filename" if (!$updateBaseline && !$bmpcmp);
 
 
   if ($a[0] eq 'pdf') {
@@ -346,35 +359,42 @@
 
     $outputFilename="$temp/$tempname.$options.pdf";
     if ($product eq 'gs') {
-      $cmd1.="$niceCommand $gsBin";
+      $cmd1a.="$niceCommand $gsBin";
     } elsif ($product eq 'pcl') {
-      $cmd1.="$niceCommand $pclBin";
+      $cmd1a.="$niceCommand $pclBin";
     } elsif ($product eq 'xps') {
-      $cmd1.="$niceCommand $xpsBin";
+      $cmd1a.="$niceCommand $xpsBin";
     } elsif ($product eq 'svg') {
-      $cmd1.="$niceCommand $svgBin";
+      $cmd1a.="$niceCommand $svgBin";
     } else {
       die "unexpected product: $product";
     }
-    $cmd1.=" -sOutputFile=$outputFilename";
-    $cmd1.=" -sDEVICE=pdfwrite";
-    $cmd1.=" -r".$a[2];
+    $cmd1b.=" -sOutputFile=$outputFilename";
+    $cmd1c.=" -sDEVICE=pdfwrite";
+    $cmd1c.=" -r".$a[2];
     #   $cmd1.=" -q" if ($product eq 'gs');
-    $cmd1.=" -sDEFAULTPAPERSIZE=letter" if ($product eq 'gs');
-    $cmd1.=" -dNOPAUSE -dBATCH";  # -Z:
-#   $cmd1.=" -dNOOUTERSAVE -dJOBSERVER -c false 0 startjob pop -f" if ($product eq 'gs');
-    $cmd1.=" -dJOBSERVER" if ($product eq 'gs');
+    $cmd1c.=" -sDEFAULTPAPERSIZE=letter" if ($product eq 'gs');
+    $cmd1c.=" -dNOPAUSE -dBATCH";  # -Z:
+#   $cmd1c.=" -dNOOUTERSAVE -dJOBSERVER -c false 0 startjob pop -f" if ($product eq 'gs');
+    $cmd1c.=" -dJOBSERVER" if ($product eq 'gs');
 
-    $cmd1.=" %rom%Resource/Init/gs_cet.ps" if ($filename =~ m/.PS$/ && $product eq 'gs');
+    $cmd1c.=" %rom%Resource/Init/gs_cet.ps" if ($filename =~ m/.PS$/ && $product eq 'gs');
 #   $cmd1.=" -dFirstPage=1 -dLastPage=1" if ($filename =~ m/.pdf$/i || $filename =~ m/.ai$/i);
 
-    $cmd1.=" - < " if (!($filename =~ m/.pdf$/i || $filename =~ m/.ai$/i) && $product eq 'gs');
+    $cmd1c.=" - < " if (!($filename =~ m/.pdf$/i || $filename =~ m/.ai$/i) && $product eq 'gs');
 
-    $cmd1.=" $inputFilename";
+    $cmd1c.=" $inputFilename";
     #   $cmd.=" 2>&1";
 
-    $cmd.=" ; echo \"$cmd1\" >>$logFilename ";
-    $cmd.=" ; $timeCommand $cmd1 >>$logFilename 2>&1";
+    if ($bmpcmp) {
+      $cmd.=" ; $timeCommand $cmd1a $cmd1b $cmd1c >>$logFilename 2>&1";
+      $cmd1a =~ s|/gs/|/head/|;
+      $cmd1b =~ s|$temp|$baselineRaster|;
+      $cmd.=" ; $timeCommand $cmd1a $cmd1b $cmd1c >>$logFilename 2>&1";
+    } else {
+      $cmd.=" ; echo \"$cmd1a $cmd1b $cmd1c\" >>$logFilename ";
+      $cmd.=" ; $timeCommand $cmd1a $cmd1b $cmd1c >>$logFilename 2>&1";
+    }
 
     $cmd.=" ; echo '---' >>$logFilename";
 
@@ -411,18 +431,28 @@
 
     $cmd2c.=" $inputFilename";
 
-    $cmd.=" ; echo \"$cmd2a $cmd2b $cmd2c\" >>$logFilename ";
-    $cmd.=" ; $timeCommand $cmd2a $cmd2b $cmd2c >>$logFilename 2>&1";
+    if ($bmpcmp) {
+      $cmd.=" ; $timeCommand $cmd2a -sOutputFile='|gzip -1 -n >$outputFilename.gz' $cmd2c >>$logFilename 2>&1";
+      $cmd2a =~ s|/gs/|/head/|;
+      $cmd2c =~ s|$temp|$baselineRaster|;
+      $cmd.=" ; $timeCommand $cmd2a -sOutputFile='|gzip -1 -n >$baselineFilename.gz' $cmd2c >>$logFilename 2>&1";
+      $cmd.=" ; bash -c \"./bmpcmp <(gunzip -c $outputFilename.gz) <(gunzip -c $baselineFilename.gz) $bmpcmpFilename 1 1000\""; # ; gzip $bmpcmpFilename.* ";
+      $cmd.=" ; scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $bmpcmpFilename.* regression\@casper3.ghostscript.com:/home/regression/cluster/bmpcmp/.";
+#     $cmd.=" ; scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $logFilename regression\@casper3.ghostscript.com:/home/regression/cluster/bmpcmp/.";
+    } else {
+      $cmd.=" ; echo \"$cmd2a $cmd2b $cmd2c\" >>$logFilename ";
+      $cmd.=" ; $timeCommand $cmd2a $cmd2b $cmd2c >>$logFilename 2>&1";
+   }
 
     if ($rerunIfMd5sumDifferences && exists $md5sum{$filename2} && !exists $skip{$filename2}) {
-      $cmd.=" ; sleep 1 ; grep -q -E \"".$md5sum{$filename2}."\" $md5Filename; a=\$? ;  if [ \"\$a\" -eq \"1\" -a -e raster.yes ]; then $cmd2a -sOutputFile='|gzip -1 -n >$rasterFilename.gz' $cmd2c >>/dev/null 2>&1; bash -c \"./bmpcmp <(gunzip -c $rasterFilename.gz) <(gunzip -c $baselineFilename.gz) $bmpcmpFilename 1 10\" ; gzip $bmpcmpFilename.* ; fi";
+      $cmd.=" ; sleep 1 ; grep -q -E \"".$md5sum{$filename2}."\" $md5Filename; a=\$? ;  if [ \"\$a\" -eq \"1\" -a -e raster.yes ]; then $cmd2a -sOutputFile='|gzip -1 -n >$rasterFilename.gz' $cmd2c >>/dev/null 2>&1; bash -c \"./bmpcmp <(gunzip -c $rasterFilename.gz) <(gunzip -c $baselineFilename.gz) $bmpcmpFilename 1 1000\" ; gzip $bmpcmpFilename.* ; fi";
     }
 
     #   $cmd.=" ; gzip -f $inputFilename >>$logFilename 2>&1";
     $outputFilenames.="$inputFilename ";
 
   } else {
-    $cmd .= " ; echo \"$product\" >>$logFilename ";
+    $cmd .= " ; echo \"$product\" >>$logFilename " if (!$bmpcmp);
 
     $outputFilename="$temp/$tempname.$options";
     $baselineFilename="$baselineRaster/$tempname.$options";
@@ -473,8 +503,17 @@
 
     $cmd2c.=" $inputFilename ";
 
-    $cmd.=" ; echo \"$cmd2a $cmd2b $cmd2c\" >>$logFilename ";
-    $cmd.=" ; $timeCommand $cmd2a $cmd2b $cmd2c >>$logFilename 2>&1";
+    if ($bmpcmp) {
+      $cmd.=" ; $timeCommand $cmd2a -sOutputFile='|gzip -1 -n >$outputFilename.gz' $cmd2c >>$logFilename 2>&1";
+      $cmd2a =~ s|/gs/|/head/|;
+      $cmd.=" ; $timeCommand $cmd2a -sOutputFile='|gzip -1 -n >$baselineFilename.gz' $cmd2c >>$logFilename 2>&1";
+      $cmd.=" ; bash -c \"./bmpcmp <(gunzip -c $outputFilename.gz) <(gunzip -c $baselineFilename.gz) $bmpcmpFilename 1 10\""; # ; gzip $bmpcmpFilename.* ";
+      $cmd.=" ; scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $bmpcmpFilename.* regression\@casper3.ghostscript.com:/home/regression/cluster/bmpcmp/.";
+#     $cmd.=" ; scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $logFilename regression\@casper3.ghostscript.com:/home/regression/cluster/bmpcmp/.";
+    } else {
+      $cmd.=" ; echo \"$cmd2a $cmd2b $cmd2c\" >>$logFilename ";
+      $cmd.=" ; $timeCommand $cmd2a $cmd2b $cmd2c >>$logFilename 2>&1";
+   }
 
     if ($rerunIfMd5sumDifferences && exists $md5sum{$filename2} && !exists $skip{$filename2}) {
       $cmd.=" ; sleep 1 ; grep -q -E \"".$md5sum{$filename2}."\" $md5Filename; a=\$? ;  if [ \"\$a\" -eq \"1\" -a -e raster.yes ]; then $cmd2a -sOutputFile='|gzip -1 -n >$rasterFilename.gz' $cmd2c >>/dev/null 2>&1; bash -c \"./bmpcmp <(gunzip -c $rasterFilename.gz) <(gunzip -c $baselineFilename.gz) $bmpcmpFilename 1 10\" ; gzip $bmpcmpFilename.* ; fi";
@@ -516,6 +555,29 @@
 my @slowOutputFilenames;
 my @slowFilenames;
 
+if ($bmpcmp) {
+  open (F,"$filename") || die "file $filename not found";
+  my $done=0;
+  while(<F>) {
+    chomp;
+    my $cmd="";
+    my $outputFilenames="";
+    my $filename="";
+    if (m/^(.+)\.(pdf\.p.mraw\.\d+\.[01]) (\S+) pdfwrite /) {
+#       print "$1 $2 $3 -- pdfwrite\n";
+      ($cmd,$outputFilenames,$filename)=build($3,$1,$2,1,1) if (!$done);
+print "$filename\t$cmd\n" if (!$done);
+    } elsif (m/^(.+)\.(p.mraw\.\d+\.[01]) (\S+)/) {
+#      print "$1 $2 $3\n";
+      ($cmd,$outputFilenames,$filename)=build($3,$1,$2,1,1) if (!$done);
+print "$filename\t$cmd\n" if (!$done);
+    } elsif (m/errors:$/ || m/previous clusterpush/i) {
+      $done=1;
+    }
+    
+  }
+  close(F);
+} else {
 foreach my $testfile (sort keys %testfiles) {
   foreach my $test (@{$tests{$testfiles{$testfile}}}) {
     if (($lowres==1  && ($test =~ m/\.72\./ || $test =~ m/\.75\./)) ||
@@ -525,7 +587,7 @@
     my $cmd="";
     my $outputFilenames="";
     my $filename="";
-    ($cmd,$outputFilenames,$filename)=build($testfiles{$testfile},$testfile,$test,1);
+    ($cmd,$outputFilenames,$filename)=build($testfiles{$testfile},$testfile,$test,1,0);
     if (exists $quickFiles{$filename}) {
       push @commands,$cmd;
       push @outputFilenames,$outputFilenames;
@@ -538,6 +600,7 @@
     }
   }
 }
+}
 
 while (scalar(@slowCommands) || scalar(@commands)) {
   if (scalar(@slowCommands)) {

Modified: branches/gs_2_colors/toolbin/localcluster/clustermaster.pl
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/clustermaster.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/localcluster/clustermaster.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -439,13 +439,18 @@
   'pcl' => 2,
   'pxl' => 2,
   'urwfonts' => 2,
-  'pl' => 15,
-  'main' => 15,
-  'common' => 15,
+  'pl' => 14,
+  'main' => 2,
+  'common' => 14,
   'gs/psi' => 1,
   'gs/base' => 15,
-  'gs/Resource' => 15
-  );
+  'gs/Resource' => 15,
+  'gs/doc' => 0,
+# 'gs/toolbin' => 0,
+  'gs/examples' => 0,
+  'language_switch' => 0,
+  'tools' => 0
+);
 
 #my $currentRev1=`svn info ghostpdl | grep "Last Changed Rev" | awk '{ print \$4} '`;
 #my $currentRev2=`svn info ghostpdl/gs | grep "Last Changed Rev" | awk '{ print \$4} '`;
@@ -471,6 +476,7 @@
 my $normalRegression=0;
 my $icc_workRegression=0;
 my $userRegression="";
+my $bmpcmp=0;
 my $mupdfRegression=0;
 my $updateBaseline=0;
 my $userName="";
@@ -511,11 +517,11 @@
           mylog "$s: $rules{$t}\n";
           $set|=$rules{$t};
         } else {
-#         mylog "$s: missing, testing all\n";
-#         $set=15;
+          mylog "$s: missing, testing all\n";
+          $set=15;
         }
       } else {
-#       $set=15;
+        $set=15;
       }
     }
   }
@@ -581,7 +587,7 @@
   }
 
   if ($icc_workRegression) {
-    open(F,">revision.gs");
+    open(F,">icc_workRevision.gs");
     print F "local cluster regression icc_work-r$rev (xefitra)\n";
     close(F);
   }
@@ -613,7 +619,12 @@
     delete $machines{$_} if (stat("$_.down"));
   }
 
-  mylog Dumper(\%machines) if ($verbose);
+# mylog Dumper(\%machines) if ($verbose);
+  if ($verbose) {
+    foreach (sort keys %machines) {
+      mylog("  $_\n");
+    }
+  }
 
   my $startTime;
   my %doneTime;
@@ -625,10 +636,10 @@
 
     mylog "running with ".(scalar keys %machines)." machines\n" if ($verbose);
 
-    if (scalar keys %machines==0) {
+    if (scalar keys %machines<=2) {
       sleep 600;
       unlink $runningSemaphore;
-      die "There aren't any cluster machines available"
+      die "There aren't enough cluster machines available"
     }
 
     checkPID();
@@ -637,6 +648,8 @@
       my @a=split ' ',$userRegression,2;
       $userName=$a[0];
       $product=$a[1];
+      $bmpcmp=1 if ($product eq "bmpcmp");
+      $product="bmpcmp $userName" if ($bmpcmp);
       mylog "userName=$userName product=$product\n" if ($verbose);
       my $t=`date +\"%D %H:%M:%S\"`;
       chomp $t;
@@ -654,6 +667,28 @@
       exit;
     }
 
+if ($bmpcmp) {
+`head -1000 jobs >jobs.tmp ; mv jobs.tmp jobs`;
+        my $gs="";
+        my $pcl="";
+        my $xps="";
+        my $gsBin="gs/bin/gs";
+        my $pclBin="gs/bin/pcl6";
+        my $xpsBin="gs/bin/gxps";
+        if (open(F2,"<jobs")) {
+          while (<F2>) {
+            chomp;
+            $gs="gs " if (m/$gsBin/);
+            $pcl="pcl " if (m/$pclBin/);
+            $xps="xps " if (m/$xpsBin/);
+          }
+          close(F2);
+          $product=$gs.$pcl.$xps;
+        }
+mylog "done checking jobs, product=$product\n";
+        `touch bmpcmp.tmp ; rm -fr bmpcmp.tmp ; mv bmpcmp bmpcmp.tmp ; mkdir bmpcmp ; rm -fr bmpcmp.tmp &`;
+}
+
     checkPID();
     foreach (keys %machines) {
       mylog "unlinking $_.done\n" if ($verbose);
@@ -682,6 +717,8 @@
         print F "mupdf\t$rev\t$product";
       } elsif ($updateBaseline) {
         print F "svn\thead\t$product";
+      } elsif ($bmpcmp) {
+        print F "user\t$userName\t$product\n";
       } else {
         print F "user\t$userName\t$product\n";
       }
@@ -708,8 +745,13 @@
     %doneTime=();
     $abort=0;
     $startTime=time;
-    mylog Dumper(\%machines) if ($verbose);
     mylog "".(scalar(keys %doneTime))." ".(scalar (keys %machines))."\n" if ($verbose);
+#   mylog Dumper(\%machines) if ($verbose);
+    if ($verbose) {
+      foreach (sort keys %machines) {
+        mylog("  $_\n");
+      }
+    }
 
     use IO::Socket;
     use Net::hostent;
@@ -788,7 +830,9 @@
               mylog "setting tempDone to 1\n";
             }
           }
-          $jobsPerRequest=50 if (scalar(@jobs)<2000);
+          $jobsPerRequest=250;
+          $jobsPerRequest= 50 if (scalar(@jobs)<2000);
+          $jobsPerRequest= 10 if ($bmpcmp);
           for (my $i=0;  $i<$jobsPerRequest && scalar(@jobs);  $i++) {
             my $a=shift @jobs;
             print $client $a;
@@ -950,11 +994,15 @@
       $logs.=" $_.log $_.out";
       $tabs.=" $_.tab";
     } else {
-      mylog "ERROR: log or out missing for $_\n";
+      if ($failOccured) {
+        mylog "Warning: $_.log or $_.out missing (ignoring because failOccured is true)\n";
+      } else {
+        mylog "ERROR: $_.log or $_.out missing\n";
 my $a=`ls -ls *log* *out*`;
 mylog "ls:\n$a";
-      unlink $runningSemaphore;
-      exit;
+        unlink $runningSemaphore;
+        exit;
+      }
     }
   }
 
@@ -962,7 +1010,7 @@
   $userName="email" if ($normalRegression);
   $userName="email" if ($icc_workRegression);
 
-  {
+  if (!$bmpcmp) {
     my @t=split '\n',$footer;
     open(F,">$userName.txt");
     foreach (@t) {
@@ -1036,6 +1084,7 @@
       `cp -p icc_work_current.tab archive/icc_work-$rev.tab`;
     } elsif ($mupdfRegression) {
     } elsif ($updateBaseline) {
+    } elsif ($bmpcmp) {
     } else {
       my @a=split ' ',$product;
       my $filter="cat current.tab";
@@ -1052,11 +1101,20 @@
       `rm $tabs`;
 
       checkPID();
-mylog "now running ./compare.pl temp.tab current.tab $elapsedTime $machineCount true \"$product\"\n";
+
+      mylog "now running ./compare.pl temp.tab current.tab $elapsedTime $machineCount true \"$product\"\n";
       `./compare.pl temp.tab current.tab $elapsedTime $machineCount true \"$product\" >>$userName.txt`;
+
+      open(F,">>$userName.txt");
+      print F "\n\nDifferences from previous clusterpush:\n\n";
+      close(F);
+      mylog "now running ./compare.pl temp.tab $usersDir/$userName/temp.tab $elapsedTime $machineCount true \"$product\"\n";
+      `./compare.pl temp.tab $usersDir/$userName/temp.tab 0 1 true \"$product\" >>$userName.txt`;
+
       `mv $logs $usersDir/$userName/.`;
       `cp -p $userName.txt $usersDir/$userName/.`;
       `cp -p $userName.txt results/.`;
+      `mv    $usersDir/$userName/temp.tab $usersDir/$userName/previousTemp.tab`;
       `cp -p temp.tab $usersDir/$userName/.`;
       `cp -p current.tab $usersDir/$userName/.`;
 
@@ -1101,8 +1159,8 @@
     `./cachearchive.pl >md5sum.cache`;
 mylog("finished cachearchive.pl");
   } elsif ($icc_workRegression) {
-    `mail -a \"From: marcos.woehrmann\@artifex.com\" gs-regression\@ghostscript.com -s \"\`cat revision.gs\`\" <email.txt`;
-    `mail -a \"From: marcos.woehrmann\@artifex.com\" marcos\@ghostscript.com -s \"\`cat revision.gs\`\" <email.txt`;
+    `mail -a \"From: marcos.woehrmann\@artifex.com\" gs-regression\@ghostscript.com -s \"\`cat icc_workRevision.gs\`\" <email.txt`;
+#   `mail -a \"From: marcos.woehrmann\@artifex.com\" marcos\@ghostscript.com -s \"\`cat icc_workRevision.gs\`\" <email.txt`;
 
     mylog "test complete, performing final svn update\n";
     mylog "svn update icc_work -r$rev\n";
@@ -1114,12 +1172,17 @@
 
   } elsif ($mupdfRegression) {
   } elsif ($updateBaseline) {
+  } elsif ($bmpcmp) {
+    if (exists $emails{$userName}) {
+      `mail $emails{$userName} -s \"bmpcmp finished\" <$userName.txt`;
+      `mail marcos.woehrmann\@artifex.com -s \"bmpcmp finished\" <$userName.txt`;
+    }
   } elsif ($userRegression) {
     if (exists $emails{$userName}) {
 #     `mail -a \"From: marcos.woehrmann\@artifex.com\" marcos.woehrmann\@artifex.com -s \"$userRegression regression\" <$userName.txt`;
 #     `mail -a \"From: marcos.woehrmann\@artifex.com\" $emails{$userName} -s \"$userRegression \`cat revision.gs\`\" <$userName.txt`;
       `mail $emails{$userName} -s \"$userRegression \`cat revision.gs\`\" <$userName.txt`;
-      `mail marcos.woehrmann\@artifex.com -s \"$userRegression regression\" <$userName.txt`;
+      `mail marcos.woehrmann\@artifex.com -s \"$userRegression \`cat revision.gs\`\" <$userName.txt`;
     } else {
 #     `mail -a \"From: marcos.woehrmann\@artifex.com\" marcos.woehrmann\@artifex.com -s \"bad username: $userName\" <$userName.txt`;
       `mail marcos.woehrmann\@artifex.com -s \"bad username: $userName\" <$userName.txt`;
@@ -1137,11 +1200,16 @@
 }
 
 checkPID();
-
 removeQueue();
 
 checkPID();
+mylog("removing $runningSemaphore");
 unlink $runningSemaphore;
 
-mylog("removing $runningSemaphore");
+if ($bmpcmp) {
+  `rm -fr ../public_html/$userName`;
+  `mkdir ../public_html/$userName`;
+  `cd ../public_html/$userName; ln -s compare.html index.html`;
+  `./pngs2html.pl bmpcmp ../public_html/$userName`;
+}
 

Modified: branches/gs_2_colors/toolbin/localcluster/clusterpush.pl
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/clusterpush.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/localcluster/clusterpush.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -7,7 +7,24 @@
 
 my $verbose=0;
 
+# todo:
+#
+# allow option to be passed to ./autogen.sh (i.e. FT_BRIDGE=1)
+#
+# options: --retest : retest only those files that failed last time
+#          --minimal (X) : test only X percentage of files (x defaults to 10)
+#          --early (N) : stop test if more than N changes on a node (N defaults to 10)
+#          --bitmap (N) : generate bitmaps for files using bmpcmp up to N files foreach node (0 means all bitmaps, defaults to 10)
+#          --bmpcmp (N) : synomym for --bitmap
+
+#          --lowres
+#          --highres
+#          --abort
+
+
+
 my %products=('abort' =>1,
+              'bmpcmp' =>1,
               'gs' =>1,
               'pcl'=>1,
               'svg'=>1,
@@ -44,14 +61,9 @@
 }
 
 # This is horrid, but it works. Replace it when I find a better way
-if ($user eq 'Robin Watts')
-{
-    $user = "robin";
+if ($user eq 'Robin Watts') {
+  $user = "robin";
 }
-if ($user eq 'eberly')
-{
-    $user = "deberly";
-}
 
 my $directory=`pwd`;
 chomp $directory;
@@ -67,6 +79,9 @@
   }
 }
 
+#$directory="gs" if ($directory eq "" && $product eq "bmpcmp");
+$directory="gs" if ($directory eq "" && $product eq "abort");
+
 die "can't figure out if this is a ghostscript or ghostpdl directory" if ($directory eq "");
 
 $product='gs pcl xps' if (!$product);
@@ -105,13 +120,14 @@
 " .".
 " regression\@$host:$dir/$user/$directory";
 
-if ($product ne "abort") {
+if ($product ne "abort" ) { #&& $product ne "bmpcmp") {
   print STDERR "syncing\n";
   print "$cmd\n" if ($verbose);
   #`$cmd`;
   open(T,"$cmd |");
   while(<T>) {
-    print $_;
+    chomp;
+    print "$_\n" if (!m/\/$/);
   }
   close(T);
 }
@@ -120,6 +136,11 @@
 print F "$user $product $res\n";
 close(F);
 
+$cmd="rsync -avxcz".
+" -e \"ssh -l regression -i \\\"\$HOME/.ssh/cluster_key\\\"\"".
+" cluster_command.run".
+" regression\@$host:$dir/$user/$directory";
+
 if ($product ne "abort") {
   print STDERR "\nqueueing\n";
 } else {

Modified: branches/gs_2_colors/toolbin/localcluster/compare.pl
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/compare.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/localcluster/compare.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -109,6 +109,8 @@
 }
 close(F);
 
+if ($elapsedTime==0) {
+} else {
 if (open(F,"<md5sum.cache")) {
 print STDERR "reading md5sum.cache\n" if ($verbose);
   while(<F>) {
@@ -168,6 +170,7 @@
 
 }
 #print Dumper(\%archiveCache);
+}
 
 #print "previous\n".Dumper(\%previous);
 #print "current \n".Dumper(\%current);
@@ -258,7 +261,10 @@
   }
 }
 
-print "ran ".($pdfwriteTestCount+$notPdfwriteTestCount)." tests in $elapsedTime seconds on $machineCount nodes\n\n";
+if ($elapsedTime==0) {
+} else {
+  print "ran ".($pdfwriteTestCount+$notPdfwriteTestCount)." tests in $elapsedTime seconds on $machineCount nodes\n\n";
+}
 
 if (@differencePrevious) {
   print "Differences in ".scalar(@differencePrevious)." of $notPdfwriteTestCount non-pdfwrite test(s):\n";
@@ -328,6 +334,24 @@
   }
 }
 
+my $first=1;
+foreach my $t (sort keys %current) {
+  if ($t =~ m/(.+\.)1$/) {
+    $t2=$1.'0';
+    if (exists $current{$t2}) {
+      if ($current{$t} ne $current{$t2} && (!exists $previous{$t} || !exists $previous{$t2} || $previous{$t} eq $previous{$t2})) {
+        if ($first) {
+          print "\nThe following files are showing a new mismatch between banded and page mode:\n";
+          $first=0;
+        }
+        print "$t\n";
+      }
+    }
+  }
+}
+print "\n" if (!$first);
+
+
   if (@archiveMatch) {
     print "-------------------------------------------------------------------------------------------------------\n\n";
     print "The following ".scalar(@archiveMatch)." regression file(s) had differences but matched at least once in the previous $previousValues runs:\n";

Copied: branches/gs_2_colors/toolbin/localcluster/pngs2html.pl (from rev 10885, trunk/gs/toolbin/localcluster/pngs2html.pl)
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/pngs2html.pl	                        (rev 0)
+++ branches/gs_2_colors/toolbin/localcluster/pngs2html.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -0,0 +1,372 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+# #include <disclaimer.h>
+# If you speak perl, and are offended by the code herein, I apologise.
+# Please feel free to tidy it up.
+
+# Syntax: pngs2html <inputdir> <outputdir>
+
+########################################################################
+# SETUP SECTION
+
+# Set the following to the maximum number (approx) of bitmap sets that
+# should be put into a single HTML file.
+my $maxsets = 100;
+
+# If set, use iframes rather than copying the content of the frames into
+# the top html file.
+my $iframes = 0;
+
+# END SETUP SECTION
+########################################################################
+
+########################################################################
+# EXTERNAL USES
+use Errno qw(EAGAIN);
+
+########################################################################
+
+my %meta;
+my $suffix;
+my $bands;
+my $infile;
+my $file;
+my $undef;
+my $page;
+my $res;
+my $band;
+my $html;
+my $html2;
+my $indir;
+my $cmd;
+my $cmd2;
+my $cmd3;
+my $outdir;
+my $metafile;
+my $framedir;
+my $mousemove;
+my $ret;
+my $ret2;
+my $filenum;
+my $iframe;
+my $framenum;
+my $javascript;
+my $baseoutdir;
+my $setsthisfile;
+my $pre1;
+my $pre2;
+my $post;
+my $path;
+my $diffs;
+
+########################################################################
+# FUNCTIONS
+
+sub getfilename {
+    my ($num) = @_;
+    my $filename = "compare";
+    
+    if ($num != 0)
+    {
+        $filename .= $num;
+    }
+    $filename .= ".html";
+    return $filename;
+}
+
+sub openiframe {
+    $framedir = sprintf("%05d",$framenum);
+    $outdir   = $baseoutdir."/".$framedir;
+
+    if ($iframes)
+    {
+        print $html "<IFRAME src=\"".$framedir."/frame.html\" WIDTH=\"100%\" FRAMEBORDER=\"0\" id=\"iframe".$framedir."\" scrolling=\"off\"></IFRAME><BR>";
+    }
+
+    mkdir $outdir;
+    open($iframe, ">", $outdir."/frame.html");
+        
+    print $iframe "<HTML><HEAD><TITLE>Bitmap Comparison</TITLE>";
+    print $iframe "$javascript</HEAD><BODY onLoad=\"parent.document.getElementById('iframe".$framedir."').style.height=document.getElementById('content').offsetHeight;parent.document.getElementById('iframe".$framedir."').style.width=document.getElementById('content').offsetWidth;\">";
+    print $iframe "<DIV id=\"content\">";
+}
+
+sub closeiframe {
+    if ($iframes)
+    {
+        print $iframe "</DIV></BODY>";
+        close $iframe;
+    }
+    $framenum++;
+}
+
+sub openhtml {
+    $setsthisfile = 0;
+    open($html, ">", $baseoutdir."/".getfilename($filenum));
+
+    $javascript  = "<SCRIPT LANGUAGE=\"JavaScript\">";
+    $javascript .= "function swap(n){";
+    $javascript .=   "var n0 = '00000'+3*Math.floor(n/3));";
+    $javascript .=   "n0=n0.substring(n0.length-5,n0.length);";
+    $javascript .=   "var n1 = '00000'+3*Math.floor(n/3)+1);";
+    $javascript .=   "n1=n1.substring(n1.length-5,n1.length);";
+    $javascript .=   "var x = document.images['compare'+n0].src;";
+    $javascript .=   "document.images['compare'+n0].src=document.images['compare'+n1].src;";
+    $javascript .=   "document.images['compare'+n1].src = x;";
+    $javascript .= "}";
+    $javascript .= "var undef;";
+    $javascript .= "function findPosX(obj){";
+    $javascript .=   "var curLeft = 0;";
+    $javascript .=   "if (obj.offsetParent){";
+    $javascript .=     "while(1) {";
+    $javascript .=       "curLeft += obj.offsetLeft;";
+    $javascript .=       "if (!obj.offsetParent)";
+    $javascript .=         "break;";
+    $javascript .=       "obj = obj.offsetParent;";
+    $javascript .=     "}";
+    $javascript .=   "} else if (obj.x)";
+    $javascript .=     "curLeft += obj.x;";
+    $javascript .=   "return curLeft;";
+    $javascript .= "}";
+    $javascript .= "function findPosY(obj){";
+    $javascript .=   "var curTop = 0;";
+    $javascript .=   "if (obj.offsetParent){";
+    $javascript .=     "while(1) {";
+    $javascript .=       "curTop += obj.offsetTop;";
+    $javascript .=       "if (!obj.offsetParent)";
+    $javascript .=         "break;";
+    $javascript .=       "obj = obj.offsetParent;";
+    $javascript .=     "}";
+    $javascript .=   "} else if (obj.x)";
+    $javascript .=     "curTop += obj.x;";
+    $javascript .=   "return curTop;";
+    $javascript .= "}";
+    $javascript .= "function coord(event,obj,n,x,y){";
+    $javascript .=   "if (event.offsetX == undef) {";
+    $javascript .=     "x += event.pageX-findPosX(obj)-1;";
+    $javascript .=     "y += event.pageY-findPosY(obj)-1;";
+    $javascript .=   "} else {";
+    $javascript .=     "x += event.offsetX;";
+    $javascript .=     "y += event.offsetY;";
+    $javascript .=   "}";
+    $javascript .=   "document['Coord'+n].X.value = x;";
+    $javascript .=   "document['Coord'+n].Y.value = y;";
+    $javascript .= "}</SCRIPT>";
+    print $html "<HTML><HEAD><TITLE>Bitmap Comparison</TITLE>";
+    print $html "$javascript</HEAD><BODY>\n";
+    
+    if ($filenum > 0) {
+        print $html "<P>";
+        if ($filenum > 1)
+        {
+            print $html "<A href=\"".getfilename(0)."\">First</A>&nbsp;&nbsp;";
+        }
+        print $html "<A href=\"".getfilename($filenum-1)."\">Previous(".($filenum-1).")</A>";
+        print $html "</P>\n";
+    }
+    $filenum++;
+}
+
+sub closehtml {
+    print $html "</BODY>";
+    close $html;
+}
+
+sub nexthtml {
+    print $html "<P><A href=\"".getfilename($filenum)."\">Next(".$filenum.")</A>";
+    closehtml();
+    openhtml();
+}
+
+sub dprint {
+    my ($f1, $f2, $str) = @_;
+    
+    if (!$iframes) {
+        print $f1 $str;
+    }
+    print $f2 $str;
+}
+
+sub runjobs {
+    ($cmd, $cmd2, $html, $html2, $pre1, $pre2, $post) = @_;
+    
+        $ret  = system($cmd);
+        $ret2 = system($cmd2);
+        
+    if ($ret != 0)
+    {
+        print $pre1." ".$post." failed with exit code ".$ret."\n";
+        print "Command was: ".$cmd."\n";
+        dprint($html,$html2,"<P>".$pre1." ".$post." failed with exit code ");
+        dprint($html,$html2,$ret."<br>Command was: ".$cmd."</P>\n");
+        next;
+    }
+    if ($ret2 != 0)
+    {
+        print $pre2." ".$post." failed with exit code ".$ret2."\n";
+        print "Command was: ".$cmd2."\n";
+        dprint($html,$html2,"<P>Ref bitmap generation failed with exit code ");
+        dprint($html,$html2,$ret2."<br>Command was: ".$cmd2."</P>\n");
+        next;
+    }
+    
+    return (($ret | $ret2) != 0);
+}
+
+# END FUNCTIONS
+########################################################################
+
+########################################################################
+# Here follows todays lesson. Abandon hope all who enter here. Etc. Etc.
+$indir    = $ARGV[0];
+shift @ARGV;
+$baseoutdir = $ARGV[0];
+shift @ARGV;
+$filenum  = 0;
+$framenum = 0;
+
+($baseoutdir) || die "usage: pngs2html.pl <inputDir> <outputDir>";
+
+# Create the output dir/html file
+mkdir $baseoutdir;
+openhtml();
+
+# Open the index
+open(INDEX, "ls $indir/*.meta| sed s/\.\[0-9]\*\.meta// | sort -u |");
+
+# Now run through the list of files
+while (<INDEX>)
+{
+    chomp;
+
+    # Keep everything after the last
+    ($path,$_) = $_ =~ m/(.*)\/([^\/]+)/;
+
+    # Put the filename into infile
+    $infile = $_;
+    ($res,$band) = $_ =~ m/.*\.(\d+)\.(\d+)/;
+    $file = $infile;
+    $file =~ s/__/\//g;
+    
+    # Start a new file if required
+    if ($setsthisfile >= $maxsets)
+    {
+        nexthtml();
+    }
+    
+    # Open the iframe
+    openiframe();
+
+    # Output the title
+    dprint($html,$iframe,"<H1>".$framenum.": ".$file." (".$res."dpi)</H1></BR>\n");
+    print "Processing: $framenum: $file ($res)";
+
+    # Add the files to the HTML, converting to PNG if required.
+    my $imageCount = 1;
+    my $image0=sprintf "%05d",$imageCount+0;
+    my $image1=sprintf "%05d",$imageCount+1;
+    my $image2=sprintf "%05d",$imageCount+2;
+    while (stat("$indir/$infile.$image0.meta") && stat("$indir/$infile.$image0.png") && stat("$indir/$infile.$image1.png") && stat("$indir/$infile.$image2.png"))
+    {
+	print ".";
+            # Uncompress
+            $cmd   = "cp $indir/$infile.$image0.png $outdir/out.$image0.png";
+            $cmd2  = "cp $indir/$infile.$image1.png $outdir/out.$image1.png";
+            $cmd3  = "cp $indir/$infile.$image2.png $outdir/out.$image2.png";
+            `$cmd ; $cmd2 ; $cmd3`;
+            $suffix = ".png";
+            
+        $metafile = "$indir/$infile.$image0.meta";
+        $meta{"X"}    = 0;
+        $meta{"Y"}    = 0;
+        $meta{"PW"}   = 0;
+        $meta{"PH"}   = 0;
+        $meta{"W"}    = 0;
+        $meta{"H"}    = 0;
+        $meta{"PAGE"} = 0;
+        if (stat($metafile))
+        {
+            open(METADATA, $metafile);
+            while (<METADATA>) {
+                chomp;
+                s/#.*//;
+                s/^\s+//;
+                s/\s+$//;
+                next unless length;
+                my ($var,$value) = split(/\s*=\s*/, $_, 2);
+                $meta{$var}=$value;
+            }
+            close METADATA;
+        }
+            
+        $page = $meta{"PAGE"};
+        $mousemove = "onmousemove=\"coord(event,this,'$image0',".$meta{"X"}.",".$meta{"Y"}.")\"";
+            
+        print $iframe "<TABLE><TR><TD><IMG SRC=\"out.$image0$suffix\" onMouseOver=\"swap($image0)\" onMouseOut=\"swap(".($image1).")\" NAME=\"compare$image0\" BORDER=1 TITLE=\"Candidate<->Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+        print $iframe "<TD><IMG SRC=\"out.".($image1)."$suffix\" NAME=\"compare".($image1)."\" BORDER=1 TITLE=\"Reference: $file page=$page res=$res\" $mousemove.></TD>\n";
+        print $iframe "<TD><IMG SRC=\"out.".($image2)."$suffix\" BORDER=1 TITLE=\"Diff: $file page=$page res=$res\" $mousemove></TD></TR>\n";
+        print $iframe "<TR><TD COLSPAN=3><FORM name=\"Coord$image0\"><LABEL for=\"X\">Page=$page PageSize=".$meta{"PW"}."x".$meta{"PH"}." Res=$res TopLeft=(".$meta{"X"}.",".$meta{"Y"}.") W=".$meta{"W"}." H=".$meta{"H"}." </LABEL><INPUT type=\"text\" name=\"X\" value=0 size=3>X<INPUT type=\"text\" name=\"Y\" value=0 size=3>Y</FORM></TD></TR></TABLE><BR>\n";
+
+        if (!$iframes) {
+            print $html "<TABLE><TR><TD><IMG SRC=\"$framedir/out.$image0$suffix\" onMouseOver=\"swap($image0)\" onMouseOut=\"swap(".($image1).")\" NAME=\"compare$image0\" BORDER=1 TITLE=\"Candidate<->Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+            print $html "<TD><IMG SRC=\"$framedir/out.".($image1)."$suffix\" NAME=\"compare".($image1)."\" BORDER=1 TITLE=\"Reference: $file page=$page res=$res\" $mousemove></TD>\n";
+            print $html "<TD><IMG SRC=\"$framedir/out.".($image2)."$suffix\" BORDER=1 TITLE=\"Diff: $file page=$page res=$res\" $mousemove></TD></TR>\n";
+            print $html "<TR><TD COLSPAN=3><FORM name=\"Coord$image0\"><LABEL for=\"X\">Page=$page PageSize=".$meta{"PW"}."x".$meta{"PH"}." Res=$res TopLeft=(".$meta{"X"}.",".$meta{"Y"}.") W=".$meta{"W"}." H=".$meta{"H"}." </LABEL><INPUT type=\"text\" name=\"X\" value=0 size=3>X<INPUT type=\"text\" name=\"Y\" value=0 size=3>Y</FORM></TD></TR></TABLE><BR>\n";
+	}
+        $imageCount += 3;
+        $image0=sprintf "%05d",$imageCount+0;
+        $image1=sprintf "%05d",$imageCount+1;
+        $image2=sprintf "%05d",$imageCount+1;
+        $diffs++;
+        $setsthisfile++;
+    }
+    print "\n";
+    
+    closeiframe();
+}
+
+close INDEX;
+
+# List the errored files. If no stdout files this prints and error, but seems
+# to continue.
+open(INDEX, "ls $indir/*.stdout.gz | sort -u |");
+
+# Now run through the list of files
+print $html "<H1>Files that produced errors</H1></BR><DL>\n";
+while (<INDEX>)
+{
+    chomp;
+
+    # Keep everything between the last / and .stdout.gz
+    ($path,$_) = $_ =~ m/(.*)\/([^\/]+).stdout.gz/;
+
+    # Put the filename into infile
+    $infile = $_;
+    ($res,$band) = $_ =~ m/.*\.(\d+)\.(\d+)/;
+    $file = $infile;
+    $file =~ s/__/\//g;
+
+    $framedir = sprintf("%05d",$framenum);
+    $outdir   = $baseoutdir."/".$framedir;
+    mkdir $outdir;
+
+    # Uncompress stdout/stderr - FIXME: Maybe should rewrite to html?
+    $cmd   = "zcat $indir/$infile.stdout.gz > $outdir/stdout.txt";
+    $cmd2  = "zcat $indir/$infile.stderr.gz > $outdir/stderr.txt";
+    runjobs($cmd, $cmd2, $html, $undef, "stdout", "stderr", "decompression");
+
+    # Output HTML fragment
+    print $html "<DT>$framenum: $file ($res dpi)</DT>\n";
+    print $html "<DD><A href=\"$framedir/stdout.txt\">stdout</A>\n";
+    print $html "<A href=\"$framedir/stderr.txt\">stderr</A></DT>\n";
+    $framenum++;
+}
+print $html "</DL>";
+
+close INDEX;
+
+# Finish off the HTML file
+closehtml();

Modified: branches/gs_2_colors/toolbin/localcluster/run.pl
===================================================================
--- branches/gs_2_colors/toolbin/localcluster/run.pl	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/localcluster/run.pl	2010-03-09 14:55:48 UTC (rev 10886)
@@ -170,6 +170,7 @@
 my $raster="./temp/raster";
 my $bmpcmpOutput="./temp/bmpcmp";
 my $baselineRaster="./baselineraster";
+my $baselineRaster2="./baselineraster.tmp";
 
 my $gpdlSource=$baseDirectory."/ghostpdl";
 my $gsSource=$gpdlSource."/gs";
@@ -313,6 +314,8 @@
       die "fork() failed";
     } elsif ($pid == 0) {
       exec($s);
+#     mylog "exec() failed";  # these produces a perl warning
+#     die "exec() failed";
       exit(0);
     } else {
       if ($timeout==0) {
@@ -362,17 +365,6 @@
   mylog($message);
 }
 
-`cc -o bmpcmp ghostpdl/gs/toolbin/bmpcmp.c`;
-`rm -f 0*debug.icc`;
-`rm -f 1*debug.icc`;
-`rm -f 2*debug.icc`;
-`rm -f 3*debug.icc`;
-`rm -f 4*debug.icc`;
-`rm -f 5*debug.icc`;
-`rm -f 6*debug.icc`;
-`rm -f 7*debug.icc`;
-`rm -f 8*debug.icc`;
-`rm -f 9*debug.icc`;
 
 if (!$local) {
 if (!$user) {
@@ -440,7 +432,13 @@
   `$cmd`;
 }
 
-mkdir "baselineraster";
+#`cc -o bmpcmp ghostpdl/gs/toolbin/bmpcmp.c`;
+`cc -I$baseDirectory/ghostpdl/gs/libpng -o bmpcmp -DHAVE_LIBPNG $baseDirectory/ghostpdl/gs/toolbin/bmpcmp.c $baseDirectory/ghostpdl/gs/libpng/png.c $baseDirectory/ghostpdl/gs/libpng/pngerror.c $baseDirectory/ghostpdl/gs/libpng/pnggccrd.c $baseDirectory/ghostpdl/gs/libpng/pngget.c $baseDirectory/ghostpdl/gs/libpng/pngmem.c $baseDirectory/ghostpdl/gs/libpng/pngpread.c $baseDirectory/ghostpdl/gs/libpng/pngread.c $baseDirectory/ghostpdl/gs/libpng/pngrio.c $baseDirectory/ghostpdl/gs/libpng/pngrtran.c $baseDirectory/ghostpdl/gs/libpng/pngrutil.c $baseDirectory/ghostpdl/gs/libpng/pngset.c $baseDirectory/ghostpdl/gs/libpng/pngtrans.c $baseDirectory/ghostpdl/gs/libpng/pngvcrd.c $baseDirectory/ghostpdl/gs/libpng/pngwio.c $baseDirectory/ghostpdl/gs/libpng/pngwrite.c $baseDirectory/ghostpdl/gs/libpng/pngwtran.c $baseDirectory/ghostpdl/gs/libpng/pngwutil.c -lm -lz`;
+
+$cmd="touch $baselineRaster2 ; rm -fr $baselineRaster2 ; mv $baselineRaster $baselineRaster2 ; mkdir $baselineRaster ; rm -fr $baselineRaster2 &";
+print "$cmd\n" if ($verbose);
+`$cmd`;
+
 $cmd="touch $temp2 ; rm -fr $temp2 ; mv $temp $temp2 ; mkdir $temp ; mkdir $raster ; mkdir $bmpcmpOutput ; touch raster.yes ; rm -fr $temp2 &";
 print "$cmd\n" if ($verbose);
 `$cmd`;
@@ -973,12 +971,26 @@
     `gzip $machine.log`;
     `gzip $machine.out`;
 
-    mylog "about to upload $machine.log.gz";
-    spawn(300,"scp -q -i ~/.ssh/cluster_key $machine.log.gz regression\@casper3.ghostscript.com:/home/regression/cluster/$machine.log.gz");
+    for (my $retry=0;  $retry<5;  $retry++) {
+      mylog "about to upload $machine.log.gz";
+      my $a=`scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $machine.log.gz regression\@casper3.ghostscript.com:/home/regression/cluster/$machine.log.gz`;
+      last if ($?==0);
+      my $b=$?;
+      chomp $a;
+      mylog "retry=$retry;  a=$a;  \$?=$b";
+      sleep 10;
+    }
     mylog "done with uploading $machine.log.gz";
 
-    mylog "about to upload $machine.out.gz";
-    spawn(300,"scp -q -i ~/.ssh/cluster_key $machine.out.gz regression\@casper3.ghostscript.com:/home/regression/cluster/$machine.out.gz");
+    for (my $retry=0;  $retry<5;  $retry++) {
+      mylog "about to upload $machine.out.gz";
+      my $a=`scp -q -o ConnectTimeout=30 -i ~/.ssh/cluster_key $machine.out.gz regression\@casper3.ghostscript.com:/home/regression/cluster/$machine.out.gz 2>&1`;
+      last if ($?==0);
+      my $b=$?;
+      chomp $a;
+      mylog "retry=$retry;  a=$a;  \$?=$b";
+      sleep 10;
+    }
     mylog "done with uploading $machine.out.gz";
 
 #   sleep(10);  # another horrible hack, see if this fixes the occasional log file not found problem on the cluster master

Modified: branches/gs_2_colors/toolbin/tests/fuzzy.c
===================================================================
--- branches/gs_2_colors/toolbin/tests/fuzzy.c	2010-03-09 01:46:06 UTC (rev 10885)
+++ branches/gs_2_colors/toolbin/tests/fuzzy.c	2010-03-09 14:55:48 UTC (rev 10886)
@@ -92,7 +92,7 @@
     {
       for (x = 0; x < width; x++)
 	{
-	  uchar g = -!(image_buf[x >> 3] && (128 >> (x & 7)));
+	  uchar g = -!(image_buf[x >> 3] & (128 >> (x & 7)));
 	  buf[x * 3] = g;
 	  buf[x * 3 + 1] = g;
 	  buf[x * 3 + 2] = g;



More information about the gs-commits mailing list