Initial Commit
This commit is contained in:
130
database/php/extras/fonts/ps/print_glyphs.ps
Normal file
130
database/php/extras/fonts/ps/print_glyphs.ps
Normal file
@@ -0,0 +1,130 @@
|
||||
%!PS-Adobe
|
||||
% print_glyphs.ps
|
||||
% Copyright (C) Thomas Merz 1994-2002
|
||||
%
|
||||
% This PostScript program prints all glyphs in a font along
|
||||
% with their names in alphabetical ordering.
|
||||
% It requires a PostScript Level 2 or PostScript 3 interpreter.
|
||||
% It also works with Acrobat Distiller.
|
||||
%
|
||||
% Usage:
|
||||
% - The font must either be resident in the printer, or be
|
||||
% downloaded ahead of this program (as a single job).
|
||||
% Alternatively, the font can be configure in Distiller.
|
||||
% - At the end of this file, enter a line with the font name, e.g.:
|
||||
% /Times-Roman ShowGlyphs
|
||||
% (Omit the percent character, but leave the leading slash '/')
|
||||
|
||||
|
||||
/$sort 20 dict def
|
||||
|
||||
/Insert { % node string ==> -
|
||||
exch dup 0 get type (nulltype) eq { % ifelse
|
||||
exch [ exch 1 array 1 array ] 0 exch put
|
||||
}{ % else
|
||||
aload pop aload pop 4 2 roll 2 copy gt { % ifelse
|
||||
pop 3 -1 roll pop Insert
|
||||
}{ %else
|
||||
pop exch pop Insert
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
|
||||
/PrefixWalk {
|
||||
$sort begin
|
||||
cvx /!bt exch def bpwalk
|
||||
end
|
||||
} def
|
||||
|
||||
$sort begin
|
||||
/bpwalk {
|
||||
dup 0 get type /nulltype eq { pop }{ % ifelse
|
||||
aload pop aload pop exch bpwalk exch !bt bpwalk
|
||||
} ifelse
|
||||
} bind def
|
||||
|
||||
end % $sort
|
||||
|
||||
/DictSort { % dict ==> array
|
||||
dup length array /a exch def
|
||||
$sort begin
|
||||
/tree 1 array def
|
||||
{ pop 50 string cvs tree exch Insert } forall
|
||||
/ndx 0 def
|
||||
tree { a ndx 3 -1 roll put /ndx ndx 1 add def } PrefixWalk
|
||||
a
|
||||
} bind def
|
||||
|
||||
/ShowGlyphs { % font name ==> -
|
||||
/buffer 100 string def
|
||||
/FontName 100 string def
|
||||
/fs 20 def % font size
|
||||
/ts 7 def % font size of caption
|
||||
/ls fs 1.75 mul def % line spacing
|
||||
|
||||
dup FontName cvs pop
|
||||
findfont fs scalefont /F exch def
|
||||
|
||||
clippath pathbbox
|
||||
20 sub /top exch def
|
||||
20 sub /right exch def
|
||||
20 add /bottom exch def
|
||||
40 add /left exch def
|
||||
|
||||
/textfont /Helvetica-Narrow findfont ts scalefont def
|
||||
/x left def
|
||||
/y top fs sub def
|
||||
|
||||
/Helvetica-Bold findfont fs scalefont setfont
|
||||
x y moveto
|
||||
/y y ls sub def
|
||||
|
||||
% Check the interpreter's language level...
|
||||
/languagelevel where { pop languagelevel }{ 1 } ifelse
|
||||
|
||||
% ...and quit if Level 1
|
||||
2 lt {
|
||||
(Error: this program doesn't work on PostScript Level 1 printers!)show
|
||||
showpage
|
||||
stop
|
||||
} if
|
||||
|
||||
FontName show % print font name
|
||||
|
||||
% Try to find the dictionary with the character names
|
||||
F /CharStrings known {
|
||||
F /CharStrings get
|
||||
}{
|
||||
(: Couldn't find character names (CharStrings dictionary)!) show
|
||||
showpage
|
||||
quit
|
||||
} ifelse
|
||||
|
||||
DictSort % sort the character names
|
||||
|
||||
{ % forall
|
||||
/GlyphName exch def % remember the character name
|
||||
|
||||
x y moveto F setfont % the actual character...
|
||||
GlyphName cvn glyphshow
|
||||
|
||||
x y ts 2 mul sub moveto % ...and its glyph name
|
||||
textfont setfont GlyphName buffer cvs show
|
||||
|
||||
/x x fs 2 mul add def
|
||||
x right gt { /x left def /y y fs 2 mul sub def } if
|
||||
y bottom lt {
|
||||
/y top fs sub def /x left def
|
||||
showpage
|
||||
x y moveto
|
||||
/y y ls sub def
|
||||
/Helvetica-Bold findfont fs scalefont setfont
|
||||
FontName show % print font name
|
||||
} if
|
||||
} forall
|
||||
y top ls sub ne x left ne or { showpage } if
|
||||
|
||||
} bind def
|
||||
|
||||
% Example:
|
||||
%/Times-Roman ShowGlyphs
|
||||
Reference in New Issue
Block a user