summaryrefslogtreecommitdiff
path: root/tex/context/base/supp-mrk.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/supp-mrk.mkii
parentf5aed2e51223c36c84c5f25a6cad238b2af59087 (diff)
downloadcontext-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/supp-mrk.mkii')
-rw-r--r--tex/context/base/supp-mrk.mkii591
1 files changed, 0 insertions, 591 deletions
diff --git a/tex/context/base/supp-mrk.mkii b/tex/context/base/supp-mrk.mkii
deleted file mode 100644
index b9d476c2a..000000000
--- a/tex/context/base/supp-mrk.mkii
+++ /dev/null
@@ -1,591 +0,0 @@
-%D \module
-%D [ file=supp-mrk,
-%D version=1995.10.10,
-%D title=\CONTEXT\ Support Macros,
-%D subtitle=Marks,
-%D author=Jim Fox / 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.
-
-%D Remark: due to the lack of \type {\clearmark}, the \ETEX\
-%D dedicated mechanism is not yet operational.
-
-%D This module has deverted so much from the original that I
-%D can probably rewrite it to a more efficient one now and
-%D I will do so.
-
-%D There are 256 \COUNTERS, \DIMENSIONS, \SKIPS, \MUSKIPS\ and
-%D \BOXES, 16~in- and output buffers, but there is only one
-%D \MARK. In TugBoat~8 (1987, no~1) Jim Fox presents a set of
-%D macros that can be used to mimmick multiple marks. We
-%D gladly adopt them here. I may rewrite this module from
-%D scratch some day, since some low level \CONTEXT\ commands
-%D can be used.
-%D
-%D This module was changed on behalf of \ETEX. The main
-%D extension is that \type{\get..} and alike is used instead of
-%D direct calls. The \TEX\ based multiple marks needs to store
-%D the mark data but \ETEX\ uses a different approach.
-
-\writestatus{loading}{ConTeXt Support Macros / Marks}
-
-\unprotect
-
-%D We start with the presetting the interface macros.
-%D
-%D \starttabulate[|||]
-%D \NC \type{\getmarks} \NC sets the marks to their values \NC \NR
-%D \NC \type{\getallmarks} \NC sets all marks to their values \NC \NR
-%D \NC \type{\getsplitmarks} \NC sets the splitmarks to their values\NC \NR
-%D \NC \type{\getallsplitmarks} \NC sets all splitmarks to their values\NC \NR
-%D \NC \type{\setmarks} \NC synchronizes topmarks (\ETEX) \NC \NR
-%D \stoptabulate
-%D
-%D Later we will overload these, dependent of the brand of
-%D \TEX\ that we use.
-
-\let \getmarks \gobbleoneargument
-\let \getallmarks \relax
-\let \getsplitmarks \gobbleoneargument
-\let \getallsplitmarks \relax
-\let \setallmarks \relax
-
-\let \newmark \gobbleoneargument
-\let \newpersistentmark \gobbleoneargument
-\let \resetmark \gobbleoneargument
-\let \setmark \gobbletwoargument
-
-%D \macros
-%D {expandmarks}
-%D
-%D We can force expansion of marks with the following switch.
-
-\newif\ifexpandmarks \expandmarkstrue % hm, true indeed ?
-
-\beginTEX
-
-%D This implementation is more or less compatible with the
-%D other \type {\new} macros in \PLAIN\ \TEX. A mark is
-%D defined by:
-%D
-%D \starttyping
-%D \newmark\name
-%D \stoptyping
-%D
-%D and can be called upon with:
-%D
-%D \starttyping
-%D \gettopmark \name % or \topname
-%D \getbotmark \name % or \botname
-%D \getfirstmark\name % or \firstname
-%D \stoptyping
-%D
-%D The only drawback of his approach is that the marks must be
-%D preloaded in the output routine. This is accomplished by
-%D means of:
-%D
-%D \starttyping
-%D \getmarks\name
-%D \stoptyping
-%D
-%D The macros presented here are in most aspects copies of
-%D those presented by Jim Fox. We've taken the freedom to
-%D change a few things for more or less obvious reasons:
-%D
-%D \startitemize
-%D \item Because the original macros look quite complicated,
-%D which is mainly due to extensive use of
-%D \type{\expandafter}'s and \type{\csname}'s, we changed
-%D those in favor of \type{\getvalue}.
-%D \item To be more in line with the rest of \CONTEXT, we've
-%D changed some of the names of macros.
-%D \item Because we are already short on \COUNTERS\ we use
-%D macros when possible.
-%D \item We maintain a list of defined marks and use one
-%D call for getting them all at once.
-%D \item We have extended the mechanism to splitmarks (not
-%D perfected yet).
-%D \item We've introduced optional expansion of the contents
-%D of marks.
-%D \stopitemize
-%D
-%D Whatever changes we've made, the credits still go to Jim,
-%D whatever goes wrong is due to me. The method is described
-%D in the TugBoat mentioned before, so we won't go into
-%D details. All marks belonging to a group are packed in a
-%D list. In this list they are preceded by a macro that can
-%D be defined at will and a number concerning the position at
-%D which it was defined.
-%D
-%D \starttyping
-%D \def\somelist{... \domark5{this} ... \domark31{that} ...}
-%D \stoptyping
-%D
-%D The original \type{\mark} keeps track of the number and
-%D \type{\topmark} and \type{\botmark} are used to extract the
-%D actual marks from the list. The counting is done by
-%D
-%D \starttyping
-%D \currentmarker
-%D \stoptyping
-%D
-%D In \CONTEXT\ we use the mark mechanism to keep track of
-%D colors. In a complicated documents with many colors per
-%D page, \type{\currentmarker} can therefore get pretty high.
-%D (Well, this is not completely true, because we don't
-%D always have to use marks.)
-
-\newcount\currentmarker
-
-%D The original implementation used a few more \COUNTERS. Two
-%D have been substituted by macros, one has been replaced by
-%D our scratch counter.
-%D
-%D \starttyping
-%D \newcount\topmarker
-%D \newcount\botmarker
-%D \newcount\foundmarker
-%D \stoptyping
-%D
-%D We've also introduced some constants, one for the lists and
-%D three for composing the mark commands.
-
-\def\@@marklist@@ {*m*} % {marklist}
-\def\@@marktop@@ {*t*} % {top}
-\def\@@markbot@@ {*b*} % {bot}
-\def\@@markfirst@@ {*f*} % {first}
-\def\@@markcurrent@@ {*c*} % {current}
-
-%D The next one is new too. All defined marks are packed in a
-%D comma seperated list. This could of course have been a token
-%D list but \CONTEXT\ has some preference for comma lists.
-
-\let\allmarks=\empty
-
-%D The next macro replaces the multiple step expansion and
-%D command name constructors of Jim. This alternative leads to
-%D a more readable source (we hope).
-
-\def\makemarknames#1% kan genest werken
- {\bgroup
- \escapechar=-1
- \xdef\markname{\string#1}%
- \xdef\marklist{\@@marklist@@\markname}%
- \egroup}
-
-%D \macros
-%D {newmark,resetmark}
-%D
-%D A mark is defined by \type{\newmark}. At the same time,
-%D the name of the mark is added to a commalist. The
-%D three initializations were not in the original design, but
-%D make calls from outside the output routine a bit more
-%D robust.
-
-\let\domark\relax % saves a restore on the stack
-
-\def\definenewmark#1#2%
- {\bgroup
- \makemarknames{#1}%
- #2%
- \letgvalueempty{\@@markcurrent@@\markname}%
- \letgvalueempty{\@@marktop@@ \markname}%
- \letgvalueempty{\@@markfirst@@ \markname}%
- \letgvalueempty{\@@markbot@@ \markname}%
- \setgvalue{\marklist}{\domark0{}}% beware of halfway definitions
- \long\gdef#1{\addmarker#1}%
- \egroup}
-
-\def\newmark#1%
- {\definenewmark#1{\doglobal\addtocommalist\markname\allmarks}}
-
-%D Don't ask me, but sometimes we need more control over
-%D updating the marks, thereby we have:
-
-\def\newpersistentmark#1% for an example see core-grd.tex
- {\definenewmark#1\relax}
-
-\let\setmark \empty
-\let\resetmark\newmark
-
-%D Some more natural interfacing macros:
-
-\def\getcurrentmark #1{\getvalue{\@@markcurrent@@\strippedcsname#1}}
-\def\gettopmark #1{\getvalue{\@@marktop@@ \strippedcsname#1}}
-\def\getbottommark #1{\getvalue{\@@markbot@@ \strippedcsname#1}}
-\def\getfirstmark #1{\getvalue{\@@markfirst@@ \strippedcsname#1}}
-\def\getsplitbottommark#1{\getvalue{\@@markbot@@ \strippedcsname#1}}
-\def\getsplitfirstmark #1{\getvalue{\@@markfirst@@ \strippedcsname#1}}
-
-%D \macros
-%D {setmark}
-%D
-%D Setting a new mark and adding a mark to the designated
-%D list is done by \type{\addmarker}. This is an internal
-%D command, the user set a marks bij calling it's name:
-%D
-%D \starttyping
-%D \setmark\mymark{some text} % or \mymark{some text}
-%D \stoptyping
-%D
-%D Where \type{\mymark} is previously defined by
-%D \type{\newmark}.
-
-\long\def\addmarker#1#2%
- {\bgroup
- \makemarknames{#1}%
- \setgvalue{\@@markcurrent@@\markname}{#2}%
- \global\advance\currentmarker \plusone
- \normalmark{\the\currentmarker}%
- \!!toksa\@EA\@EA\@EA{\csname\marklist\endcsname}%
- \ifexpandmarks
- \setxvalue\marklist
- {\the\!!toksa
- \noexpand\domark
- \the\currentmarker{#2}}%
- \else
- \!!toksb\@EA{#2}% one level, why ? handy for cs
- \setxvalue\marklist
- {\the\!!toksa
- \noexpand\domark
- \the\currentmarker{\the\!!toksb}}%
- \fi
- \egroup}
-
-%D \macros
-%D {getmarks,getallmarks,
-%D getsplitmarks,getallsplitmarks}
-%D
-%D In fact, marks make only sense in the output routine. Marks
-%D are derived from their list by means of \type{\getmarks}.
-%D Only one call per mark is permitted in the output routine.
-%D Therefore, it's far more easy to get them all at once, by
-%D means of \type{\getallmarks}, which is not part of the
-%D original design.
-%D
-%D This grabbing is done by processing the list using the
-%D embedded \type{\domark} macros. When a relevant mark is
-%D found, this macro is reassigned and from then on serves
-%D in building the new list.
-
-% Hm, resetting \!!toksa got lost and took me a half a day to
-% trace down ([] showed up in the pagebody); I really have
-% to clean up this messy module (write it from scratch).
-
-\newif\ifnofirstmarker % an auxiliary switch
-
-\def\getmarks#1%
- {\bgroup
- \makemarknames{#1}%
- \edef\topmarker{0\normaltopmark}%
- \edef\botmarker{0\normalbotmark}%
- \!!toksa\emptytoks
- \!!toksb\emptytoks
- \nofirstmarkertrue
- % does more worse than good
- \let\fi\relax
- \let\or\relax
- \let\else\relax
- %
- \let\domark\doscanmarks
- \getvalue\marklist\lastmark
- %\message{markstatus : [\the\!!toksa\the\!!toksb\the\!!toksc]}%
- \long\setxvalue\marklist{\the\!!toksa\the\!!toksb\the\!!toksc}%
- \egroup}
-
-\def\getsplitmarks#1%
- {\bgroup
- \makemarknames{#1}%
- % \@EA\let\@EA\savedmarklist\@EA\csname\marklist\endcsname
- \edef\topmarker{0\normalsplitfirstmark}%
- \edef\botmarker{0\normalsplitbotmark}%
- \!!toksa\emptytoks
- \!!toksb\emptytoks
- \nofirstmarkertrue
- % does more worse than good
- \let\fi\relax
- \let\or\relax
- \let\else\relax
- %
- \let\domark\doscanmarks
- \getvalue\marklist\lastmark
- % \global\@EA\let\csname\marklist\endcsname\savedmarklist
- \egroup}
-
-\def\getallmarks {\processcommacommand[\allmarks]\getmarks}
-\def\getallsplitmarks{\processcommacommand[\allmarks]\getsplitmarks}
-
-\def\getallmarks {\@EA\processcommalist\@EA[\allmarks]\getmarks}
-\def\getallsplitmarks{\@EA\processcommalist\@EA[\allmarks]\getsplitmarks}
-
-\long\def\dodoscanmarks#1%
- {\ifnum\scratchcounter>\topmarker\relax
- \normalelse
- \long\setgvalue{\@@marktop@@\markname}{#1}%
- \normalfi
- \ifnum\scratchcounter>\botmarker\relax
- \let\domark\dorecovermarks
- \!!toksb\@EA{\@EA\domark\the\scratchcounter{#1}}%
- \normalelse
- \ifnofirstmarker
- \long\setgvalue{\@@markfirst@@\markname}{#1}%
- \ifnum\scratchcounter>\topmarker\relax
- \nofirstmarkerfalse
- \normalfi
- \normalfi
- \long\setgvalue{\@@markbot@@\markname}{#1}%
- \!!toksa\@EA{\@EA\domark\the\scratchcounter{#1}}%
- \normalfi}
-
-\def\doscanmarks
- {\afterassignment\dodoscanmarks\scratchcounter=}
-
-\long\def\dorecovermarks#1\lastmark% nice trick
- {\!!toksc{\domark#1}}
-
-\def\lastmark% rest of trick
- {\!!toksc\emptytoks}
-
-\endTEX
-
-%D The \ETEX\ way of doing things \unknown
-
-\beginETEX \marks cum suis
-
-\newtoks \listofmarks
-
-\def\@@prk{prk:}
-\def\@@mrk{mrk:}
-\def\@@trk{trk:}
-\def\@@frk{frk:}
-\def\@@brk{brk:}
-\def\@@crk{crk:}
-
-%D We will use two state variables per mark, one to signal
-%D that a new mark value is set, and one to trigger (on the
-%D next page) the setting of the top mark.
-
-\def\checkedtopmarks #1{\csname\@@trk\string#1\endcsname}
-\def\checkedfirstmarks#1{\csname\@@frk\string#1\endcsname}
-\def\checkedbotmarks #1{\csname\@@brk\string#1\endcsname}
-\def\thecurrentmarks #1{\csname\@@crk\string#1\endcsname}
-
-\long\def\setmark#1%
- {%\writestatus{marks}{setting \string#1}\wait
- \global\@EA\chardef\csname\@@mrk\string#1\endcsname\plusone
- %\@EA\normalmarks\csname\@@prk\string#1\endcsname{1}%
- \@EA\normalmarks\csname\@@prk\string#1\endcsname{\realfolio}%
- \ifexpandmarks\@EA\setexpandedmark\else\@EA\setnormalmark\fi#1}
-
-\def\setexpandedmark#1#2% % marks expand anyway
- {\@EA\xdef\csname\@@crk\string#1\endcsname{#2}%
- \normalmarks#1{#2}}
-
-\def\setnormalmark#1#2% using a tok prevents unwanted expansion in mark
- {\begingroup % don't ask why, but grouping is needed
- \scratchtoks{#2}% in order to to mess up scratchtoks
- \@EA\xdef\csname\@@crk\string#1\endcsname{\the\scratchtoks}%
- \normalmarks#1{\the\scratchtoks}% one level expansion
- \endgroup}
-
-\def\checktopmark#1%
- {%\writestatus{marks}{checking \string#1}\wait
- \ifcase\csname\@@mrk\string#1\endcsname\else\dochecktopmark#1\fi}
-
-%\def\dochecktopmark#1%
-% {\ifcase0\@EA\normalfirstmarks\csname\@@prk\string#1\endcsname\else
-% \@EA\ifx\csname\@@frk\string#1\endcsname\empty
-% \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}%
-% \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}%
-% \else
-% \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}%
-% \global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
-% \fi
-% \fi}
-
-\def\dochecktopmark#1%
- {\ifx*\@EA\normalfirstmarks\csname\@@prk\string#1\endcsname*\else
- \@EA\ifx\csname\@@frk\string#1\endcsname\empty
- \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}%
- \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}%
- \else
- \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}%
- \global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
- \fi
- \fi}
-
-%\def\resetmark#1% we cannot use \normalmarks#1{}
-% {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
-% \@EA\normalmarks\csname\@@prk\string#1\endcsname{0}%
-% \global\@EA\let\csname\@@trk\string#1\endcsname\empty
-% \global\@EA\let\csname\@@frk\string#1\endcsname\empty
-% \global\@EA\let\csname\@@brk\string#1\endcsname\empty
-% \global\@EA\let\csname\@@crk\string#1\endcsname\empty}
-
-\def\resetmark#1% we cannot use \normalmarks#1{}
- {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
- \@EA\normalmarks\csname\@@prk\string#1\endcsname{}% {0}%
- \global\@EA\let\csname\@@trk\string#1\endcsname\empty
- \global\@EA\let\csname\@@frk\string#1\endcsname\empty
- \global\@EA\let\csname\@@brk\string#1\endcsname\empty
- \global\@EA\let\csname\@@crk\string#1\endcsname\empty}
-
-\def\definenewmark#1%
- {\ifcsname\@@prk\string#1\endcsname\else % this is etex -)
- \newmarks#1\doglobal\appendtoks\checktopmark#1\to\listofmarks
- \@EA\newmarks\csname\@@prk\string#1\endcsname % status mark
- \fi
- \global\@EA\mathchardef\csname\@@mrk\string#1\endcsname\zerocount
- \global\@EA\let\csname\@@crk\string#1\endcsname\empty
- \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}%
- \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}%
- \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}}
-
-\let \newmark \definenewmark
-\let \newpersistentmark \newmarks % \definenewmark
-\let \normalsetmark \setmark
-
-\def\getallmarks{\the\listofmarks} % \def\setallmarks{\the\listofmarks}
-
-%D In \type {page-ini} or \type {core-mar} we should say:
-%D
-%D \starttyping
-%D \appendtoks \getallmarks \to \everybeforepagebody
-%D \appendtoks \setallmarks \to \everyafterpagebody
-%D \stoptyping
-
-\let\getcurrentmark \thecurrentmarks
-\let\gettopmark \checkedtopmarks
-\let\getbottommark \checkedbotmarks % \normalbotmarks
-\let\getfirstmark \checkedfirstmarks % \normalfirstmarks
-\let\getsplitbottommark \normalsplitbotmarks
-\let\getsplitfirstmark \normalsplitfirstmarks
-
-\let\getbotmark \getbottommark
-\let\getsplitbotmark \normalsplitbotmarks
-\let\getsplittopmark \normalsplitfirstmarks
-
-\endETEX
-
-%D A couple of goodies:
-
-\let\getbotmark \getbottommark
-\let\getsplitbotmark\getsplitbottommark
-\let\getsplittopmark\getsplitfirstmark
-
-%D \macros
-%D {noninterferingmarks}
-%D
-%D Marks can interfere badly with for instance postprocessing
-%D paragraphs, for instance when we want to grab the last box
-%D using \type {\lastbox}, when at the same time using colors.
-
-\let\normalsetmark\setmark
-
-\def\noninterferingsetmark#1#2%
- {\ifhmode\prewordbreak\hbox\fi{\normalsetmark{#1}{#2}}}
-
-\def\noninterferingmarks
- {\let\noninterferingmarks\relax
- \let\setmark\noninterferingsetmark}
-
-%D This macro is for instance used in the inline headings
-%D postprocessing, as needed when we want to make those
-%D clickable.
-
-%D Right from the beginning, \CONTEXT\ supported more than one
-%D mark, using an extended version of Jim Fox multiple mark
-%D mechanism. In \ETEX\ we can however directly access more
-%D marks than we will ever need.
-
-%D Resetting marks in not compatible with the old method.
-%D Here a node is inserted, which can interfere badly. In
-%D fact, a real \type {\clearmarks\name} is needed.
-%D
-%D \starttyping
-%D \def\resetmark#1{\marks#1{}}
-%D \stoptyping
-%D
-%D A possible macro solution is presented here. When discussing
-%D \type {\clearmarks} on the \ETEX\ discussion list, Chris
-%D Rowley suggested to use a reset flag. Unfortunately this
-%D is not enough since we need to keep track of both set and
-%D reset state then. This means that we must postpone resetting
-%D to the page following the set, and as a result we need
-%D another auxiliary macro. The current solution is the best
-%D I could come up with so far, especially given that we
-%D need a fast mechanism.
-
-%D For those who want to know the story behind resetting
-%D marks, here are some examples of interference
-%D
-%D \startbuffer
-%D \setbox0=\vbox{test}
-%D \unvbox0\setbox0=\lastbox
-%D \ruledhbox{\unhbox0}
-%D \stopbuffer
-%D
-%D \typebuffer\blank\getbuffer\blank
-%D
-%D \startbuffer
-%D \setbox0=\vbox{test\normalmark{}}
-%D \unvbox0\setbox0=\lastbox
-%D \ruledhbox{\unhbox0}
-%D \stopbuffer
-%D
-%D \typebuffer\blank\getbuffer\blank
-%D
-%D \startbuffer
-%D \setbox0=\vbox{test\hbox{\normalmark{}}}
-%D \unvbox0\setbox0=\lastbox
-%D \ruledhbox{\unhbox0}
-%D \stopbuffer
-%D
-%D \typebuffer\blank\getbuffer\blank
-%D
-%D \startbuffer
-%D \setbox0=\vbox{test\vbox{\normalmark{}}}
-%D \unvbox0\setbox0=\lastbox
-%D \ruledhbox{\unhbox0}
-%D \stopbuffer
-%D
-%D \typebuffer\blank\getbuffer\blank
-
-%D One final advice. Use marks with care. When used in globally
-%D assigned boxes, the list can grow quite big, and processing
-%D can slow down considerably. This drawback is removed in
-%D \ETEX\ mode.
-
-\beginTEX
-
-\let\rawnewmark \newmark
-\let\rawdefinemark \newmark
-\let\rawsetmark \setmark
-\let\rawgettopmark \gettopmark
-\let\rawgetfirstmark \getfirstmark
-\let\rawgetbotmark \getbotmark
-\let\rawgetsplitbotmark \normalsplitbotmark
-\let\rawgetsplitfirstmark\normalsplitfirstmark
-\let\rawgetsplittopmark \normalsplitfirstmark
-
-\endTEX
-
-\beginETEX
-
-\let\rawnewmark \newmarks
-\let\rawdefinemark \newmarks
-\let\rawsetmark \normalmarks
-\let\rawgettopmark \normaltopmarks
-\let\rawgetfirstmark \normalfirstmarks
-\let\rawgetbotmark \normalbotmarks
-\let\rawgetsplitbotmark \normalsplitbotmarks
-\let\rawgetsplitfirstmark\normalsplitfirstmarks
-\let\rawgetsplittopmark \normalsplitfirstmarks
-
-\endETEX
-
-\protect \endinput