Oh, thank you a lot, Hans, that's a really cleaner way than mine. One more question, is there something similar to EmWidth for \textwidth or \linewidth? Better, a better way to access TeX dimensions? Thank you again.

Jairo :)

El dom., 9 de ago. de 2020 a la(s) 12:46, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 8/9/2020 5:39 PM, Jairo A. del Rio wrote:
> Hi, list! I'm doing the following to scale squares and other stuff in
> MetaPost/MetaFun. Although the following kinda works (maybe I'm just
> lucky with this), I want to know how to do a better piece from it. I'm
> concerned with passing data from Lua and TeX to Metapost and better ways
> to do it in ConTeXt. Thank you in advance.
>
> \starttext
> My text
>
> \startMPinitializations
> numeric myunit;
> myunit := \the\dimexpr1em\relax;
> \stopMPinitializations
> \startluacode
>
> userdata = userdata or {}
> userdata.dummydata = { {1, 2}, {3, 4} }
>
> context.startMPcode()
>
> for j=1,#userdata.dummydata do
> for i=1,#userdata.dummydata[1] do
> context("draw unitsquare scaled myunit shifted ((%d,%d)*myunit);",
> userdata.dummydata[i][j], userdata.dummydata[i][j])
> end
> end
>
> context.stopMPcode()
>
> \stopluacode
> \stoptext
Something:

\starttext

\startluacode

     userdata = userdata or {}
     userdata.dummydata = { {1, 2}, {3, 4} }

     function MP.GetI()
         mp.print(#userdata.dummydata)
     end
     function MP.GetJ(i)
         mp.print(#userdata.dummydata[i])
     end
     function MP.GetIJ(i,j)
         mp.pair(userdata.dummydata[i][j],userdata.dummydata[i][j])
     end

\stopluacode

\startMPcode
     numeric myunit ; myunit := EmWidth;
     for i = 1 upto lua.MP.GetI() :
         for j = 1 upto lua.MP.GetJ(i) :
             draw unitsquare scaled myunit shifted (myunit *
(lua.MP.GetIJ(i,j)));
         endfor ;
     endfor ;
\stopMPcode

\stoptext

There are of course also other ways but this is more educational as start.

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------