diff options
author | Marius <mariausol@gmail.com> | 2012-10-19 01:20:13 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2012-10-19 01:20:13 +0300 |
commit | 69d2352af4b60929b37fc49f3bdb263977016244 (patch) | |
tree | db5eb11398e345dfa23b4c4500fb93575d2afb7c /tex/context/base/pack-obj.mkiv | |
parent | c18f7cbe51449a611ea1819fedd9a4ff18529b7d (diff) | |
download | context-69d2352af4b60929b37fc49f3bdb263977016244.tar.gz |
stable 2012.05.30 11:26
Diffstat (limited to 'tex/context/base/pack-obj.mkiv')
-rw-r--r-- | tex/context/base/pack-obj.mkiv | 143 |
1 files changed, 68 insertions, 75 deletions
diff --git a/tex/context/base/pack-obj.mkiv b/tex/context/base/pack-obj.mkiv index 356a0b7eb..6c9848a01 100644 --- a/tex/context/base/pack-obj.mkiv +++ b/tex/context/base/pack-obj.mkiv @@ -105,27 +105,29 @@ % % \everyobject{\the\pdfbackendeveryxform} % -% \unexpanded\def\setobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}} -% \unexpanded\def\settightobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}} +% \let\doresetobjects\relax +% +% \def\setobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\the\everyobject\dowithnextbox{\dosetobject{#1}{#2}}} +% \def\settightobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\the\everyobject\dowithnextbox{\dosetobject{#1}{#2}}} % % \let\objectsetvbox\vbox %\def\objectsetvbox{\ruledvbox} % \let\objectgetvbox\vbox %\def\objectgetvbox{\ruledvbox} % \let\objectsethbox\hbox %\def\objectsethbox{\ruledhbox} % \let\objectgethbox\hbox %\def\objectgethbox{\ruledhbox} % -% \unexpanded\def\pack_objects_set#1#2% +% \def\dosetobject#1#2% % {\objectwd\wd\nextbox % \objectht\ht\nextbox % \objectdp\dp\nextbox % \ifdim\objectoff=\zeropoint\relax % \setbox\objectbox\box\nextbox % \else -% \setbox\objectbox\objectsetvbox spread 2\objectoff{\vss\objectsethbox spread 2\objectoff{\hss\box\nextbox\hss}\vss}% +% \setbox\objectbox\objectsetvbox spread 2\objectoff{\vss\objectsethbox spread 2\objectoff{\hss\flushnextbox\hss}\vss}% % \fi % \ctxlua{objects.register("#1::#2")}% % \endgroup} % -% \unexpanded\def\getobject#1#2% +% \def\getobject#1#2% % {\begingroup % \ctxlua{objects.restore("#1::#2")}% % \ifdim\objectoff=\zeropoint\relax \else @@ -138,7 +140,7 @@ % \box\objectbox % \endgroup} % -% \unexpanded\def\getpageobject#1#2% +% \def\getpageobject#1#2% % {\begingroup % \ctxlua{objects.restore("#1::#2")}% % \ifdim\objectoff=\zeropoint\relax @@ -153,25 +155,25 @@ % \box\objectbox % \endgroup} % -% \unexpanded\def\setobjectdirectly #1#2{\ctxlua{objects.register("#1::#2")}} -% \unexpanded\def\getobjectdirectly #1#2{\ctxlua{objects.restore ("#1::#2")}} -% \unexpanded\def\getobjectdimensions #1#2{\ctxlua{objects.restore ("#1::#2")}} -% \unexpanded\def\doifobjectfoundelse #1#2{\ctxlua{objects.doifelse("#1::#2")}} -% \unexpanded\def\doifobjectreferencefoundelse#1#2{\ctxlua{objects.doifelse("#1::#2")}} +% \def\setobjectdirectly #1#2{\ctxlua{objects.register("#1::#2")}} +% \def\getobjectdirectly #1#2{\ctxlua{objects.restore ("#1::#2")}} +% \def\getobjectdimensions #1#2{\ctxlua{objects.restore ("#1::#2")}} +% \def\doifobjectfoundelse #1#2{\ctxlua{objects.doifelse("#1::#2")}} +% \def\doifobjectreferencefoundelse#1#2{\ctxlua{objects.doifelse("#1::#2")}} % % \let\objectreferenced\relax % \let\driverreferenced\relax % -% \unexpanded\def\pack_objects_register_reference{\writestatus{objects}{obsolete: register object reference}\gobblethreearguments} -% \unexpanded\def\pack_objects_overload_reference{\writestatus{objects}{obsolete: overload object reference}\gobblethreearguments} -% \unexpanded\def\dosetobjectreference {\writestatus{objects}{obsolete: set object reference}\gobblethreearguments} -% \unexpanded\def\dosetdriverreference {\writestatus{objects}{obsolete: set driver reference}\gobblethreearguments} +% \def\doregisterobjectreference{\writestatus{objects}{obsolete: register object reference}\gobblethreearguments} +% \def\dooverloadobjectreference{\writestatus{objects}{obsolete: overload object reference}\gobblethreearguments} +% \def\dosetobjectreference {\writestatus{objects}{obsolete: set object reference}\gobblethreearguments} +% \def\dosetdriverreference {\writestatus{objects}{obsolete: set driver reference}\gobblethreearguments} % % \def\defaultobjectreference{0} % \def\defaultobjectpage {\realfolio} % -% \unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{objects.reference("#1::#2)}}} -% \unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{objects.page("#1::#2))}}} +% \def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{objects.reference("#1::#2)}}} +% \def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{objects.page("#1::#2))}}} % % \protect % @@ -217,27 +219,26 @@ %D housekeeping to the driver. The current approach permits %D us to keep the box characteristic too. -\installcorenamespace {objects} - -\newif\ifinobject % public (might become a conditional) +\newif\ifinobject -\def\objectplaceholder{NOT YET FLUSHED} +\def\objectplaceholder{NOT YET FLUSHED}% -\unexpanded\def\presetobject#1#2% \global added - {\ifcsname\??objects#1::#2\endcsname\else - \global\expandafter\let\csname\??objects#1::#2\endcsname\objectplaceholder +\def\presetobject#1#2% \global added + {\ifcsname\??ob:#1::#2\endcsname\else + \global\@EA\let\csname\??ob:#1::#2\endcsname\objectplaceholder \fi} -\unexpanded\def\pack_objects_set#1#2#3% - {\ifcsname\??objects#2::#3\endcsname +\def\dosetobject#1#2#3% \initializepaper this will move to \everyshipout + {% \initializepaper + \ifcsname\??ob:#2::#3\endcsname \expandafter\gobblefivearguments \else % tzt, overload internal referenced objects to save entries - \expandafter\pack_objects_set_indeed + \expandafter\dodosetobject \fi {#1}{#2}{#3}} -\unexpanded\def\resetobject#1#2% - {\letbeundefined{\??objects#1::#2}} +\def\resetobject#1#2% + {\letbeundefined{\??ob:#1::#2}} %D \macros %D {finalizeobjectbox} @@ -245,7 +246,7 @@ %D This one provides a hook for last minute object box processing %D we need this in \MKIV. -\ifdefined\finalizeobjectbox \else +\ifx\finalizeobjectbox\undefined \let\finalizeobjectbox\gobbleoneargument \fi @@ -256,54 +257,47 @@ \def\objectoffset{1cm} -\unexpanded\def\pack_objects_set_indeed#1#2#3% +\def\dodosetobject#1#2#3% {\bgroup - \globalpushmacro\crossreferenceobject - \objectreferenced + \globalpushmacro\crossreferenceobject \objectreferenced \inobjecttrue \dowithnextbox {\globalpopmacro\crossreferenceobject - \pack_objects_set_indeed_indeed{#1}{#2}{#3}% - \egroup}} + \dododosetobject{#1}{#2}{#3}\egroup}} % in luatex version < 66 we had a 1bp compensation (hardcoded in luatex) -\let\pack_objects_handle\relax - -\unexpanded\def\pack_objects_set_indeed_indeed#1#2#3% +\def\dododosetobject#1#2#3% {\begingroup \scratchdimen\objectoffset - \expandafter\xdef\csname\??objects#2::#3\endcsname - {\pack_objects_handle - {#2}% - {#3}% + \@EA\xdef\csname\??ob:#2::#3\endcsname + {\noexpand\dohandleobject{#2}{#3}% {\ifhbox\nextbox\hbox\else\vbox\fi}% - {\number\wd\nextbox}% - {\number\ht\nextbox}% - {\number\dp\nextbox}% + {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% {\number\scratchdimen}}% \expanded % freeze the dimensions since \dostartobject may use \nextbox - {\dostartobject{#2}{#3}{\the\wd\nextbox}{\the\ht\nextbox}{\the\dp\nextbox}}% + {\dostartobject{#2}{#3}{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint - \setbox\nextbox\vbox \s!spread 2\scratchdimen + \setbox\nextbox\vbox spread 2\scratchdimen {\forgetall \offinterlineskip - \vss\hbox \s!spread 2\scratchdimen{\hss\box\nextbox\hss}\vss}% + \vss\hbox spread 2\scratchdimen{\hss\flushnextbox\hss}\vss}% \fi \fi - \box\nextbox + \flushnextbox \dostopobject \endgroup} -\unexpanded\def\getobject#1#2% - {\ifcsname\??objects#1::#2\endcsname +\def\getobject#1#2% + {\ifcsname\??ob:#1::#2\endcsname \begingroup - \let\pack_objects_handle\pack_objects_get - \csname\??objects#1::#2\expandafter\endcsname + \let\dohandleobject\dogetobject + \csname\??ob:#1::#2\expandafter\endcsname \else {\infofont[object #1::#2]}% \fi} -\unexpanded\def\pack_objects_get#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf - {\forgetall +\def\dogetobject#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf + {% \initializepaper + \forgetall % todo: if no attr then faster \setbox\scratchbox\vbox attr \viewerlayerattribute \attribute\viewerlayerattribute {\doinsertobject{#1}{#2}}% @@ -329,18 +323,18 @@ %D The results are reported in \type {\objectwidth}, \type %D {\objectheight} and \type {\objectdepth}. -\unexpanded\def\pack_objects_get_dimensions#1#2#3#4#5#6#7% +\def\dogetobjectdimensions#1#2#3#4#5#6#7% {\def\objectwidth {#4\s!sp}% \def\objectheight{#5\s!sp}% \def\objectdepth {#6\s!sp}% \def\objectmargin{#7\s!sp}} -\unexpanded\def\getobjectdimensions#1#2% - {\let\pack_objects_handle\pack_objects_get_dimensions +\def\getobjectdimensions#1#2% + {\let\dohandleobject\dogetobjectdimensions \let\objectwidth \!!zeropoint \let\objectheight\!!zeropoint \let\objectdepth \!!zeropoint - \csname\??objects#1::#2\endcsname} + \csname\??ob:#1::#2\endcsname} %D Apart from this kind of objects, that have typeset content, %D we can have low level driver specific objects. Both types @@ -358,35 +352,35 @@ %D These commands are to be called by the \type{\startobject}, %D \type{\stopobject} and \type{\insertobject} specials. -\unexpanded\def\objectreferenced{\global\chardef\crossreferenceobject\plusone} -\unexpanded\def\driverreferenced{\global\chardef\crossreferenceobject\zerocount} +\def\objectreferenced{\global\chardef\crossreferenceobject\plusone} +\def\driverreferenced{\global\chardef\crossreferenceobject\zerocount} \objectreferenced % no undefined test ! ! ! ! (pdftex fails on undefined objects) -\unexpanded\def\pack_objects_register_reference#1#2#3{\normalexpanded{\noexpand\ctxlatecommand{saveobject("#1::#2",#3,\noexpand\the\realpageno)}}} -\unexpanded\def\pack_objects_overload_reference#1#2#3{\ctxcommand{setobject("#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)}} -\unexpanded\def\dosetobjectreference +\def\dosetobjectreference {\ifcase\crossreferenceobject \objectreferenced - \expandafter\pack_objects_overload_reference + \expandafter\dooverloadobjectreference \else - \expandafter\pack_objects_register_reference + \expandafter\doregisterobjectreference \fi} -\unexpanded\def\dosetdriverreference +\def\dosetdriverreference {\driverreferenced\dosetobjectreference} \def\defaultobjectreference#1#2{0} % driver dependent \def\defaultobjectpage #1#2{\realfolio} -\unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\ctxcommand{objectnumber("#1::#2","\defaultobjectreference{#1}{#2}")}}} -\unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxcommand{objectpage("#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}")}}} -\unexpanded\def\setobject {\driverreferenced\pack_objects_set1} -\unexpanded\def\settightobject{\driverreferenced\pack_objects_set0} +\def\setobject {\driverreferenced\dosetobject1} +\def\settightobject{\driverreferenced\dosetobject0} %D \macros %D {doifobjectfoundelse,doifobjectreferencefoundelse} @@ -399,14 +393,13 @@ %D \doifobjectreferencefoundelse{class}{object}{do then}{do else} %D \stoptyping -\unexpanded\def\doifobjectfoundelse#1#2% - {\ifcsname\??objects#1::#2\endcsname +\def\doifobjectfoundelse#1#2% + {\ifcsname\??ob:#1::#2\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} -\unexpanded\def\doifobjectreferencefoundelse#1#2% - {\ctxcommand{doifobjectreferencefoundelse("#1::#2")}} +\def\doifobjectreferencefoundelse#1#2{\ctxlua{job.objects.doifelse("#1::#2")}} \protect \endinput |