core-dat.mkxl /size: 3080 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=core-dat,
3%D        version=2021.04.17, % replaces core-two from 1997.03.31,
4%D          title=\CONTEXT\ Core Macros,
5%D       subtitle=Multipass Datasets,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Core Macros / Multipass Datasets}
15
16%D \starttyping
17%D \definedataset[test-1]
18%D \definedataset[test-2][delay=yes]
19%D
20%D \startlines
21%D set 1: \setdataset[test-1][whatever=this-or-that-1]
22%D set 2: \setdataset[test-2][whatever=this-or-that-2]
23%D set 3: \setdataset[test-2][whatever=this-or-that-3]
24%D \stoplines
25%D
26%D \startlines
27%D get 1: \datasetvariable{test-1}{1}{whatever} / \datasetvariable{test-1}{1}{realpage}
28%D get 2: \datasetvariable{test-2}{1}{whatever} / \datasetvariable{test-2}{1}{realpage}
29%D get 3: \datasetvariable{test-2}{2}{whatever} / \datasetvariable{test-2}{2}{realpage}
30%D \stoplines
31%D \stoptyping
32
33%D \starttyping
34%D \definedataset[nofpages]
35%D
36%D \dorecurse{16}{whatever\page}
37%D
38%D \setdataset [nofpages] [pagetotal=\lastpagenumber]
39%D
40%D \testfeatureonce{100}{test \datasetvariable[todo-datasets]{nofpages}{1}{pagetotal} }
41%D \stoptyping
42
43\unprotect
44
45\registerctxluafile{core-dat}{autosuffix}
46
47\installcorenamespace{dataset}
48
49\installcommandhandler \??dataset {dataset} \??dataset
50
51\permanent\tolerant\protected\def\setdataset[#1]#*[#S#2]#*[#S#3]%
52  {\begingroup
53   \cdef\currentdataset{#1}%
54   \ifparameters\or\or
55     \clf_setdataset
56        name  {\currentdataset}%
57        delay {\datasetparameter\c!delay}%
58        data  {#2}%
59     \relax
60   \or
61     \cdef\currentdataset{#1}%
62     \clf_setdataset
63        name  {\currentdataset}%
64        tag   {#2}%
65        delay {\datasetparameter\c!delay}%
66        data  {#3}%
67     \relax
68   \fi
69   \endgroup}
70
71\permanent\tolerant\def\datasetvariable[#1]{\clf_datasetvariable{#1}}
72\permanent\tolerant\def\datasetsize    [#1]{\clf_datasetsize    {#1}}
73
74% \startsetups[dataset:demo]
75%     \datasetvariable{autores}{\recurselevel}{whatever}
76% \stopsetups
77% \dorecurse{\datasetsize{demo}}{
78%   \setups[dataset:demo]
79% }
80
81% \startsetups[dataset:demo]
82%     \datasetvariable{autores}{\datasetindex}{whatever}
83% \stopsetups
84% \processdataset[demo][dataset:demo]
85
86% \startsetups[dataset:demo]
87%     \datasetentry{whatever}
88% \stopsetups
89% \processdataset[demo][dataset:demo]
90
91\mutable\let\datasetindex\!!zerocount
92\mutable\let\datasetentry\gobbleoneargument
93
94\permanent\tolerant\protected\def\processdataset[#1]#*[#2]#*[#3]%
95  {\ifparameters\or
96   \or\system_process_dataset  {}{#1}{#2}%
97   \or\system_process_dataset{#1}{#2}{#3}%
98   \fi}
99
100\def\system_process_dataset#1#2#3%
101  {\pushmacro\datasetindex
102   \pushmacro\datasetentry
103   \def\datasetentry{\clf_datasetvariable{#1}{#2}{\datasetindex}}%
104   \dorecurse{\datasetsize[#1]{#2}}{\let\datasetindex\recurselevel\directsetup{#3}}%
105   \popmacro\datasetentry
106   \popmacro\datasetindex}
107
108\protect
109