%D \module %D [ file=strc-sbe, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Section Block Environments, %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 Structure Macros / Section Block Environments} \unprotect % \def\ChapterEntry#1#2#3% % {chapter : \hbox to \hsize{\strut\bf#2\hss#3}\endgraf\placelist[section]} % % \startfrontmatter % optional % \placelist[chapter][alternative=command,command=\ChapterEntry,criterium=text] \page % \stopfrontmatter % optional % % \startbodymatter % optional % \chapter{first} \section{one} test \section{two} test \page % \chapter{second} \section{alpha} test \section{beta} test \page % \stopbodymatter % optional \installcorenamespace{sectionblock} \installcommandhandler \??sectionblock {sectionblock} \??sectionblock \setupsectionblock [\c!number=\v!yes, \c!page=\v!right] % otherwise marks are reset too soon \newtoks\everybeforesectionblock \newtoks\everyaftersectionblock \let\strc_sectionblock_define_normal\definesectionblock \permanent\overloaded\tolerant\protected\def\definesectionblock[#1]#*[#2]#*[#3]% singular plural settings {\strc_sectionblock_define_normal[#1][#3]% %\expandafter\newif\csname if#2\endcsname % obsolete \strc_sectionblock_set_environment{#1}\empty \frozen\protected\defcsname\e!start#2\endcsname{\startsectionblock[#1]}% \frozen\protected\defcsname\e!stop #2\endcsname{\stopsectionblock}} \ifdefined \resetallstructuremarks \else \let\resetallstructuremarks\relax \fi \def\strc_sectionblock_handle_page {\edef\p_strc_sectionblock_page{\sectionblockparameter\c!page}% \ifempty\p_strc_sectionblock_page \else \page[\p_strc_sectionblock_page]% \fi} \appendtoks \strc_sectionblock_handle_page \resetallstructuremarks \strc_sectionblock_get_environment\currentsectionblock \sectionblockparameter\c!before % don't move \dostarttagged\t!division\currentsectionblock % no parents \to \everybeforesectionblock \appendtoks \sectionblockparameter\c!after % don't move \strc_sectionblock_handle_page \dostoptagged \resetallstructuremarks \to \everyaftersectionblock \permanent\tolerant\protected\def\setsectionblock[#1]#*[#2]% used to set the default {\edef\currentsectionblock{#1}% from now on we assume a value \setupcurrentsectionblock[#2]% \clf_setsectionblock{#1} bookmark {\sectionblockparameter\c!bookmark}% \relax} \mutable\let\currentsectionblock\empty % was \s!unknown \permanent\tolerant\protected\def\startsectionblock[#1]#*[#2]% {%\ctxlua{structures.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push) \begingroup \edef\currentsectionblock{#1}% from now on we assume a value \setupcurrentsectionblock[#2]% \clf_pushsectionblock{#1} bookmark {\sectionblockparameter\c!bookmark}% \relax %\csname #1true\endcsname % obsolete \setsystemmode\currentsectionblock \the\everybeforesectionblock\relax \showmessage\m!structures1\currentsectionblock} \permanent\protected\def\stopsectionblock {\showmessage\m!structures2\currentsectionblock \the\everyaftersectionblock\relax \clf_popsectionblock \endgroup} %D \starttyping %D \startsectionblockenvironment[frontpart] %D \setupnumber[userpage][numberconversion=romannumerals,start=1] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[bodypart] %D \setupnumber[userpage][numberconversion=numbers,start=1] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[backpart] %D \setupnumber[userpage][numberconversion=numbers,start=1] %D \stopsectionblockenvironment %D %D \starttext %D \startfrontmatter \chapter{test} \stopfrontmatter %D \startbodymatter \chapter{test} \stopbodymatter %D \startappendices \chapter{test} \stopappendices %D \stoptext %D \stoptyping \installcorenamespace{sectionblockenvironment} \protected\def\strc_sectionblock_set_environment#1#2% {\defcsname\??sectionblockenvironment#1\endcsname{#2}} \protected\def\strc_sectionblock_get_environment#1% {\csname\??sectionblockenvironment#1\endcsname} \permanent\tolerant\protected\setvalue{\e!start\v!sectionblockenvironment}[#1]% evt \pushendofline \popendofline {\grabuntil{\e!stop\v!sectionblockenvironment}{\strc_sectionblock_set_environment{#1}}} \permanent\protected\expandafter\lettonothing\csname\e!stop\v!sectionblockenvironment\endcsname \protect \endinput