%D \module %D [ file=buff-par, %D version=2010.12.05, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Parallel, %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 Buffer Macros / Parallel} \registerctxluafile{buff-par}{} %D This module is made for Thomas Schmitz as part of a project. There is %D no documentation yet. Also, this code is unfinished and not tested well. %D %D \starttyping %D \defineparallel[main][one,two] %D %D \startmain %D \startone %D first 0 %D [reference] first 1 %D first 2 %D first 3 %D \stopone %D \starttwo %D second 1 %D second 2 %D \stoptwo %D \stopmain %D %D \startmain %D \startone %D first 4 %D first 4 %D \stopone %D \starttwo %D second 3 %D second 4 %D \stoptwo %D \stopmain %D %D \placeparallel[main][one][criterium=all] %D %D \placeparallel[main][two][criterium=all] %D \stoptyping %D criterium=all start= n= \unprotect \installcorenamespace{parallel} \installcorenamespace{parallelhandler} \installcommandhandler \??parallel {parallel} \??parallel \setupparallel [\c!setups=parallel:place:default] \let\buff_parallel_define_saved\defineparallel \let\buff_parallel_setup_saved \setupparallel \unexpanded\def\defineparallel{\dodoubleargument\buff_parallel_define} \unexpanded\def\setupparallel {\dotripleargument\buff_parallel_setup} \def\buff_parallel_define[#name][#instances]% {\buff_parallel_define_saved[#name][\c!list={#instances}]% list is internal \clf_defineparallel{#name}{#instances}% \expandafter\newtoks\csname\??parallelhandler#name\endcsname \processcommacommand[#instances]{\buff_parallel_define_instance{#name}}% \setuevalue{\e!start#name}{\buff_parallel_start{#name}}% \setuevalue{\e!stop #name}{\buff_parallel_stop}} \let\buff_process_parallel_instance\relax \def\buff_process_parallel_instances {\the\csname\??parallelhandler\currentparallel\endcsname} \def\buff_parallel_define_instance#name#instance% {\normalexpanded{\buff_parallel_define_saved[#instance][#name]}% \definebuffer[#instance]% %\edef\t_buff_parallel{\csname\??parallelhandler#name\endcsname}% \expandafter\let\expandafter\t_buff_parallel\csname\??parallelhandler#name\endcsname \appendtoks \edef\currentparallelinstance{#instance}% \buff_process_parallel_instance\relax \to \t_buff_parallel \setuevalue{\e!stop#instance}{\buff_parallel_save{#instance}}} \def\buff_parallel_setup[#name][#instances][#setups]% {\processcommalist[#instances]{\buff_parallel_setup_instance{#name}{#setups}}} \def\buff_parallel_setup_instance#name#setups#instance% {\buff_parallel_setup_saved[#name:#instance][#setups]} \unexpanded\def\buff_parallel_start#name% {\pushmacro\currentparallel \edef\currentparallel{#name}% \clf_nextparallel{\currentparallel}} \unexpanded\def\buff_parallel_stop {\popmacro\currentparallel} \unexpanded\def\buff_parallel_save#instance% defined moet ook aan de lua kant kunnen {\clf_saveparallel {\currentparallel}% {#instance}% {\thedefinedbuffer{#instance}}% \relax} \unexpanded\def\placeparallel {\dotripleempty\buff_parallel_place} \def\buff_parallel_place[#name][#instance][#settings]% {\begingroup \edef\currentparallel{#name}% \setupcurrentparallel[#settings]% \clf_placeparallel {\currentparallel}% {#instance}% {% % setups {\parallelparameter\c!setups}% start {\parallelparameter\c!start}% n {\parallelparameter\c!n}% criterium {\parallelparameter\c!criterium}% }% \relax \endgroup} \def\doflushparallel#instance#status#line#label#content% called at lua end {\begingroup \def\currentparallelinstance{#instance}% \def\currentparallelnumber {#status}% \def\currentparallelline {#line}% \def\currentparallellabel {#label}% \def\currentparallelcontent {#content}% can be kep at the lua end .. no need to use a virtual file \ifcase#status\relax \expandafter\buff_parallel_flush_nop \or \expandafter\buff_parallel_flush_yes \fi \endgroup} \def\buff_parallel_flush_nop {} \def\buff_parallel_flush_yes %{\directsetup{\namedparallelparameter{\currentparallel:\currentparallelinstance}\c!setups}} {\directsetup{\namedparallelparameter{\currentparallelinstance}\c!setups}} \unexpanded\def\doifelseparallel#name#instance% {\clf_doifelseparallel{#name}{#instance}} \let\doifparallelelse\doifelseparallel \unexpanded\def\resetparallel {\dodoubleempty\buff_parallel_reset} \def\buff_parallel_reset[#name][#instance]% {\clf_resetparallel{#name}{#instance}} \startsetups parallel:place:default \hangafter\plusone \hangindent4\emwidth \dontleavehmode \hbox to 3\emwidth \bgroup \hss \bf \doifsomething \currentparallellabel { \textreference[\currentparallellabel]{\currentparallelline} } \currentparallelline \quad \egroup \currentparallelcontent \par \stopsetups \protect \endinput