39 lines
1.6 KiB
TeX
39 lines
1.6 KiB
TeX
\def\afterfi#1#2\fi{#2\fi#1}
|
|
\def\RevSingleWord#1{\RevSingleWordi{}#1\RSWA\RSWB\RSWB\RSWB\RSWB\RSWB\RSWB\RSWB\RSWB\RSWA}
|
|
\def\RevSingleWordi#1#2#3#4#5#6#7#8#9{\RSWgobtoB#9\RSWend\RSWB\RevSingleWordi{#9#8#7#6#5#4#3#2#1}}
|
|
\def\RSWend\RSWB\RevSingleWordi#1#2\RSWA{\RSWgobtoA#1}
|
|
\def\RSWgobtoA#1\RSWA{}\def\RSWgobtoB#1\RSWB{}
|
|
%---
|
|
\def\firstchartonil#1#2\nil{#1}
|
|
\def\RevOrderSameWords#1{\RevOrderSameWordsi{}#1 \. \* \* \* \* \* \* \* \* \.}
|
|
\def\RevOrderSameWordsi#1#2 #3 #4 #5 #6 #7 #8 #9 {%
|
|
\expandafter\ifx\expandafter\*\firstchartonil#9\nil
|
|
\expandafter\ROSWend\else\expandafter\RevOrderSameWordsi\fi{#9 #8 #7 #6 #5 #4 #3 #2#1}%
|
|
}
|
|
\def\ROSWend#1#2\.{\ROSWendi#1}
|
|
\def\ROSWendi#1\.{\romannumeral-`\-}
|
|
%---
|
|
\def\ROWquark{\ROWquark}
|
|
\def\RevOnlyWords#1{\edef\ROWtemp{\noexpand\RevOnlyWordsi{}#1 \noexpand\ROWquark\space}\ROWtemp}
|
|
\def\RevOnlyWordsi#1#2 {%
|
|
\ifx\ROWquark#2\afterfi{\ROWgoblastspace#1\nil}%
|
|
\else\afterfi{\RevOnlyWordsi{#1\RevSingleWord{#2} }}%
|
|
\fi
|
|
}
|
|
\def\ROWgoblastspace#1 \nil{#1}
|
|
%---
|
|
\def\RevAll#1{\RevAlli{}#1 \. \* \* \* \* \* \* \* \* \.\:}
|
|
\def\RevAlli#1#2 #3 #4 #5 #6 #7 #8 #9 {%
|
|
\expandafter\ifx\expandafter\*\firstchartonil#9\nil
|
|
\expandafter\RAWend\else\expandafter\RevAlli\fi{#9 #8 #7 #6 #5 #4 #3 #2#1}%
|
|
}
|
|
\def\RAWend#1#2\.{\RAWendi#1}
|
|
\def\RAWendi#1\.{\expandafter\RAWendii\romannumeral-`\-}
|
|
\def\RAWendii#1\:{\RevOnlyWords{#1}}
|
|
%--
|
|
\halign{#\hfil: &#\cr
|
|
Initial&rosetta code phrase reversal\cr
|
|
Reverse all&\RevAll{rosetta code phrase reversal}\cr
|
|
Reverse order, same words&\RevOrderSameWords{rosetta code phrase reversal}\cr
|
|
Reverse only words&\RevOnlyWords{rosetta code phrase reversal}\cr\crcr}
|
|
\bye
|