You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.1 KiB
31 lines
1.1 KiB
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{defpattern}[1994/10/12]
|
|
|
|
\message{%
|
|
`\string\defpattern-macro (adapted from \string\howto\space (A. Jeffrey: TeX and TUG NEWS 2(2)))'%
|
|
}
|
|
|
|
%define a macro \defpattern for defining ML-like pattern matching macros
|
|
%adapted from the \howto-macro from tugboat
|
|
|
|
\def\xcs#1#2{\expandafter#1\csname#2\endcsname}
|
|
\newcount\actioncount
|
|
\def\defpattern#1[#2]#3{%
|
|
\xcs\ifx{\expandafter\gobble\string#1}\relax%
|
|
\def#1{\erroraction#1}\fi%
|
|
\advance\actioncount by 1\relax%
|
|
\expandafter\defaction\expandafter{#1}{#3}{#2}%
|
|
\def\temp##1##2##3##4##5##6##7##8##9{\def\temp{[#2]}}%
|
|
\temp\empty\empty\empty\empty\empty\empty\empty\empty\empty%
|
|
\edef#1{\noexpand\doaction\xcs\noexpand%
|
|
{action-\the\actioncount}\temp}}
|
|
\def\defaction#1#2#3{%
|
|
\xcs\def{action-\the\actioncount}##1[#3]{\applyto{#1}{#2}}}
|
|
\def\gobble#1{}
|
|
\def\applyto#1#2#3{#3{#1}{#2}}
|
|
\def\doaction#1[#2][#3]{#1[#3]\success[#2]\failure[#3]}
|
|
\def\success#1#2[#3]\failure[#4]{#2}
|
|
\def\failure#1#2{#1}
|
|
\def\erroraction#1[#2]{%
|
|
\errmessage{I don't know how to \string#1[#2]}}
|
|
|
|
|