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
|
%D \module
%D [ file=spec-dvi,
%D version=1996.01.25,
%D title=\CONTEXT\ Special Macros,
%D subtitle=Generic \TEX\ Solutions,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
\unprotect
%D \macros
%D {dostartobject,
%D dostopobject,
%D doinsertobject}
%D
%D Reuse of object is not supported by the \DVI\ format. We
%D therefore just duplicate them using boxes.
\startspecials[tex]
\newbox\DVIobjects \newcounter\DVIobjectcounter
\definespecial\dostartobject#1#2#3#4#5%
{\setbox\nextbox\vbox\bgroup
\def\dodostopobject
{\egroup
\doglobal\increment\DVIobjectcounter
\global\setbox\DVIobjects\vbox
{\offinterlineskip
\forgetall
\unvbox\DVIobjects
\setbox\nextbox\hbox{\box\nextbox}%
\wd\nextbox\zeropoint
\dp\nextbox\zeropoint
\ht\nextbox\onepoint
\allowbreak
\box\nextbox}%
\dosetobjectreference{#1}{#2}{\DVIobjectcounter}}}
\definespecial\dostopobject
{\dodostopobject}
\definespecial\doinsertobject#1#2%
{\bgroup
\dogetobjectreference{#1}{#2}\DVIobjectreference
\splittopskip\zeropoint
\setbox0=\copy\DVIobjects
\dimen0=\DVIobjectreference\onepoint
\advance\dimen0 -\onepoint
\setbox2\vsplit0 to \dimen0
\ifdim\ht0>\onepoint
\setbox0\vsplit0 to \onepoint
\fi
\unvbox0
\setbox0\lastbox
\hbox{\unhbox0}% the \hbox is really needed!
\egroup}
%D \macros
%D {dosetposition,
%D dosetpositionwhd,
%D dosetpositionplus}
%D
%D The next specials only identify a position. It is up to
%D a \DVI\ postprocessing utility to merge the right commands
%D into the utility file. Since in \CONTEXT, we only deal
%D with relative positions, the reference point is not so
%D important.
%D
%D The postprocessor should translate the specials into
%D commands and append these to \type {jobname.tuo} using the
%D format:
%D
%D \starttyping
%D \pospxy {identifier}{page}{x}{y}
%D \pospxywhd {identifier}{page}{x}{y}{w}{h}{d}
%D \pospxyplus{identifier}{page}{x}{y}{w}{h}{d}{list}
%D \stoptyping
%D
%D The postprocessor should, of course, provide the \type
%D {page}, \type {x}, and \type {y} values.
\definespecial\dosetposition#1%
{\special{pos:pxy "#1"}}
\definespecial\dosetpositionwhd#1#2#3#4%
{\special{pos:pxywhd "#1" #2 #3 #4}}
\definespecial\dosetpositionplus#1#2#3#4#5%
{\special{pos:pxyplus "#1" #2 #3 #4 #5}}
%D The next special tells the position postprocessor what
%D page dimensions were used.
\let\flushDVIpositionpapersize\relax
% \definespecial\dosetpositionpapersize#1#2%
% {\xdef\flushDVIpositionpapersize%
% {\special{pos:papersize #1 #2}%
% \global\noexpand\let\noexpand\flushDVIpositionpapersize\relax}}
%
% \appendtoksonce
% \ifspecialbasedsettings
% \ifpositioning\installprogram{dvipos \jobname}\fi
% \fi
% \to \everystoptext
%
% less tokens:
\definespecial\dosetpositionpapersize#1#2%
{\xdef\flushDVIpositionpapersize%
{\special{pos:papersize #1 #2}%
\noexpand\installprogram{dvipos --outfile=\jobname.tuo}%
\global\noexpand\let\noexpand\flushDVIpositionpapersize\relax}}
\prependtoksonce \flushDVIpositionpapersize \to \everyshipout
\stopspecials
\protect \endinput
|