diff options
author | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
commit | fc4466b32ed330a956ac603b00fd145524cff49a (patch) | |
tree | 2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv | |
parent | 50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff) |
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv new file mode 100644 index 00000000000..c91073a143d --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv @@ -0,0 +1,186 @@ +%D \module +%D [ file=core-ins, +%D version=2002.04.16, +%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}{1.001} + +\unprotect + +%D Because we need to deal with inserts at the \LUA\ end as well, +%D we provide a proper installer. + +% Not yet used as we need to adapt some code to this. + +\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] + +\newcount\currentinsertionnumber % This is a count and not a macro ! + +\newtoks\t_page_inserts_list + +\let\doprocessinsert\relax + +%D Maybe some day we will move settings here. + +\unexpanded\def\setcurrentinsertion#1% + {\edef\currentinsertion{#1}% + \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} + +\def\namedinsertionnumber#1{\csname\??insertionnumber#1\endcsname} + +\unexpanded\def\page_inserts_synchronize_registers + {\currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} + +% for practical reasone we still set these elsewhere but that might chaneg 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} + +\appendtoks + \page_inserts_synchronize_registers +\to \everysetupinsertion + +\unexpanded\def\page_inserts_process#1% beware, this addapts currentinsertion ! + {\edef\currentinsertion{#1}% + \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname + \doprocessinsert\currentinsertionnumber} % old method + +\unexpanded\def\processinsertions + {\the\t_page_inserts_list} + +\unexpanded\def\synchronizeinsertions + {\let\doprocessinsert\page_inserts_synchronize + \processinsertions} + +\unexpanded\def\page_inserts_synchronize#1% yes or no + {\ifvoid#1\else + \insert#1{\unvbox#1}% + \fi} + +\unexpanded\def\doifelseinsertion#1% + {\ifcsname\??insertionnumber#1\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\let\doifinsertionelse\doifelseinsertion + +% \unexpanded\def\startinsertion[#1]% +% {\insert\csname\??insertionnumber#1\endcsname\bgroup} +% +% \unexpanded\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 + \ifx\currentinsertionparent\empty + \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 + \expandafter\let\csname\??insertionnumber\currentinsertion\expandafter\endcsname + \csname\??insertionnumber\currentinsertionparent\endcsname + \fi +\to \everydefineinsertion + +\appendtoks + \clf_setupinsertion + {\currentinsertion} + {% + location {\insertionparameter\c!location}% + }% + \relax +\to \everysetupinsertion + +\unexpanded\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} +% +% \unexpanded\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} +% +% \unexpanded\def\saveinsertionbox#1% hm, actually unknown +% {\global\setbox\csname\??insertionbackup\string#1\endcsname +% \ifdim\ht#1>\zeropoint\box#1\else\emptybox\fi} +% +% \unexpanded\def\restoreinsertionbox#1% +% {\ifvoid\backupinsertion#1\else % if void, we keep the content +% \global\setbox#1\box\csname\??insertionbackup\string#1\endcsname +% \fi} +% +% \unexpanded\def\eraseinsertionbackup#1% +% {\global\setbox\csname\??insertionbackup\string#1\endcsname\emptybox} +% +% \unexpanded\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} +% +% \unexpanded\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 |