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 |