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

___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to