%D \module %D [ file=pack-ori, % was experimental %D version=2019.07.30, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Anchoring, %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 Packaging Macros / Anchoring} \registerctxluafile{pack-ori}{autosuffix} \unprotect %D Possible options are: %D %D \starttabulate[|T|T|] %D \NC orientation \NC up left down right top bottom %D \NC vertical \NC line top bottom middle %D \NC horizontal \NC middle flushleft flushright left right %D \stoptabulate \installcorenamespace{orientation} \installcorenamespace{orientations} \installcommandhandler \??orientation {orientation} \??orientation \setuporientation [\c!orientation=\v!normal, \c!horizontal=\v!normal, \c!vertical=\v!normal] \appendtoks \expandafter\integerdef\csname\??orientations\currentorientation\endcsname\toorientation orientation {\orientationparameter\c!orientation} horizontal {\orientationparameter\c!horizontal} vertical {\orientationparameter\c!vertical} \relax\relax \to \everydefineorientation \defineorientation[\v!normal] \defineorientation[\v!up] [\c!orientation=\v!up] \defineorientation[\v!down] [\c!orientation=\v!down] \defineorientation[\v!left] [\c!orientation=\v!left] \defineorientation[\v!right] [\c!orientation=\v!right] \defineorientation[\v!top] [\c!orientation=\v!top] \defineorientation[\v!bottom][\c!orientation=\v!bottom] \defineorientation[\v!line] [\c!orientation=\v!line] %D There will be some more helpers here. \permanent\def\theorientation#1% {\numexpr \ifcsname\??orientations#1\endcsname \lastnamedcs \else \zerocount \fi \relax} \permanent\def\autoorientation#1% {\numexpr \ifcsname\??orientations#1\endcsname \lastnamedcs \else \auto_orientation{#1}% \fi \relax} %D The \type {\immediateassignment} and \type {\immediateassigned} primitives that %D are in \LUATEX\ are obsolete in \LUAMETATEX. Local scanning is, although it is %D a bit slower, more general. We didn't really need and use these primitives in %D \CONTEXT\ anyway, apart from some playing around with some full expansion, which %D made no sense in the end so it was dropped. When things get that hairy it's often %D a good reason to look into \LUA\ variants. \def\auto_orientation#1% {\beginlocalcontrol\global\expandafter\chardef\csname\??orientations#1\endcsname\stringtoorientation{#1}\endlocalcontrol % good enough %{\localcontrolled{\global\expandafter\chardef\csname\??orientations#1\endcsname\stringtoorientation{#1}}% % a bit slower \csname\??orientations#1\endcsname} \permanent\protected\def\doifelseorientation#1% {\ifcsname\??orientations#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \def\iforientationcsname#1{\ifcsname\??orientations} \protect \endinput