summaryrefslogtreecommitdiff
path: root/texinfo.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@gnu.org>1998-09-17 17:25:42 +0000
committerKarl Berry <karl@gnu.org>1998-09-17 17:25:42 +0000
commit7a43e6cd3088a1edba0603b3dad276a9aef709ff (patch)
tree6d6822907b2131827ca27bbb89e0960a5dce85ff /texinfo.tex
parent84d159bb642a5806736efcf6b8395a4d92e3a2d1 (diff)
downloadgunmake-7a43e6cd3088a1edba0603b3dad276a9aef709ff.tar.gz
* texinfo.tex: Fix @macro expansion of @code with _ in the
argument. From: Zack Weinberg <zack@rabi.columbia.edu>.
Diffstat (limited to 'texinfo.tex')
-rw-r--r--texinfo.tex29
1 files changed, 25 insertions, 4 deletions
diff --git a/texinfo.tex b/texinfo.tex
index 7d3a33c..2cc8256 100644
--- a/texinfo.tex
+++ b/texinfo.tex
@@ -4514,6 +4514,17 @@ width0pt\relax} \fi
\catcode`\^^M=12
\usembodybackslash}
+\def\macroargctxt{%
+ \catcode`\~=12
+ \catcode`\^=12
+ \catcode`\_=12
+ \catcode`\|=12
+ \catcode`\<=12
+ \catcode`\>=12
+ \catcode`\+=12
+ \catcode`\@=12
+ \catcode`\\=12}
+
% \mbodybackslash is the definition of \ in @macro bodies.
% It maps \foo\ => \csname macarg.foo\endcsname => #N
% where N is the macro parameter number.
@@ -4610,17 +4621,21 @@ width0pt\relax} \fi
\noexpand\scanmacro{\temp}}%
\or % 1
\expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
\noexpand\braceorline\csname\the\macname xxx\endcsname}%
\expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \noexpand\scanmacro{\temp}}%
+ \egroup\noexpand\scanmacro{\temp}}%
\else % many
- \expandafter\xdef\csname\the\macname\endcsname##1{%
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
\csname\the\macname xxx\endcsname ##1,}%
\expandafter\expandafter
\expandafter\xdef
\expandafter\expandafter
\csname\the\macname xxx\endcsname
- \paramlist{\noexpand\scanmacro{\temp}}%
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
\fi
\else
\ifcase\paramno
@@ -4630,18 +4645,24 @@ width0pt\relax} \fi
\noexpand\scanmacro{\temp}\egroup}%
\or % 1
\expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
\noexpand\braceorline\csname\the\macname xxx\endcsname}%
\expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
\noexpand\norecurse{\the\macname}%
\noexpand\scanmacro{\temp}\egroup}%
\else % many
- \expandafter\xdef\csname\the\macname\endcsname##1{%
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
\csname\the\macname xxx\endcsname ##1,}%
\expandafter\expandafter
\expandafter\xdef
\expandafter\expandafter
\csname\the\macname xxx\endcsname
\paramlist{%
+ \egroup
\noexpand\norecurse{\the\macname}%
\noexpand\scanmacro{\temp}\egroup}%
\fi