summaryrefslogtreecommitdiff
path: root/tex/context/base/mkii/strc-mar.mkii
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
commit8d8d528d2ad52599f11250cfc567fea4f37f2a8b (patch)
tree94286bc131ef7d994f9432febaf03fe23d10eef8 /tex/context/base/mkii/strc-mar.mkii
parentf5aed2e51223c36c84c5f25a6cad238b2af59087 (diff)
downloadcontext-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/mkii/strc-mar.mkii')
-rw-r--r--tex/context/base/mkii/strc-mar.mkii318
1 files changed, 318 insertions, 0 deletions
diff --git a/tex/context/base/mkii/strc-mar.mkii b/tex/context/base/mkii/strc-mar.mkii
new file mode 100644
index 000000000..2ae81e47b
--- /dev/null
+++ b/tex/context/base/mkii/strc-mar.mkii
@@ -0,0 +1,318 @@
+%D \module
+%D [ file=strc-mar,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Structure Macros,
+%D subtitle=Markings,
+%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 Structure Macros / Markings}
+
+\unprotect
+
+\prependtoks \getallmarks \to \everybeforepagebody
+\prependtoks \setallmarks \to \everyafterpagebody % currently \relax
+
+% voor 'interne' doeleinden zijn beschikbaar:
+%
+% \fetchmark[naam][plaats]
+
+\def\mainmarking#1%
+ {\ifcsname\??mk#1\c!coupling\endcsname
+ \csname\??mk#1\c!coupling\endcsname
+ \fi}
+
+\def\fastresetmarker#1%
+ {\ifcsname\??mk#1\c!coupling\endcsname
+ \@EA\resetmark\csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname
+ \fi}
+
+\def\fastresetmarkerlist[#1]%
+ {\expanded{\rawprocesscommalist[#1]}\fastresetmarker}
+
+\def\doresetmarking[#1]%
+ {\processcommalist[#1]\fastresetmarker}
+
+\def\resetmarking
+ {\dosingleargument\doresetmarking}
+
+\def\dosetupmarking[#1][#2]%
+ {\def\docommand##1{\getparameters[\??mk##1][#2]}%
+ \processcommalist[#1]\docommand}
+
+\def\setupmarking
+ {\dodoubleargument\dosetupmarking}
+
+% betere protectie
+
+\letvalue{\??mk\??mk\v!previous}\gettopmark
+\letvalue{\??mk\??mk\v!first }\getfirstmark
+\letvalue{\??mk\??mk\v!last }\getbotmark
+\letvalue{\??mk\??mk\v!current }\getcurrentmark
+
+% todo: make it work in balancing
+%
+% \definemarking[vers][]
+% \setupheadertexts
+% [\doiftext{\getmarking[vers][first]}
+% {\doiftextelse{\getmarking[vers][column:last]}
+% {\getmarking[vers][first] -- \getmarking[vers][column:last]}
+% {\getmarking[vers][first]}}]
+% \starttext
+% \startcolumns[n=2,balance=no]
+% \dorecurse{10}{\expanded{\marking[vers]{\recurselevel}} \recurselevel:\dorecurse{4}{\input ward } \endgraf}
+% \stopcolumns
+% \stoptext
+
+\letvalue{\??mk\??mk\v!column:\v!first}\getsplitfirstmark
+\letvalue{\??mk\??mk\v!column:\v!last }\getsplitbottommark
+
+\ifx\decouplemarking\undefined \def\decouplemarking[#1]{} \fi
+
+\let\alldefinedmarks\empty
+
+\def\dododefinemarking[#1][#2]%
+ {\getparameters[\??mk#1]
+ [\c!expansion=\v!no, % saves a macro
+ \c!separator={\space\emdash\space},
+ \c!limittext=\@@kolimittext,
+ \c!state=\v!start]%
+ \decouplemarking[#1]% % no coupling with sections
+ \setevalue{\??mk#1\c!coupling}{#2}%
+ \doglobal\addtocommalist{#2}\alldefinedmarks
+ \expandafter\newmark\csname\??mk#2\endcsname
+ \showmessage\m!systems{13}{#1,[#2]}}
+
+\def\dodefinemarking[#1][#2]%
+ {\doifelsenothing{#2}
+ {\dododefinemarking[#1][#1]}
+ {\dododefinemarking[#1][#2]}}
+
+\def\definemarking
+ {\dodoubleempty\dodefinemarking}
+
+\def\definerawmarking[#1]% global ! ! ! !
+ {\getgparameters[\??mk#1]
+ [\c!expansion=\v!no, % saves a macro
+ \c!separator={ --- }, % watch the spaces
+ \c!limittext=,
+ \c!state=\v!start]%
+ \setxvalue{\??mk#1\c!coupling}{#1}%
+ \expandafter\newmark\csname\??mk#1\endcsname
+ \showmessage\m!systems{13}{#1}}
+
+\let\nomarking\empty
+
+\def\fetchmark[#1][#2]% % expandable / never use \unexpanded
+ {\ifcsname\??mk::#1\endcsname % saved mark
+ \csname\??mk::\??mk::#2\@EA\@EA\@EA\endcsname
+ \csname\??mk::#1\endcsname
+ \else\ifcsname\??mk#1\c!coupling\endcsname % real mark
+ \csname\??mk\??mk#2\@EA\endcsname
+ \csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname
+ \fi\fi}
+
+\letvalue{\??mk::\??mk::\v!previous}\firstoffourarguments
+\letvalue{\??mk::\??mk::\v!first }\secondoffourarguments
+\letvalue{\??mk::\??mk::\v!last }\thirdoffourarguments
+\letvalue{\??mk::\??mk::\v!current }\fourthoffourarguments
+
+% this version can be used when a page is built up in steps without
+% feedback of the otr'd list to the mvl (i.e.\ a page made of pages,
+% as in column sets where content is buffered)
+
+% reset at begin
+% preset before page
+% bubble in column
+% refresh at end
+
+\def\refreshsavedmark[#1][#2]% mark tag (packing saves many hash entries)
+ {\setxvalue{\??mk::#1:#2}%
+ {{\@EA\ifx\csname\??mk::#1:pp\endcsname\relax
+ % empty
+ \else
+ \csname\??mk::#1:pp\endcsname
+ \fi}%
+ {\@EA\ifx\csname\??mk::#1:ff\endcsname\relax
+ \fetchmark[#1][\v!first]%
+ \else
+ \csname\??mk::#1:ff\endcsname
+ \fi}%
+ {\fetchmark[#1][\v!last]}%
+ {\fetchmark[#1][\v!current]}}%
+ \setxvalue{\??mk::#1:pp}{\fetchmark[#1][\v!first]}%
+ \letgvalue{\??mk::#1:ff}\relax
+ }
+
+\def\bubblesavedmark[#1][#2]% no packing (not now, maybe make a six-pack later)
+ {\@EA\ifx\csname\??mk::#1:ff\endcsname\relax
+ \setxvalue{\??mk::#1:ff}{\fetchmark[#1][\v!first]}%
+ \fi}
+
+\def\resetsavedmark[#1][#2]% mark tag
+ {\doifelsenothing{\fetchmark[#1][\v!previous]}
+ {\letgvalue{\??mk::#1:pp}\relax}
+ {\setxvalue{\??mk::#1:pp}{\fetchmark[#1][\v!previous]}}%
+ \doifelsenothing{\fetchmark[#1][\v!first]}
+ {\letgvalue{\??mk::#1:ff}\relax}
+ {\setxvalue{\??mk::#1:ff}{\fetchmark[#1][\v!first]}}%
+ \letgvalue{\??mk::#1:#2}\emptysavedmark}
+
+\def\presetsavedmark[#1][#2]% mark tag
+ {\letgvalue{\??mk::#1:#2}\emptysavedmark}
+
+\def\emptysavedmark{{}{}{}{}}
+
+% new (can be used in column sets)
+%
+% \getsavedmarking[M][previous]
+% \getsavedmarking[M][first]
+% \getsavedmarking[M][last]
+
+\def\getsavedmarking
+ {\dodoubleargument\dogetsavedmarking}
+
+\def\dogetsavedmarking[#1][#2]%
+ {\doifelse{#2}\v!previous
+ {\getmarking[#1][1][\v!previous]}
+ {\doifelse{#2}\v!first
+ {\getmarking[#1][1][\v!first]}
+ {\getmarking[#1][\v!last]}}}
+
+% fetching
+
+\def\fetchtwomarks[#1]%
+ {\dofetchtwomarks[#1][#1]}
+
+\def\fetchallmarks[#1]%
+ {\dofetchallmarks[#1][#1]}
+
+\def\dofetchtwomarks[#1][#2]% class class:tag
+ {\doifsomething{\fetchmark[#2][\v!first]}
+ {\fetchmark[#2][\v!first]%
+ \doifsomething{\fetchmark[#2][\v!last]}
+ {\doifnot{\fetchmark[#2][\v!first]}{\fetchmark[#2][\v!last]}
+ {\getvalue{\??mk#1\c!separator}\fetchmark[#2][\v!last]}}}}
+
+\def\dofetchallmarks[#1][#2]%
+ {\doifsomething{\fetchmark[#2][\v!first]}
+ {\doifsomething{\fetchmark[#2][\v!previous]}
+ {\doifnot{\fetchmark[#2][\v!previous]}{\fetchmark[#2][\v!first]}
+ {\fetchmark[#2][\v!previous]\getvalue{\??mk#1\c!separator}}}}%
+ \fetchtwomarks[#1][#2]}
+
+% \newtoks \everymarking
+
+% \def\Interesting{\doifmodeelse{*\v!marking}{Interesting}{Boring}}
+% \setupheadertexts[chapter]
+% \starttext
+% \chapter{This Is \Interesting}
+% \stoptext
+
+\def\dogetmarking[#1][#2][#3]%
+ {\doifvalue{\??mk#1\c!state}\v!start
+ {\bgroup
+ \setsystemmode\v!marking
+ \the\everymarking
+ %\def\nomarking##1{\unknown\ }%
+ \def\nomarking{\splitsequence{\getvalue{\??mk#1\c!limittext}}}%
+ \setfullsectionnumber{\??mk#1}%
+ \ifthirdargument
+ \processaction % slow
+ [#3]
+ [ \v!both=>{\dofetchtwomarks[#1][#1:#2]},
+ \v!all=>{\dofetchallmarks[#1][#1:#2]},
+ \s!default=>{\fetchmark [#1:#2][\v!first]},
+ \s!unknown=>{\fetchmark [#1:#2][#3]}]%
+ \else
+ \processaction % slow
+ [#2]
+ [ \v!both=>{\dofetchtwomarks[#1][#1]},
+ \v!all=>{\dofetchallmarks[#1][#1]},
+ \s!default=>{\fetchmark [#1][\v!first]},
+ \s!unknown=>{\fetchmark [#1][#2]}]%
+ \fi
+ \egroup}}
+
+\def\nogetmarking[#1][#2][#3]%
+ {}
+
+\unexpanded\def\getmarking
+ {\dotripleargument\dogetmarking}
+
+\let\setsomemark\setmark
+
+\def\domarking[#1]#2%
+ {\ifcsname\??mk#1\c!coupling\endcsname
+ \bgroup
+ \doifelsevalue{\??mk#1\c!expansion}\v!yes
+ \expandmarkstrue\expandmarksfalse
+ \@EA\setsomemark\csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname{#2}%
+ \egroup
+ \fi}
+
+\def\marking
+ {\dosingleargument\domarking}
+
+%D Used in placing text lines.
+
+\def\doifelsemarking#1%
+ {\ifundefined{\??mk#1\c!coupling}%
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+%D And then \unknown\ we had a chaptertitle packaged in a
+%D makeup environment. And we don't want to loose marks there!
+
+\newbox\collectedmarks
+
+\def\flushmarks % use with care to avoid empty pages
+ {\ifvoid\collectedmarks\else\unhbox\collectedmarks\fi}
+
+\def\postponemarks
+ {\let\setsomemark\postponemark}
+
+\def\postponemark#1#2%
+ {%\writestatus{marks}{postponing \string#1 => #2}%
+ \global\setbox\collectedmarks\hbox
+ {\unhbox\collectedmarks\setmark{#1}{#2}}}
+
+\protect \endinput
+
+% Pseudo marks: (for Hraban)
+%
+% \def\RegisterPageMark#1#2%
+% {\iftrialtypesetting \else
+% \doglobal\increment\NameCounter
+% \textreference[#1:t:\NameCounter]{#2}%
+% \doifreferencefoundelse{#1:t:\NameCounter}
+% {\doifundefined{#1:f:\currentrealreference}%
+% {\setxvalue{#1:f:\currentrealreference}%
+% {\noexpand\in[#1:t:\NameCounter]}}%
+% \setxvalue{#1:l:\currentrealreference}%
+% {\noexpand\in[#1:t:\NameCounter]}}%
+% {}%
+% \fi}
+%
+% \def\GetFirstOnPage#1{\getvalue{#1:f:\realfolio}}
+% \def\GetLastOnPage #1{\getvalue{#1:l:\realfolio}}
+%
+% \setupheadertexts[\GetFirstOnPage{Name}][\GetLastOnPage{Name}]
+%
+% \starttext
+%
+% \def\Name#1{\RegisterPageMark{Name}{#1}#1}
+% \def\TestLine#1{\NC test \NC \Name {test: #1} \NC \NR}
+%
+% \starttabulate
+% \dorecurse{100}{\expanded{\TestLine{\recurselevel}}}
+% \stoptabulate
+%
+% \stoptext