156 lines · 2.6 KB · Text
RawDownload
%% 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