Am 04.11.2009 um 15:10 schrieb Oliver Buerschaper:
how can I check whether a macro I defined is actually expanded into what I intended? For example, if I define
\define[2]\Test{#2, {\it #1}}
is there a (Lua?) function like
check(\Test{Hello}{world}, string)
that would return true for string = "world, {\it Hello}" and false otherwise? If the macro is a bit more complicated than this I usually get caught by a mistake rather quickly ... so a quick check would be very handy for me.
You can check the content in ConTeXt itself.
\define[2]\Test {\doifelse{#1}{world}{\writedirect{Test \#1: true}}{\writedirect {Test \#1: false}}% \doifelse{#2}{Hello}{\writedirect{Test \#2: true}}{\writedirect {Test \#2: false}}% #2, {\it#1}}
This is perfect if the arguments of \Test are fixed once and for all.
But actually I'd like to get something different ... (perhaps I shouldn't have called the macro \Test but rather \MyMysteriousMacro :-). Suppose I know what the output of this macro (after expansion) should yield for *various* inputs. Now I just want to check whether the macro really does what I expect it to do. For example:
bool1 = check(\MyMysteriousMacro{Hello}{world}, "world, {\it Hello}") bool2 = check(\MyMysteriousMacro{Wolfgang}{How are you}, "How are you, {\it Wolfgang}")
etc.
Usually the macro would typeset something but here I'd just like this comparison with the supplied string (without anything ending up on paper).
Like this? \newconditional\MysteriousOne \newconditional\MysteriousTwo \letempty\MysteriousListOne \letempty\MysteriousListTwo \definecomplexorsimple\MyMysteriousMacro \def\complexMyMysteriousMacro[#1]#2#3% {\doifelse{#1}{list} {\appendtocommalist{#2}\MysteriousListOne \appendtocommalist{#3}\MysteriousListTwo}% {\simpleMyMysteriousMacro{#2}{#3}}} \def\simpleMyMysteriousMacro#1#2% {\setfalse\MysteriousOne \setfalse\MysteriousTwo \ExpandFirstAfter\doifinset{#1}\MysteriousListOne{\settrue \MysteriousOne}% \ExpandFirstAfter\doifinset{#2}\MysteriousListTwo{\settrue \MysteriousTwo}% \ifconditional\MysteriousOne\ifconditional\MysteriousTwo #1, {\it#2}% \fi\fi} \MyMysteriousMacro[list]{world}{Hello} \MyMysteriousMacro[list]{Wolfgang}{how are you} \starttext \MyMysteriousMacro{Hello}{world} \MyMysteriousMacro{Wolfgang}{how are you} \stoptext Wolfgang