blob: 8adc2e076beea9ab90fb561eb042f4d6e01391a8 (
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
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
|
% QUEUE MACROS for LaTeX2e, version 1.01,
% written by Herman Haverkort, 14 february 1995
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hhqueue}[1995/02/14]
% The \h@@@getfirst and \h@@@enqueue macro's which are defined below are
% modifications of \lop and \rightappenditem which are found in
% Computers & Typesetting by Donald Knuth. The representation of queues
% and lists is like his.
\newtoks\@temptokenb
\def\h@getfirst#1{\expandafter\h@@getfirst\csname #1\endcsname}
\def\h@@getfirst#1#2{%
\expandafter\h@@@getfirst\expandafter #1\csname hq@#2\endcsname}
\def\h@@@getfirst#1#2{\expandafter\h@@@@getfirst #2\h@qend#2#1}
\def\h@@@@getfirst\\#1#2\h@qend#3#4{\gdef#4{#1}\gdef#3{#2}}
\def\h@delete#1{\expandafter\h@@delete\csname #1\endcsname}
\def\h@@delete#1#2{%
\expandafter \expandafter
\expandafter \h@@@delete
\expandafter \expandafter
\expandafter {%
\expandafter #1%
\expandafter }%
\csname hq@#2\endcsname}
\def\h@@@delete#1#2{{%
\let\tempa=#2%
\def\tempb{#1}%
\h@@@initqueue#2{}%
\def\\##1{\def\tempc{##1}\ifx\tempb\tempc\else\h@@@enqueue{##1}#2\fi}%
\tempa}}
% Some rather tricky macro which is said to be efficient can be found
% in the TeXbook by Donald Knuth, appendix D, section 2.
\def\h@enqueue#1{\expandafter\h@@enqueue\csname #1\endcsname}
\def\h@@enqueue#1#2{%
\expandafter \expandafter
\expandafter \h@@@enqueue
\expandafter \expandafter
\expandafter {%
\expandafter #1%
\expandafter }%
\csname hq@#2\endcsname}
\def\h@@@enqueue#1#2{%
\@temptokena=\expandafter{#2}%
\@temptokenb={\\{#1}}%
\xdef#2{\the\@temptokena\the\@temptokenb}}
\def\h@ifqempty#1{\expandafter\h@@@ifqempty\csname hq@#1\endcsname}
\def\h@@@ifqempty#1#2#3{\ifx#1\@empty#2\else#3\fi}
\def\h@ifqnonempty#1{\expandafter\h@@@ifqnonempty\csname hq@#1\endcsname}
\def\h@@@ifqnonempty#1#2{\ifx#1\@empty\else#2\fi}
\def\h@initqueue#1{\expandafter\h@@@initqueue\csname hq@#1\endcsname}
\def\h@@@initqueue#1{\gdef#1}
\def\h@processq#1{\@nameuse{hq@#1}}
|