summaryrefslogtreecommitdiff
path: root/tex/context/modules/mkii/m-quest.mkii
blob: 596abaa0a5c5b56b65ba122dd3b8039cc5c76950 (plain)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
%D \module
%D   [       file=m-invull,
%D        version=1995.01.10,
%D          title=\CONTEXT\ Extra Modules,
%D       subtitle=Exercise,
%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.

%I Invuloefeningen kunnen worden vormgegeven met het
%I de commando's:
%I
%I   \definieerinvulwoord[trefwoord]{woord,woord}
%I   \invulwoord[trefwoord]
%I   \invulwoord{woord,woord,...}
%I
%I Daarbij kan het een en ander worden ingesteld met
%I
%I   \stelinvullenin[status=,nummer=,links=,rechts=,letter=]
%P
%I Er zijn drie manieren om woorden in te vullen. De meest
%I eenvoudige is die waarbij de in te vullen woorden in de
%I tekst staan.
%I
%I   bla bla \invulwoord{een,alfa} bla bla bla bla bla bla
%I   bla bla bla bla bla bla bla bla \invulwoord{twee,beta}.
%I
%I De gezette tekst hangt af van de instellingen:
%I
%I   [status=leeg]             ________
%I   [status=vol,nummer=1]     'een' respectievelijk 'twee'
%I   [status=vol,nummer=2]     'alfa' respectievelijk 'beta'
%I
%I Het nummer heeft dus betrekking op het volgnummer in de
%I opgegeven reeks.
%P
%I Bij de tweede manier worden eerste de alternatieven
%I gedefinieerd:
%I
%I   \definieerinvulwoord{een,alfa}
%I   \definieerinvulwoord{twee,beta}
%I
%I die vervolgens worden opgeroepen:
%I
%I   bla \invulwoord[+] bla bla bla bla bla bla bla bla bla
%I   bla bla bla bla bla bla bla bla bla bla \invulwoord[+].
%I
%I De mogelijke instellingen komen overeen met die van de
%I eerste manier.
%P
%I De derde manier is een variant op de tweede. Bij grote
%I teksten kan men het overzicht kwijtraken. Het is daarom
%I mogelijk 'logische' namen toe te kennen aan woorden.
%I
%I   \definieerinvulwoord[a]{een,alfa}
%I   \definieerinvulwoord[b]{twee,beta}
%I
%I die vervolgens worden opgeroepen:
%I
%I   bla \invulwoord[a] bla bla bla bla bla bla bla bla bla
%I   bla bla bla bla bla bla bla bla bla bla \invulwoord[b].
%I
%I Dit maakt het bovendien mogelijk woorden meerdere malen
%I (in een willekeurige volgorde op te roepen:
%I
%I   bla \invulwoord[a] bla \invulwoord[b] bla bla bla bla
%I   bla bla bla bla \invulwoord[b] bla bla \invulwoord[a].
%P
%I Bij [status=leeg] wordt een streep gezet die in breedte
%I overeenkomt met het woord dat er eigenlijk hoort te
%I staan. De ingevulde tekst komt visueel daardoor overeen
%I met de in te vullen tekst, wat vergelijken vereenvoudigd.
%I
%I Met [status=reset] worden enkele tellers weer op 0 gezet.
%I Dit kan nodig zijn als meerdere invuloefeningen in een
%I tekst worden gezet.
%I
%I Als \versie[voorlopig] is ingesteld, worden bij invullers
%I zonder logische namen tussen haakjes de volgnummers
%I getoond.

%S \startsetup
%S   \command
%S     [stelinvullenin]
%S   \type
%S     [\c!vars!]
%S   \variable
%S     [\c!letter]
%S     [\v!normaal,\v!vet,\v!schuin,\v!vetschuin,\v!type,\v!kap,
%S      \v!klein...,\c!command!]
%S     [\v!vet]
%S   \variable
%S     [\c!links]
%S     [\c!text!]
%S     []
%S   \variable
%S     [\c!rechts]
%S     [\c!text!]
%S     []
%S   \variable
%S     [\c!status]
%S     [\v!leeg,\v!vol,\v!reset]
%S     [\v!vol]
%S   \variable
%S     [\c!nummer]
%S     [\c!number!]
%S     [1]
%S   \variable
%S     [\c!lijn]
%S     [\v!aan,\v!uit]
%S     [\v!aan]
%S \stopsetup

%S \startsetup
%S   \command
%S     [invulwoord]
%S   \type
%S     [\c!ref!,\c!opt!\c!val!\c!opt!\c!args!]
%S   \value
%S     [\c!text!]
%S \stopsetup

%S \startsetup
%S   \command
%S     [definieerinvulwoord]
%S   \type
%S     [\c!ref!,\c!opt!\c!val!\c!args!]
%S   \value
%S     [\c!text!]
%S \stopsetup

%  Mogelijke uitbreidingen
%
%  -  [breedte=<maat>,passend,ruim]
%  -  invullijst met nummers
%  -  weergeven lijst tijdens definitie blokkeren
%  -  door elkaar definieren

\unprotect

\definesystemvariable    {iv}

\definereferenceconstant {fillin} {:iv:}

\newcount\invulteller \newcount\invulput \newcount\invulget

\def\stelinvullenin
  {\dosingleargument\dostelinvullenin}

\def\dostelinvullenin[#1]%
  {\getparameters[\??iv][#1]%
   \doif\@@ivstate\v!reset
     {\global\invulput\zerocount
      \global\invulget\zerocount
      \let\@@ivstate\empty}}

\def\definieerinvulwoord
  {\dosingleempty\dodefinieerinvulwoord}

\def\dodefinieerinvulwoord[#1]#2%
  {\iffirstargument
     \setgvalue{\r!fillin#1}{\simpleinvulwoord{#2}}%
   \else
     \global\advance\invulput \plusone
     \setgvalue{\r!fillin\the\invulput}{\simpleinvulwoord{#2}}%
   \fi
   \doifconcepttracing
     {\ifnum\invulput>\zerocount
        \setbox\scratchbox\hbox{~\ttx(\the\invulput)}%
        \wd\scratchbox\zeropoint
        \box\scratchbox
        \par
      \fi}}

\def\dosimpleinvulwoord#1%
  {\ifnum\@@ivnumber>\zerocount \advance\invulteller \plusone \fi
   \ifnum\invulteller=\@@ivnumber\relax
     \bgroup
     \doconvertfont\@@ivstyle
       {\@@ivleft
        \doifelse\@@ivstate\v!empty
          {\doifelse\@@ivrule\v!on\leeginvulwoord\geeninvulwoord}
          {\doifelse\@@ivrule\v!on\underbar      \firstofoneargument}%
        {#1}%
        \@@ivright}%
     \egroup
   \fi}%

\def\simpleinvulwoord#1%
  {\ifnum\@@ivnumber>0
     \invulteller\zerocount
     \processcommalist[#1]\dosimpleinvulwoord
   \else
     \dosimpleinvulwoord{#1}%
   \fi}

\def\complexinvulwoord[#1]%
  {\bgroup
   \doifsomething{#1}
     {\global\advance\invulget \plusone
      \doconvertfont\@@ivstyle
        {\@@ivleft\getvalue{\r!fillin\the\invulget}\@@ivright}}
     {\doconvertfont\@@ivstyle
        {\@@ivleft\getvalue{\r!fillin           #1}\@@ivright}}%
   \egroup}

\definecomplexorsimple\invulwoord

\def\leeginvulwoord#1%
  {{\let\redounderbar\dodounderbar
    \def\dodounderbar##1{\redounderbar{\hphantom{##1}}}%
    \underbar{#1}}}

\def\geeninvulwoord#1%
  {{\def\dodounderbar##1{\hphantom{##1}}%
    \underbar{#1}}}

% when nummer > 0, then commalist processing; beware of $(1,2)$, use { } there

\stelinvullenin
  [\c!number=0,
   \c!style=\v!bold,
   \c!rule=\v!on,
   \c!left=,
   \c!right=,
   \c!state=]

\protect \endinput