%D \module %D [ file=page-mis, %D version=2008.11.17, % was part of page-flt.tex / 2000.10.20 %D title=\CONTEXT\ Page Macros, %D subtitle=Postponing, %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 / Postponing} \registerctxluafile{page-pst}{} \unprotect % postponing \newevery\everytopofpage\relax \appendtoks \the\everytopofpage \to \everystarttext \appendtoks \global\everytopofpage\emptytoks \to \everystoptext % \startpostponing [pagenumber] [+pageoffset] % % \startpostponing[2] % PAGE 2 \blank % \stoppostponing % % \startpostponing[+1] % PAGE +1 \blank % \stoppostponing % % \startpostponing[+2] % PAGE +2 \blank % \stoppostponing % % \starttext \dorecurse{4}{\input tufte \page} \stoptext %D There is no real need to use \LUA\ here but the bookkeeping %D is somewhat easier and we also can erase buffers easier when %D we keep a local cache, especially as we can flush per page. %newif \ifinpostponing % prevents nesting \newcount \c_page_postponed_blocks_next_page % set at the lua end \newconditional\c_page_postponed_busy \unexpanded\setvalue{\e!start\v!postponing}% {\bgroup \obeylines \doifelsenextoptional{\egroup\page_postponed_blocks_start}{\egroup\page_postponed_blocks_start[0]}} \unexpanded\setvalue{\e!stop\v!postponing}% {\clf_registerpostponedblock{\currentpostponedpage}\relax} \def\page_postponed_blocks_start[#1]% {\edef\currentpostponedpage{#1}% \grabbufferdatadirect{postponedblock}{\e!start\v!postponing}{\e!stop\v!postponing}} % officially we should flush again after a flush as there can be new future pages % but that will be looked into when we run into it \c_page_postponed_mode\plusone \unexpanded\def\page_postponed_blocks_flush_indeed {\begingroup \setsystemmode\v!postponing \settrue\c_page_postponed_busy \ifnum\c_page_postponed_mode=\plusone \savepagecontent \fi \pagetotal\zeropoint % here? still needed? (was after flush pagefloats) \the\everytopofpage\relax %\flushrestfloats \page_floats_flush_page_floats \setnormalcatcodes % postponing in verbatim \uncatcodespacetokens % postponing in startlines \restoreglobalbodyfont % otherwise problems inside split verbatim \clf_flushpostponedblocks % page {123} \relax \page_otr_command_flush_floats % new but potential dangerous, maybe we need a classification \ifnum\c_page_postponed_mode=\plusone \flushpagecontent \fi \endgroup} % of blocks: with and without flush \unexpanded\def\page_postponed_blocks_flush {\ifconditional\c_page_postponed_busy % probably a nested flush \else\ifnum\c_page_postponed_blocks_next_page=\zerocount % nothing in cache \else\ifnum\c_page_postponed_blocks_next_page<\zerocount % generic cache \page_postponed_blocks_flush_indeed \else\ifnum\c_page_postponed_blocks_next_page>\realpageno % future content \else % pending content \page_postponed_blocks_flush_indeed \fi\fi\fi\fi} \protect \endinput