frei@rubmez.UUCP (Matthias Frei ) (05/05/88)
Hy everybody, I'm looking for contacts to Adobe's TranSript users. I wrote a PostScript-procedure generating the afm-file for any given PostScript-Font. I did it for dealing german umlaut (adieresis) and german double "s" directly, but it isn't a solution too. Interested ? Matthias Frei Mikroelektronikzentrum (A) Ruhr Universitaet Bochum, West Germany 4630 Bochum 1, Postfach 102148 E-mail UUCP: ...!uunet!unido!rubmez!frei
frei@rubmez.UUCP (Matthias Frei ) (05/10/88)
Hallo netland, there were many requests for afm-file generation, so I'll post it via the net. Here is afm.ps, which should be downloaded with TranScript's lp-interface. It works on a Apple Laserwriter Plus and let's pscatmap build the troff-tables needed. Note: you still have to write the font-familys description-file! ------------------------------------------- : to unbundle set umask and sh this file trap "rm -f /tmp/bundle$$" 1 2 3 15 exec > /tmp/bundle$$ echo >&2 afm.ps afm.ps sed 's/^ //' > afm.ps << 'End of afm.ps' %!PS-Adobe-2.0 %% Title: afm.ps %% Creator: Matthias Frei, University of Bochum, West-Germany %% e-mail: ...uunet!unido!rubmez!frei %% Date: April 1988 %% %% PostScript Program to create an afm-file for a given Font %% (think it works for normal left to right, up down fonts only) %% %% afmfile is generated on %stdout, %% it can be found in /usr/spool/lp/transcript/laserprinter.log %% using TranScript's lp-interface after execution %% %% The Fontkey has to be on the stack, invoking afm %% %% EndComments %% BeginProcSet /afmdict 50 dict def afmdict begin /charcount 0 def /showstring 1 string def /str 10 string def /wx 4 string def /name 30 string def /char 1 string def %% procedure to print line and flush stream /nl { = flush } bind def %% reverse 4 numbers on stack and mult with 1000 /reverse { 1000 mul round cvi /a exch def 1000 mul round cvi /b exch def 1000 mul round cvi /c exch def 1000 mul round cvi /d exch def a b c d } bind def %% print integer on the stack with leading blank /printint { ( ) str cvs pop str cvs pop str print } bind def %% afm procedure /afm { dup /thefont exch findfont def %% copy the Fonts Key /FD FontDirectory def %% get Masterdictionary of fonts /f exch FD exch get def %% f is the Fonts Dictionary now /fi f /FontInfo get def %% fi is the Fonts InfoDictionary %% print Header of the afm File (StartFontMetrics 1.0) nl (Comment created by a PostScript-Program from Matthias Frei) print ( @ University of Bochum, W-Germany (frei@uunet%rubmez.UUCP)) nl (FontName ) print f /FontName get nl fi begin %% Make Info current (FullName ) print FullName nl (FamilyName ) print FamilyName nl (Weight ) print Weight nl (ItalicAngle ) print ItalicAngle nl (isFixedPitch ) print isFixedPitch nl (UnderlinePosition -106) nl (UnderlineThickness 73) nl (Version ) print version nl (Notice ) print Notice nl end %% of FontInfo f /FontBBox get (FontBBox ) print pstack clear thefont 1 scalefont setfont %% fetch the Font (CapHeight ) print newpath 0 0 moveto (H) true charpath flattenpath pathbbox reverse pop pop pop nl (XHeight ) print newpath 0 0 moveto (x) true charpath flattenpath pathbbox reverse pop pop pop nl (Ascender ) print newpath 0 0 moveto (d) true charpath flattenpath pathbbox reverse pop pop pop nl (Descender ) print newpath 0 0 moveto (p) true charpath flattenpath pathbbox reverse pop nl pop pop newpath 0 0 moveto (StartCharMetrics) nl /charcount 0 def thefont /Encoding get %% forall characters { /charname exch def charname /.notdef ne %% if defined { %% first compute and print charwidth /charwidth showstring dup 0 charcount put dup /char exch def stringwidth pop 1000 mul def (C ) print charcount str cvs pop str print (;) print (WX ) print charwidth round cvi wx cvs pop wx print (;) print %% then the CharName (N ) print charname name cvs pop name print (;) print %% next is the BoundingBox 0 0 moveto ( B ) print char true charpath flattenpath pathbbox reverse printint printint printint printint newpath (;) nl ( ) str cvs pop ( ) wx cvs pop ( ) char cvs pop ( ) name cvs pop flush wait } if /charcount charcount 1 add def } forall (EndCharMetrics) nl (EndFontMetrics) nl } bind def %% end of procedure afm %% for Communicationsprogram (beware of Bufferoverflow) /wait { 1 1 400 { pop } for } bind def %% EndProcSet %% EndProlog %% Test the program with some fonts /NewCenturySchlbk-Bold afm /NewCenturySchlbk-Roman afm /NewCenturySchlbk-Italic afm /Bookman-Light afm /Bookman-LightItalic afm /Bookman-Demi afm /AvantGarde-Book afm /AvantGarde-BookOblique afm /AvantGarde-Demi afm end %% Trailer End of afm.ps wc afm.ps diff - /tmp/bundle$$ << 'End of wc' >&2 138 616 3880 afm.ps End of wc rm -f /tmp/bundle$$ exit --------- End of Shell Archiv ---------------- Matthias Frei -------------------------------------------------------------------- Snail-mail: | E-Mail address: Center for Microelectronics | UUCP frei@rubmez.uucp University of Bochum | (...uunet!unido!rubmez!frei) 4630 Bochum 1, P.O.-Box 102143 | West Germany |