summaryrefslogtreecommitdiff
path: root/tex/context/base/core-two.mkiv
blob: b08914ef407513d20e21837d0353257e027c3107 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
%D \module
%D   [       file=core-two, % moved from core-uti
%D        version=1997.03.31,
%D          title=\CONTEXT\ Core Macros,
%D       subtitle=Two Pass Data,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\writestatus{loading}{ConTeXt Core Macros / Two Pass Data}

%D This is a rather old mechanism which has not changed much over
%D time, apart from adding a few more selectors. This code used
%D to be part of \type {core-uti}. The following examples demonstrate
%D the interface.
%D
%D \startbuffer
%D \definetwopasslist{test-1}
%D
%D \gettwopassdatalist{test-1} [\twopassdatalist=]
%D \checktwopassdata  {test-1} [\twopassdata=]
%D \checktwopassdata  {test-1} [\twopassdata=]
%D \gettwopassdata    {test-1} [\twopassdata=]
%D \gettwopassdata    {test-1} [\twopassdata=]
%D
%D \definetwopasslist{test-2}
%D
%D \lazysavetwopassdata{test-2}{1}{x}
%D \lazysavetwopassdata{test-2}{2}{y}
%D \lazysavetwopassdata{test-2}{3}{z}
%D
%D \gettwopassdatalist{test-2} [\twopassdatalist=x,y,z]
%D \checktwopassdata  {test-2} [\twopassdata=x]
%D \checktwopassdata  {test-2} [\twopassdata=x]
%D \gettwopassdata    {test-2} [\twopassdata=x]
%D \gettwopassdata    {test-2} [\twopassdata=y]
%D \gettwopassdata    {test-2} [\twopassdata=z]
%D \gettwopassdata    {test-2} [\twopassdata=]
%D
%D \definetwopasslist{test-3}
%D
%D \lazysavetaggedtwopassdata{test-3}{1}{x}{a}
%D \lazysavetaggedtwopassdata{test-3}{2}{y}{b}
%D \lazysavetaggedtwopassdata{test-3}{3}{z}{c}
%D
%D \findtwopassdata{test-3}{x} [\twopassdata=a]
%D \findtwopassdata{test-3}{y} [\twopassdata=b]
%D \findtwopassdata{test-3}{z} [\twopassdata=c]
%D \findtwopassdata{test-3}{w} [\twopassdata=]
%D
%D \definetwopasslist{test-4}
%D
%D \lazysavetwopassdata{test-4}{1}{A}
%D \lazysavetwopassdata{test-4}{2}{B}
%D \lazysavetwopassdata{test-4}{3}{C}
%D
%D \getfirsttwopassdata{test-4}    [\twopassdata=A]
%D \getlasttwopassdata {test-4}    [\twopassdata=C]
%D \getfirsttwopassdata{test-4}    [\twopassdata=A]
%D \getlasttwopassdata {test-4}    [\twopassdata=C]
%D \getfromtwopassdata {test-4}{1} [\twopassdata=A]
%D \getfromtwopassdata {test-4}{3} [\twopassdata=C]
%D \getfromtwopassdata {test-4}{2} [\twopassdata=B]
%D \stopbuffer
%D
%D \getbuffer \typebuffer

\unprotect

\registerctxluafile{core-two}{1.001}

\def\immediatesavetwopassdata   #1#2#3{\normalexpanded{\noexpand\ctxcommand    {savetwopassdata('#1',"#3")}}}
\def\savetwopassdata            #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}}
\def\lazysavetwopassdata        #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}}
\def\savetaggedtwopassdata    #1#2#3#4{\normalexpanded{\noexpand\ctxcommand    {savetaggedtwopassdata('#1','#3',"#4")}}}
\def\lazysavetaggedtwopassdata#1#2#3#4{\normalexpanded{\noexpand\ctxlatecommand{savetaggedtwopassdata('#1','#3',"#4")}}}

% temp hack: needs a proper \starteverytimeluacode

\setfalse\twopassdatafound
\let     \twopassdata      \empty
\let     \twopassdatalist  \empty

\newif   \iftwopassdatafound  % obsolete, will go

\def\syst_twopass_check
  {\ifx\twopassdata\empty
     \twopassdatafoundfalse % obsolete
     \setfalse\twopassdatafound
   \else
     \twopassdatafoundtrue  % obsolete
     \settrue\twopassdatafound
   \fi}

\def\syst_twopass_set_not_found
  {\twopassdatafoundfalse % obsolete
   \setfalse\twopassdatafound}

\def\syst_twopass_set_found
  {\twopassdatafoundtrue % obsolete
   \settrue\twopassdatafound}

\unexpanded\def\definetwopasslist        #1{\ctxcommand{definetwopasslist('#1')}}
\unexpanded\def\gettwopassdata           #1{\edef\twopassdata    {\ctxcommand{gettwopassdata      ("#1")}}\syst_twopass_check}
\unexpanded\def\checktwopassdata         #1{\edef\twopassdata    {\ctxcommand{checktwopassdata    ("#1")}}\syst_twopass_check}
\unexpanded\def\findtwopassdata        #1#2{\edef\twopassdata    {\ctxcommand{findtwopassdata("#1","#2")}}\syst_twopass_check}
\unexpanded\def\getfirsttwopassdata      #1{\edef\twopassdata    {\ctxcommand{getfirsttwopassdata ("#1")}}\syst_twopass_check}
\unexpanded\def\getlasttwopassdata       #1{\edef\twopassdata    {\ctxcommand{getlasttwopassdata  ("#1")}}%
                                            \edef\noftwopassitems{\ctxcommand{counttwopassdata    ("#1")}}\syst_twopass_check}
\unexpanded\def\getnamedtwopassdatalist#1#2{\edef              #1{\ctxcommand{gettwopassdatalist  ("#2")}}}
\unexpanded\def\gettwopassdatalist       #1{\edef\twopassdatalist{\ctxcommand{gettwopassdatalist  ("#1")}}}

\unexpanded\def\doifelseintwopassdata  #1#2{\ctxcommand{doifelseintwopassdata("#1","#2")}}

           \let\getfromtwopassdata          \findtwopassdata

\protect \endinput