summaryrefslogtreecommitdiff
path: root/dviware/dvitops/printafm.ps
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvitops/printafm.ps
Initial commit
Diffstat (limited to 'dviware/dvitops/printafm.ps')
-rw-r--r--dviware/dvitops/printafm.ps136
1 files changed, 136 insertions, 0 deletions
diff --git a/dviware/dvitops/printafm.ps b/dviware/dvitops/printafm.ps
new file mode 100644
index 0000000000..fadd755271
--- /dev/null
+++ b/dviware/dvitops/printafm.ps
@@ -0,0 +1,136 @@
+%!
+% $Header: /usr/jjc/dvitops/RCS/printafm.ps,v 1.1 89/02/01 09:19:41 jjc Rel $
+% written by James Clark <jjc@jclark.uucp>
+% print an afm file on the standard output
+% usage is `fontname printafm' eg `/Times-Roman printafm'
+
+/buf 256 string def
+/onechar 1 string def
+/box 4 array def
+
+% c toupper - c
+/toupper {
+ dup dup 8#141 ge exch 8#172 le and {
+ 8#40 sub
+ } if
+} bind def
+
+
+% dict printinfo -
+/printinfo {
+ /FontInfo get {
+ exch
+ buf cvs dup dup 0 get 0 exch toupper put print
+ ( ) print
+ buf cvs =
+ } forall
+} bind def
+
+% dict printbbox -
+
+/printbbox {
+ (FontBBox) print
+ /FontBBox get {
+ ( ) print
+ round cvi buf cvs print
+ } forall
+ (\n) print
+} bind def
+
+% dict printcharmetrics -
+
+/printcharmetrics {
+ /d exch def
+ (StartCharMetrics ) print
+ d /CharStrings get dup length exch /.notdef known { 1 sub } if =
+ d 1000 scalefont setfont 0 0 moveto
+ /e d /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
+ d /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
+ d maxlength dict /f exch def
+ d {
+ 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 /d exch def
+ d 1000 scalefont setfont
+ % print a entry for each character not in old vector
+ /e d /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
+ buf cvs print
+ ( ; WX ) print
+ onechar 0 3 -1 roll put
+ onechar stringwidth pop round cvi buf cvs print
+ ( ; N ) print
+ buf cvs print
+ ( ; B ) print
+ onechar false charpath flattenpath pathbbox box astore {
+ round cvi buf cvs print
+ ( ) print
+ } forall
+ (;) =
+ saved restore
+} bind def
+
+% fontname printafm -
+
+/printafm {
+ findfont /d exch def
+ (StartFontMetrics 2.0) =
+ (FontName ) print d /FontName get =
+ d printinfo
+ d printbbox
+ d printcharmetrics
+ (EndFontMetrics) =
+} bind def
+
+