blob: 1d5787ff13f236bb07d43531116ee3fdf371ad9e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
\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]}}
|