forked from rent-yr-chemicals/DnDTeX
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgforeach.sty
More file actions
83 lines (73 loc) · 1.82 KB
/
gforeach.sty
File metadata and controls
83 lines (73 loc) · 1.82 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gforeach}
\RequirePackage{pgfkeys}
\def\undef#1{\let#1\undefined}
\def\multidef#1#2#3{%
\def\@multidef##1#3##2\@nil##3#3##4\@nil{%
\def##1{##3}%
\def\multidef@temp{##2}%
\ifx\multidef@temp\empty%
\expandafter\@gobblefour%
\fi%
\@multidef##2\@nil##4\@nil%
}%
\@multidef#1#3\@nil#2#3#3\@nil%
\undef\multidef@temp%
\undef\@multidef%
}
\def\multiundef#1#2{%
\def\@multiundef##1#2##2\@nil{%
\undef##1%
\def\multiundef@temp{##2}%
\ifx\multiundef@temp\empty%
\expandafter\@gobblethree%
\fi%
\@multiundef##2\@nil%
}%
\@multiundef#1#2\@nil%
\undef\multiundef@temp%
\undef\@multiundef%
}
\pgfkeys{%
/gforeach/.is family,
/gforeach,
item delimiter/.code={\def\gforeach@itemdelim{#1}},
subitem delimiter/.code={\def\gforeach@subitemdelim{#1}}
}
\long\def\@gforeach#1#2 #3in #4#5{%
\def\@gforeach@function{#5}%
\long\def\@gforeach@loop##1#1##2\@nil{%
\multidef{#3}{\romannumeral-`X##1}{#2}%
\@gforeach@function%
\def\@gforeach@remaining{##2}%
\ifx\@gforeach@remaining\@empty%
\expandafter\@gobbletwo%
\fi%
\@gforeach@loop##2\@nil%
}%
\expandafter\@gforeach@loop#4#1\@nil%
\undef\@gforeach@function%
\undef\@gforeach@loop%
\undef\@gforeach@remaining%
\multiundef{#3}{#2}%
}
\long\def\@gforeach@onearg#1 #2in #3#4{\@gforeach#1 #2in {#3}{#4}}
\def\gforeach@setdelimiters{%
\edef\gforeach@delimiters{\gforeach@itemdelim\gforeach@subitemdelim}%
\expandafter\@gforeach@onearg\expandafter{\gforeach@delimiters} }
\def\gforeach{%
\def\gforeach@itemdelim{,}%
\def\gforeach@subitemdelim{/}%
\futurelet\next\gforeach@getoptions%
}
\def\gforeach@getoptions{%
\ifx\next[%]
\expandafter\gforeach@getdelimiters%
\else%
\expandafter\gforeach@setdelimiters%
\fi%
}
\def\gforeach@getdelimiters[#1]{%
\pgfkeys{/gforeach,#1}\expandafter\gforeach@setdelimiters%
}
\endinput