From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/43506 Path: news.gmane.org!not-for-mail From: Hans Hagen Newsgroups: gmane.comp.tex.context Subject: Re: passing dimensions to metapost Date: Thu, 28 Aug 2008 09:45:05 +0200 Message-ID: <48B65781.7000408@wxs.nl> References: Reply-To: mailing list for ConTeXt users NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1219920397 15837 80.91.229.12 (28 Aug 2008 10:46:37 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 28 Aug 2008 10:46:37 +0000 (UTC) To: mailing list for ConTeXt users Original-X-From: ntg-context-bounces@ntg.nl Thu Aug 28 12:47:29 2008 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from ronja.vet.uu.nl ([131.211.172.88] helo=ronja.ntg.nl) by lo.gmane.org with esmtp (Exim 4.50) id 1KYf2H-0000KQ-G7 for gctc-ntg-context-518@m.gmane.org; Thu, 28 Aug 2008 12:47:29 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 4F1801FE24; Thu, 28 Aug 2008 12:46:27 +0200 (CEST) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 09691-01-30; Thu, 28 Aug 2008 12:45:46 +0200 (CEST) Original-Received: from ronja.vet.uu.nl (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 8116E1FDCB; Thu, 28 Aug 2008 09:50:36 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 41B081FDCB for ; Thu, 28 Aug 2008 09:50:27 +0200 (CEST) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 15060-06 for ; Thu, 28 Aug 2008 09:49:48 +0200 (CEST) Original-Received: from mail.pragma-ade.net (dsl-083-247-100-017.solcon.nl [83.247.100.17]) by ronja.ntg.nl (Postfix) with ESMTP id 3190D1FD7D for ; Thu, 28 Aug 2008 09:45:05 +0200 (CEST) Original-Received: from [10.100.1.100] (unverified [10.100.1.100]) by controller-1 (SurgeMail 3.9e) with ESMTP id 14983-1840426 for ; Thu, 28 Aug 2008 09:45:05 +0200 User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) In-Reply-To: X-Originating-IP: 10.100.1.100 X-Authenticated-User: hagen@controller-1 X-Virus-Scanned: amavisd-new at ntg.nl X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.9 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: ntg-context-bounces@ntg.nl Errors-To: ntg-context-bounces@ntg.nl X-Virus-Scanned: amavisd-new at ntg.nl Xref: news.gmane.org gmane.comp.tex.context:43506 Thomas A. Schmitz wrote: > Hi all, > > cleaning up the code in my module, I run into a very interesting > problem. I want to pass a user-defined value to Metapost. Until now, > the value "scale" had to be numeric, and I used it like this: > > draw fullcircle scaled \MPvar{scale}mm > > and Metapost was happy, and I was too. Now Aditya made the reasonable > suggestion that users should be allowed to input any dimension and not > be restricted to "mm." Easy enough. However, I also want a fallback > just in case they input a number, in that case, I want to fall back to > mm as a default. So I tried (after Taco's excellent explanation on the > wiki): > > \expandafter\processaction\expandafter[\CVERscale]% > [\v!unknown=>{\doifdimensionelse% > {\CVERscale}% > {\setupMPvariables[CircleSomething][scale=\CVERscale]}% > {\doifnumberelse% > {\CVERscale}% > {\newdimen\CIscale \global\CIscale=\CVERscale mm > {\setupMPvariables[CircleSomething][scale=\the\CIscale]}}% > {\setupMPvariables[CircleSomething][scale=10mm\relax]% > \message{Please give a proper value for the "scale" argument!}}}}, > \v!default=>{\setupMPvariables[CircleSomething][scale=10mm > \relax]}] > > > So what I want: first check if \CVERscale is a dimension; if it is, > assign it to the "scale" parameter. If it isn't, check if it is a > number; if this is the case, append the unit "mm" to it and put it > into a dimension register. If it isn't a number either, make the value > sufficiently absurd for the user to realize and write a message to the > terminal. This is all fine and dandy and works, sort of: it works > perfectly with dimensions, but when I try with a number as input, it > doesn't fall back to the unit "mm," but to "pt," AFAICS. That's nice > too, but I have no clue why, and I would prefer mm. If it helps, I can > try to give you a minimal test file tomorrow, but maybe somebody spots > what I'm doing wrong? (I tried both with mkii and mkiv, and always get > the same result.) \startluacode document.mymodule = document.mymodule or { } function document.mymodule.checkdimen(str) return (str:find("%a%a$") and str) or (str .. "mm") end \stopluacode \ctxlua{document.mymodule.checkdimen("#1")} or more fancy: function document.mymodule.checkdimen(str) if not str:find("%a%a$") then str = str .. "mm" ctx.writestatus("mymodule","you forgot a dimension unit, so I made it up for you: %s",str) end return str end for mkii you can use \doifdimensionelse (it reminds me to implement that in mkiv) ----------------------------------------------------------------- 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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________