summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-var.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-var.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/core-var.tex306
1 files changed, 306 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-var.tex b/Master/texmf-dist/tex/context/base/core-var.tex
new file mode 100644
index 00000000000..1fe89af0e39
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-var.tex
@@ -0,0 +1,306 @@
+%D \module
+%D [ file=core-var,
+%D version=1998.02.21,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Variables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%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 / Variables}
+
+\unprotect
+
+%D \macros
+%D {every...}
+%D
+%D A few every's.
+
+\newevery \everyshipout \relax
+\newevery \everybeforeshipout \relax
+\newevery \everyaftershipout \relax
+\newevery \everyfirstshipout \relax
+\newevery \everylastshipout \relax
+\newevery \everybye \relax
+\newevery \everygoodbye \relax
+\newevery \everystarttext \relax
+\newevery \everystoptext \relax
+\newevery \everyforgetall \relax
+\newevery \everybeforepagebody \relax
+\newevery \everyafterpagebody \relax \let \everypagebody \everybeforepagebody % backward compatible
+\newevery \everybeforeutilityread \relax
+\newevery \everyafterutilityread \relax
+
+%newevery \everybeforeutilitywrite \relax
+
+\newevery \everycleanupfeatures \relax \def\cleanupfeatures{\the\everycleanupfeatures}
+\newevery \everyinsidefloat \relax
+\newevery \everyheadstart \relax
+\newevery \everyendoftextbody \relax
+\newevery \everybeginofpar \relax
+\newevery \everyendofpar \relax
+\newevery \everylistentry \relax
+
+%D For shared \type {\everymath} and \type {\everydisplay}:
+
+\newevery \everymathematics \relax
+
+\prependtoks \the\everymathematics \to \everymath
+\prependtoks \the\everymathematics \to \everydisplay
+
+% \newevery \everyparflush \relax % collected nodes
+
+%D Experimental (used in xml <p> .. </p>
+
+\def\bpar{\the\everybeginofpar\ignorespaces} % may interfere with \everypar
+\def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi} % test prevents problems with \bpar\epar
+
+%D More generic (used to be pushcolor etc)
+
+\newtoks\everypushproperties
+\newtoks\everypopproperties
+\newtoks\everypopsplitproperties
+
+\newtoks\everystarttextproperties
+\newtoks\everystoptextproperties
+
+\def\pushproperties {\the\everypushproperties}
+\def\popproperties {\the\everypopproperties}
+\def\popsplitproperties {\the\everypopsplitproperties}
+
+\def\starttextproperties{\the\everystarttextproperties}
+\def\stoptextproperties {\the\everystoptextproperties}
+
+%D \macros
+%D {defineinputmode,setinputmode}
+%D
+%D New. Some work needs to be done.
+
+\def\defineinputmode[#1]{\@EA\newtoks\csname every#1inputmode\endcsname}
+%def\setinputmode [#1]{\the \csname every#1inputmode\endcsname}
+\def\setinputmode [#1]{\the\executeifdefined{every#1inputmode}\emptytoks}
+
+\defineinputmode [TEX]
+\defineinputmode [XML]
+
+\setinputmode [TEX]
+
+%D \macros
+%D {trialtypesetting}
+%D
+%D We disable trial typesetting in the output routine,
+%D just to be sure.
+
+\prependtoks \trialtypesettingfalse \to \everybeforepagebody
+
+%D \macros
+%D {starttextdata}
+%D
+%D This is a user macro (appending to every last shipout is not
+%D really user friendly.
+
+\newtoks \collectedtextdata
+
+\long\def\starttextdata#1\stoptextdata
+ {\doglobal\appendtoks#1\to\collectedtextdata}
+
+\def\flushtextdata
+ {\vsmashed{\the\collectedtextdata}% all dimensions zero
+ \global\collectedtextdata\emptytoks
+ \globallet\flushtextdata\donothing}
+
+\prependtoks \flushtextdata \to \everylastshipout
+
+%D \macros
+%D {ifprocessingXML}
+%D
+%D We need this one even if no \XML\ is supported.
+
+\newif\ifprocessingXML
+
+%D \macros
+%D {ifproductionrun}
+%D
+%D This boolean can be used to bypass certain
+%D initializations.
+
+\newif\ifproductionrun \appendtoks \productionruntrue \to \everydump
+
+\appendtoks \ifcase\protectionlevel\else\reportunprotection\fi \to \everydump
+
+%D \macros
+%D {everyboxedcontent, ifboxedcontent,
+%D startboxedcontent, stopboxedcontent}
+%D
+%D This one is relatively new and will be used as a more
+%D robust test for inner situations.
+
+\newif \ifboxedcontent
+\newevery \everyboxedcontent \relax
+
+\appendtoks \boxedcontenttrue \to \everyboxedcontent
+
+\def\startboxedcontent{\bgroup\the\everyboxedcontent}
+\let\stopboxedcontent \egroup
+
+%D \macros
+%D {fastmode}
+%D
+%D The command \type {\fastmode} disables some time consuming
+%D typesetting.
+
+\let\normalwritestatus\writestatus
+
+\newevery \everyfastmode \relax
+
+\newif\iffastmode
+
+\def\fastmode
+ {\fastmodetrue
+ \the\everyfastmode}
+
+\def\silentmode % ook hier \everysilentmode net als \fastmode
+ {\showmessagesfalse
+ \showwarningsfalse
+ \let\writestatus\gobbletwoarguments}
+
+%D \macros
+%D {pdfoutput}
+%D
+%D There are some fundamental differences between producing
+%D \DVI\ and \PDF\ output, especially when we use \PDFTEX, like
+%D object reuse, one pass graphic inclusion and the lack of a
+%D postprocessing stage. Because we must make sure that
+%D \CONTEXT\ knows what it's up to, we always default to \DVI\
+%D mode, even when users explicitly ask for \PDF\ output in the
+%D \PDFTEX\ configuration file.
+
+\ifx\pdfoutput\undefined \else
+
+ \prependtoks \pdfoutput=0 \to \everyjob
+
+\fi
+
+%D \macros
+%D {setvariables,getvariable,getvariabledefault}
+%D
+%D \starttyping
+%D \setvariables[xx][title=]
+%D \setvariables[xx][title=test test]
+%D \setvariables[xx][title=test $x=1$ test] % fatal error reported
+%D \setvariables[xx][title=test {$x=1$} test]
+%D \setvariables[xx][title] % fatal error reported
+%D \setvariables[xx][titletitel=e]
+%D \stoptyping
+
+\def\??vars{@@vars}
+
+\def\setvariables {\dotripleargument\dosetvariables[\getrawparameters ]}
+\def\setevariables{\dotripleargument\dosetvariables[\getraweparameters]}
+\def\setgvariables{\dotripleargument\dosetvariables[\getrawgparameters]}
+\def\setxvariables{\dotripleargument\dosetvariables[\getrawxparameters]}
+
+\def\globalsetvariables % obsolete
+ {\dotripleargument\dosetvariables[\globalgetrawparameters]}
+
+\long\def\dosetvariables[#1][#2][#3]%
+ {\errorisfataltrue
+ \def\currentvariableclass{#2}%
+ \getvariable{#2}\s!reset
+ #1[\??vars:#2:][#3]%
+ \getvariable{#2}\s!set
+ \errorisfatalfalse}
+
+\beginTEX
+
+\def\getvariable#1#2% to be sped up
+ {\csname
+ \ifundefined{\??vars:#1:#2}\s!empty\else\??vars:#1:#2\fi
+ \endcsname}
+
+\endTEX
+
+\beginETEX \ifcsname
+
+\def\getvariable#1#2% to be sped up
+ {\csname
+ \ifcsname\??vars:#1:#2\endcsname\??vars:#1:#2\else\s!empty\fi
+ \endcsname}
+
+\endETEX
+
+\def\showvariable#1#2%
+ {\showvalue{\ifundefined{\??vars:#1:#2}\s!empty\else\??vars:#1:#2\fi}}
+
+\let\currentvariableclass\empty
+
+%D \macros
+%D {doifelsevariable,doifvariable,doifnotvariable}
+%D
+%D A few trivial macros:
+
+\def\doifelsevariable#1#2%
+ {\ifundefined{\??vars:#1:#2}%
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+\def\doifvariable#1#2%
+ {\ifundefined{\??vars:#1:#2}%
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
+\def\doifnotvariable#1#2%
+ {\ifundefined{\??vars:#1:#2}%
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\def\getvariabledefault#1#2% #3%
+ {\executeifdefined{\??vars:#1:#2}}% {#3}
+
+%D \macros
+%D {checkvariables}
+%D
+%D I'll probably forget that this on exists.
+
+\def\checkvariables
+ {\dodoubleargument\docheckvariables}
+
+\def\docheckvariables
+ {\dogetparameters\docheckrawvalue}
+
+\def\docheckrawvalue#1#2#3%
+ {\doifundefined {\??vars:#1:#2}{\setvalue{\??vars:#1:#2}{#3}}
+ {\doifvaluenothing{\??vars:#1:#2}{\setvalue{\??vars:#1:#2}{#3}}}}
+
+%D We store some original meanings, maybe in \type
+%D {math-ini}.
+
+\let\normalat \at
+\let\normalin \in
+\let\normalfrom \from
+\let\normalover \over
+\let\normalabout \about
+
+\let\normalabove \above
+\let\normalatop \atop
+
+\let\normaloverwithdelims \overwithdelims
+\let\normalabovewithdelims\abovewithdelims
+\let\normalatopwithdelims \atopwithdelims
+
+%D Add-ons:
+
+\let\startlayoutcomponent\gobbletwoarguments
+\let\stoplayoutcomponent \relax
+
+\protect \endinput