diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/page-ins.mkxl')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/page-ins.mkxl | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/page-ins.mkxl b/Master/texmf-dist/tex/context/base/mkxl/page-ins.mkxl new file mode 100644 index 00000000000..2ab7449ab11 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/page-ins.mkxl @@ -0,0 +1,209 @@ +%D \module +%D [ file=page-ins, +%D version=2002.04.16, % was core-ins +%D title=\CONTEXT\ Insertion Macros, +%D subtitle=Insertions, +%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 Core Macros / Insertions} + +%D Insertions are special data collections that are associated to \TEX's internal +%D page builder. When multiple footnote classes were introduced, I decided to +%D isolate some of the functionality in a module. + +\registerctxluafile{page-ins}{} + +\unprotect + +%D Because we need to deal with inserts at the \LUA\ end as well, we provide a +%D proper installer. + +\installcorenamespace{insertion} +\installcorenamespace{insertionnumber} + +\installcommandhandler \??insertion {insertion} \??insertion + +\setupinsertion + [%c!n=\plusone, + %c!distance=\zeropoint, + %c!maxheight=\maxdimen, + %c!factor=\plusthousand, + \c!location=\v!page] + +\newconstant\insertionmigrationmode + +\def\page_inserts_check_anchoring + {\edef\p_anchoring{\namedinsertionparameter\empty\c!anchoring}% + \insertionmigrationmode\ifx\p_anchoring\v!auto\plusone\else\zerocount\fi + \clf_setinsertmigration{\p_anchoring}} + +\appendtoks + \ifempty\currentinsertionparent + \page_inserts_check_anchoring + \fi +\to \everysetupinsertion + +\setupinsertion + [\c!anchoring=\v!auto] + +\appendtoks + \page_inserts_check_anchoring +\to \everystarttext % or \everyjob + +\newcount\currentinsertionnumber % This is a count and not a macro ! + +\newtoks\t_page_inserts_list + +\mutable\let\doprocessinsert\relax % probably kind of obsolete now + +%D Maybe some day we will move settings here. + +\permanent\protected\def\setcurrentinsertion#1% + {\edef\currentinsertion{#1}% + \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} + +\permanent\def\namedinsertionnumber#1{\csname\??insertionnumber#1\endcsname} + +\protected\def\page_inserts_synchronize_registers + {\currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} + +% for practical reasons we still set these elsewhere but that might change in the future +% +% \global\count\currentinsertionnumber\numexpr\insertionparameter\c!factor/\insertionparameter\c!n\relax +% \global\skip \currentinsertionnumber\insertionparameter\c!distance \relax +% \global\dimen\currentinsertionnumber\insertionparameter\c!maxheight\relax} +% \floatingpenalty\zerocount + +\appendtoks + \ifempty\currentinsertionparent \else + \page_inserts_synchronize_registers + \fi +\to \everysetupinsertion + +\protected\def\page_inserts_process#1% beware, this adapts currentinsertion ! + {\edef\currentinsertion{#1}% + \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname + \doprocessinsert\currentinsertionnumber} % old method + +\permanent\protected\def\processinsertions + {\the\t_page_inserts_list} + +\permanent\protected\def\synchronizeinsertions + {\let\doprocessinsert\page_inserts_synchronize + \processinsertions} + +\protected\def\page_inserts_synchronize#1% yes or no + {\ifvoid#1\else + \insert#1{\unvbox#1}% + \fi} + +\permanent\protected\def\doifelseinsertion#1% + {\ifcsname\??insertionnumber#1\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doifinsertionelse\doifelseinsertion + +% \protected\def\startinsertion[#1]% +% {\insert\csname\??insertionnumber#1\endcsname\bgroup} +% +% \protected\def\stopinsertion +% {\egroup} + +% For the moment we use the regular insertion allocator so that users can still +% define their own insertions (not that they will play nicely with all context +% mechanisms then). We can use the dimensions at the \LUA\ end so we don't need to +% pass pass them explicitly. Actually, when we see an insertion node at that end, +% we already know the number. + +\appendtoks + \ifempty\currentinsertionparent + \ifcsname\??insertionnumber\currentinsertion\endcsname + % bad news + \else + \expandafter\newinsert\csname\??insertionnumber\currentinsertion\endcsname + \page_inserts_synchronize_registers + \clf_defineinsertion + {\currentinsertion}% + {% + number \currentinsertionnumber + }% + \relax + \t_page_inserts_list\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\t_page_inserts_list + \expandafter\page_inserts_process\csname\??insertionnumber\currentinsertion\endcsname}% + \count\currentinsertionnumber\plusthousand + \skip \currentinsertionnumber\zeropoint + \dimen\currentinsertionnumber\maxdimen + \fi + \else + \letcsname\??insertionnumber\currentinsertion\expandafter\endcsname + \csname\??insertionnumber\currentinsertionparent\endcsname + \fi +\to \everydefineinsertion + +\appendtoks + \ifempty\currentinsertionparent \else + \clf_setupinsertion + {\currentinsertion} + {% + location {\insertionparameter\c!location}% + }% + \relax + \fi +\to \everysetupinsertion + +\protected\def\page_inserts_set_location#1#2% fast one + {\clf_setinsertionlocation{#1}{#2}} + +%D Auxiliary macros: + +\def\page_insert_insertion_height#1% + {\dimexpr\expandafter\page_insert_insertion_height_indeed\csname\??insertionnumber#1\endcsname\relax} + +\def\page_insert_insertion_height_indeed#1% + {\ifvoid#1\zeropoint\else1\skip#1+\ht#1\fi} + +%D Obsolete: + +% \installcorenamespace{insertionbackup} +% +% \protected\def\installbackupinsertion#1% +% {\ifcsname\??insertionbackup\string#1\endcsname \else +% \expandafter\newinsert\csname\??insertionbackup\string#1\endcsname +% \count\csname\??insertionbackup\string#1\endcsname\zerocount +% \skip \csname\??insertionbackup\string#1\endcsname\zeropoint +% \dimen\csname\??insertionbackup\string#1\endcsname\maxdimen +% \fi} +% +% \protected\def\saveinsertionbox#1% hm, actually unknown +% {\global\setbox\csname\??insertionbackup\string#1\endcsname +% \ifdim\ht#1>\zeropoint\box#1\else\emptybox\fi} +% +% \protected\def\restoreinsertionbox#1% +% {\ifvoid\backupinsertion#1\else % if void, we keep the content +% \global\setbox#1\box\csname\??insertionbackup\string#1\endcsname +% \fi} +% +% \protected\def\eraseinsertionbackup#1% +% {\global\setbox\csname\??insertionbackup\string#1\endcsname\emptybox} +% +% \protected\def\saveinsertiondata#1% +% {\global\skip \csname\??insertionbackup\string#1\endcsname\skip #1% +% \global\count\csname\??insertionbackup\string#1\endcsname\count#1% +% \global\dimen\csname\??insertionbackup\string#1\endcsname\dimen#1} +% +% \protected\def\restoreinsertiondata#1% +% {\global\skip #1\skip \csname\??insertionbackup\string#1\endcsname +% \global\count#1\count\csname\??insertionbackup\string#1\endcsname +% \global\dimen#1\dimen\csname\??insertionbackup\string#1\endcsname} + +\protect \endinput |