El dom, 23 de may. de 2021 a la(s) 04:51, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 5/22/2021 11:34 PM, Jairo A. del Rio wrote:
> Hi. Is \thewithproperty documented elsewhere? Is this a new primitive?
> It looks interesting.
In the case of the \sin trick particular case \let\computer\the would
also work; i added the \thewithproperty<number> feature just because i
expect that users can come up with variants (like \drawme\sin ...) which
then would adapt behaviour (via \dowithproperty2).

Having flags for computing and drawing would be awesome. I think it would nicely extend ConTeXt's drawing features...

So, indeed it's a new primitive but (for now) only used with these lua
hacks. Actually it's no big deal to reimplement \thewithoutunit<dim> as

So, is this Lua-specific?

   \thewithoutunit{\dowithproperty1\the}

and then

   \thewithcmunit{\dowithproperty2\the}

to serialize the dimension in cm but normally i need to "wonder for a
while if it makes sense".

Btw, adding primitives (related to the token related bits and pieces of
the engine) only makes sense if the gain is in

-- avoiding clumsy code: although that can hurt someones pride and joy
over a nice and complex macro doing the same ... don't worry, i threw
away plenty of code by now

-- significant performance gain: which is seldom the case (there really
is not much to gain, at least not in context which is rather optimized
already)

-- giving way less noise in tracing: which for me is a good reason
(tracing changed a bit anyway)

-- not adding much code to the engine or the need to refactor: although
for some luametatex extensions some internals had to change fundamentally

a good example is the extended macro argument handling: less clumsy tex
code, a bit of performance gain and easier full expansion, way less
tracing, but it violates the last argument because it did lead to some
refactoring (i also had to make sure the extra overhead didn't slow down
macro definitions and expansion)

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
-----------------------------------------------------------------

I did the following and I have two questions:

1. What if I want to have more than one property? Say \plusone for computation and \plustwo for drawing.

2. What does 'usage="value"' mean in the implement function (looks new, but I'm prolly wrong)?

\permanent\protected\def\drawme{\thewithproperty\plussix} %better than 666

\startluacode

local interfaces = interfaces

local implement = interfaces.implement

local context = context


local drawme_code = 6


local drawing = [==[

draw fullcircle scaled 10mm;

draw fullcircle shifted up scaled 5mm;

draw fulltriangle shifted (up+1/2right) scaled 5mm;

]==]


local function chicken(value)

if value == "value" or value == drawme_code then

context.metafun.start()

context.metafun(drawing);

context.metafun.stop()

--elseif then ...

else

context("Chicken!")

end

end


implement{

name = "chicken",

public = true,

usage = "value", --What does it do?

overload = true,

actions = chicken

}

\stopluacode

\starttext\chicken\ and \drawme\chicken\stoptext

Thank you in advance.


Jairo