%% Stuff used to draw or set text along a baseline specified by parametric equations% for x and y.%/left -1 def/center 0 def/right 1 def/baselinedict 50 dict def/newbaseline { baselinedict begin /g' exch bind def /f' exch bind def /g exch bind def /f exch bind def counttomark 2 eq {/hoffset exch def} if /res exch def /t 0 def /s 0 def /voffset false def cleartomark end} bind def/drawfunnytext { baselinedict begin /t exch def /mode exch def /str exch def mode left eq { /leftstring emptystring def /rightstring str def } if mode right eq { /leftstring str reversestring def /rightstring emptystring def } if mode center eq { str splitstring /rightstring exch def /leftstring exch reversestring def } if gsave currentpoint translate leftstring left t baselineshow grestore gsave currentpoint translate rightstring right t baselineshow grestore /t 0 def /s 0 def /voffset false def cleartomark end} bind def/setfunnytext { baselinedict begin /vpos exch def /hpos exch def /str exch def voffset vpos ne { /voffset vpos def /t 0 def /s hoffset def } if gsave hoffset voffset translate 0 0 moveto /ds hpos s sub def /dt ds t f' dup mul t g' dup mul add sqrt res mul div def /s s ds add def /t t dt add def str right t baselineshow grestore end} bind defbaselinedict begin/f {} bind def/g {pop 0} bind def/f' {pop 1} bind def/g' {pop 0} bind def/s 0 def/t 0 def/res 72 def/onecharstring ( ) def/emptystring () def/baselineshow { /t exch def /mode exch def /str exch def gsave t f res mul t g res mul translate 0 0 moveto t g' t f' atan rotate { mode right eq {pop} if grestore gsave onecharstring 0 3 -1 roll put onecharstring stringwidth pop /ds exch mode mul def /dt ds t f' dup mul t g' dup mul add sqrt res mul div def /t t dt add def /s s ds add def t f res mul t g res mul translate 0 0 moveto t g' t f' atan rotate mode left eq {pop} if } str kshow grestore} bind def/reversestring { /str1 exch def /str2 str1 length string def /i 0 def /n str1 length 1 sub def { str1 n get str2 exch i exch put /i i 1 add def /n n 1 sub def n 0 lt {exit} if } loop str2} bind def/splitstring { /str1 exch def /len str1 stringwidth pop def /s 0 def /n 0 def str1 length { str1 n get onecharstring exch 0 exch put /s onecharstring stringwidth pop s add def s len 2 div ge {exit} if /n n 1 add def } repeat str1 0 n 1 add getinterval str1 n str1 length n sub getinterval} bind defend
%
% Stuff used to draw or set text along a baseline specified by parametric equations
% for x and y.
%
/left -1 def
/center 0 def
/right 1 def
/baselinedict 50 dict def
/newbaseline {
baselinedict begin
/g' exch bind def
/f' exch bind def
/g exch bind def
/f exch bind def
counttomark 2 eq {/hoffset exch def} if
/res exch def
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/drawfunnytext {
baselinedict begin
/t exch def
/mode exch def
/str exch def
mode left eq {
/leftstring emptystring def
/rightstring str def
} if
mode right eq {
/leftstring str reversestring def
/rightstring emptystring def
} if
mode center eq {
str splitstring
/rightstring exch def
/leftstring exch reversestring def
} if
gsave currentpoint translate leftstring left t baselineshow grestore
gsave currentpoint translate rightstring right t baselineshow grestore
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/setfunnytext {
baselinedict begin
/vpos exch def
/hpos exch def
/str exch def
voffset vpos ne {
/voffset vpos def
/t 0 def
/s hoffset def
} if
gsave
hoffset voffset translate
0 0 moveto
/ds hpos s sub def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/s s ds add def
/t t dt add def
str right t baselineshow
grestore
end
} bind def
baselinedict begin
/f {} bind def
/g {pop 0} bind def
/f' {pop 1} bind def
/g' {pop 0} bind def
/s 0 def
/t 0 def
/res 72 def
/onecharstring ( ) def
/emptystring () def
/baselineshow {
/t exch def
/mode exch def
/str exch def
gsave
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
{
mode right eq {pop} if
grestore gsave
onecharstring 0 3 -1 roll put onecharstring stringwidth pop
/ds exch mode mul def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/t t dt add def
/s s ds add def
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
mode left eq {pop} if
} str kshow
grestore
} bind def
/reversestring {
/str1 exch def
/str2 str1 length string def
/i 0 def
/n str1 length 1 sub def
{
str1 n get str2 exch i exch put
/i i 1 add def
/n n 1 sub def
n 0 lt {exit} if
} loop
str2
} bind def
/splitstring {
/str1 exch def
/len str1 stringwidth pop def
/s 0 def
/n 0 def
str1 length {
str1 n get onecharstring exch 0 exch put
/s onecharstring stringwidth pop s add def
s len 2 div ge {exit} if
/n n 1 add def
} repeat
str1 0 n 1 add getinterval
str1 n str1 length n sub getinterval
} bind def
end