diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/pack-obj.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/pack-obj.mkiv | 84 |
1 files changed, 58 insertions, 26 deletions
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.mkiv b/Master/texmf-dist/tex/context/base/pack-obj.mkiv index 81220e32437..3d87f52b57d 100644 --- a/Master/texmf-dist/tex/context/base/pack-obj.mkiv +++ b/Master/texmf-dist/tex/context/base/pack-obj.mkiv @@ -41,7 +41,7 @@ % function objects.register(name) % objects.n = objects.n + 1 % local list = texbox.objectbox -% nodes.process_page(list) +% nodes.handlers.finalize(list) % data[name] = { % codeinjections.restore(list), % texdimen.objectwd, @@ -90,6 +90,8 @@ % end % \stopluacode % +% \unprotect +% % \newbox \objectbox % \newtoks \everyobject % \newif \ifinobject @@ -101,7 +103,7 @@ % % \def\objectoffset{1cm} % -% \everyobject{\the\everyPDFxform} +% \everyobject{\the\pdfbackendeveryxform} % % \let\doresetobjects\relax % @@ -263,25 +265,55 @@ {\globalpopmacro\crossreferenceobject \dododosetobject{#1}{#2}{#3}\egroup}} -\def\dododosetobject#1#2#3% - {\begingroup - \dontshowcomposition % rather fuzzy in \setxvalue ... \hbox - \scratchdimen\objectoffset - \@EA\xdef\csname\r!object#2::#3\endcsname - {\noexpand\dohandleobject{#2}{#3}% - {\ifhbox\nextbox\hbox\else\vbox\fi}% - {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% - {\number\scratchdimen}}% - \expanded % freeze the dimensions since \dostartobject may use \nextbox - {\dostartobject{#2}{#3}{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% - \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint - \setbox\nextbox\vbox spread 2\scratchdimen - {\forgetall \offinterlineskip - \vss\hbox spread 2\scratchdimen{\hss\flushnextbox\hss}\vss}% - \fi \fi - \flushnextbox - \dostopobject - \endgroup} +\ifnum\luatexversion<66 + + \def\dododosetobject#1#2#3% this is a hack: luatex adds 1bp around each side + {\begingroup + \dontshowcomposition % rather fuzzy in \setxvalue ... \hbox + \ifcase#1\relax + \scratchdimen-\onebasepoint % compensates auto 1 bp + \else\ifdim\objectoffset>\zeropoint + \scratchdimen \objectoffset + \else + \scratchdimen-\onebasepoint % compensates auto 1 bp + \fi\fi + \@EA\xdef\csname\r!object#2::#3\endcsname + {\noexpand\dohandleobject{#2}{#3}% + {\ifhbox\nextbox\hbox\else\vbox\fi}% + {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% + {\number\scratchdimen}}% + \expanded % freeze the dimensions since \dostartobject may use \nextbox + {\dostartobject{#2}{#3}{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% + \setbox\nextbox\vbox spread 2\scratchdimen + {\forgetall \offinterlineskip + \vss\hbox spread 2\scratchdimen{\hss\flushnextbox\hss}\vss}% + \flushnextbox + \dostopobject + \endgroup} + +\else + + \def\dododosetobject#1#2#3% + {\begingroup + \dontshowcomposition % rather fuzzy in \setxvalue ... \hbox + \scratchdimen\objectoffset + \@EA\xdef\csname\r!object#2::#3\endcsname + {\noexpand\dohandleobject{#2}{#3}% + {\ifhbox\nextbox\hbox\else\vbox\fi}% + {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% + {\number\scratchdimen}}% + \expanded % freeze the dimensions since \dostartobject may use \nextbox + {\dostartobject{#2}{#3}{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% + \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint + \setbox\nextbox\vbox spread 2\scratchdimen + {\forgetall \offinterlineskip + \vss\hbox spread 2\scratchdimen{\hss\flushnextbox\hss}\vss}% + \fi \fi + \flushnextbox + \dostopobject + \endgroup} + +\fi \def\getobject#1#2% {\begingroup @@ -353,8 +385,8 @@ % no undefined test ! ! ! ! (pdftex fails on undefined objects) -\def\doregisterobjectreference#1#2#3{\normalexpanded{\noexpand\ctxlatelua{jobobjects.save("#1::#2",#3,\noexpand\the\realpageno)}}} -\def\dooverloadobjectreference#1#2#3{\ctxlua{jobobjects.set("#1::#2",#3,\the\realpageno)}} +\def\doregisterobjectreference#1#2#3{\normalexpanded{\noexpand\ctxlatelua{job.objects.save("#1::#2",#3,\noexpand\the\realpageno)}}} +\def\dooverloadobjectreference#1#2#3{\ctxlua{job.objects.set("#1::#2",#3,\the\realpageno)}} \def\dosetobjectreference {\ifcase\crossreferenceobject @@ -370,8 +402,8 @@ \def\defaultobjectreference#1#2{0} % driver dependent \def\defaultobjectpage #1#2{\realfolio} -\def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{jobobjects.number("#1::#2","\defaultobjectreference{#1}{#2}")}}} -\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{jobobjects.page("#1::#2","\defaultobjectpage{#1}{#2}")}}} +\def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{job.objects.number("#1::#2","\defaultobjectreference{#1}{#2}")}}} +\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{job.objects.page("#1::#2","\defaultobjectpage{#1}{#2}")}}} \def\setobject {\driverreferenced\dosetobject1} \def\settightobject{\driverreferenced\dosetobject0} @@ -394,6 +426,6 @@ \expandafter\secondoftwoarguments \fi} -\def\doifobjectreferencefoundelse#1#2{\ctxlua{jobobjects.doifelse("#1::#2")}} +\def\doifobjectreferencefoundelse#1#2{\ctxlua{job.objects.doifelse("#1::#2")}} \protect \endinput |