summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/back-ini.mkiv
blob: 8729403f8489d11b95f8016d2881f81d79ad2e1b (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
%D \module
%D   [       file=back-ini,
%D        version=2009.04.15,
%D          title=\CONTEXT\ Backend Macros,
%D       subtitle=Initialization,
%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.

%D Most will go away here as it is replaced by \LUA\ calls to
%D backend functions.

\writestatus{loading}{ConTeXt Backend Macros / Initialization}

%D The exact page model depends on the backend so we just define some
%D variables that are used. A helper at the \LUA\ end will synchronize
%D with the internal variables. We store these in the format.

% \newdimen\backendpageheight
% \newdimen\backendpagewidth
% \newdimen\backendinchoffset    \backendinchoffset=1in

%D Now we load the \LUA\ code:

\registerctxluafile{back-ini}{}
\registerctxluafile{back-res}{}

\doifelsefileexists{back-out.mkiv}{\loadmarkfile{back-out}}{}

%D We currently have a curious mix between tex and lua backend handling but
%D eventually most will move to \LUA.

\unprotect

\ifdefined\everybackendshipout       \else \newtoks\everybackendshipout       \fi
\ifdefined\everylastbackendshipout   \else \newtoks\everylastbackendshipout   \fi
\ifdefined\everybackendlastinshipout \else \newtoks\everybackendlastinshipout \fi % e.g. finalize via latelua

%D Right from the start \CONTEXT\ had a backend system based on runtime pluggable
%D code. As most backend issues involved specials and since postprocessors had not
%D that much in common, we ended up with a system where we could switch backend as
%D well as output code for multiple backends at the same time.
%D
%D Because \LUATEX\ has the backend built in, and since some backend issues have
%D been moved to the frontend I decided to provide new backend code for \MKIV,
%D starting with what was actually used.
%D
%D At this moment \DVI\ is no longer used for advanced document output and we
%D therefore dropped support for this format. Future versions might support more
%D backends again, but this has a low priority.
%D
%D Not everything here makes sense and the content of this file will definitely
%D change (or even go away).

% rotation

\unexpanded\def\dostartrotation#1%
  {\forcecolorhack
   \clf_startrotation#1\relax} % todo: implement without Q q

\unexpanded\def\dostoprotation
  {\clf_stoprotation
   \forcecolorhack}

% scaling

\unexpanded\def\dostartscaling#1#2%
  {\forcecolorhack
   \clf_startscaling rx #1 ry #2\relax}

\unexpanded\def\dostopscaling
  {\clf_stopscaling
   \forcecolorhack}

% mirroring

\unexpanded\def\dostartmirroring
  {\clf_startmirroring}

\unexpanded\def\dostopmirroring
  {\clf_stopmirroring}

% transform

\unexpanded\def\dotransformnextbox#1#2#3#4#5#6%
  {\dowithnextbox{\dodotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}}}

\unexpanded\def\dodotransformnextbox#1#2#3#4#5#6%
  {\hpack
     {\kern #5\onebasepoint
      \raise#6\onebasepoint
      \hpack
        {\clf_startmatrix rx #1 sx #2 sy #3 ry #4\relax
         \box\nextbox
         \clf_stopmatrix}}}

%D \macros
%D   {back_ovalbox}
%D
%D When we look at the implementation, this is a complicated one. There are seven
%D arguments.
%D
%D \starttyping
%D \back_ovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill} {variant}
%D \stoptyping
%D
%D This command has to return a \type {\vbox} which can be used to lay over another
%D one (with text). The radius is in degrees, the stroke and fill are~\type {1}
%D (true) of~\type {0} (false).

\let\back_ovalbox \gobbleeightarguments

%D \macros
%D   {dostartclipping,dostopclipping}
%D
%D Clipping is implemented in such a way that an arbitrary code can be fed.
%D
%D \starttyping
%D \dostartclipping {pathname} {width} {height}
%D \dostopclipping
%D \stoptyping

\let \dostartclipping \gobblethreearguments
\let \dostopclipping  \donothing

%D \macros
%D   {jobsuffix}
%D
%D By default, \TEX\ produces \DVI\ files which can be converted to other filetypes.
%D Sometimes it is handy to know what the target file will be. In other driver
%D modules we wil set \type {\jobsuffix} to \type {pdf}.

%D Backend configuration:

\installcorenamespace{backend}

\installsetuponlycommandhandler \??backend {backend}

\let\jobsuffix\empty

\unexpanded\def\back_job_set_suffix#1% % checking could happen in mode
  {\ifx\jobsuffix\empty\else\resetsystemmode\jobsuffix\fi
   \edef\jobsuffix{#1}%
   \ifx\jobsuffix\empty\else\setsystemmode  \jobsuffix\fi}

\back_job_set_suffix{pdf} % default

% \setupbackend[space=yes] % replace spacing in (pdf) file

\appendtoks
    \clf_setrealspaces{\backendparameter\c!space}%
\to \everysetupbackend

\appendtoks
    \ifdefined\clf_resetmapfile
        \clf_resetmapfile
    \fi
\to \everysetupbackend

%D For older styles:

\let\setupoutput\gobbleoneoptional

\protect \endinput