%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 \unexpanded\def\definesectionblock {\dotripleargument\strc_sectionblock_define} \def\strc_sectionblock_define[#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 \setuvalue{\e!start#2}{\startsectionblock[#1]}% \setuvalue{\e!stop #2}{\stopsectionblock}} \ifdefined \resetallstructuremarks \else \let\resetallstructuremarks\relax \fi \def\strc_sectionblock_handle_page {\edef\p_strc_sectionblock_page{\sectionblockparameter\c!page}% \ifx\p_strc_sectionblock_page\empty \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 \unexpanded\def\setsectionblock {\dodoubleempty\strc_sectionblock_set} \def\strc_sectionblock_set[#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} \let\currentsectionblock\empty % was \s!unknown \unexpanded\def\startsectionblock {\dodoubleempty\strc_sectionblock_start} \unexpanded\def\strc_sectionblock_start[#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} \unexpanded\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} \unexpanded\def\strc_sectionblock_set_environment#1#2% {\setvalue{\??sectionblockenvironment#1}{#2}} \unexpanded\def\strc_sectionblock_get_environment#1% {\csname\??sectionblockenvironment#1\endcsname} \unexpanded\setvalue{\e!start\v!sectionblockenvironment}% {\dosingleargument\strc_sectionblock_environment_start} \letvalue{\e!stop\v!sectionblockenvironment}\relax \def\strc_sectionblock_environment_start[#1]% evt \pushendofline \popendofline {\grabuntil{\e!stop\v!sectionblockenvironment}{\strc_sectionblock_set_environment{#1}}} \protect \endinput