307 lines
7.9 KiB
PostScript
307 lines
7.9 KiB
PostScript
##set pageNumFont="Futura"
|
|
##set dirNameFont="Futura-Heavy"
|
|
##set fontsNeeded="${font} Symbol Futura Futura-Heavy"
|
|
##set includeFontComments=<<"END"
|
|
%%IncludeResource: font ${font}
|
|
%%IncludeResource: font Symbol
|
|
%%IncludeResource: font Futura
|
|
%%IncludeResource: font Futura-Heavy
|
|
END
|
|
##if ${font} eq Courier
|
|
##set charShrinkFactor=0.93
|
|
##set zeroGlyph=Oslash
|
|
##set underscoreGlyph=underscore
|
|
##set bulletGlyph=bullet
|
|
##set tabGlyph=currency
|
|
##set leftQuoteGlyph=quoteleft
|
|
##set rightQuoteGlyph=quoteright
|
|
##set pilcrowGlyph=paragraph
|
|
##set barGlyph=bar
|
|
##else
|
|
##set charShrinkFactor=1
|
|
##set zeroGlyph=Oslash
|
|
##set underscoreGlyph=underscore2
|
|
##set bulletGlyph=bullet2
|
|
##set tabGlyph=tabsym
|
|
##set leftQuoteGlyph=grave
|
|
##set rightQuoteGlyph=quoteright ### was "acute"
|
|
##set pilcrowGlyph=erase
|
|
##set barGlyph=orsym
|
|
##set do_custom_chars=1
|
|
##endif
|
|
%!PS-Adobe-3.0
|
|
%%Orientation: Portrait
|
|
%%Pages: (atend)
|
|
%%DocumentNeededResources: font ${fontsNeeded}
|
|
%%DocumentMedia: Letter 612 792 74 white ()
|
|
%%EndComments
|
|
%%BeginDefaults
|
|
%%PageMedia: Letter
|
|
%%PageResources: font ${fontsNeeded}
|
|
%%EndDefaults
|
|
%%BeginProlog
|
|
%%BeginResource: procset Custom-Preamble 0 0
|
|
%
|
|
% Document definitions
|
|
% (Upper case to avoid collisions)
|
|
%
|
|
|
|
% 8.5x11 paper is 612x792 points, but 24 points near the edge or so
|
|
% shouldn't be used.
|
|
/Topmargin 770 def
|
|
/Leftmargin 30 def
|
|
/Rightmargin 612 Leftmargin sub def
|
|
/Botmargin 22 def
|
|
/Bindoffset 40 def
|
|
|
|
/Lineskip -10 def
|
|
% How much to shrink characters by?
|
|
/Factor ${charShrinkFactor} def
|
|
/Fontsize 9.5 Factor mul def
|
|
% (1000 units is std height, so Courier at 6/10 aspect ratio is 600.
|
|
% Widen to make up for scaling loss.
|
|
/Charwidth
|
|
Rightmargin Leftmargin sub Bindoffset sub 87 div Fontsize div 1000 mul
|
|
def
|
|
|
|
% Print a header (expects page number on stack)
|
|
/OddPageStart
|
|
{ save exch /MyFont findfont Fontsize scalefont setfont
|
|
/CurrentLeft Leftmargin Bindoffset add def
|
|
/CurrentRight Rightmargin def
|
|
CurrentLeft Topmargin moveto } def
|
|
|
|
/EvenPageStart
|
|
{ save exch /MyFont findfont Fontsize scalefont setfont
|
|
/CurrentLeft Leftmargin def
|
|
/CurrentRight Rightmargin Bindoffset sub def
|
|
CurrentLeft Topmargin moveto } def
|
|
|
|
% /MyFont findfont [Fontsize 0 0 Fontsize 0 0] makefont setfont
|
|
|
|
% Print the name of the directory in a large font
|
|
/DirPage
|
|
{
|
|
/${dirNameFont} findfont 14 scalefont setfont
|
|
0 -10 rmoveto (Directory) show
|
|
CurrentLeft 30 add currentpoint exch pop 20 sub moveto show
|
|
} def
|
|
|
|
% Advance a line
|
|
/L {show CurrentLeft currentpoint exch pop Lineskip add moveto} bind def
|
|
|
|
% Print the "inside" footer line using P (string font => )
|
|
% We do some magic involving redefining P to first measure the
|
|
% width of this string and then print it, so you must use it
|
|
% to do all printing.
|
|
/Foot {
|
|
##ifdef footerFile
|
|
##include "${footerFile}"
|
|
##endif
|
|
} def
|
|
|
|
% /P is defined in the Setup section
|
|
|
|
% Print an odd footer
|
|
/OddPageEnd
|
|
{ CurrentLeft Botmargin moveto CurrentRight Botmargin lineto
|
|
1 setlinewidth stroke
|
|
CurrentLeft Botmargin 10 sub moveto
|
|
Foot
|
|
10 string cvs dup stringwidth
|
|
pop CurrentRight exch sub currentpoint exch pop moveto
|
|
/${pageNumFont} P
|
|
showpage
|
|
restore
|
|
} def
|
|
|
|
% Print an even footer
|
|
/EvenPageEnd
|
|
{ CurrentLeft Botmargin moveto CurrentRight Botmargin lineto
|
|
1 setlinewidth stroke
|
|
Leftmargin Botmargin 10 sub moveto
|
|
/${pageNumFont} P
|
|
CurrentRight FootWidth sub currentpoint exch pop moveto
|
|
Foot
|
|
showpage
|
|
restore
|
|
} def
|
|
|
|
##ifdef do_custom_chars
|
|
% A 1000-point OCRB discunderline consists of:
|
|
% 111.45 -173.688 moveto
|
|
% 609.356 -173.688 lineto
|
|
% 609.356 -70.9227 lineto
|
|
% 111.45 -70.9227 lineto
|
|
% closepath
|
|
% 720.0 -0.0 moveto
|
|
% Line thickness is
|
|
% 102.7653 pts.
|
|
|
|
% This would suggest the following values:
|
|
/underleft 111.45 def
|
|
/underright 609.356 def
|
|
/underthick 102.7643 def
|
|
/underup underthick def
|
|
/underdown 0 def
|
|
/underserif 25 def
|
|
|
|
% These look better in GhostScript, but not on a real Adobe rasterizer
|
|
%/underright 600 def
|
|
%/underleft 100 def
|
|
%/underthick 75 def
|
|
|
|
171
|
|
211
|
|
36081
|
|
% The default bullet character is
|
|
% 254.0 341.0 moveto
|
|
% 254.0 170.0 lineto
|
|
% 465.0 170.0 lineto
|
|
% 465.0 341.0 lineto
|
|
% closepath
|
|
% Our modified version is based on:
|
|
/bullwid 204 def
|
|
/bullht 176.75 def
|
|
/bullleft 254 341 add bullwid sub 2 div def
|
|
/bullright 254 341 add bullwid add 2 div def
|
|
/bullbot 254 def
|
|
/bulltop bullbot bullht add def
|
|
|
|
% And a custom-created tab symbol
|
|
/tableft 250 def
|
|
/tabright 550 def
|
|
/tabtop 550 def
|
|
/tabbot 50 def
|
|
/tablinewidth 35 def
|
|
|
|
% Let's try a vertical bar
|
|
% OCRB defines (|)
|
|
% 411.062 -173.688 moveto
|
|
% 411.062 741.043 lineto
|
|
% 308.297 741.043 lineto
|
|
% 308.297 -173.688 lineto
|
|
% closepath
|
|
% 720.0 -0.0 moveto
|
|
/orleft 308.297 def
|
|
/orright 411.062 def
|
|
/orbot -173.688 def
|
|
/ortop 741.043 def
|
|
/orbreak 150 def % Width of break
|
|
/orbbot ortop orbot add orbreak sub 2 div def % Bottom of break
|
|
/orbtop ortop orbot add orbreak add 2 div def % Top of break
|
|
##endif
|
|
|
|
% newfontname encoding-vec fontname -> - make a new encoded font
|
|
/MF2 {
|
|
% Make a dict for the new font, with room for the /Metrics
|
|
findfont dup length 1 add dict begin
|
|
% Copy everything except the FID entry
|
|
{1 index /FID eq {pop pop} {def} ifelse} forall
|
|
% Set the encoding vector
|
|
/Encoding exch def
|
|
|
|
##ifdef do_custom_chars
|
|
% Create a new expanded CharStrings dictionary
|
|
CharStrings dup length 5 add dict
|
|
begin { def } forall
|
|
% Create a custom underscore character
|
|
/underscore2 {
|
|
pop
|
|
//Charwidth 0 % width, bounding box follows
|
|
//underleft //underdown neg //underright //underthick //underup add
|
|
setcachedevice
|
|
//underleft //underthick //underup add moveto
|
|
//underleft //underserif add //underthick //underup add lineto
|
|
//underleft //underserif add //underthick lineto
|
|
//underright //underserif sub //underthick lineto
|
|
//underright //underserif sub //underthick //underup add lineto
|
|
//underright //underthick //underup add lineto
|
|
//underright //underdown neg lineto
|
|
//underright //underserif sub //underdown neg lineto
|
|
//underright //underserif sub 0 lineto
|
|
//underleft //underserif add 0 lineto
|
|
//underleft //underserif add //underdown neg lineto
|
|
//underleft //underdown neg lineto
|
|
closepath fill
|
|
} bind def
|
|
% Create a custom bullet character.
|
|
/bullet2 {
|
|
pop
|
|
//Charwidth 0 % width, bounding box follows
|
|
//bullleft //bullbot //bullright //bulltop
|
|
setcachedevice
|
|
//bullleft //bullbot moveto
|
|
//bullleft bullright add 2 div bulltop lineto
|
|
//bullright //bullbot lineto
|
|
closepath fill
|
|
} bind def
|
|
% Create a custom tab character.
|
|
/tabsym {
|
|
pop
|
|
//Charwidth 0 % width, bounding box follows
|
|
//tableft //tablinewidth sub //tabbot //tablinewidth sub
|
|
//tabright //tablinewidth add //tabtop //tablinewidth add
|
|
setcachedevice
|
|
//tablinewidth setlinewidth
|
|
true setstrokeadjust
|
|
0 setlinejoin
|
|
//tableft //tabbot moveto
|
|
//tabright //tabtop //tabbot add 2 div lineto
|
|
//tableft //tabtop lineto
|
|
closepath stroke
|
|
} bind def
|
|
/orsym {
|
|
pop
|
|
//Charwidth 0 % width, bounding box follows
|
|
//orleft //orbot //orright //ortop
|
|
setcachedevice
|
|
//orleft //orbot moveto
|
|
//orleft //orbbot lineto
|
|
//orright //orbbot lineto
|
|
//orright //orbot lineto
|
|
closepath
|
|
//orleft //ortop moveto
|
|
//orleft //orbtop lineto
|
|
//orright //orbtop lineto
|
|
//orright //ortop lineto
|
|
closepath fill
|
|
} bind def
|
|
/CharStrings currentdict end def
|
|
##endif
|
|
|
|
% Create a new dict to be the /Metrics values
|
|
CharStrings dup length dict
|
|
% Now fill in the metrics dict with the desired width
|
|
begin { pop Charwidth def } forall /Metrics currentdict end def
|
|
% End of definitions
|
|
currentdict end
|
|
% Define the font
|
|
definefont pop
|
|
} bind def
|
|
|
|
% Check PostScript language level.
|
|
/gs_languagelevel /languagelevel where { pop languagelevel } { 1 } ifelse def
|
|
|
|
%%EndResource
|
|
##include "charmap.ps"
|
|
${includeFontComments}
|
|
%%EndProlog
|
|
|
|
|
|
%%BeginSetup
|
|
|
|
/MyFont Latin1-vec /${font} MF2
|
|
/#copies 1 def
|
|
|
|
% Compute the width of the /Foot string, by defining P to
|
|
% add up the x-width of the characters.
|
|
/P { findfont 9 scalefont setfont stringwidth pop add } def
|
|
/FootWidth 0 Foot def
|
|
% Redefine P to print, as usual
|
|
/P { findfont 9 scalefont setfont show } def
|
|
%%BeginResource: procset foo 0 0
|
|
% This is an example
|
|
%%EndResource
|
|
%%EndSetup
|