summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/pack-ori.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/pack-ori.mkxl')
-rw-r--r--tex/context/base/mkxl/pack-ori.mkxl97
1 files changed, 97 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/pack-ori.mkxl b/tex/context/base/mkxl/pack-ori.mkxl
new file mode 100644
index 000000000..4365db3ac
--- /dev/null
+++ b/tex/context/base/mkxl/pack-ori.mkxl
@@ -0,0 +1,97 @@
+%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\chardef\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]
+
+%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 are
+%D kind of obsolete and might be dropped (if not already) from \LUAMETATEX. Local
+%D scanning is, although it is a bit slower, more general. We didn't really need and
+%D use these primitives in \CONTEXT\ anyway, apart from some playing around with
+%D some full expansion, which made no sense in the end so it was dropped. When
+%D things get that hairy it's often a good reason to look into \LUA\ variants.
+
+\def\auto_orientation#1%
+ %{\immediateassignment\global\expandafter\chardef\csname\??orientations#1\endcsname\stringtoorientation{#1}% % quite fast
+ {\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