%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 / Hans Hagen \& Ton Otten}] %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 \let\twopassdatalist\empty \newif\iftwopassdatafound \registerctxluafile{core-two}{1.001} %D I'm not that sure if this behaves exactly like mkii. This needs a cleanup. \def\immediatesavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlua {jobpasses.save('#1',"#3")}}} \def\savetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatelua{jobpasses.save('#1',"#3")}}} \def\lazysavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatelua{jobpasses.save('#1',"#3")}}} \def\savetaggedtwopassdata #1#2#3#4{\normalexpanded{\noexpand\ctxlua {jobpasses.savetagged('#1','#3',"#4")}}} \def\lazysavetaggedtwopassdata#1#2#3#4{\normalexpanded{\noexpand\ctxlatelua{jobpasses.savetagged('#1','#3',"#4")}}} % temp hack: needs a proper \starteverytimeluacode \def\testtwopassdata{\ifx\twopassdata\empty\twopassdatafoundfalse\else\twopassdatafoundtrue\fi} % todo: move the edef to lua \def\definetwopasslist #1{\ctxlua{jobpasses.define('#1')}} \def\gettwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.get("#1")}}\testtwopassdata} \def\checktwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.check("#1")}}\testtwopassdata} \def\findtwopassdata #1#2{\edef\twopassdata{\ctxlua{jobpasses.find("#1","#2")}}\testtwopassdata} \def\getfirsttwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.first("#1")}}\testtwopassdata} \def\getlasttwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.last("#1")}}\edef\noftwopassitems{\ctxlua{jobpasses.count("#1")}}\testtwopassdata} \def\getnamedtwopassdatalist#1#2{\edef#1{\ctxlua{jobpasses.list("#2")}}} \def\gettwopassdatalist #1{\edef\twopassdatalist{\ctxlua{jobpasses.list("#1")}}} \def\doifelseintwopassdata #1#2{\ctxlua{jobpasses.doifinlistelse("#1","#2")}} \let\getfromtwopassdata\findtwopassdata \protect \endinput