Mojca Miklavec wrote:
On Wed, Dec 3, 2008 at 4:25 PM, Hans Hagen
wrote: Mojca Miklavec wrote:
Hello,
A while back I wrote this dirty code (read as: hack) in attachment that allows multiple optional parameters in metapost functions, for example:
draw_text("text"); draw_text(angle(30),"text"); draw_text(angle(30),align(right),"text"); draw_text(align(center),"text");
The code compiles fine with mkii, but not with mkiv. I would be grateful for any hints about how to fix this.
I get the error:
mplib | mp terminal: ! Missing `,' has been inserted. <to be read again> , textext->...etextext(SUFFIX2)(rawtextext((EXPR3)), origin)else:thetextext(SUF...
dummy->begingroup(TEXT2) endgroup gp_put_text->...tt)=tt.enddef;pict:=dummy((TEXT1)) ;let,=@;endgroup;draw(gp_t... <*> ...m, 1cm), angle(30), textext.drt("rotated")) ; ; ! An expression can't begin with `;'. <inserted text> 0 <to be read again> , textext->...etextext(SUFFIX2)(rawtextext((EXPR3)), origin)else:thetextext(SUF...
Thanks a lot, Mojca
(The code is taken out of http://dl.contextgarden.net/modules/t-gnuplot/metapost/context/third/gnuplot... and I'm slowly plucking up my courage to port the code to mkiv.) \startMPcode def fuzzy(expr a, b, c) = draw image( draw textext(c) ; currentpicture := currentpicture rotatedaround(center currentpicture,b) shifted a ; ) ; enddef ;
fuzzy((1cm,1cm), 30, "rotated") ; \stopMPcode
But what if I wanted the angle to be an optional parameter? (More in the sense that if I decide to add some more parameters later, the old code would still work.)
Is there any special reason why the old code doesn't work on mkiv? I have found one possible explanation, though I'm not sure about that:
This works:
picture a; a := \sometxt{rotated}; gp_put_text((1cm, 1cm), angle(30), a);
but this doesn't:
gp_put_text((1cm, 1cm), angle(30), \sometxt{rotated});
What does metapost see in mkiv when one puts \sometxt there? Maybe that explains the problem.
\long\def\sometxt#1#{\dosometxt{#1}} % grab optional [args] \long\def\dosometxt#1#2% {textext.drt("\ifcsname @@st@@#1\endcsname\csname @@st@@#1\endcsname{#2}\else#2\fi")} so, it sees textext.drt("somestring") ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------