2 13f7391e 2004-05-15 devnull % Stuff used to draw or set text along a baseline specified by parametric equations
3 13f7391e 2004-05-15 devnull % for x and y.
6 13f7391e 2004-05-15 devnull /left -1 def
7 13f7391e 2004-05-15 devnull /center 0 def
8 13f7391e 2004-05-15 devnull /right 1 def
10 13f7391e 2004-05-15 devnull /baselinedict 50 dict def
12 13f7391e 2004-05-15 devnull /newbaseline {
13 13f7391e 2004-05-15 devnull baselinedict begin
14 13f7391e 2004-05-15 devnull /g' exch bind def
15 13f7391e 2004-05-15 devnull /f' exch bind def
16 13f7391e 2004-05-15 devnull /g exch bind def
17 13f7391e 2004-05-15 devnull /f exch bind def
19 13f7391e 2004-05-15 devnull counttomark 2 eq {/hoffset exch def} if
20 13f7391e 2004-05-15 devnull /res exch def
24 13f7391e 2004-05-15 devnull /voffset false def
25 13f7391e 2004-05-15 devnull cleartomark
27 13f7391e 2004-05-15 devnull } bind def
29 13f7391e 2004-05-15 devnull /drawfunnytext {
30 13f7391e 2004-05-15 devnull baselinedict begin
31 13f7391e 2004-05-15 devnull /t exch def
32 13f7391e 2004-05-15 devnull /mode exch def
33 13f7391e 2004-05-15 devnull /str exch def
35 13f7391e 2004-05-15 devnull mode left eq {
36 13f7391e 2004-05-15 devnull /leftstring emptystring def
37 13f7391e 2004-05-15 devnull /rightstring str def
40 13f7391e 2004-05-15 devnull mode right eq {
41 13f7391e 2004-05-15 devnull /leftstring str reversestring def
42 13f7391e 2004-05-15 devnull /rightstring emptystring def
45 13f7391e 2004-05-15 devnull mode center eq {
46 13f7391e 2004-05-15 devnull str splitstring
47 13f7391e 2004-05-15 devnull /rightstring exch def
48 13f7391e 2004-05-15 devnull /leftstring exch reversestring def
51 13f7391e 2004-05-15 devnull gsave currentpoint translate leftstring left t baselineshow grestore
52 13f7391e 2004-05-15 devnull gsave currentpoint translate rightstring right t baselineshow grestore
56 13f7391e 2004-05-15 devnull /voffset false def
57 13f7391e 2004-05-15 devnull cleartomark
59 13f7391e 2004-05-15 devnull } bind def
61 13f7391e 2004-05-15 devnull /setfunnytext {
62 13f7391e 2004-05-15 devnull baselinedict begin
63 13f7391e 2004-05-15 devnull /vpos exch def
64 13f7391e 2004-05-15 devnull /hpos exch def
65 13f7391e 2004-05-15 devnull /str exch def
67 13f7391e 2004-05-15 devnull voffset vpos ne {
68 13f7391e 2004-05-15 devnull /voffset vpos def
70 13f7391e 2004-05-15 devnull /s hoffset def
74 13f7391e 2004-05-15 devnull hoffset voffset translate
75 13f7391e 2004-05-15 devnull 0 0 moveto
76 13f7391e 2004-05-15 devnull /ds hpos s sub def
77 13f7391e 2004-05-15 devnull /dt ds t f' dup mul t g' dup mul add sqrt res mul div def
78 13f7391e 2004-05-15 devnull /s s ds add def
79 13f7391e 2004-05-15 devnull /t t dt add def
80 13f7391e 2004-05-15 devnull str right t baselineshow
83 13f7391e 2004-05-15 devnull } bind def
85 13f7391e 2004-05-15 devnull baselinedict begin
87 13f7391e 2004-05-15 devnull /f {} bind def
88 13f7391e 2004-05-15 devnull /g {pop 0} bind def
89 13f7391e 2004-05-15 devnull /f' {pop 1} bind def
90 13f7391e 2004-05-15 devnull /g' {pop 0} bind def
94 13f7391e 2004-05-15 devnull /res 72 def
96 13f7391e 2004-05-15 devnull /onecharstring ( ) def
97 13f7391e 2004-05-15 devnull /emptystring () def
99 13f7391e 2004-05-15 devnull /baselineshow {
100 13f7391e 2004-05-15 devnull /t exch def
101 13f7391e 2004-05-15 devnull /mode exch def
102 13f7391e 2004-05-15 devnull /str exch def
105 13f7391e 2004-05-15 devnull t f res mul t g res mul translate
106 13f7391e 2004-05-15 devnull 0 0 moveto
107 13f7391e 2004-05-15 devnull t g' t f' atan rotate
109 13f7391e 2004-05-15 devnull mode right eq {pop} if
110 13f7391e 2004-05-15 devnull grestore gsave
111 13f7391e 2004-05-15 devnull onecharstring 0 3 -1 roll put onecharstring stringwidth pop
112 13f7391e 2004-05-15 devnull /ds exch mode mul def
113 13f7391e 2004-05-15 devnull /dt ds t f' dup mul t g' dup mul add sqrt res mul div def
114 13f7391e 2004-05-15 devnull /t t dt add def
115 13f7391e 2004-05-15 devnull /s s ds add def
116 13f7391e 2004-05-15 devnull t f res mul t g res mul translate
117 13f7391e 2004-05-15 devnull 0 0 moveto
118 13f7391e 2004-05-15 devnull t g' t f' atan rotate
119 13f7391e 2004-05-15 devnull mode left eq {pop} if
120 13f7391e 2004-05-15 devnull } str kshow
121 13f7391e 2004-05-15 devnull grestore
122 13f7391e 2004-05-15 devnull } bind def
124 13f7391e 2004-05-15 devnull /reversestring {
125 13f7391e 2004-05-15 devnull /str1 exch def
127 13f7391e 2004-05-15 devnull /str2 str1 length string def
128 13f7391e 2004-05-15 devnull /i 0 def
129 13f7391e 2004-05-15 devnull /n str1 length 1 sub def
132 13f7391e 2004-05-15 devnull str1 n get str2 exch i exch put
133 13f7391e 2004-05-15 devnull /i i 1 add def
134 13f7391e 2004-05-15 devnull /n n 1 sub def
135 13f7391e 2004-05-15 devnull n 0 lt {exit} if
138 13f7391e 2004-05-15 devnull } bind def
140 13f7391e 2004-05-15 devnull /splitstring {
141 13f7391e 2004-05-15 devnull /str1 exch def
143 13f7391e 2004-05-15 devnull /len str1 stringwidth pop def
144 13f7391e 2004-05-15 devnull /s 0 def
145 13f7391e 2004-05-15 devnull /n 0 def
146 13f7391e 2004-05-15 devnull str1 length {
147 13f7391e 2004-05-15 devnull str1 n get onecharstring exch 0 exch put
148 13f7391e 2004-05-15 devnull /s onecharstring stringwidth pop s add def
149 13f7391e 2004-05-15 devnull s len 2 div ge {exit} if
150 13f7391e 2004-05-15 devnull /n n 1 add def
151 13f7391e 2004-05-15 devnull } repeat
152 13f7391e 2004-05-15 devnull str1 0 n 1 add getinterval
153 13f7391e 2004-05-15 devnull str1 n str1 length n sub getinterval
154 13f7391e 2004-05-15 devnull } bind def