On Thu, Feb 21, 2013 at 10:38:39PM +0200, Eli Zaretskii wrote: > > @macro xxx {one}@c > @set \one\@c > @end macro > > @macro yyy {one, two}@c > @xxx{x\one\}@c > @ifclear x@c > \one\@w{}\two\@c > @end ifclear > @clear x\one\@c > @end macro > > @macro trampfn {method, user, host, localname}@c > > @value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c > @end macro > > The important one is the last one: it needs to produce results like > this: > > @file{@trampfn{smb, daniel%BIZARRE, melancholia, /daniel$$/.emacs}} > > => `/smb:daniel%BIZARRE@melancholia:/daniel$$/.emacs'
In the new implementation, the result not that, because the last newline of a user macro invocation is always stripped, and it remains a mystery why previous makeinfo processed that right as it also stripped the last newline -- maybe not consistently. More precisely @trampfn{, user, host, localname} leads first to @value{prefix}@yyy{,@value{postfixhop}}@yyy{user,@@}host@value{postfix}localname@c The next expansion is /@xxx{x}@c @ifclear x@c @w{}@value{postfixhop}@c @end ifclear @clear x@c@yyy{user,@@}host@value{postfix}localname@c At this point it is already clear that things cannot end well. The final expansion is thus not what was intended: /@set x@c@c @clear x@c@yyy{user,@@}host@value{postfix}localname@c I think that this issue is not the same as the issue of @c being removed or kept, the issue comes from the newline at the end of @yyy being removed. If the @c are removed from macro definition, the issue remains, leading to something along /@set x @clear x@ayyy{user,@@}host@value{postfix}localname Adding an end of line in the @macro definition, however: @macro byyy {one, two} @xxx{x\one\}@c @ifclear x@c \one\@w{}\two\@c @end ifclear @clear x\one\@c @end macro solves most of the problem, leading to: /@set x@c@c @clear x@c @set xuser@c@c user@w{}@@@c @clear xuser@c host:localname@c The last @c may be problematic if in an @-command, such as in @file, but then this is an issue covered in the Texinfo mannual, stating On the other hand, you wouldn't want the '@c' if the macro was sometimes invoked in the middle of a line (the text after the invocation would be treated as a comment). So, there is a fix: * add a blank line in @yyy definition. * Remove the trailing @c in @trmpfn definition. Would that be ok? In my testings TeX gives also a correct result. note: there is also still a spurious warning about @end in @file, I'll correct that. -- Pat