summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/psutils
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-08 15:51:20 +0000
committerKarl Berry <karl@freefriends.org>2013-04-08 15:51:20 +0000
commit4bbdb7af7704d712bc0aac08bc8d02709336bfd8 (patch)
treecee426eddd7f752079f5b04029941c91b0a233a9 /Master/texmf-dist/scripts/psutils
parent640432200b57b21f5112958b90cd69e9f231e182 (diff)
move runtime tetex/ scripts to texlive/ , etc.
git-svn-id: svn://tug.org/texlive/trunk@29739 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/psutils')
-rwxr-xr-xMaster/texmf-dist/scripts/psutils/getafm.sh358
-rwxr-xr-xMaster/texmf-dist/scripts/psutils/showchar.sh118
2 files changed, 476 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/psutils/getafm.sh b/Master/texmf-dist/scripts/psutils/getafm.sh
new file mode 100755
index 00000000000..1c6cd21cf77
--- /dev/null
+++ b/Master/texmf-dist/scripts/psutils/getafm.sh
@@ -0,0 +1,358 @@
+#!/bin/sh
+
+if [ $# -ne 1 ]; then
+ echo "usage: $0 font-name | gsnd - >font-name.afm" >&2
+ exit 1
+fi
+
+cat << EOF
+%!
+% produce .afm for $1
+% (c) 1993 by Robert Joop <rj@rainbow.in-berlin.de>
+% inspired by two other versions of this theme which are
+% getafm 1.00 (c) AJCD
+% and getafm.ps by an unknown author,
+% modified by J. Daniel Smith <dsmith@mailhost.aa.cad.slb.com>
+
+% Metrics dictionary code added by AJCD, 7/6/93
+
+/getafmdict 100 dict dup begin
+
+ /buf 256 string def
+ /buf2 16 string def
+
+ /prany % dict dictname printname -> dict
+ {
+ 2 index 2 index cvn known
+ {
+ print % printname
+ ( ) print
+ 1 index exch cvn get =
+ }
+ {
+ (Comment /FontInfo contains no /) print
+ 2 copy eq
+ {
+ = % printname
+ pop % dictname
+ }
+ {
+ exch
+ print % dictname
+ (, therefore no ) print
+ = % printname
+ }
+ ifelse
+ }
+ ifelse
+ }
+ bind def
+
+ /printfontname
+ {
+ (FontName)dup prany
+ }
+ bind def
+
+ /printfontinfo
+ {
+ dup /FontInfo known
+ {
+ dup /FontInfo get
+ (FullName)dup prany
+ (FamilyName)dup prany
+ (Weight)dup prany
+ (ItalicAngle)dup prany
+ (isFixedPitch)(IsFixedPitch) prany
+ (UnderlinePosition)dup prany
+ (UnderlineThickness)dup prany
+ (Version)(version) prany
+ (Notice)dup prany
+ pop
+ }
+ {
+ (Comment Font lacks a /FontInfo!)=
+ }
+ ifelse
+ }
+ bind def
+
+ /prbbox % llx lly urx ury -> -
+ {
+ 4 1 roll 3 1 roll exch % swap top 4 elements
+ 4 { ( ) print buf cvs print } repeat
+ }
+ bind def
+
+ /getbbox % fontdict chardict character -> fontdict chardict llx lly urx ury
+ {
+ gsave
+ 2 index setfont 0 0 moveto
+ false charpath flattenpath pathbbox
+ grestore
+ }
+ bind def
+
+ /printmiscinfo
+ {
+ dup /FontBBox known
+ {
+ (FontBBox) print
+ dup /FontBBox get aload pop prbbox ()=
+ }
+ {
+ (Comment missing required /FontBBox)=
+ quit
+ }
+ ifelse
+ 2 copy exch get
+ dup /H known
+ 1 index /x known and
+ 1 index /d known and
+ 1 index /p known and
+ dup /looksRoman exch def
+ {
+ (CapHeight ) print
+ (H) getbbox
+ ceiling cvi = pop pop pop
+ (XHeight ) print
+ (x) getbbox
+ ceiling cvi = pop pop pop
+ (Ascender ) print
+ (d) getbbox
+ ceiling cvi = pop pop pop
+ (Descender ) print
+ (p) getbbox
+ pop pop floor cvi = pop
+ }
+ {
+ (Comment font doesn't contain H, x, d and p; therefore no CapHeight, XHeight, Ascender and Descender)=
+ }
+ ifelse
+ pop
+ dup /Encoding get
+ [
+ [ (ISOLatin1Encoding) /ISOLatin1Encoding ]
+ [ (AdobeStandardEncoding) /StandardEncoding ]
+ ]
+ {
+ aload pop dup where
+ {
+ exch get 2 index eq
+ {
+ (EncodingScheme ) print
+ buf cvs =
+ }
+ {
+ pop
+ }
+ ifelse
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ forall
+ pop
+ }
+ bind def
+
+ /printcharmetric
+ {
+ % chardictname fontdict charnamedict encoding charindex charname
+
+ 4 index dup length dict dup begin exch
+ {
+ 1 index /FID ne
+ 2 index /UniqueID ne
+ and
+ {
+ 1 index /Encoding eq { 256 array copy } if
+ def
+ }
+ { pop pop }
+ ifelse
+ }
+ forall
+ end
+ dup /Encoding get 32 3 index put
+ /f2 exch definefont
+ setfont
+
+ (C ) print
+ 1 index buf cvs print
+
+ ( ; WX ) print
+% Metrics entries are:
+% 1 number: which is the character width
+% an array of 2 numbers: which are the left sidebearing and width
+% an array of 4 numbers: x & y left sidebearing, width and height
+ dup 5 index % /charname fontdict
+ dup /Metrics known {
+ /Metrics get exch 2 copy known {
+ get dup type /arraytype eq {
+ dup length 2 eq
+ {1 get} {2 get} ifelse
+ } if
+ round cvi buf cvs print
+ } {
+ pop pop ( ) stringwidth pop round cvi buf cvs print
+ } ifelse
+ } {
+ pop pop ( ) stringwidth pop round cvi buf cvs print
+ } ifelse
+
+ ( ; N ) print
+ dup buf cvs print
+
+ ( ; B) print
+ gsave
+ newpath 0 0 moveto
+ ( ) true charpath flattenpath pathbbox
+ grestore
+ 2 { ceiling cvi 4 1 roll } repeat
+ 2 { floor cvi 4 1 roll } repeat
+ prbbox
+
+ looksRoman
+ {
+ [
+ [ /f [ /i /f /l ] ]
+ [ /ff [ /i /l ] ]
+ ]
+ {
+ aload pop 1 index 3 index eq
+ {
+ {
+ 1 index buf cvs
+ length
+ 1 index buf2 cvs dup length
+ 2 index add
+ buf
+ 4 2 roll putinterval
+ buf 0
+ 3 -1 roll getinterval
+ dup cvn
+ 7 index
+ exch known
+ {
+ exch
+ ( ; L ) print
+ buf2 cvs print
+ ( ) print
+ print
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ forall
+ pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ forall
+ }
+ if
+ pop
+
+ ( ;)=
+ }
+ bind def
+
+ /printcharmetrics
+ {
+ (StartCharMetrics ) print
+ 2 copy exch get length 1 sub buf cvs =
+
+ 256 dict dup begin
+ 1 index /Encoding get
+ { null def }
+ forall
+ end
+ % chardictname fontdict charnamedict
+ 1 index /Encoding get
+ 0 1 255
+ {
+ % encoding index
+ 2 copy get
+ dup /.notdef eq { pop } { printcharmetric } ifelse
+ pop % index
+ } for
+
+ -1
+ 3 index 5 index get
+ {
+ pop
+ dup /.notdef eq
+ { pop }
+ {
+ % chardictname fontdict charnamedict encoding charindex charname
+ dup 4 index exch known
+ { pop }
+ { printcharmetric }
+ ifelse
+ }
+ ifelse
+ }
+ forall
+ % charnamedict encoding index
+ pop pop pop
+
+ (EndCharMetrics)=
+ }
+ bind def
+
+ /printfontmetrics
+ {
+ (StartFontMetrics 3.0)=
+ (Comment Produced by getafm 3.0 (which is by rj@rainbow.in-berlin.de))=
+
+ printfontname
+ printfontinfo
+ printmiscinfo
+ printcharmetrics
+
+ (EndFontMetrics)=
+ }
+ bind def
+
+end def
+
+/getafm
+{
+ getafmdict begin
+ save exch
+ findfont 1000 scalefont
+
+ null
+ [ /CharDefs /CharData /CharProcs /CharStrings ]
+ {
+ 2 index 1 index known { exch } if
+ pop
+ }
+ forall
+ dup null eq
+ {
+ (can't find dictionary with character data!)=
+ quit
+ }
+ if
+ exch % dictname fontdict
+
+ printfontmetrics
+
+ pop pop
+ restore
+ end
+}
+bind def
+
+/$1 getafm
+
+EOF
diff --git a/Master/texmf-dist/scripts/psutils/showchar.sh b/Master/texmf-dist/scripts/psutils/showchar.sh
new file mode 100755
index 00000000000..e685e99ae8c
--- /dev/null
+++ b/Master/texmf-dist/scripts/psutils/showchar.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+# showchar: show character with information
+# usage:
+# showchar Font-Name Char-Name | lpr -Pprinter
+
+if [ $# != 2 ]; then
+ echo "Usage: `basename $0` Font-Name Char-Name" >&2
+ exit 1
+fi
+
+cat <<EOF
+%!
+% Get character metrics and bounding box for $1
+/ns 30 string def
+/fname /$1 def
+/cname /$2 def
+/fn fname findfont 1000 scalefont def
+/thin 0.7 def
+/reduction 2.0 def
+
+/sn { ns cvs show } def
+/sc { (\()show exch sn (,)show sn (\))show } def
+
+/Times-Roman findfont 10 scalefont setfont
+
+72 242 translate % one inch in, 3 1/2 inch up
+newpath 0 0 moveto
+gsave % print character name
+ 0 468 rmoveto
+ ($2 from font $1 displayed on `date` by `basename $0` 1.00 (C) AJCD 1991)
+ show
+grestore
+
+gsave
+ thin setlinewidth % cross hairs
+ -9 0 rmoveto 18 0 rlineto
+ -9 -9 rmoveto 0 18 rlineto
+ stroke % position info
+ -9 -9 moveto ((0,0)) stringwidth pop neg 0 rmoveto
+ ((0,0)) show
+grestore
+
+% create encoding with a single character at all positions
+/MyEncoding 256 array def
+
+0 1 255 { % fill out with notdefs
+ MyEncoding exch cname put
+} for
+
+fn dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding MyEncoding def
+ currentdict
+end /newfont exch definefont
+/fn exch def
+/en MyEncoding def
+
+gsave % draw character (enlarged)
+ .75 setgray
+ fn 1 reduction div scalefont setfont
+ (\000) show
+grestore
+
+% show character info
+fn /Metrics known {
+ dup fn /Metrics get exch get
+ dup type /arraytype eq {
+ dup length 2 eq
+ {1 get 0} {dup 2 get exch 3 get} ifelse
+ } {
+ round 0
+ } ifelse
+} {
+ gsave
+ fn setfont (\000) stringwidth round exch round exch
+ grestore
+} ifelse
+gsave % show width
+ thin setlinewidth
+ 2 copy
+ reduction div exch reduction div exch rlineto
+ gsave
+ 1 1 rmoveto sc
+ grestore
+ -4 -3 rlineto 0 6 rmoveto 4 -3 rlineto
+ stroke
+grestore
+
+gsave
+ gsave % get bounding box
+ fn setfont
+ (\000) true charpath flattenpath pathbbox
+ grestore
+ thin setlinewidth
+ 3 index reduction div % put coords on top of stack
+ 3 index reduction div
+ 3 index reduction div
+ 3 index reduction div
+ 3 index 3 index moveto
+ gsave % llx lly
+ 0 -9 rmoveto 7 index 7 index sc
+ grestore
+ 1 index 3 index lineto
+ gsave % urx lly
+ 0 -9 rmoveto 5 index 7 index sc
+ grestore
+ 1 index 1 index lineto
+ gsave % urx ury
+ 0 9 rmoveto 5 index 5 index sc
+ grestore
+ 3 index 1 index lineto
+ gsave % llx ury
+ 0 9 rmoveto 7 index 5 index sc
+ grestore
+ closepath stroke
+grestore
+showpage
+EOF