[comp.lang.postscript] Font Reencoding Nightmares

dudkl@dcatla.UUCP (Danny K. Llewallyn) (05/10/88)

Dear PostScript Experts,

I am having trouble reencoding a font.  I am using the routine found in
the Green Book on pages 115-117.  When I run the program appended at the
end of this message, I get the invalidfont error when I try to print the
following code points:

Code Points \267 - \275: atilde,otilde,agrave,egrave,igrave,ograve,ugrave.
Code Points \300 - \306: Agrave,Egrave,Igrave,Ograve,Ugrave,Atilde,Otilde.
Code Points \322 - \326: Acircumflex,Ecircumflex,Icircumflex,Ocircumflex,
                         Ucircumflex.

I know that the charprocs exist for these characters, for the characters
will print if I change the starting reencode point to 0 versus 176. Also,
I realize there is another reencoding example in the Blue Book, however
the one in the Green Book is more concise and elegant.  Thanks in Advance
for any help you can give me with this problem.

Danny.

----------- PostScript Program Starts Below this Line ----------------
/RE {
  findfont begin currentdict dup length dict begin{1 index/FID ne{def}{pop
  pop}ifelse}forall/FontName exch def dup length 0 ne{/Encoding Encoding 256
  array copy def 0 exch{dup type/nametype eq{Encoding 2 index 2 index put pop
  1 add}{exch pop}ifelse}forall}if pop currentdict dup end end/FontName get
  exch definefont pop
}bind def
/stdencoding[176/space/space/space/space/dieresis/acute/cedilla/atilde
/otilde/agrave/egrave/igrave/ograve/ugrave/udieresis/eacute/Agrave/Egrave
/Igrave/Ograve/Ugrave/Atilde/Otilde/Y/A/E/E/I/O/U/Y/C/Edieresis/Idieresis
/Acircumflex/Ecircumflex/Icircumflex/Ocircumflex/Ucircumflex/Aacute
/Iacute/Oacute/Uacute/space/ccedilla/semicolon/asterisk/oslash/D/one/three
/space/V/P/Y/P/paragraph/underscore/equal/endash/registered/space/space
/space/space/space/space/space/space/space/space/space/space/space/space
/space/space/space/space/space]def
stdencoding /NewCourier /Courier RE
/NewCourier findfont 8 scalefont setfont
72 750 moveto
currentpoint
(  0123456789ABCDEF) show stroke
moveto
currentpoint
(  ________________) show stroke
moveto
0 -10 rmoveto
currentpoint
(0:\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017)
show stroke
moveto
0 -10 rmoveto
currentpoint
(1:\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037)
show stroke
moveto
0 -10 rmoveto
currentpoint
(2:\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057)
show stroke
moveto
0 -10 rmoveto
currentpoint
(3:\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077)
show stroke
moveto
0 -10 rmoveto
currentpoint
(4:\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117)
show stroke
moveto
0 -10 rmoveto
currentpoint
(5:\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137)
show stroke
moveto
0 -10 rmoveto
currentpoint
(6:\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157)
show stroke
moveto
0 -10 rmoveto
currentpoint
(7:\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177)
show stroke
moveto
0 -10 rmoveto
currentpoint
(8:\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217)
show stroke
moveto
0 -10 rmoveto
currentpoint
(9:\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237)
show stroke
moveto
0 -10 rmoveto
currentpoint
(A:\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257)
show stroke
moveto
0 -10 rmoveto
currentpoint
(B:\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277)
show stroke
moveto
0 -10 rmoveto
currentpoint
(C:\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317)
show stroke
moveto
0 -10 rmoveto
currentpoint
(D:\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337)
show stroke
moveto
0 -10 rmoveto
currentpoint
(E:\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357)
show stroke
moveto
0 -10 rmoveto
currentpoint
(F:\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377)
show stroke
moveto
showpage

greid@ondine.COM (Glenn Reid) (05/11/88)

>I am having trouble reencoding a font.  I am using the routine found in
>the Green Book on pages 115-117.  When I run the program appended at the
>end of this message, I get the invalidfont error when I try to print the
>following code points:
>
>Code Points \267 - \275: atilde,otilde,agrave,egrave,igrave,ograve,ugrave.
>Code Points \300 - \306: Agrave,Egrave,Igrave,Ograve,Ugrave,Atilde,Otilde.
>Code Points \322 - \326: Acircumflex,Ecircumflex,Icircumflex,Ocircumflex,
>                         Ucircumflex.
			 
I believe the problem is that you do not have "grave", "tilde", and
"circumflex" in the encoding anywhere.

In order to set composite characters, both of the component pieces need
to be encoded (it doesn't particularly matter where).

The other thing that will get you is the "dotlessi" character, which is
one of the components of "iacute", "igrave", etc.  It does NOT use the
"i" character, as you might originally suspect.  "dotlessi" may already
be in the encoding (haven't checked that carefully) but if it isn't, it
can cause hours of grief trying to track it down.

Good luck.

Glenn Reid
Adobe Systems