%D \module %D [ file=page-str, %D version=2010.03.13, % 2006.03.21, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Streams, %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 Page Macros / Page Streams} %D The first version of this component of \CONTEXT\ was written %D for Thomas Schmitz who asked for parallel page streams. While %D playing with the code, I decided to make it into a component %D that can be used to construct all kind of stream related %D mechanisms. Because I could apply this feature in a project, %D there is some additional code here (related to graphics). %D %D These macros were written while listening to and watching the DVD %D \quotation {Rush In Rio}. %D %D The reimplementation (or rather experimenting with the complete %D rewrite) was done while looping over \quotation {Wende Snijders %D No.9}. %D %D Remark: marknotes are gone, at least for a while. \writestatus{loading}{ConTeXt Page Macros / Page Streams} \registerctxluafile{page-str}{1.001} \unprotect \let \currentoutputstream \empty \newif \ifinoutputstream % will becoem a conditional or mode \newtoks \everyenableoutputstream \appendtoks \page_otr_command_flush_side_floats \to \everyenableoutputstream \unexpanded\def\initializeoutputstreams {\ctxlua{streams.initialize()}% \glet\initializeoutputstreams\relax} \unexpanded\def\enableoutputstream[#1]% could be \startoutputsubstream {\initializeoutputstreams \the\everyenableoutputstream \inoutputstreamtrue \xdef\currentoutputstream{#1}% \ctxlua{streams.enable("#1")}} \unexpanded\def\disableoutputstream {\inoutputstreamfalse \global\let\currentoutputstream\s!default \ctxlua{streams.disable()}} \unexpanded\def\startoutputstream[#1]% {\begingroup \initializeoutputstreams \the\everyenableoutputstream \inoutputstreamtrue \xdef\currentoutputstream{#1}% \ctxlua{streams.start("#1")}} \unexpanded\def\stopoutputstream {\ctxlua{streams.stop()}% \endgroup} \unexpanded\def\startoutputsubstream[#1]% just push/pop instead {\globalpushmacro\currentoutputstream \enableoutputstream[#1]} \unexpanded\def\stopoutputsubstream {\globalpopmacro\currentoutputstream \enableoutputstream[\currentoutputstream]} \def\flushoutputstream [#1]{\ctxlua{streams.flush("#1")}} \def\outputstreamcopy [#1]{\vbox{\ctxlua{streams.flush("#1",true)}}} \def\outputstreambox [#1]{\vbox{\ctxlua{streams.flush("#1")}}} \def\outputstreamunvcopy[#1]{\ctxlua{streams.flush("#1",true)}} \def\outputstreamunvbox [#1]{\ctxlua{streams.flush("#1")}} \def\synchronizestreams [#1]{\ctxlua{streams.synchronize("#1")}} \def\dopushoutputstream [#1]{\ctxlua{streams.push("#1")}} \unexpanded\def\pushoutputstream {\dosingleempty\dopushoutputstream} % \unexpanded\def\defineoutputstream[#1]% % {\doifundefined{otrs:#1}{\expandafter\newbox\csname otrs:#1\endcsname}} % % \def\useoutputstream[#1]% % {\writestatus{otr}{using output stream #1}% % \xdef\currentoutputstream{#1}} % % \directsetup{stream:\firstoutputstream:set} % \directsetup{stream:\firstoutputstream:top} % \directsetup{stream:\firstoutputstream:bottom} % \directsetup{stream:\firstoutputstream:reset} % Obsolete in \MKIV: % % \unexpanded\def\definemarknote % {\dodoubleempty\dodefinemarknote} % % \def\dodefinemarknote[#1][#2]{} % \def\setmarknote [#1]{\gobbleoneargument} % \def\flushmarknotes [#1]{} % \def\erasemarknotes [#1]{} \protect \endinput % \enabletrackers[streams.flushing] % % \setuplayout[grid=yes] \showgrid % % \starttext % % \input tufte % % \startoutputstream[nl] % % Wat doen we hier? % % \enableoutputstream[en] % % Are you sleeping, brother John?\footnote{xxx} % % \dorecurse{4}{x \footnote{note \recurselevel}\input tufte \par \pushoutputstream} % % \enableoutputstream[de] % % Bruder Jakob, schläfst du noch?\footnote{yyy} % % \dorecurse{4}{x \footnote{note \recurselevel}\input ward \par \pushoutputstream} % % \disableoutputstream % % \stopoutputstream % % Vader Jacob, slaap je nog?\footnote{zzz} % % \input tufte % % \synchronizestreams[en,de,nl] % % \page \flushoutputstream[en] \input knuth % \page \flushoutputstream[de] \input knuth % \page \flushoutputstream[nl] \input knuth % % \stoptext