1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
%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
\unexpanded\def\definesectionblock{\dotripleargument\dodefinesectionblock}
\unexpanded\def\setupsectionblock {\dodoubleargument\dosetupsectionblock}
\def\setsectionblock {\dosingleargument\dosetsectionblock}
\def\sectionblockparameter#1%
{\csname
\ifcsname\??sb\currentsectionblock#1\endcsname\??sb\currentsectionblock#1\else\s!empty\fi
\endcsname}
\newtoks \everybeforesectionblock
\newtoks \everyaftersectionblock
\def\dodefinesectionblock[#1][#2][#3]% singular plural settings
{\getparameters
[\??sb#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
\setsectionblockenvironment{#1}\empty
\setvalue {\e!start#2}{\startsectionblock[#1]}%
\setvalue {\e!stop #2}{\stopsectionblock}}
\ifdefined \resetallstructuremarks \else
\let\resetallstructuremarks\relax
\fi
\appendtoks
\doifsomething{\sectionblockparameter\c!page}{\page[\sectionblockparameter\c!page]}%
\resetallstructuremarks
\getsectionblockenvironment\currentsectionblock
\sectionblockparameter\c!before % don't move
\dostarttagged\t!division\currentsectionblock
\to \everybeforesectionblock
\appendtoks
\sectionblockparameter\c!after % don't move
\doifsomething{\sectionblockparameter\c!page}{\page[\sectionblockparameter\c!page]}%
\dostoptagged
\resetallstructuremarks
\to \everyaftersectionblock
\def\dosetupsectionblock[#1]%
{\getparameters[\??sb#1]}% [#2]
\def\dosetsectionblock[#1]% used to set the default
{\edef\currentsectionblock{\ctxlua{structures.sections.setblock("#1")}}}
\let\currentsectionblock\empty % was \s!unknown
\unexpanded\def\startsectionblock[#1]%
{%\ctxlua{structures.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push)
\begingroup
\edef\currentsectionblock{\ctxlua{structures.sections.pushblock("#1")}}%
\csname #1true\endcsname % for old times sake
\setsystemmode\currentsectionblock
\the\everybeforesectionblock\relax
\showmessage\m!structures1\currentsectionblock}
\unexpanded\def\stopsectionblock
{\showmessage\m!structures2\currentsectionblock
\the\everyaftersectionblock\relax
\edef\currentsectionblock{\ctxlua{structures.sections.popblock()}}%
\endgroup}
\long\def\setsectionblockenvironment#1#2%
{\long\setvalue{\??sb\s!do#1}{\do{#2}}}
\def\getsectionblockenvironment#1%
{\let\do\firstofoneargument
%\sectionblockparameter{\s!do#1}}
\csname\??sb\s!do#1\endcsname}
%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
\setvalue{\e!start\v!sectionblockenvironment}%
{\dosingleargument\dostartsectionblockenvironment}
\def\dostartsectionblockenvironment[#1]% evt \pushendofline \popendofline
{\grabuntil{\e!stop\v!sectionblockenvironment}{\setsectionblockenvironment{#1}}}
\protect \endinput
|