From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/88725 Path: news.gmane.org!not-for-mail From: Hans Hagen Newsgroups: gmane.comp.tex.context Subject: Re: How to get parameters in lua Date: Fri, 19 Sep 2014 10:03:15 +0200 Message-ID: <541BE343.9040709@wxs.nl> References: Reply-To: mailing list for ConTeXt users NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1411113824 15198 80.91.229.3 (19 Sep 2014 08:03:44 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 19 Sep 2014 08:03:44 +0000 (UTC) To: ntg-context@ntg.nl Original-X-From: ntg-context-bounces@ntg.nl Fri Sep 19 10:03:39 2014 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from balder.ntg.nl ([5.39.185.229]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XUtAJ-0006Gb-C2 for gctc-ntg-context-518@m.gmane.org; Fri, 19 Sep 2014 10:03:39 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by balder.ntg.nl (Postfix) with ESMTP id B77A7102C7 for ; Fri, 19 Sep 2014 10:03:38 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at balder.ntg.nl Original-Received: from balder.ntg.nl ([127.0.0.1]) by localhost (balder.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id hm3XYX8YwxOU for ; Fri, 19 Sep 2014 10:03:38 +0200 (CEST) Original-Received: from balder.ntg.nl (localhost [IPv6:::1]) by balder.ntg.nl (Postfix) with ESMTP id DACE710223 for ; Fri, 19 Sep 2014 10:03:29 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by balder.ntg.nl (Postfix) with ESMTP id 9013C101E3 for ; Fri, 19 Sep 2014 10:03:26 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at balder.ntg.nl Original-Received: from balder.ntg.nl ([127.0.0.1]) by localhost (balder.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 8U6VkLqh2sIO for ; Fri, 19 Sep 2014 10:03:21 +0200 (CEST) Original-Received: from filter2-til.mf.surf.net (filter2-til.mf.surf.net [194.171.167.218]) by balder.ntg.nl (Postfix) with ESMTP id 89911101E1 for ; Fri, 19 Sep 2014 10:03:21 +0200 (CEST) Original-Received: from smtp.ziggozakelijk.nl (D57D1DA2.static.ziggozakelijk.nl [213.125.29.162]) by filter2-til.mf.surf.net (8.14.3/8.14.3/Debian-9.4) with ESMTP id s8J83KbI011281 for ; Fri, 19 Sep 2014 10:03:20 +0200 X-Default-Received-SPF: pass (skip=loggedin (res=PASS)) x-ip-name=10.100.1.103; Original-Received: from [10.100.1.103] (unverified [10.100.1.103]) by pragma-net.nl (SurgeMail 6.5a2) with ESMTP id 8539-1713362 for ; Fri, 19 Sep 2014 10:03:19 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: X-Authenticated-User: hagen@controller-9 X-Bayes-Prob: 0.0001 (Score 0, tokens from: ntg-context@ntg.nl, base:default, @@RPTN) X-CanIt-Geo: ip=213.125.29.162; country=NL; region=Provincie Overijssel; city=Zwartsluis; latitude=52.6408; longitude=6.0694; http://maps.google.com/maps?q=52.6408,6.0694&z=6 X-CanItPRO-Stream: uu:ntg-context@ntg.nl (inherits from uu:default, base:default) X-Canit-Stats-ID: 0TMQU3kE5 - b8f6c2e6a596 - 20140919 (trained as not-spam) X-Scanned-By: CanIt (www . roaringpenguin . com) on 194.171.167.218 X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.14 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: ntg-context-bounces@ntg.nl Xref: news.gmane.org gmane.comp.tex.context:88725 Archived-At: On 9/19/2014 9:30 AM, Christoph Reller wrote: > Hi, > > \installcommandhandler nicely provides (among others) \define and > \setup commands. Thus it is easy to provide a key with > \setup...[key=value] and to read the value of such a key with > \parameter{key}. > > My question is: How do I read the value of a key defined with > \setup...[key=value] on the lua side? If I use > context.parameter("key") > then the value of key is printed directly. I want to be able to read > that value and use it in lua with something like > myvariable = context.?whatfunction?("key") > > Here is some example code: > > \unprotect > > \startluacode > function myfun(parameters,content) > context("From lua: Parameters: ") > context(parameters) > context.elemparameter("gkey") -- directly prints the parameter > context.par() > end > \stopluacode > > \installnamespace{elem} > \installcommandhandler \????elem {elem} \????elem > \appendtoks > \setuevalue{\currentelem}{\elem_cmd{\currentelem}}% > \to \everydefineelem > > \unexpanded\def\elem_cmd#environment{% > \edef\currentelem{#environment}% > \dosingleempty\elem_cmd_parameters} > > \def\elem_cmd_parameters[#parameters]#content{% > \setupcurrentelem[#parameters] > From \TeX\: Parameters: key=\elemparameter{key}, > gkey=\elemparameter{gkey}\par > > \ctxlua{myfun(\!!bs#parameters\!!es,\!!bs\normalunexpanded{#content}\!!es)} > } > > \defineelem[base] > \setupelem[gkey=gval] > > \protect > > \starttext > > \base[key=val]{Hello} > > \stoptext > > Thank you for any feedback, something like this ... keep in mind that there is no grouping in lua % macros=mkvi \unprotect \installnamespace{elem} \installcommandhandler \????elem {elem} \????elem \startluacode userdata.elem = { data = { [""] = { } } } function userdata.elem.define(namespace,parent) print("define",namespace,parent) userdata.elem.data[namespace] = { } if namespace ~= parent then table.setmetatableindex(userdata.elem.data[namespace],userdata.elem.data[parent]) end end function userdata.elem.setup(namespace,key,gkey) print("setup",namespace,key,gkey) userdata.elem.data[namespace].key = key userdata.elem.data[namespace].gkey = gkey end function userdata.myfun(namespace,one,two) context.par() context("elem: one=%s",userdata.elem.data[namespace][one]) context.par() context("elem: two=%s",userdata.elem.data[namespace][two]) context.par() end \stopluacode \appendtoks \setuevalue{\currentelem}{\elem_cmd{\currentelem}}% \ctxlua{userdata.elem.define("\currentelem","\currentelemparent")}% \to \everydefineelem \appendtoks \ctxlua{userdata.elem.setup("\currentelem","\elemparameter{key}","\elemparameter{gkey}")}% \to \everysetupelem \unexpanded\def\elem_cmd#environment% {\edef\currentelem{#environment}% \dosingleempty\elem_cmd_parameters} \def\elem_cmd_parameters[#parameters]#content% {\setupelem[\currentelem][#parameters] From \TeX\: Parameters: key=\elemparameter{key}, gkey=\elemparameter{gkey}\par \ctxlua{userdata.myfun("\currentelem","key","gkey")}} \defineelem[base] \setupelem[gkey=gval] \protect \starttext \base[key=val]{Hello} \stoptext A simpler alternative is: % macros=mkvi \unprotect \installnamespace{elem} \installcommandhandler \????elem {elem} \????elem \startluacode userdata.elem = { data = { } } function userdata.elem.sync(key,gkey) userdata.elem.data.key = key userdata.elem.data.gkey = gkey end function userdata.myfun(one,two) context.par() context("elem: one=%s",userdata.elem.data[one]) context.par() context("elem: two=%s",userdata.elem.data[two]) context.par() end \stopluacode \appendtoks \setuevalue{\currentelem}{\elem_cmd{\currentelem}}% \to \everydefineelem \unexpanded\def\elem_cmd#environment% {\edef\currentelem{#environment}% \dosingleempty\elem_cmd_parameters} \unexpanded\def\elem_sync {\ctxlua{userdata.elem.sync("\elemparameter{key}","\elemparameter{gkey}")}} \def\elem_cmd_parameters[#parameters]#content% {\setupcurrentelem[#parameters] \elem_sync From \TeX\: Parameters: key=\elemparameter{key}, gkey=\elemparameter{gkey}\par \ctxlua{userdata.myfun("key","gkey")}} \defineelem[base] \setupelem[gkey=gval] \protect \starttext \base[key=val]{Hello} \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 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 : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________