summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-sbe.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/strc-sbe.mkiv')
-rw-r--r--tex/context/base/strc-sbe.mkiv141
1 files changed, 141 insertions, 0 deletions
diff --git a/tex/context/base/strc-sbe.mkiv b/tex/context/base/strc-sbe.mkiv
new file mode 100644
index 000000000..206ac8a9c
--- /dev/null
+++ b/tex/context/base/strc-sbe.mkiv
@@ -0,0 +1,141 @@
+%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 / Hans Hagen]
+%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
+
+\definesystemvariable {nb}
+
+\def\v!structureblockenvironment{structureblockenvironment}
+
+\unexpanded\def\definestructureblock{\dotripleargument\dodefinestructureblock}
+\unexpanded\def\setupstructureblock {\dodoubleargument\dosetupstructureblock}
+\def\setstructureblock {\dosingleargument\dosetstructureblock}
+
+% \def\structureblockparameter#1{\executeifdefined{\??nb\currentstructureblock#1}\empty}
+
+\def\structureblockparameter#1%
+ {\csname
+ \ifcsname\??nb\currentstructureblock#1\endcsname\??nb\currentstructureblock#1\else\s!empty\fi
+ \endcsname}
+
+\newtoks \everybeforestructureblock
+\newtoks \everyafterstructureblock
+
+\def\dodefinestructureblock[#1][#2][#3]% singular plural settings
+ {\getparameters
+ [\??nb#1]
+ [\c!number=\v!yes,
+ \c!page=\v!right, % anders worden marks te vroeg gereset !
+ #3]%
+ \expandafter\newif\csname if#2\endcsname % better a mode
+ \setstructureblockenvironment{#1}\empty
+ \setvalue {\e!start#2}{\startstructureblock[#1]}%
+ \setvalue {\e!stop #2}{\stopstructureblock}}
+
+\appendtoks
+ \doifsomething{\structureblockparameter\c!page}{\page[\structureblockparameter\c!page]}%
+% TODO \resetsectionmarks\zerosection
+ \getstructureblockenvironment\currentstructureblock
+ \structureblockparameter\c!before % don't move
+\to \everybeforestructureblock
+
+\appendtoks
+ \structureblockparameter\c!after % don't move
+ \doifsomething{\structureblockparameter\c!page}{\page[\structureblockparameter\c!page]}%
+% TODO \resetsectionmarks\zerosection
+\to \everyafterstructureblock
+
+\def\dosetupstructureblock[#1]%
+ {\getparameters[\??nb#1]}% [#2]
+
+\def\dosetstructureblock[#1]% used to set the default
+ {\edef\currentstructureblock{\ctxlua{structure.sections.setblock("#1")}}}
+
+\let\currentstructureblock\s!unknown
+
+\unexpanded\def\startstructureblock[#1]%
+ {%\ctxlua{structure.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push)
+ \begingroup
+ \edef\currentstructureblock{\ctxlua{structure.sections.pushblock("#1")}}%
+ \csname #1true\endcsname % for old times sake
+ \setsystemmode\currentstructureblock
+ \the\everybeforestructureblock\relax
+ \showmessage\m!structures1\currentstructureblock}
+
+\unexpanded\def\stopstructureblock
+ {\showmessage\m!structures2\currentstructureblock
+ \the\everyafterstructureblock\relax
+ \edef\currentstructureblock{\ctxlua{structure.sections.popblock()}}%
+ \endgroup}
+
+\long\def\setstructureblockenvironment#1#2%
+ {\long\setvalue{\??nb\s!do#1}{\do{#2}}}
+
+\def\getstructureblockenvironment#1%
+ {\let\do\firstofoneargument
+ %\structureblockparameter{\s!do#1}}
+ \csname\??nb\s!do#1\endcsname}
+
+%D \starttyping
+%D \startsectionblockenvironment[frontpart]
+%D \setuppagenumbering[conversion=romannumerals]
+%D \stopsectionblockenvironment
+%D
+%D \startsectionblockenvironment[bodypart]
+%D \setuppagenumber[number=1]
+%D \stopsectionblockenvironment
+%D
+%D \startsectionblockenvironment[frontpart]
+%D \setuppagenumbering[conversion=character]
+%D \stopsectionblockenvironment
+%D
+%D \starttext
+%D \startfrontmatter \chapter{test} \stopfrontmatter
+%D \startbodymatter \chapter{test} \stopbodymatter
+%D \startappendices \chapter{test} \stopappendices
+%D \stoptext
+%D \stoptyping
+
+\setvalue{\e!start\v!structureblockenvironment}%
+ {\dosingleargument\dostartstructureblockenvironment}
+
+\def\dostartstructureblockenvironment[#1]% evt \pushendofline \popendofline
+ {\long\def\do##1##2{\setstructureblockenvironment{#1}{##1##2}}%
+ %\grabuntil{\e!stop\v!structureblockenvironment}{\structureblockparameter{\s!do#1}}}
+ \grabuntil{\e!stop\v!structureblockenvironment}{\csname\??nb\s!do#1\endcsname}}
+
+% this will become: (we ran in parallel for a while during transition)
+
+\setvalue{\e!start\v!sectionblockenvironment}%
+ {\dosingleargument\dostartsectionblockenvironment}
+
+\def\dostartsectionblockenvironment[#1]% evt \pushendofline \popendofline
+ {\long\def\do##1##2{\setstructureblockenvironment{#1}{##1##2}}%
+ %\grabuntil{\e!stop\v!sectionblockenvironment}{\structureblockparameter{\s!do#1}}}
+ \grabuntil{\e!stop\v!sectionblockenvironment}{\csname\??nb\s!do#1\endcsname}}
+
+\protect \endinput