pic: use troff drawing commands for filling objects
[troff.git] / home / ps / dpost.ps
blob2b74e283dd85300bd3971b0127ec12963cdefef3
2 % Version 3.3.2 prologue for troff files.
5 /#copies 1 store
6 /aspectratio 1 def
7 /formsperpage 1 def
8 /landscape false def
9 /linewidth .4 def
10 /magnification 1 def
11 /margin 0 def
12 /orientation 0 def
13 /resolution 720 def
14 /rotation 1 def
15 /xoffset 0 def
16 /yoffset 0 def
18 /roundpage true def
19 /useclippath true def
20 /pagebbox [0 0 612 792] def
22 /R  /Times-Roman def
23 /I  /Times-Italic def
24 /B  /Times-Bold def
25 /BI /Times-BoldItalic def
26 /H  /Helvetica def
27 /HI /Helvetica-Oblique def
28 /HB /Helvetica-Bold def
29 /HX /Helvetica-BoldOblique def
30 /CW /Courier def
31 /CO /Courier def
32 /CI /Courier-Oblique def
33 /CB /Courier-Bold def
34 /CX /Courier-BoldOblique def
35 /PA /Palatino-Roman def
36 /PI /Palatino-Italic def
37 /PB /Palatino-Bold def
38 /PX /Palatino-BoldItalic def
39 /Hr /Helvetica-Narrow def
40 /Hi /Helvetica-Narrow-Oblique def
41 /Hb /Helvetica-Narrow-Bold def
42 /Hx /Helvetica-Narrow-BoldOblique def
43 /KR /Bookman-Light def
44 /KI /Bookman-LightItalic def
45 /KB /Bookman-Demi def
46 /KX /Bookman-DemiItalic def
47 /AR /AvantGarde-Book def
48 /AI /AvantGarde-BookOblique def
49 /AB /AvantGarde-Demi def
50 /AX /AvantGarde-DemiOblique def
51 /NR /NewCenturySchlbk-Roman def
52 /NI /NewCenturySchlbk-Italic def
53 /NB /NewCenturySchlbk-Bold def
54 /NX /NewCenturySchlbk-BoldItalic def
55 /ZD /ZapfDingbats def
56 /ZI /ZapfChancery-MediumItalic def
57 /S  /S def
58 /S1 /S1 def
59 /GR /Symbol def
61 /inch {72 mul} bind def
62 /min {2 copy gt {exch} if pop} bind def
64 /setup {
65         counttomark 2 idiv {def} repeat pop
67         landscape {/orientation 90 orientation add def} if
68         /scaling 72 resolution div def
69         linewidth setlinewidth
70         1 setlinecap
72         pagedimensions
73         xcenter ycenter translate
74         orientation rotation mul rotate
75         width 2 div neg height 2 div translate
76         xoffset inch yoffset inch neg translate
77         margin 2 div dup neg translate
78         magnification dup aspectratio mul scale
79         scaling scaling scale
81         addmetrics
82         0 0 moveto
83 } def
85 /pagedimensions {
86         useclippath userdict /gotpagebbox known not and {
87                 /pagebbox [clippath pathbbox newpath] def
88                 roundpage currentdict /roundpagebbox known and {roundpagebbox} if
89         } if
90         pagebbox aload pop
91         4 -1 roll exch 4 1 roll 4 copy
92         landscape {4 2 roll} if
93         sub /width exch def
94         sub /height exch def
95         add 2 div /xcenter exch def
96         add 2 div /ycenter exch def
97         userdict /gotpagebbox true put
98 } def
100 /addmetrics {
101         /Symbol /S null Sdefs cf
102         /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
103 } def
105 /pagesetup {
106         /page exch def
107         currentdict /pagedict known currentdict page known and {
108                 page load pagedict exch get cvx exec
109         } if
110 } def
112 /decodingdefs [
113         {counttomark 2 idiv {y moveto show} repeat}
114         {neg /y exch def counttomark 2 idiv {y moveto show} repeat}
115         {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
116         {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
117         {counttomark 2 idiv {y moveto show} repeat}
118         {neg setfunnytext}
119 ] def
121 /setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
123 /w {neg moveto show} bind def
124 /m {neg dup /y exch def moveto} bind def
125 /g {neg moveto {glyphshow} forall} bind def
126 /done {/lastpage where {pop lastpage} if} def
128 % caching fonts returned from findfont in fncache
129 /fncache 7 array def
130 /fncidx 0 def
131 /fontlookup {
132         /fsize exch def
133         /fname exch def
134         /font null def
135         fncache {
136                 /ent exch def
137                 ent null eq not {
138                         ent 0 get fname eq {
139                                 /font ent 1 get def
140                         } if
141                 } if
142         } forall
143         font null eq {
144                 /font fname findfont def
145                 fncache fncidx [fname font] put
146                 /fncidx fncidx 1 add def
147                 fncidx fncache length ge {
148                         /fncidx 0 def
149                 } if
150         } if
151         font fsize scalefont
152 } bind def
154 % ideally it should have been more efficient to replace "fontlookup
155 % setfont" with "selectfont"; according to adobe docs selectfont
156 % should cache fonts but ghostscript's implementation doesn't, so
157 % we do our own caching in fontlookup.
158 /f {
159         /font exch def /ptsize exch def
160         ptsize scaling div /size exch def
161         font size fontlookup setfont
162         linewidth ptsize mul scaling 10 mul div setlinewidth
163         /spacewidth ( ) stringwidth pop def
164 } bind def
166 /changefont {
167         /fontheight exch def
168         /fontslant exch def
169         currentfont [
170                 1 0
171                 fontheight ptsize div fontslant sin mul fontslant cos div
172                 fontheight ptsize div
173                 0 0
174         ] makefont setfont
175 } bind def
177 /sf {f} bind def
179 /cf {
180         dup length 2 idiv
181         /entries exch def
182         /chtab exch def
183         /newencoding exch def
184         /newfont exch def
186         findfont dup length 1 add dict
187         /newdict exch def
188         {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
190         newencoding type /arraytype eq {newdict /Encoding newencoding put} if
192         newdict /Metrics entries dict put
193         newdict /Metrics get
194         begin
195                 chtab aload pop
196                 1 1 entries {pop def} for
197                 newfont newdict definefont pop
198         end
199 } bind def
202 % A few arrays used to adjust reference points and character widths in some
203 % of the printer resident fonts. If square roots are too high try changing
204 % the lines describing /radical and /radicalex to,
206 %       /radical        [0 -75 550 0]
207 %       /radicalex      [-50 -75 500 0]
209 % Move braceleftbt a bit - default PostScript character is off a bit.
212 /Sdefs [
213         /bracketlefttp          [201 500]
214         /bracketleftbt          [201 500]
215         /bracketrighttp         [-81 380]
216         /bracketrightbt         [-83 380]
217         /braceleftbt            [203 490]
218         /bracketrightex         [220 -125 500 0]
219         /radical                [0 0 550 0]
220         /radicalex              [-50 0 500 0]
221         /parenleftex            [-20 -170 0 0]
222         /integral               [100 -50 500 0]
223         /infinity               [10 -75 730 0]
224 ] def
226 /S1defs [
227         /underscore             [0 80 500 0]
228         /endash                 [7 90 650 0]
229 ] def