On 5/28/2020 11:24 PM, cont...@vivaldi.net wrote:
Hello,
one more question - why macros \Undefined and \DoNothing show "defined"
although I (tried to) undefine them?
----
\starttext
\def\MyMacro{Ahoj}
\def\MyMac#1#2{Something}
\def\Undefined{}
\let\Undefined\undefined
\def\DoNothing{}
\let\DoNothing\donothing
\startluacode
local str = { [true] = "defined", [false] = "undefined" }
local function whatever(s)
context.type("\\" .. s)
context(" is " .. (tokens.defined(s) and "defined" or
"undefined")) --% Hans' way
context(" and is " .. str[token.is_defined(s)] .. ".") --%
Henri's way
context.par()
end
whatever("MyMacro")
whatever("MyMacroD")
whatever(" ")
whatever("-")
whatever("Undefined")
whatever("DoNothing")
\stopluacode
%\Undefined % Causes "! Undefined control sequence"
\stoptext
----
Gives:
"
\MyMacro is defined and is defined.
\MyMacroD is undefined and is undefined.
\ is defined and is defined.
\- is defined and is defined.
\Undefined is defined and is defined.
\DoNothing is defined and is defined.
"
Because the macro actually *is* defined: as soon as tex sees
\foo
it reserves the name and gives it the meaning undefined, so even
\undefined is defined.
Anyway, that is why we have \ifdefined that does a different kind of
checking. In retrospect, that is a better one, so I'll adapt that in lmtx.
\starttext
\let\MyMacroA\undefined
\startluacode
local function whatever(s)
context.type("\\" .. s)
context(" is " .. (tokens.defined(s,true) and "defined" or
"undefined")) --% Hans' way
context(" and has meaning " .. (tokens.defined(s) and "defined"
or "undefined")) --% Hans' way
context.par()
end
whatever("MyMacroA")
whatever("MyMacroB")
\stopluacode
\stoptext
\MyMacroA is defined and has meaning undefined
\MyMacroB is undefined and has meaning undefined
You can do this in current luatex/mkiv:
if CONTEXTLMTXMODE == 0 then
local d = tokens.defined
local c = tokens.create
function tokens.defined(s,b)
if b then
return d(s)
else
return c(s).cmd_name == "undefined_cmd"
end
end
end
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
-----------------------------------------------------------------
___________________________________________________________________________________
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://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________