strc-usr.mkiv /size: 5054 b    last modification: 2021-10-28 13:50
1%D \module
2%D   [       file=strc-bkm,
3%D        version=2009.04.01,
4%D          title=\CONTEXT\ Structure Macros,
5%D       subtitle=Bookmarks,
6%D         author=Wolfgang Schuster,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Structure Macros / Userdata}
15
16\registerctxluafile{strc-usr}{}
17
18%D It's a bit like blocks that also use buffers but more lightweight and with
19%D inplace settings.
20%D
21%D \starttyping
22%D \defineuserdata [test] [style=italic]
23%D
24%D \samplefile{klein}
25%D
26%D \startuserdata [before=\blank,after=\blank,color=red]
27%D     \samplefile{greenfield}
28%D \stopuserdata
29%D
30%D \samplefile{sapolsky}
31%D
32%D \startuserdata [test]
33%D     \samplefile{bryson}
34%D \stopuserdata
35%D
36%D \samplefile{jojomayer}
37%D
38%D \startuserdata [test] [before=\blank,after=\blank,color=red]
39%D     \samplefile{linden}
40%D \stopuserdata
41%D
42%D \samplefile{montgomery}
43%D \stoptyping
44%D
45%D Or from \LUA:
46%D
47%D \starttyping
48%D \startluacode
49%D     context.startuserdata({color="blue"})
50%D         context.samplefile("klein")
51%D     context.stopuserdata()
52%D \stopluacode
53%D \stoptyping
54%D
55%D An example of an alternative:
56%D
57%D \starttyping
58%D \defineuserdataalternative [epigraph] [renderingsetup=userdata:epigraph]
59%D
60%D \startsetups [userdata:epigraph]
61%D     \startframedtext [location=right,frame=off,align={flushleft,broad},style=\tfx,offset=.25ex,width=.5\textwidth]
62%D         \begstrut\inlinebuffer[userdata]\endstrut
63%D         \hairline
64%D         \wordright{\userdataparameter{author}}
65%D     \stopframedtext
66%D \stopsetups
67%D
68%D \defineuserdata
69%D   [epigraph]
70%D   [alternative=epigraph]
71%D
72%D \startuserdata [epigraph] [author={Sean B. Carrol}]
73%D     The fraction of fossil olfactory receptor genes is significantly higher in
74%D     all species with full color vision. This suggests that the evolution of
75%D     trichromatic vision --- which allows these primates to detect food, mates,
76%D     and danger with visual cues --- has reduced their reliance on the sense of
77%D     smell.
78%D \stopuserdata
79%D
80%D \startuserdata [epigraph] [author={Sean B. Carrol}]
81%D     \samplefile{carrol}
82%D \stopuserdata
83%D \stoptyping
84
85\unprotect
86
87\installnamespace {userdata}
88\installnamespace {userdataalternative}
89\installnamespace {userdatarenderings}
90
91\installcommandhandler \????userdata            {userdata}            \????userdata
92\installcommandhandler \????userdataalternative {userdataalternative} \????userdataalternative
93
94\appendtoks
95    \setuevalue{\e!start\currentuserdata}{\dodoubleempty\userdata_start_instance[\currentuserdata]}%
96    \setuevalue{\e!stop \currentuserdata}{\userdata_stop_instance}%
97\to \everydefineuserdata
98
99\unexpanded\def\startuserdata
100  {\begingroup
101   \let\currentuserdata\empty
102   \doifelsenextoptionalcs\userdata_start_delayed\userdata_start_indeed}
103
104\def\userdata_start_delayed[#1]%
105  {\doifelseassignmentcs{#1}%
106     \userdata_start_delayed_parameters
107     \userdata_start_delayed_name
108   [#1]}
109
110\def\userdata_start_delayed_parameters[#1]%
111  {\setupcurrentuserdata[#1]%
112   \userdata_start_indeed}
113
114\def\userdata_start_delayed_name[#1]%
115  {\edef\currentuserdata{#1}%
116   \checkuserdataparent
117   \doifelsenextoptionalcs\userdata_start_delayed_parameters\userdata_start_indeed}
118
119\unexpanded\def\userdata_start_instance[#1][#2]%
120  {\begingroup
121   \edef\currentuserdata{#1}%
122   \setupcurrentuserdata[#2]%
123   \grabbufferdatadirect
124     {\s!userdata:\currentuserdata}%
125     {\e!start\currentuserdata}%
126     {\e!stop \currentuserdata}}
127
128\def\userdata_start_indeed
129  {\grabbufferdatadirect
130     {\s!userdata:\currentuserdata}%
131     {\csstring\startuserdata}%
132     {\csstring\stopuserdata}}
133
134\unexpanded\def\stopuserdata
135  {\userdataparameter\c!before
136   \dostarttagged\t!userdata\currentuserdata
137   \begingroup
138   \useuserdatastyleandcolor\c!style\c!color
139   \usealignparameter\userdataparameter
140   \edef\currentuserdataalternative{\userdataparameter\c!alternative}%
141   \ifcsname\currentuserdataalternativehash\s!parent\endcsname \else
142     \let\currentuserdataalternative\s!default
143   \fi
144   \usesetupsparameter\userdataparameter
145   \edef\p_renderingsetup{\userdataalternativeparameter\c!renderingsetup}%
146   \directsetup\p_renderingsetup
147   \endgroup
148   \dostoptagged
149   \userdataparameter\c!after
150   \endgroup}
151
152\let\userdata_stop_instance\stopuserdata
153
154\unexpanded\def\getuserdata      {\getbufferdata[\s!userdata]}
155\unexpanded\def\getinlineuserdata{\inlinebuffer[\s!userdata]}
156
157\defineuserdataalternative
158  [\s!default]
159  [\c!renderingsetup=\????userdatarenderings:\s!default]
160
161% \startsetups[\????userdatarenderings:\s!default]
162%     \userdataparameter\c!before
163%     \usesetupsparameter\userdataparameter
164%     \getbufferdata[\s!userdata]
165%     \userdataparameter\c!after
166% \stopsetups
167
168\startsetups[\????userdatarenderings:\s!default]
169    \getuserdata
170\stopsetups
171
172\setupuserdata
173  [\c!alternative=\s!default]
174
175\protect
176