|
|
1.1 ! root 1: % ! 2: % Stuff used to draw or set text along a baseline specified by parametric equations ! 3: % for x and y. ! 4: % ! 5: ! 6: /left -1 def ! 7: /center 0 def ! 8: /right 1 def ! 9: ! 10: /baselinedict 50 dict def ! 11: ! 12: /newbaseline { ! 13: baselinedict begin ! 14: /g' exch bind def ! 15: /f' exch bind def ! 16: /g exch bind def ! 17: /f exch bind def ! 18: ! 19: counttomark 2 eq {/hoffset exch def} if ! 20: /res exch def ! 21: ! 22: /t 0 def ! 23: /s 0 def ! 24: /voffset false def ! 25: cleartomark ! 26: end ! 27: } bind def ! 28: ! 29: /drawfunnytext { ! 30: baselinedict begin ! 31: /t exch def ! 32: /mode exch def ! 33: /str exch def ! 34: ! 35: mode left eq { ! 36: /leftstring emptystring def ! 37: /rightstring str def ! 38: } if ! 39: ! 40: mode right eq { ! 41: /leftstring str reversestring def ! 42: /rightstring emptystring def ! 43: } if ! 44: ! 45: mode center eq { ! 46: str splitstring ! 47: /rightstring exch def ! 48: /leftstring exch reversestring def ! 49: } if ! 50: ! 51: gsave currentpoint translate leftstring left t baselineshow grestore ! 52: gsave currentpoint translate rightstring right t baselineshow grestore ! 53: ! 54: /t 0 def ! 55: /s 0 def ! 56: /voffset false def ! 57: cleartomark ! 58: end ! 59: } bind def ! 60: ! 61: /setfunnytext { ! 62: baselinedict begin ! 63: /vpos exch def ! 64: /hpos exch def ! 65: /str exch def ! 66: ! 67: voffset vpos ne { ! 68: /voffset vpos def ! 69: /t 0 def ! 70: /s hoffset def ! 71: } if ! 72: ! 73: gsave ! 74: hoffset voffset translate ! 75: 0 0 moveto ! 76: /ds hpos s sub def ! 77: /dt ds t f' dup mul t g' dup mul add sqrt res mul div def ! 78: /s s ds add def ! 79: /t t dt add def ! 80: str right t baselineshow ! 81: grestore ! 82: end ! 83: } bind def ! 84: ! 85: baselinedict begin ! 86: ! 87: /f {} bind def ! 88: /g {pop 0} bind def ! 89: /f' {pop 1} bind def ! 90: /g' {pop 0} bind def ! 91: ! 92: /s 0 def ! 93: /t 0 def ! 94: /res 72 def ! 95: ! 96: /onecharstring ( ) def ! 97: /emptystring () def ! 98: ! 99: /baselineshow { ! 100: /t exch def ! 101: /mode exch def ! 102: /str exch def ! 103: ! 104: gsave ! 105: t f res mul t g res mul translate ! 106: 0 0 moveto ! 107: t g' t f' atan rotate ! 108: { ! 109: mode right eq {pop} if ! 110: grestore gsave ! 111: onecharstring 0 3 -1 roll put onecharstring stringwidth pop ! 112: /ds exch mode mul def ! 113: /dt ds t f' dup mul t g' dup mul add sqrt res mul div def ! 114: /t t dt add def ! 115: /s s ds add def ! 116: t f res mul t g res mul translate ! 117: 0 0 moveto ! 118: t g' t f' atan rotate ! 119: mode left eq {pop} if ! 120: } str kshow ! 121: grestore ! 122: } bind def ! 123: ! 124: /reversestring { ! 125: /str1 exch def ! 126: ! 127: /str2 str1 length string def ! 128: /i 0 def ! 129: /n str1 length 1 sub def ! 130: ! 131: { ! 132: str1 n get str2 exch i exch put ! 133: /i i 1 add def ! 134: /n n 1 sub def ! 135: n 0 lt {exit} if ! 136: } loop ! 137: str2 ! 138: } bind def ! 139: ! 140: /splitstring { ! 141: /str1 exch def ! 142: ! 143: /len str1 stringwidth pop def ! 144: /s 0 def ! 145: /n 0 def ! 146: str1 length { ! 147: str1 n get onecharstring exch 0 exch put ! 148: /s onecharstring stringwidth pop s add def ! 149: s len 2 div ge {exit} if ! 150: /n n 1 add def ! 151: } repeat ! 152: str1 0 n 1 add getinterval ! 153: str1 n str1 length n sub getinterval ! 154: } bind def ! 155: ! 156: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.