123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- %
- % 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
|