summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/pack-obj.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/pack-obj.mkiv')
-rw-r--r--tex/context/base/mkiv/pack-obj.mkiv89
1 files changed, 51 insertions, 38 deletions
diff --git a/tex/context/base/mkiv/pack-obj.mkiv b/tex/context/base/mkiv/pack-obj.mkiv
index 23608846d..aeb5cb4f4 100644
--- a/tex/context/base/mkiv/pack-obj.mkiv
+++ b/tex/context/base/mkiv/pack-obj.mkiv
@@ -15,7 +15,7 @@
\unprotect
-\registerctxluafile{pack-obj}{1.001}
+\registerctxluafile{pack-obj}{}
%D \macros
%D {setobject,getobject,ifinobject}
@@ -51,65 +51,79 @@
\newdimen\objectht \def\objectheight{\the\objectht}
\newdimen\objectdp \def\objectdepth {\the\objectdp}
-% If I have time I will use the unreferenced variant for e.g. mp reuse.
+%D If I have time I will use the unreferenced variant for e.g. mp reuse.
-% todo formmargin per obj
-
-\unexpanded\def\setreferencedobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
-\unexpanded\def\settightreferencedobject #1#2{\begingroup\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
-\unexpanded\def\setunreferencedobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
-\unexpanded\def\settightunreferencedobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
+\unexpanded\def\setreferencedobject #1#2{\begingroup\synctexpause\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
+\unexpanded\def\settightreferencedobject #1#2{\begingroup\synctexpause\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
+\unexpanded\def\setunreferencedobject #1#2{\begingroup\synctexpause\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
+\unexpanded\def\settightunreferencedobject#1#2{\begingroup\synctexpause\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
\let\setobject \setreferencedobject
\let\settightobject\settightreferencedobject
+%D We can get subtle differences in boundingboxes but both methods work ok.
+
+\newconstant\c_pack_objects_offset_mode % 0=tex 1=box
+
+\unexpanded\def\pack_objects_temp_check % this will go away
+ {\ifnum\texenginefunctionality<6401\relax
+ \c_pack_objects_offset_mode\zerocount
+ \fi}
+
\unexpanded\def\pack_objects_set_yes#1#2%
- {\ifdim\objectoff>\zeropoint\relax
- \pack_objects_package
+ {\pack_objects_temp_check % this will go away
+ \ifcase\c_pack_objects_offset_mode
+ \ifzeropt\objectoff
+ \pack_objects_package_nop\nextbox
+ \else
+ \pack_objects_package_yes\nextbox
+ \fi
\else
- \setbox\objectbox\box\nextbox
+ \pack_objects_package_nop\nextbox
\fi
- \clf_registerreferencedobject{#1}{#2}\objectbox
+ \clf_registerreferencedobject{#1}{#2}\objectbox\objectoff\c_pack_objects_offset_mode
+ \synctexresume
\endgroup}
\unexpanded\def\pack_objects_set_nop#1#2%
- {\ifdim\objectoff>\zeropoint\relax
- \pack_objects_package
+ {\pack_objects_temp_check % this will go away
+ \ifcase\c_pack_objects_offset_mode
+ \ifzeropt\objectoff
+ \pack_objects_package_nop\nextbox
+ \else
+ \pack_objects_package_yes\nextbox
+ \fi
\else
- \setbox\objectbox\box\nextbox
+ \pack_objects_package_nop\nextbox
\fi
- \clf_registerobject{#1}{#2}\objectbox
+ \clf_registerobject{#1}{#2}\objectbox\objectoff\c_pack_objects_offset_mode
+ \synctexresume
\endgroup}
-\def\pack_objects_package
- {\objectwd\dimexpr\wd\nextbox+2\objectoff\relax
- \objectht\dimexpr\ht\nextbox+ \objectoff\relax
- \objectdp\dimexpr\dp\nextbox+ \objectoff\relax
- \setbox\objectbox\hpack
- {\hskip\objectoff
- \box\nextbox}%
- \wd\objectbox\objectwd
- \ht\objectbox\objectht
- \dp\objectbox\objectdp}
+\def\pack_objects_package_nop#1% we pack because otherwise \ruledhbox is still tight
+ {\setbox\objectbox\hpack{\box#1}}
-\def\pack_objects_repackage
- {\objectwd\dimexpr\wd\objectbox-2\objectoff\relax
- \objectht\dimexpr\ht\objectbox- \objectoff\relax
- \objectdp\dimexpr\dp\objectbox- \objectoff\relax
+\def\pack_objects_package_yes#1%
+ {\objectwd\dimexpr\wd#1+2\objectoff\relax
+ \objectht\dimexpr\ht#1+ \objectoff\relax
+ \objectdp\dimexpr\dp#1+ \objectoff\relax
\setbox\objectbox\hpack
- {\hskip-\objectoff
- \box\objectbox}%
+ {\hskip\objectoff
+ \box#1}%
\wd\objectbox\objectwd
\ht\objectbox\objectht
\dp\objectbox\objectdp}
\unexpanded\def\getobject#1#2%
{\begingroup
+ \synctexpause
\clf_restoreobject{#1}{#2}%
- \ifdim\objectoff>\zeropoint
- \pack_objects_repackage
+ \ifzeropt\objectoff\else
+ \objectoff-\objectoff
+ \pack_objects_package_yes\objectbox
\fi
\box\objectbox
+ \synctexresume
\endgroup}
%D If needed one can ask for the dimensions of an object with:
@@ -118,8 +132,8 @@
%D \getobjectdimensions{class}{name}
%D \stoptyping
%D
-%D The results are reported in \type {\objectwidth}, \type
-%D {\objectheight} and \type {\objectdepth}.
+%D The results are reported in \type {\objectwidth}, \type {\objectheight} and \type
+%D {\objectdepth} as well as \type {\objectoffset}.
\unexpanded\def\getobjectdimensions#1#2%
{\clf_getobjectdimensions{#1}{#2}}
@@ -127,8 +141,7 @@
%D \macros
%D {doifobjectfoundelse,doifobjectreferencefoundelse}
%D
-%D To prevent redundant definition of objects, one can use
-%D the next tests:
+%D To prevent redundant definition of objects, one can use the next tests:
%D
%D \starttyping
%D \doifobjectfoundelse{class}{object}{do then}{do else}