Checking existence of a macro (control sequence) by Lua - problem after updating MkIV
![](https://secure.gravatar.com/avatar/03f8b557ba35119e56eb9cb381d5ece5.jpg?s=120&d=mm&r=g)
Hello, I'm using Hans' macro suggested some time before. I've just updated Ctx MkIV and my sample code: ---- \starttext \def\MyMacro{Ahoj} \def\MyMacWithPars#1#2{Something} \def\Undefined{} \let\Undefined\undefined \def\DoNothing{} \let\DoNothing\donothing \startluacode 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 -- local defined = tokens.defined for _, v in ipairs{ "MyMacro", "MyMacWithPars", "Undefined", "DoNothing", "NonExisting" } do print(string.format("\letterpercent-12s", v), defined(v), defined(v, true), defined(v, false)) end \stopluacode Aaa \stoptext ---- gives: " MyMacro false false false MyMacWithPars false false false Undefined false false false DoNothing false false false NonExisting false false false " IOW, I'm not able to determine whether a control sequence has not been defined (or has \undefined value) or not. Am I doing a trivial mistake or has anything changed? Thank you for patience... Lukas
![](https://secure.gravatar.com/avatar/be49110e195f5eac47c04570251121c1.jpg?s=120&d=mm&r=g)
Why can you not simply use one of the doifundefined macro's? Something for example: \doifundefined{ExitStatus}{\gdef\ExitStatus{0}} % default to ok as in UNIX dr. Hans van der Meer
On 18 Jun 2020, at 10:27, Lukas/ConTeXt
wrote: Hello, I'm using Hans' macro suggested some time before. I've just updated Ctx MkIV and my sample code:
---- \starttext \def\MyMacro{Ahoj}
\def\MyMacWithPars#1#2{Something}
\def\Undefined{} \let\Undefined\undefined
\def\DoNothing{} \let\DoNothing\donothing
\startluacode 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
--
local defined = tokens.defined
for _, v in ipairs{ "MyMacro", "MyMacWithPars", "Undefined", "DoNothing", "NonExisting" } do print(string.format("\letterpercent-12s", v), defined(v), defined(v, true), defined(v, false)) end \stopluacode
Aaa \stoptext ----
gives: " MyMacro false false false MyMacWithPars false false false Undefined false false false DoNothing false false false NonExisting false false false "
IOW, I'm not able to determine whether a control sequence has not been defined (or has \undefined value) or not.
Am I doing a trivial mistake or has anything changed?
Thank you for patience...
Lukas
___________________________________________________________________________________ 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 ___________________________________________________________________________________
![](https://secure.gravatar.com/avatar/03f8b557ba35119e56eb9cb381d5ece5.jpg?s=120&d=mm&r=g)
Hello,
I need to check within Lua.
My sample cases are very minimalistic - I'm working on more complicated task
actually, where check-for-control-sequence-existence need to be performed
run-time within Lua scope.
Best,
Lukas
---------- Původní e-mail ----------
Od: Hans van der Meer
![](https://secure.gravatar.com/avatar/46562c7d27388490d62e8d7a5bc960dd.jpg?s=120&d=mm&r=g)
On 6/18/2020 10:27 AM, Lukas/ConTeXt wrote:
Hello, I'm using Hans' macro suggested some time before. I've just updated Ctx MkIV and my sample code:
---- \starttext \def\MyMacro{Ahoj}
\def\MyMacWithPars#1#2{Something}
\def\Undefined{} \let\Undefined\undefined
\def\DoNothing{} \let\DoNothing\donothing
\startluacode 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
--
local defined = tokens.defined
for _, v in ipairs{ "MyMacro", "MyMacWithPars", "Undefined", "DoNothing", "NonExisting" } do print(string.format("\letterpercent-12s", v), defined(v), defined(v, true), defined(v, false)) end \stopluacode
Aaa \stoptext as you updated, it's just:
\startluacode local defined = tokens.defined for _, v in ipairs{ "MyMacro", "MyMacWithPars", "Undefined", "DoNothing", "NonExisting" } do print(string.format("\letterpercent-12s", v), defined(v), defined(v, true), defined(v, false)) end \stopluacode ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
![](https://secure.gravatar.com/avatar/03f8b557ba35119e56eb9cb381d5ece5.jpg?s=120&d=mm&r=g)
Hello Hans,
---------- Původní e-mail ---------- {
Od: Hans Hagen
participants (3)
-
Hans Hagen
-
Hans van der Meer
-
Lukas/ConTeXt