%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