s-present-wobbling.mkiv /size: 9685 b    last modification: 2025-02-21 11:03
1%D \module
2%D   [      file=s-prent-wobbling,
3%D        version=2010.04.28,
4%D          title=\CONTEXT\ Style File,
5%D       subtitle=Presentation Environment Wobbling,
6%D         author=Hans Hagen,
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%D This a bit old style and I should adapt it a bit but as it sort of works ok I'll
15%D not do that now.
16
17\pushoverloadmode
18
19\startmodule[present-wobbling]
20
21%setuppapersize[S6][S6]
22\setuppapersize[SM][SM]
23
24\setupinteraction
25  [state=start,
26   contrastcolor=white,
27   color=white,
28   click=no]
29
30\setuplayout
31  [location=middle,
32   topspace=60pt,
33   bottomspace=80pt,
34   backspace=80pt,
35   header=0pt,
36   footer=0pt,
37   width=middle,
38   height=middle]
39
40\setupcolors
41  [textcolor=white]
42
43\setupbodyfont[pagella]
44
45\definecolor[maincolor] [blue]
46\definecolor[extracolor][green]
47
48% \definecolor[maincolor] [red]
49% \definecolor[extracolor][blue]
50
51\startMPdefinitions
52    picture MySoFar ; MySoFar := nullpicture ;
53    path MyLastOne ; MyLastOne := origin -- cycle ;
54    path MyLeftSteps, MyRightSteps ;
55    boolean MyPageDone ; MyPageDone := false ;
56
57    vardef MySmallShape(expr parent) =
58        path p ; p := boundingbox parent ;
59        numeric w, h ; w := bbwidth(p) ; h := bbheight(p) ;
60        urcorner p shifted (-uniformdeviate w/4,0) --
61        lrcorner p shifted (0,uniformdeviate h/4) --
62        llcorner p shifted (uniformdeviate w/4,0) --
63        ulcorner p shifted (0,-uniformdeviate h/4) -- cycle
64    enddef ;
65
66    vardef MyShape(expr parent) =
67        path p ; p := boundingbox parent ;
68        if MyPageDone :
69            MyPageDone := false ;
70            urcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) --
71            lrcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) --
72            llcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) --
73            ulcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) -- cycle
74        else :
75            MyPageDone := true ;
76            urcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) --
77            lrcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) --
78            llcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) --
79            ulcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) -- cycle
80        fi
81    enddef ;
82
83    vardef MyMakeOne =
84        MyLastOne := MyShape(Page) ;
85    enddef ;
86
87    vardef MyAddOne =
88        addto MySoFar also image(fill MyLastOne withcolor "maincolor" withtransparency(1,.25) ; ) ;
89    enddef ;
90
91    vardef MyDrawOne =
92        fill MyLastOne withcolor black ;
93        fill MyLastOne withcolor "maincolor" withtransparency(1,.25) ;
94    enddef ;
95
96    vardef MyDrawPage =
97        draw MySoFar ;
98    enddef ;
99
100    vardef MySetSteps =
101        path l, r ; numeric s ; path ll[], rr[] ; path t ;
102        l := point 2 of MyLastOne -- point 3 of MyLastOne ;
103        r := point 0 of MyLastOne -- point 1 of MyLastOne ;
104        t := topboundary Field[Text][Text] rightenlarged TextWidth leftenlarged TextWidth ;
105        s := bbheight(Field[Text][Text])/LineHeight + 2 ;
106        t := t shifted (0,-TopSkip) ;
107        for i=1 upto s :
108            ll[i] := t intersectionpoint l ;
109            rr[i] := t intersectionpoint r ;
110            t := t shifted (0,-LineHeight) ;
111        endfor ;
112        MyLeftSteps  := for i=1 upto s : ll[i] -- endfor cycle ;
113        MyRightSteps := for i=1 upto s : rr[i] -- endfor cycle ;
114    enddef ;
115
116    vardef MyDrawText(expr txt) =
117        pair a ; a := (point 1 of MyLastOne) - (point 2 of MyLastOne) ;
118        picture p ; p := txt ;
119        p := p
120            shifted (-EmWidth,EmWidth)
121            shifted ulcorner txt
122            shifted point 1 of MyLastOne ;
123        p := p rotatedaround(lrcorner p, radian * tan(ypart a/xpart a)) ;
124        setbounds p to origin -- cycle ;
125        draw p ;
126    enddef ;
127
128    vardef MyDrawTitle(expr txt) =
129      % pair a ; a := (point 2 of MyLastOne) - (point 3 of MyLastOne) ;
130        pair a ; a := (point 3 of MyLastOne) - (point 4 of MyLastOne) ;
131        picture p ;
132        if bbheight(txt) > bbwidth(txt) :
133            p := txt ysized(0.8*TextHeight) ;
134        else :
135            p := txt xsized(0.8*TextWidth) ;
136        fi ;
137        numeric d ; d := arclength(point 2 of MyLastOne -- point 3 of MyLastOne) - bbheight(p) ;
138        p := p
139            shifted (BackSpace,-d/2)
140            shifted -ulcorner p
141            shifted point 3 of MyLastOne ;
142      % p := p rotatedaround(ulcorner p, - radian * tan(xpart a/ypart a)) ;
143      % p := p rotatedaround(ulcorner p,  radian * tan(ypart a/xpart a)) ;
144        setbounds p to origin -- cycle ;
145        draw p ;
146    enddef ;
147
148    vardef MyDrawSteps =
149        s := bbheight(Field[Text][Text])/LineHeight + 2 ;
150        for i=1 upto s :
151            draw ll[i] withpen pencircle scaled 1mm ;
152            draw rr[i] withpen pencircle scaled 1mm ;
153            draw ll[i] -- rr[i] ;
154        endfor ;
155        draw Field[Text][Text] ;
156    enddef ;
157
158\stopMPdefinitions
159
160\startuseMPgraphic{initialization}
161    StartPage ;
162        MySoFar := image(fill Page enlarged 12pt withcolor "maincolor" withtransparency(1,.25) ;) ;
163        MyMakeOne ;
164        MySetSteps ;
165    StopPage ;
166\stopuseMPgraphic
167
168\appendtoks
169    \startnointerference
170        \useMPgraphic{initialization}
171    \stopnointerference
172\to \everystarttext
173
174\unexpanded\def\TitleCommand#1%
175  {\framed
176     [frame=off,
177      offset=overlay,
178      align=flushleft,
179      foregroundcolor=white,
180      foregroundstyle={\tfd},
181      bottom=\vskip2\lineheight]
182     {\setupinterlinespace
183      \setupwhitespace[halfline]%
184     %\showstruts
185      \begstrut
186      #1%
187      \endstrut}}
188
189\unexpanded\def\TopicCommand#1%
190  {\color[white]{\tfb#1}}
191
192\startuseMPgraphic{page}
193    StartPage ;
194        MyDrawPage ;
195        MyDrawOne ;
196        MySetSteps ;
197        if RealPageNumber == 1 :
198            MyDrawTitle(textext("\TitleCommand{\documentvariable{title}}")) ;
199            MyDrawText (textext("\TopicCommand{\documentvariable{topic}}")) ;
200        fi ;
201        %
202        % we have multiple runs when we have text
203        %
204      % MyDrawSteps ;
205      % MyMakeOne ;
206      % MySetSteps ;
207    StopPage ;
208\stopuseMPgraphic
209
210\appendtoks
211    \startnointerference
212        \startMPcode
213            MyAddOne ;
214            MyMakeOne ;
215            MySetSteps ;
216        \stopMPcode
217    \stopnointerference
218\to \everyshipout
219
220\defineoverlay[page][\useMPgraphic{page}]
221
222\startuseMPgraphic{symbol}
223    path p ; p := MySmallShape(unitsquare scaled (.6*LineHeight)) ;
224    fill p withcolor white ;
225    fill p withcolor "extracolor" withtransparency(1,.25) ;
226\stopuseMPgraphic
227
228\definesymbol[mysymbol][\struttedbox{\useMPgraphic{symbol}}]
229
230\setupitemgroup
231  [itemize] [1]
232  [symbol=mysymbol]
233
234\setupbackgrounds
235  [page]
236  [background=page]
237
238\startluacode
239    local texdimen = tex.dimen
240    function document.SetParShape()
241        local leftpath  = metapost.getclippath { mpx = "metafun", data = "clip currentpicture to MyLeftSteps ;" }
242        local rightpath = metapost.getclippath { mpx = "metafun", data = "clip currentpicture to MyRightSteps ;" }
243        local shape = { }
244        for i=1,#leftpath do
245            local left  = leftpath[i].x_coord
246            local right = rightpath[i].x_coord
247            local hsize = right - left - (texdimen.backspace + texdimen.cutspace)*number.dimenfactors.bp
248            shape[#shape+1] = string.format("%sbp %sbp",left,hsize)
249        end
250     -- print(table.serialize(shape))
251     -- context.parshape(string.format("%s %s ",#shape,table.concat(shape," ")))
252        context("\\parshape %s %s ",#shape,table.concat(shape," "))
253    end
254\stopluacode
255
256\nopenalties \dontcomplain
257
258\setupwhitespace[none]
259
260\startsetups document:start
261    \bgroup
262    \let\crlf\endgraf % \par in a mp textext doesn't work well
263    \startstandardmakeup
264        % dummy page
265    \stopstandardmakeup
266    \egroup
267\stopsetups
268
269\unexpanded\def\StartText#1#2% for old times sake
270  {\startdocument[title={#1},subtitle={#2}]}
271
272\unexpanded\def\StopText
273  {\stopdocument
274   \setupdocument[title=,topic=]}
275
276\unexpanded\def\StartItems#1%
277  {\setupdocument[topic={#1}]
278   \startstandardmakeup[top=,bottom=\vss]
279   \startelement[items][title={#1}]%
280   \ctxlua{document.SetParShape()}
281   \StartSteps}
282
283\unexpanded\def\StopItems
284  {\StopSteps
285   \stopelement
286   \stopstandardmakeup}
287
288\unexpanded\def\StartItem
289  {\dontleavehmode
290   \startelement[item]%
291   \llap{\symbol[mysymbol]\quad}% graphic
292   \ignorespaces}
293
294\unexpanded\def\StopItem
295  {\removeunwantedspaces
296   \nobreak
297   \crlf
298   \stopelement
299   \crlf
300   \FlushStep}
301
302\unexpanded\def\ShapeParagraph
303  {\ctxlua{document.SetParShape()}}
304
305% no parshape yet
306
307\unexpanded\def\StartParagraphs#1%
308  {\setupdocument[topic={#1}]
309   \startstandardmakeup[top=,bottom=\vss]
310  %\ctxlua{document.SetParShape()}
311   \startelement[paragraphs]%
312   \StartSteps}
313
314\unexpanded\def\StopParagraphs
315  {\StopSteps
316   \stopelement
317   \stopstandardmakeup}
318
319\unexpanded\def\StartParagraph
320  {\startelement[paragraph]}
321
322\unexpanded\def\StopParagraph
323  {\par
324   \stopelement
325   \FlushStep}
326
327% experiment .. likely to change
328
329\setelementexporttag[items]     [nature][display]
330\setelementexporttag[item]      [nature][mixed]
331\setelementexporttag[paragraphs][nature][display]
332\setelementexporttag[paragraph] [nature][mixed]
333
334\stopmodule
335
336\continueifinputfile{s-present-wobbling.mkiv}
337
338\usemodule[present-common]
339
340%inputpresentationfile{bachotex/2010/bachotex-2010-clash.tex}
341\inputpresentationfile{bachotex/2010/bachotex-2010-move.tex}
342