summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/5_5/hhqueue.sty
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}}