%D \module %D [ file=m-steps, %D version=2011.10.07, % 2001.05.28, %D title=\CONTEXT\ Modules, %D subtitle=Step Charts \& Tables, %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. % multiple texts? \registerctxluafile{m-steps}{} \unprotect \installcorenamespace {stepcharts} \installcorenamespace {steptables} \installcorenamespace {stepcells} \installcorenamespace {steptexts} \installcorenamespace {steplines} \installsimplecommandhandler \??stepcharts {STEPchart} \??stepcharts \installsimplecommandhandler \??steptables {STEPtable} \??steptables \installsimplecommandhandler \??stepcells {STEPcell} \??stepcells \installsimplecommandhandler \??steptexts {STEPtext} \??steptexts \installsimplecommandhandler \??steplines {STEPline} \??steplines \let\setupSTEPcharts\setupSTEPchart \let\setupSTEPtables\setupSTEPtable \let\setupSTEPcells \setupSTEPcell \let\setupSTEPtexts \setupSTEPtext \let\setupSTEPlines \setupSTEPline % numeric text_text_distance ; text_text_distance := 20pt ; % numeric step_distance ; step_distance := 20pt ; \setupSTEPcharts [\c!alternative=\v!horizontal, \c!before=\blank, \c!after=\blank] % \c!offset=.15\bodyfontsize % \c!height=2ex % \setupSTEPtables % [\c!before=\blank, % \c!after=\blank, % \c!distance=.25em, % \c!voffset=1ex, % \c!method=1, % \c!width=4em, % \c!offset=.15\bodyfontsize] \setupSTEPcells [\c!alternative=1, % TODO % \c!style=, % \c!color=, \c!dx=\bodyfontsize, \c!dy=\bodyfontsize, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!offset=.25\bodyfontsize] \setupSTEPtexts [\c!alternative=1, % TODO % \c!style=\v!smallbodyfont, % \c!color=, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!distance=.5\bodyfontsize, \c!offset=.25\bodyfontsize] \setupSTEPlines [\c!alternative=1, % TODO \c!rulethickness=.15\bodyfontsize, \c!height=3\bodyfontsize, \c!distance=.5\bodyfontsize, \c!offset=.25\bodyfontsize, \c!color=STEPlinecolor] \definecolor [STEPlinecolor] [s=.5] \definecolor [STEPframecolor] [s=.7] \definecolor [STEPbackgroundcolor] [s=.9] \newtoks\everySTEPchart \unexpanded\def\startSTEPchart {\begingroup \dodoubleempty\module_steps_start_chart} \def\module_steps_start_chart[#name][#settings]% {\startnointerference \iffirstargument \doifelseassignment{#name} {\let\currentSTEPchart\empty \xdef\module_steps_flush_chart{\module_steps_chart[][#name]}} {\edef\currentSTEPchart{#name}% \glet\module_steps_flush_chart\relax}% settings are not stored \else \let\currentSTEPchart\empty \gdef\module_steps_flush_chart{\module_steps_chart[][]}% \fi \the\everySTEPchart \ctxcommand{step_start_chart("\currentSTEPchart")}} \unexpanded\def\stopSTEPchart {\ctxcommand{step_stop_chart()}% \stopnointerference \module_steps_flush_chart \endgroup} \unexpanded\def\startSTEPtable {\begingroup \setupSTEPchart[\c!alternative=\v!vertical]% \dodoubleempty\module_steps_start_chart} \let\stopSTEPtable\stopSTEPchart \let\module_steps_flush_chart\relax \unexpanded\def\STEPchart {\dodoubleempty\module_steps_chart} \unexpanded\def\module_steps_chart[#name][#settings]% {\begingroup \setupSTEPchart[#settings]% \ifinsidefloat \makeSTEPchart[#name]% \else \STEPchartparameter\c!before \startbaselinecorrection \setlocalhsize \makeSTEPchart[#name]% \stopbaselinecorrection \STEPchartparameter\c!after \fi \endgroup} \unexpanded\def\makeSTEPchart[#name]% {\ctxcommand{step_make_chart { chart = { name = "#name", alternative = "\STEPchartparameter\c!alternative", }, cell = { alternative = "\STEPcellparameter\c!alternative", % TODO: shapes offset = \number\dimexpr\STEPcellparameter\c!offset, rulethickness = \number\dimexpr\STEPcellparameter\c!rulethickness, framecolor = "\STEPcellparameter\c!framecolor", backgroundcolor = "\STEPcellparameter\c!backgroundcolor", dx = \number\dimexpr\STEPcellparameter\c!dx, dy = \number\dimexpr\STEPcellparameter\c!dy, }, text = { alternative = "\STEPtextparameter\c!alternative", % TODO: shapes offset = \number\dimexpr\STEPtextparameter\c!offset, distance = \number\dimexpr\STEPtextparameter\c!distance, rulethickness = \number\dimexpr\STEPtextparameter\c!rulethickness, framecolor = "\STEPtextparameter\c!framecolor", backgroundcolor = "\STEPtextparameter\c!backgroundcolor", }, line = { alternative = "\STEPlineparameter\c!alternative", % TODO: dash, arrow rulethickness = \number\dimexpr\STEPlineparameter\c!rulethickness, height = \number\dimexpr\STEPlineparameter\c!height, distance = \number\dimexpr\STEPlineparameter\c!distance, offset = \number\dimexpr\STEPlineparameter\c!offset, color = "\STEPlineparameter\c!color", }, }}} \unexpanded\def\startSTEPcell {\ctxcommand{step_start_cell()}} \unexpanded\def\stopSTEPcell {\ctxcommand{step_stop_cell()}} \unexpanded\def\module_steps_cells#top#bot% {\ctxcommand{step_cells(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_texts#top#bot% {\ctxcommand{step_texts(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_cell#str% {\ctxcommand{step_cell(\!!bs\detokenize{#str}\!!es)}} \unexpanded\def\module_steps_text#str% {\ctxcommand{step_text(\!!bs\detokenize{#str}\!!es)}} \unexpanded\def\module_steps_textset#left#middle#right% {\ctxcommand{step_textset(\!!bs\detokenize{#left}\!!es,\!!bs\detokenize{#middle}\!!es,\!!bs\detokenize{#right}\!!es)}} \unexpanded\def\module_steps_toptext#top% {\ctxcommand{step_text_top(\!!bs\detokenize{#top}\!!es)}} \unexpanded\def\module_steps_bottext#bot% {\ctxcommand{step_text_bot(\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_topcell#top% {\ctxcommand{step_cell_top(\!!bs\detokenize{#top}\!!es)}} \unexpanded\def\module_steps_botcell#bot% {\ctxcommand{step_cell_bot(\!!bs\detokenize{#bot}\!!es)}} \appendtoks \let\cells \module_steps_cells \let\texts \module_steps_texts \let\cell \module_steps_cell \let\text \module_steps_text \let\textset\module_steps_textset \let\toptext\module_steps_toptext \let\bottext\module_steps_bottext \let\topcell\module_steps_topcell \let\botcell\module_steps_botcell \to \everySTEPchart % todo: mapping can be done in lua \startxmlsetups xml:step:define \xmlsetsetup{#1} {stepchart|steptable} {xml:step:*} \stopxmlsetups \xmlregistersetup{xml:step:define} \startxmlsetups xml:step:stepchart \startSTEPchart \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)} \stopSTEPchart \stopxmlsetups \startxmlsetups xml:step:steptable \startSTEPtable \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)} \stopSTEPtable \stopxmlsetups \startxmlsetups xml:step:cells \cells {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:step:texts \texts {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:step:stepcell \cells {\xmltext{#1}{/topcell}} {\xmltext{#1}{/botcell}} \texts {\xmltext{#1}{/toptext}} {\xmltext{#1}{/bottext}} \stopxmlsetups \startxmlsetups xml:step:cell \cell {\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:step:text \text {\xmlflush{#1}} \stopxmlsetups \protect \continueifinputfile{m-steps.mkvi} \starttext \startbuffer some cell some text some cell some text some cell \stopbuffer \typebuffer \processxmlbuffer \startbuffer some cell some text some cell some text some cell \stopbuffer \typebuffer \processxmlbuffer \page \startSTEPchart \cells {A} {B} \cells {one} {five} \texts{$+2$}{$-2$} \cells {two} {four} \texts{$+3$}{$-3$} \cells {three} {three} \texts{$+4$}{$-4$} \cells {four} {two} \texts{$+5$}{$-5$} \cells {five} {one} \stopSTEPchart \startSTEPtable \cell {one} \textset{$x$} {=}{$a+b+c$} \cell {two} \textset{$c+d$}{=}{$y$} \cell {three} \stopSTEPtable \page \startbuffer some text some text text text some text some text \stopbuffer \processxmlbuffer \startbuffer some text text text some text \stopbuffer \processxmlbuffer \page \startSTEPchart[second] \startSTEPcell \topcell {A} \botcell {B} \startSTEPcell \topcell {one} \botcell {five} \toptext {$+2$} \bottext {$-2$} \stopSTEPcell \startSTEPcell \topcell {two} \botcell {four} \toptext {$+3$} \bottext {$-3$} \stopSTEPcell \startSTEPcell \topcell {three} \botcell {three} \toptext {$+4$} \bottext {$-4$} \stopSTEPcell \startSTEPcell \topcell {four} \botcell {two} \toptext {$+5$} \bottext {$-5$} \stopSTEPcell \startSTEPcell \topcell {five} \botcell {one} \stopSTEPcell \stopSTEPchart \STEPchart[first][alternative=horizontal] \STEPchart[first][alternative=vertical] \page \STEPchart[second][alternative=horizontal] \STEPchart[second][alternative=vertical] \page \stoptext