Khaled Hosny wrote:
On Fri, Jan 08, 2010 at 09:27:37AM -0700, Tad Ashlock wrote:
========================== \startluacode function move_end_punctuation (text, punc, cmd_start, cmd_mid, cmd_end) context(cmd_start .. text .. cmd_mid) if string.find('.,!?', punc, 1, true) then context(punc .. cmd_end) else context(cmd_end .. ' ' .. punc) end end \stopluacode
\def\Var#1#2{\ctxlua{move_end_punctuation([==[#1]==],[==[#2]==], '\\quote{\\type{','}','}')}}
\starttext
This is \Var{var_name}, a variable.
\stoptext ==========================
What about:
\def\Var#1#2{'\type{#1}% \directlua{ if "#2" == "," then tex.sprint("#2'") else tex.sprint("'#2") end}}
\Var{555}, hello \Var{666}. \Var{666}\par
Thank you, Khaled, for the response. This solution works as is. But it has a problem as soon as you want to put double quotes around the variable name. Simply replacing the single quotes with double quotes in your solution doesn't produce open- and close-quotes pairs: ================== \def\Var#1#2{"\type{#1}% \directlua{ if "#2" == "," then tex.sprint('#2"') else tex.sprint('"#2') end}} ================== In order to do that, you need (I think) to use the \quotation{} command: ================== \def\Var#1#2{\quotation{\type{#1}% \directlua{ if "#2" == "," then tex.sprint("#2}") else tex.sprint("}#2") end}} ================== resulting in: ================== ! Too many }'s. l.7 end}} ================== I also tried \bgroup...\egroup: ================== \def\Var#1#2{\quotation\bgroup\type{#1}% \directlua{ if "#2" == "," then tex.sprint("#2\egroup ") else tex.sprint("\egroup #2") end}} ================== giving: ================== ! Missing } inserted. <inserted text> } <to be read again> \normalend l.18 \stoptext ================== Thanks again! Tad