summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/anch-loc.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/anch-loc.mkxl')
-rw-r--r--tex/context/base/mkxl/anch-loc.mkxl108
1 files changed, 108 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/anch-loc.mkxl b/tex/context/base/mkxl/anch-loc.mkxl
new file mode 100644
index 000000000..eef2ba09d
--- /dev/null
+++ b/tex/context/base/mkxl/anch-loc.mkxl
@@ -0,0 +1,108 @@
+%D \module
+%D [ file=anch-loc,
+%D version=2021.05.27,
+%D title=\CONTEXT\ Anchoring Macros,
+%D subtitle=Local Positioning Support,
+%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.
+
+\writestatus{loading}{ConTeXt Anchoring Macros / Local Positioning}
+
+%D This is a typical \LMTX\ feature that could have been provided in \MKIV\ but I
+%D never finished it there. In \LMTX\ we have already a bit better infrastructure
+%D for it.
+%D
+%D When watching the brilliant positive yt videos of Yoyoka Soma (よよか) drum
+%D performances one realizes that a covers can improve the original. Let's see if
+%D this module can improve some of the position related mechanisms. (Btw, quite
+%D often covers impress me more than originals I'd never list too anyway.)
+
+% todo:
+%
+% - make box fit and inject glue
+% - set height / depth or just insert something between
+
+\registerctxluafile{anch-loc}{autosuffix}
+
+\unprotect
+
+\aliased\let\syncanchor \gobblethreearguments
+\aliased\let\alignanchor\gobblefourarguments
+\aliased\let\markanchor \gobblethreearguments
+
+\permanent\protected\def\anch_local_withanchor_s #1#2#3{\leftboundary\setlocalsyncanchor {#1} #2 #3\rightboundary}
+\permanent\protected\def\anch_local_withanchor_a#1#2#3#4{\leftboundary\setlocalalignanchor{#1} #2 #3{#4}\rightboundary}
+\permanent\protected\def\anch_local_withanchor_m #1#2#3{\leftboundary\setlocalmarkanchor {#1} #2 #3\rightboundary}
+
+\permanent\protected\def\setlocalanchoring
+ {\enforced\let\syncanchor \anch_local_withanchor_s
+ \enforced\let\alignanchor\anch_local_withanchor_a
+ \enforced\let\markanchor \anch_local_withanchor_m}
+
+\aliased\let\stopanchoring\relax
+
+\permanent\protected\def\startanchoring#1\stopanchoring % todo: boundary
+ {\begingroup
+ \pushlocalanchors
+ \setlocalanchoring
+ \setbox\scratchbox\vbox{\settrialtypesetting#1}%
+ \analyzelocalanchors\scratchbox
+ \vbox{#1}%
+ \poplocalanchors
+ \endgroup}
+
+\aliased\let\stopsynchronizing\relax
+
+\permanent\protected\def\startsynchronizing#1\stopsynchronizing % todo: boundary
+ {\begingroup
+ \pushlocalanchors
+ \setlocalanchoring
+ \setbox\scratchbox\vbox{#1}%
+ \synchronizelocalanchors\scratchbox
+ \unvbox\scratchbox
+ \poplocalanchors
+ \endgroup}
+
+% variant on \sync (defined at the lua end)
+
+\permanent\protected\def\autosync#1#2{\leftboundary\sync{#1}{#2}\rightboundary}
+
+% \startsynchronizing
+% $a = a + a $\par
+% $a \mathsnc{1}= a + a $\par
+% $ \mordsnc{1}= a + a + a $\par
+% $ \mordsnc{1}= a \mathsnc{2}+ a + a + a$\par
+% $ \mordsnc{1} \mordsnc{2}+ a + a + a$
+% \stopsynchronizing
+
+\permanent\protected\def\mathsync#1{\sync{m}{#1}}
+\permanent\protected\def\mordsync#1{\mathord{}\sync{m}{#1}}
+\permanent\protected\def\mrelsync#1{\mathrel{}\sync{m}{#1}}
+\permanent\protected\def\mbinsync#1{\mathbin{}\sync{m}{#1}}
+
+\setlocalanchoring
+
+%D These are defined at the \LUA\ end.
+%D
+%D \starttyping
+%D \pushlocalanchors
+%D \poplocalanchors
+%D \analyzelocalanchors
+%D \synchronizelocalanchors
+%D \setlocalsyncanchor {name} x y | {name} {x} {y}
+%D \setlocalmarkanchor {name} x y | {name} {x} {y}
+%D \localanchorx {name} x y | {name} {x} {y}
+%D \localanchory {name} x y | {name} {x} {y}
+%D \sync {name} x | {name} {x}
+%D \stoptyping
+
+% \permanent\def\anchorxy#1#2#3{(\todimension\localanchorx{#1} #2 #3,\todimension\localanchory{#1} #2 #3)}
+
+\protect \endinput
+
+% Musical timestamp: Nightwish Decades bluray in loop mode.