summaryrefslogtreecommitdiff
path: root/sys/lib/ghostscript/printafm.ps
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:53:33 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:53:33 +0300
commite463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (patch)
treed5e9f57c28f026cb21de3bd77cc10cd7f64aaa85 /sys/lib/ghostscript/printafm.ps
parentb41b9034225ab3e49980d9de55c141011b6383b0 (diff)
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/printafm.ps')
-rwxr-xr-xsys/lib/ghostscript/printafm.ps147
1 files changed, 147 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/printafm.ps b/sys/lib/ghostscript/printafm.ps
new file mode 100755
index 000000000..6fa84421b
--- /dev/null
+++ b/sys/lib/ghostscript/printafm.ps
@@ -0,0 +1,147 @@
+%!
+% written by James Clark <jjc@jclark.uucp>
+% print an afm file on the standard output
+% usage is `fontname printafm' eg `/Times-Roman printafm'
+
+% From the `dvitops' distribution, which included this notice:
+% dvitops is not copyrighted; you can do with it exactly as you please.
+% I would, however, ask that if you make improvements or modifications,
+% you ask me before distributing them to others.
+
+% Altered by d.love@dl.ac.uk to produce input for Rokicki's afm2tfm,
+% which groks the format of the Adobe AFMs.
+
+% $Id: printafm.ps,v 1.4 2002/02/21 21:49:28 giles Exp $
+% Modified by L. Peter Deutsch 9/14/93:
+% uses Ghostscript's =only procedure to replace 'buf cvs print'.
+% Modified by L. Peter Deutsch 9/6/95:
+% uses Ghostscript's shellarguments facility to accept the font name
+% on the command line.
+
+/onechar 1 string def
+
+% c toupper - c
+/toupper {
+ dup dup 8#141 ge exch 8#172 le and {
+ 8#40 sub
+ } if
+} bind def
+
+% printcharmetrics -
+
+/printcharmetrics {
+ (StartCharMetrics ) print
+ currentfont /CharStrings get dup length exch /.notdef known { 1 sub } if =
+ currentfont 1000 scalefont setfont 0 0 moveto
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup /.notdef ne {
+ exch dup printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ % s contains an entry for each name in the original encoding vector
+ /s 256 dict def
+ e {
+ s exch true put
+ } forall
+ % v is the new encoding vector
+ /v 256 array def
+ 0 1 255 {
+ v exch /.notdef put
+ } for
+ % fill up v with names in CharStrings
+ /i 0 def
+ currentfont /CharStrings get {
+ pop
+ i 255 le {
+ v i 3 -1 roll put
+ /i i 1 add def
+ } {
+ pop
+ } ifelse
+ } forall
+ % define a new font with v as its encoding vector
+ currentfont maxlength dict /f exch def
+ currentfont {
+ exch dup dup /FID ne exch /Encoding ne and {
+ exch f 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } forall
+ f /Encoding v put
+ f /FontName /temp put
+ % make this new font the current font
+ /temp f definefont setfont
+ % print a entry for each character not in old vector
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup dup /.notdef ne exch s exch known not and {
+ exch -1 printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ (EndCharMetrics) =
+} bind def
+
+% name actual_code normal_code printmetric -
+
+/printmetric {
+ /saved save def
+ (C ) print =only
+ ( ; WX ) print
+ onechar 0 3 -1 roll put
+ onechar stringwidth pop round cvi =only
+ ( ; N ) print =only
+ ( ; B ) print
+ onechar false charpath flattenpath mark pathbbox counttomark {
+ counttomark -1 roll
+ round cvi =only
+ ( ) print
+ } repeat pop
+ (;) =
+ saved restore
+} bind def
+
+% fontname printafm -
+
+/printafm {
+ findfont gsave setfont
+ (StartFontMetrics 2.0) =
+ (FontName ) print currentfont /FontName get =
+
+ % Print the FontInfo
+
+ currentfont /FontInfo get {
+ exch
+ =string cvs dup dup 0 get 0 exch toupper put print
+ ( ) print =
+ } forall
+
+ % Print the FontBBox
+
+ (FontBBox) print
+ currentfont /FontBBox get {
+ ( ) print round cvi =only
+ } forall
+ (\n) print
+
+ printcharmetrics
+ (EndFontMetrics) =
+ grestore
+} bind def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq
+ { 0 get printafm }
+ { (Usage: printafm fontname\n) print flush }
+ ifelse
+ }
+ { pop }
+ifelse