diff options
author | Hans Hagen <pragma@wxs.nl> | 2020-11-23 19:48:34 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2020-11-23 19:48:34 +0100 |
commit | 18499e46a49b8ccf4346686d1cf626ada33935b8 (patch) | |
tree | bd0ae7b601b323e20954c10c07598637d9403e00 /tex/context/base/mkiv/syst-ini.mkxl | |
parent | 4b089e589d39346a66a27d04f9857fe16e4b7b41 (diff) | |
download | context-18499e46a49b8ccf4346686d1cf626ada33935b8.tar.gz |
2020-11-23 18:39:00
Diffstat (limited to 'tex/context/base/mkiv/syst-ini.mkxl')
-rw-r--r-- | tex/context/base/mkiv/syst-ini.mkxl | 1096 |
1 files changed, 0 insertions, 1096 deletions
diff --git a/tex/context/base/mkiv/syst-ini.mkxl b/tex/context/base/mkiv/syst-ini.mkxl deleted file mode 100644 index d495e12af..000000000 --- a/tex/context/base/mkiv/syst-ini.mkxl +++ /dev/null @@ -1,1096 +0,0 @@ -%D \module -%D [ file=syst-ini, -%D version=2008.11.04, % 2001.11.16, % 1999.03.17, % an oldie: 1995.10.10 -%D title=\CONTEXT\ System Macros, -%D subtitle=Bootstrapping \TEX, -%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. - -%D We used to load plain \TEX\ in a special way, but redefining a couple of -%D primitives so that for instance font loading was ignored. For those interested, -%D this loader is found in \type {syst-tex.tex}. Some of the comment's are Don -%D Knuths and more of it can be found in the plain \TEX\ format. -%D -%D Characters can have special states, that can be triggered by setting their -%D category coded. Some are preset, others are to be set as soon as possible, -%D otherwise we cannot define any useful macros. -%D -%D First we define a bunch of constants. Normally we would \type {\setconstant} -%D but we're prestine and have no macros defined yet. Abstraction also makes it -%D possible to avoid the \type {^^} in the input. - -\immutable\integerdef\escapecatcode 0 -\immutable\integerdef\begingroupcatcode 1 -\immutable\integerdef\endgroupcatcode 2 -\immutable\integerdef\mathshiftcatcode 3 -\immutable\integerdef\alignmentcatcode 4 -\immutable\integerdef\endoflinecatcode 5 -\immutable\integerdef\parametercatcode 6 -\immutable\integerdef\superscriptcatcode 7 -\immutable\integerdef\subscriptcatcode 8 -\immutable\integerdef\ignorecatcode 9 -\immutable\integerdef\spacecatcode 10 -\immutable\integerdef\lettercatcode 11 -\immutable\integerdef\othercatcode 12 % finally obsolete: \let\other \othercatcode -\immutable\integerdef\activecatcode 13 % finally obsolete: \let\active\activecatcode -\immutable\integerdef\commentcatcode 14 -\immutable\integerdef\invalidcatcode 15 - -%chardef\zeroasciicode 0 -\immutable\integerdef\tabasciicode 9 -\immutable\integerdef\newlineasciicode 10 % don't confuse this one with \endoflineasciicode -\immutable\integerdef\formfeedasciicode 12 -\immutable\integerdef\endoflineasciicode 13 % somewhat messy but this can be the active \par -\immutable\integerdef\endoffileasciicode 26 -\immutable\integerdef\spaceasciicode 32 -\immutable\integerdef\exclamationmarkasciicode 33 % ! used in namespace protection -\immutable\integerdef\doublequoteasciicode 34 % " -\immutable\integerdef\hashasciicode 35 -\immutable\integerdef\dollarasciicode 36 -\immutable\integerdef\commentasciicode 37 -\immutable\integerdef\ampersandasciicode 38 -\immutable\integerdef\singlequoteasciicode 39 % ' -\immutable\integerdef\primeasciicode 39 % ' -\immutable\integerdef\leftparentasciicode 40 -\immutable\integerdef\rightparentasciicode 41 -\immutable\integerdef\commaasciicode 44 -\immutable\integerdef\hyphenasciicode 45 -\immutable\integerdef\periodasciicode 46 -\immutable\integerdef\forwardslashasciicode 47 % / -\immutable\integerdef\colonasciicode 58 -\immutable\integerdef\lessthanasciicode 60 % < used as alternative verbatim { -\immutable\integerdef\morethanasciicode 62 % > used as alternative verbatim } -\immutable\integerdef\questionmarkasciicode 63 % ? used in namespace protection -\immutable\integerdef\atsignasciicode 64 % @ used in namespace protection -\immutable\integerdef\leftbracketasciicode 91 -\immutable\integerdef\backslashasciicode 92 % `\\ -\immutable\integerdef\rightbracketasciicode 93 -\immutable\integerdef\circumflexasciicode 94 -\immutable\integerdef\underscoreasciicode 95 -\immutable\integerdef\leftbraceasciicode 123 % `\{ -\immutable\integerdef\barasciicode 124 % `\| -\immutable\integerdef\rightbraceasciicode 125 % `\} -\immutable\integerdef\tildeasciicode 126 % `\~ -\immutable\integerdef\delasciicode 127 - -\aliased\let\percentasciicode\commentasciicode - -%catcode\zeroasciicode \ignorecatcode % `\^^@ ascii null is ignored -\catcode\tabasciicode \spacecatcode % `\^^I ascii tab is a blank space -\catcode\formfeedasciicode \activecatcode % `\^^L ascii form-feed (active, set later) -%catcode\endoflineasciicode \endoflinecatcode % `\^^M ascii return is end-line -\catcode\endoffileasciicode \ignorecatcode % `\^^Z endoffile (ignored in ConTeXt) -%catcode\spaceasciicode \spacecatcode % `\ ascii space is blank space -\catcode\hashasciicode \parametercatcode % `\# hash mark is macro parameter character -\catcode\dollarasciicode \mathshiftcatcode % `\$ dollar sign is math shift -%catcode\commentasciicode \commentcatcode % `\% percent sign is comment character -\catcode\ampersandasciicode \alignmentcatcode % `\& ampersand is alignment tab -%catcode\backslashasciicode \escapecatcode % `\\ backslash is TeX escape character -\catcode\circumflexasciicode \superscriptcatcode % `\^ circumflex and uparrow are for superscripts -\catcode\underscoreasciicode \subscriptcatcode % `\_ underline and downarrow are for subscripts -\catcode\leftbraceasciicode \begingroupcatcode % `\{ left brace is begin-group character -\catcode\rightbraceasciicode \endgroupcatcode % `\} right brace is end-group character -\catcode\tildeasciicode \activecatcode % `\~ tilde is active -%catcode\delasciicode \invalidcatcode % `\^^? ascii delete is invalid - -\chardef\statuswrite 128 % we need to get rid of this one - -%D First we need to initialization the primitives. Because \CONTEXT\ is already a -%D pretty old macro package, we have a couple of issues with respect to primitives. -%D The \ETEX\ engine added a few as did \PDFTEX. The \LUATEX\ engine added even -%D more. This means that there can be a potential clash between primitives and -%D existing macros. The most noticeable ones are: -%D -%D \starttyping -%D \protected -%D \expanded -%D \unexpanded -%D \stoptyping -%D -%D Because we had macros like that before the primitives showed up. The protection -%D related macros were there before we even knew about extensions to the engine. -%D When the expansion related ones were introduced, we originally came up with -%D different names but due to requests we used the current names, somethng that in -%D retrospect was a bad idea: they should have gotten different names in \LUATEX, if -%D only because at that time only \CONTEXT\ was using them in rolling releases. -%D Anyway, we're now stuck with this situation, and it means that one should use the -%D \type {\normal...} variants in low level code: -%D -%D \starttyping -%D \normalexpanded -%D \normalprotected -%D \normalunexpanded -%D \stoptyping -%D -%D In the end not using different names in \LUATEX\ for these kind of backfires. It -%D makes not much sense to fix this in \LUAMETATEX\ because we're now to long on the -%D road. It is actually the reason why we have the option in \LUATEX\ to alias all -%D primitives in one go using a prefix. Actually this trick could be used to recover -%D a primitive meaning: just enable it with some prefix and \type {\let} the -%D original to that. But \unknown\ we prevent that trick below. -%D -%D The code below differs from \LUATEX: in \LUAMETATEX\ all primitives are already -%D available; it cannot limit itself to being \TEX\ or \ETEX. It could not do that -%D anyway because there are differences (no backend, to mention one). - -\directlua { - local primitives = tex.extraprimitives() % "tex","etex","luatex" - tex.enableprimitives("normal",primitives) % could default to everything - function tex.enableprimitives() end % so we kind of protect what's there -} - -\permanent\def\space{ } -\permanent\def\empty{} - -\permanent\letcharcode \formfeedasciicode \par % \def ^^L{\par} formfeed -\permanent\letcharcode \tildeasciicode \ % tilde -\permanent\letcharcode \spaceasciicode \space % space - -\permanent\defcsname\Uchar\tabasciicode \endcsname {\ } % \def\^^I{\ } tab -\permanent\defcsname\Uchar\formfeedasciicode \endcsname {\par} % \def\^^L{\par} formfeed -\permanent\defcsname\Uchar\endoflineasciicode\endcsname {\ } % \def\^^M{\ } return - -%D For now: - -\permanent\def\gobbleoneargument#-{} % will be defined later on anyway - -%D First we define a simplified version of the \CONTEXT\ protection mechanism. Later -%D we will implement a better variant. - -\def\unprotect - {\edef\protect - {\catcode\atsignasciicode \the\catcode\atsignasciicode \relax - \catcode\exclamationmarkasciicode\the\catcode\exclamationmarkasciicode\relax - \catcode\questionmarkasciicode \the\catcode\questionmarkasciicode \relax - \catcode\underscoreasciicode \the\catcode\underscoreasciicode \relax - \let\protect\relax}% - \catcode\atsignasciicode \lettercatcode - \catcode\exclamationmarkasciicode\lettercatcode - \catcode\questionmarkasciicode \lettercatcode - \catcode\underscoreasciicode \lettercatcode} - -\let\protect\relax - -\unprotect - -%D Some pretty important definitions: - -\immutable\let\bgroup={ -\immutable\let\egroup=} - -%D \macros -%D {normalbgroup,normalgroup} -%D -%D No comment. - -%D Allocation of registers is done slightly different than in plain \TEX. First of -%D all we use different reserved counters. We also don't implement a family handler -%D because users are not supposed to implement their own math. We reserve the lowest -%D 31 registers for scratch purposes. Keep in mind that in the core engine some -%D registers are reserved: counters 0 upto 9, and counter 255. -%D -%D As with plain \TEX\ we recommend that macro designers always use \type {\global} -%D assignments with respect to registers numbered 1, 3, 5 \unknown\ 31, and always -%D non||\type {\global} assignments with respect to registers 0, 2, 4, \unknown\ 30. -%D This will prevent \quote {save stack buildup} that might otherwise occur. -%D -%D We reserve some registers for special (management) purposes: - -% 0 - 20 : scratch -% 21 - 127 : internal -% 128 - 254 : inserts -% 255 : page -% 256 - : user - -% use \chardef instead for min and max -% -% will be blocked: \newfamily \newlanguage - -\permanent\countdef \c_syst_min_allocated_register = 52 \c_syst_min_allocated_register = 256 % can change -\permanent\countdef \c_syst_max_allocated_register = 53 \c_syst_max_allocated_register = 65535 -\permanent\countdef \c_syst_min_allocated_read = 54 \c_syst_min_allocated_read = 0 -\permanent\countdef \c_syst_max_allocated_read = 55 \c_syst_max_allocated_read = 1023 -\permanent\countdef \c_syst_min_allocated_language = 56 \c_syst_min_allocated_language = 0 -\permanent\countdef \c_syst_max_allocated_language = 57 \c_syst_max_allocated_language = 8191 -\permanent\countdef \c_syst_min_allocated_insert = 58 \c_syst_min_allocated_insert = 128 -\permanent\countdef \c_syst_max_allocated_insert = 59 \c_syst_max_allocated_insert = 254 -\permanent\countdef \c_syst_min_allocated_family = 60 \c_syst_min_allocated_family = 128 -\permanent\countdef \c_syst_max_allocated_family = 61 \c_syst_max_allocated_family = 255 -\permanent\countdef \c_syst_min_allocated_attribute = 62 \c_syst_min_allocated_attribute = 1024 % 0-1023 : private -\permanent\countdef \c_syst_min_allocated_write = 63 \c_syst_min_allocated_write = 0 -\permanent\countdef \c_syst_max_allocated_write = 64 \c_syst_max_allocated_write = 1023 - -\permanent\countdef \c_syst_last_allocated_count = 32 \c_syst_last_allocated_count = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_dimen = 33 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_skip = 34 \c_syst_last_allocated_skip = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_muskip = 35 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_box = 36 \c_syst_last_allocated_box = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_toks = 37 \c_syst_last_allocated_toks = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_read = 38 \c_syst_last_allocated_read = \c_syst_min_allocated_read -\permanent\countdef \c_syst_last_allocated_write = 39 \c_syst_last_allocated_write = \c_syst_min_allocated_write -\permanent\countdef \c_syst_last_allocated_marks = 40 \c_syst_last_allocated_marks = \c_syst_min_allocated_register -\permanent\countdef \c_syst_last_allocated_language = 41 \c_syst_last_allocated_language = \c_syst_min_allocated_language % not used in context -\permanent\countdef \c_syst_last_allocated_insertion = 42 \c_syst_last_allocated_insertion = \c_syst_min_allocated_insert -\permanent\countdef \c_syst_last_allocated_family = 43 \c_syst_last_allocated_family = \c_syst_min_allocated_family % not used in context -\permanent\countdef \c_syst_last_allocated_attribute = 44 \c_syst_last_allocated_attribute = \c_syst_min_allocated_attribute % not used in context - -\permanent\countdef \c_syst_min_counter_value = 125 \c_syst_min_counter_value = -"7FFFFFFF % beware, we use index 125 at the lua end -\permanent\countdef \c_syst_max_counter_value = 126 \c_syst_max_counter_value = "7FFFFFFF % beware, we use index 126 at the lua end - -\immutable\integerdef\zerocount = 0 -\immutable\integerdef\plusone = 1 -\immutable\integerdef\minusone = -1 - -\immutable\integerdef\normalpagebox = 255 % hardcoded in pdftex/xetex - -% A few traditional allocations (these might go): - -\countdef \count@ 255 % hm, used in \newif .. todo: replace it there -\dimendef \dimen@ 0 -\dimendef \dimen@i 1 % global only -\dimendef \dimen@ii 2 - -%D So, effectively we start allocating from 256 and upwards. The inserts sit in the -%D range 128 upto 254. Page numbers use the counters 0 upto 9 and the pagebox is -%D 255. Users can use the scratch registers upto 31 without problem but all others -%D are reserved. - -\let\wlog\gobbleoneargument % Let's get rid of this one. - -%D The allocators share a common helper macro. - -\protected\permanent\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_register} -\protected\permanent\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_register} -\protected\permanent\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_register} -\protected\permanent\def\newmuskip {\syst_basics_allocate\c_syst_last_allocated_muskip \muskip \muskipdef \c_syst_max_allocated_register} -\protected\permanent\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \integerdef\c_syst_max_allocated_register} -\protected\permanent\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register} -\protected\permanent\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \integerdef\c_syst_max_allocated_read} -\protected\permanent\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \integerdef\c_syst_max_allocated_write} -\protected\permanent\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \integerdef\c_syst_max_allocated_register} -\protected\permanent\def\newinsert {\syst_basics_allocate\c_syst_last_allocated_insertion\insert \chardef \c_syst_max_allocated_insert} -\protected\permanent\def\newlanguage{\syst_basics_allocate\c_syst_last_allocated_language \language\integerdef\c_syst_max_allocated_language} % not needed in context -\protected\permanent\def\newfamily {\syst_basics_allocate\c_syst_last_allocated_family \fam \integerdef\c_syst_max_allocated_family} % not needed in context - -\aliased\let\newfam\newfamily - -\firstvalidlanguage \plusone % so zero is ignored in hyphenation, this might become the default - -% Watch out, for the moment we disable the check for already being defined -% later we will revert this but first all chardefs must be replaced. - -\protected\def\setconstant {} -\protected\def\setconstantvalue#1#2{\csname#1\endcsname\numexpr#2\relax} - -\protected\def\newconstant#1% - {\ifx#1\relax - %\writestatus{!!!!!!!!!!}{\string #1 => RELAX}% - \unletfrozen#1% - \newcount#1% - \orelse\ifdefined#1% - %\writestatus{!!!!!!!!!!}{\string #1 => DEFINED}% - \else - \newcount#1% - \fi} - -\protected\def\setnewconstant#1{\newconstant#1#1} - -% %D The next definitions are really needed (in \CONTEXT): - -\newlinechar\newlineasciicode \edef\outputnewlinechar{\Uchar\newlineasciicode} % {^^J} - -%D One reason to start high with allocation is that it permits us to allocate -%D consecutive ranges more easily, for instance if for \MPLIB\ we want to allocate a -%D continuous range of boxes. It also permits us to do a proper upward allocation -%D for inserts. The current code evolved from code that dealt with older engines but -%D as all engines now provide many registers we removed all traces. - -\ifdefined\writestatus \else - %\protected\def\writestatus#1#2{\immediate\write\statuswrite{#1: #2}} - \frozen\protected\def\writestatus#1#2{\message{#1: #2}} -\fi - -\def\syst_basics_allocate_yes#1#2#3#4#5% last class method max name - {\ifnum#1<#4\relax - \global\advance#1\plusone - \permanent\global#3#5=#1\relax - \else - \writestatus{warning}{no room for \string#2\space \string#5\space (max: \number#4)}% - \fi} - -\def\syst_basics_allocate_nop#1#2#3#4#5% last class method max name - {\writestatus{warning}{\string#2 \string#5 is already defined (\string\relax\space it first)}} - -\def\syst_basics_allocate#1#2#3#4#5% last class method max name - {\ifx#5\undefined - \expandafter\syst_basics_allocate_yes - \orelse\ifx#5\relax - \expandafter\syst_basics_allocate_yes - \else - \expandafter\syst_basics_allocate_nop - \fi - #1#2#3#4#5} - -%D Since the number of chars exceed 256 now, we can use \type {\chardef} instead of -%D the more limited \type {\mathchardef}. - -% \protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register} -% \protected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register} - -%D Attributes are something very \LUATEX. In \CONTEXT\ you are not supposed to use -%D the attributes directly but always allocate then first. For instance attribute~0 -%D is reserved for special purposes (this might change). Attributes in the range -%D 128-1023 are private and should not be touched. - -\permanent\integerdef\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone - -% \permanent\protected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register} - -% %D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a trick to force -% %D strings instead of tokens that take more memory. -% -% \permanent\protected\def\newhelp#1#2{\newtoks#1#1\expandafter{\detokenize{#2}}} - -%D \macros -%D {scratchcounter, -%D scratchdimen,scratchskip,scratchmuskip, -%D scratchbox, -%D scratchtoks} -%D -%D We now define a few scratch registers, so that successive loads at least have -%D some available. The private ones are used in cases where we don't want to -%D intrude on normal scratch ones. - -\newcount \scratchcounter \newcount \globalscratchcounter \newcount \privatescratchcounter -\newdimen \scratchdimen \newdimen \globalscratchdimen \newdimen \privatescratchdimen -\newskip \scratchskip \newskip \globalscratchskip \newskip \privatescratchskip -\newmuskip\scratchmuskip \newmuskip\globalscratchmuskip \newmuskip\privatescratchmuskip -\newtoks \scratchtoks \newtoks \globalscratchtoks \newtoks \privatescratchtoks -\newbox \scratchbox \newbox \globalscratchbox \newbox \privatescratchbox - -\newcount\scratchcounterone \newcount\scratchcountertwo \newcount\scratchcounterthree -\newdimen \scratchdimenone \newdimen \scratchdimentwo \newdimen \scratchdimenthree -\newskip \scratchskipone \newskip \scratchskiptwo \newskip \scratchskipthree -\newmuskip\scratchmuskipone \newmuskip\scratchmuskiptwo \newmuskip\scratchmuskipthree -\newtoks \scratchtoksone \newtoks \scratchtokstwo \newtoks \scratchtoksthree -\newbox \scratchboxone \newbox \scratchboxtwo \newbox \scratchboxthree - -\newcount\scratchcounterfour \newcount\scratchcounterfive \newcount\scratchcountersix -\newdimen \scratchdimenfour \newdimen \scratchdimenfive \newdimen \scratchdimensix -\newskip \scratchskipfour \newskip \scratchskipfive \newskip \scratchskipsix -\newmuskip\scratchmuskipfour \newmuskip\scratchmuskipfive \newmuskip\scratchmuskipsix -\newtoks \scratchtoksfour \newtoks \scratchtoksfive \newtoks \scratchtokssix -\newbox \scratchboxfour \newbox \scratchboxfive \newbox \scratchboxsix - -\newcount\globalscratchcounterone -\newcount\globalscratchcountertwo -\newcount\globalscratchcounterthree - -\mutable\let\scratchmacro \relax -\mutable\let\scratchmacroone\relax -\mutable\let\scratchmacrotwo\relax - -%D \macros -%D {tempstring} - -\mutable\let\tempstring\empty - -%D \macros -%D {scratchwidth, scratchheight, scratchdepth, scratchoffset, scratchdistance} -%D -%D A few more scratch dimensions: - -\newdimen\scratchwidth -\newdimen\scratchheight -\newdimen\scratchdepth -\newdimen\scratchtotal - -\newdimen\scratchoffset -\newdimen\scratchleftoffset -\newdimen\scratchrightoffset -\newdimen\scratchtopoffset -\newdimen\scratchbottomoffset - -\newdimen\scratchdistance - -\newdimen\scratchhsize -\newdimen\scratchvsize - -\newdimen\scratchxoffset -\newdimen\scratchyoffset -\newdimen\scratchhoffset -\newdimen\scratchvoffset - -\newdimen\scratchxposition -\newdimen\scratchyposition - -\newcount\scratchnx -\newcount\scratchny - -\newcount\scratchmx -\newcount\scratchmy - -\newcount\scratchmin -\newcount\scratchmax - -\newcount\scratchunicode - -\newdimen\scratchleftskip -\newdimen\scratchrightskip -\newdimen\scratchtopskip -\newdimen\scratchbottomskip - -%D More allocations: - -\newskip \zeroskip \immutable\zeroskip 0pt plus 0pt minus 0pt -\newdimen \zeropoint \immutable\zeropoint 0pt -\newdimen \onepoint \immutable\onepoint 1pt -\newdimen \halfapoint \immutable\halfapoint 0.5pt -\newdimen \maxdimen \immutable\maxdimen 16383.99999pt % 1073741823sp -\newcount \maxcount \immutable\maxcount 2147483647 -\newdimen \onebasepoint \immutable\onebasepoint 1bp -\newdimen \scaledpoint \immutable\scaledpoint 1sp -\newdimen \thousandpoint \immutable\thousandpoint 1000pt -\newmuskip\zeromuskip \immutable\zeromuskip 0mu -\newmuskip\onemuskip \immutable\onemuskip 1mu - -\newmuskip\muquad \immutable\muquad 18mu - -\aliased\let\points \onepoint -\aliased\let\halfpoint\halfapoint - -\newtoks \emptytoks - -%D And even more: (todo: countdefs 60+). Watch out, we need a count for a negative constant -%D but can use chardefs for positive ones. Actually, because we have plenty of counters we -%D can also use counts for those. - -%permanent\integerdef\minusone -1 -\permanent\integerdef\minustwo -2 -%permanent\integerdef\zerocount 0 -%permanent\integerdef\plusone 1 -\permanent\integerdef\plustwo 2 -\permanent\integerdef\plusthree 3 -\permanent\integerdef\plusfour 4 -\permanent\integerdef\plusfive 5 -\permanent\integerdef\plussix 6 -\permanent\integerdef\plusseven 7 -\permanent\integerdef\pluseight 8 -\permanent\integerdef\plusnine 9 -\permanent\integerdef\plusten 10 -\permanent\integerdef\pluseleven 11 -\permanent\integerdef\plustwelve 12 -\permanent\integerdef\plussixteen 16 -\permanent\integerdef\plusfifty 50 -\permanent\integerdef\plushundred 100 -\permanent\integerdef\plusonehundred 100 -\permanent\integerdef\plustwohundred 200 -\permanent\integerdef\plusfivehundred 500 -\permanent\integerdef\pluscxxvii 127 -\permanent\integerdef\pluscxxviii 128 -\permanent\integerdef\pluscclv 255 -\permanent\integerdef\pluscclvi 256 -\permanent\integerdef\plusthousand 1000 -\permanent\integerdef\plustenthousand 10000 -\permanent\integerdef\plustwentythousand 20000 -\permanent\integerdef\medcard 32768 -\permanent\integerdef\maxcard 65536 % pdftex has less mathchars -\permanent\integerdef\maxcardminusone 65535 - -%D \macros -%D {doubleexpandafter,tripleexpandafter,expanded,startexpanded} -%D -%D A few handy shortcuts - -\permanent\let\singleexpandafter \expandafter -\permanent\def\doubleexpandafter{\expandafter\expandafter\expandafter} -\permanent\def\tripleexpandafter{\expandafter\doubleexpandafter\expandafter} - -%D We prefer the more readable variant than in plain \TEX. User should only -%D use \type {\emptybox}: - -\newbox\voidbox % public - -\permanent\def\unvoidbox{\unhbox\voidbox} -\permanent\def\emptybox {\box \voidbox} % used in initializations so no attributes -\permanent\def\emptyvbox{\normalvpack{}} % no copy as we need to set attributes -\permanent\def\emptyhbox{\normalhpack{}} % no copy as we need to set attributes - -\aliased\let\leavevmode\unvoidbox % we prefer to use \dontleavehmode - -%D \macros -%D {dontcomplain} -%D -%D We need this one soon: - -\permanent\protected\def\dontcomplain - {\hbadness\plustenthousand - \vbadness\plustenthousand - \hfuzz \maxdimen - \vfuzz \maxdimen} - -%D Some expected plain variants follow. We don't reuse registers because we -%D don't want clashes. - -\aliased\let\p@ \onepoint -\aliased\let\m@ne \minusone -\aliased\let\z@ \zeropoint -\aliased\let\@ne \plusone -\aliased\let\tw@ \plustwo -\aliased\let\thr@@ \plusthree -\aliased\let\sixt@@n\plussixteen -\aliased\let\@cclv \pluscclv -\aliased\let\@cclvi \pluscclvi -\aliased\let\voidb@x\voidbox - -\newtoks \toks@ %scratchtoks - -%D We define \type {\newif} a la plain \TEX, but will redefine it later. As Knuth -%D says: -%D -%D \startnarrower -%D And here's a different sort of allocation: for example, -%D -%D \starttyping -%D \newif\iffoo -%D \stoptyping -%D -%D creates \type {\footrue}, \type {\foofalse} to go with \type {\iffoo}. -%D \stopnarrower - -% \protected\def\newif#1% -% {\count@\escapechar -% \escapechar\minusone -% \expandafter\expandafter\expandafter\def\new_if #1{true}{\let#1\iftrue }% -% \expandafter\expandafter\expandafter\def\new_if#1{false}{\let#1\iffalse}% -% \new_if#1{false}% the condition starts out false -% \escapechar\count@} -% -% \def\new_if#1#2% -% {\csname\expandafter\if@\string#1#2\endcsname} -% -% \bgroup % `if' is required -% \uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}} -% \egroup - -% We use \csstring so there is no need to push/pop escapechar. -% We use different names so that we get a better error message. -% -% \protected\def\newif#1% -% {\let\new_if_saved\newif -% \let\newif\new_if_check -% \expandafter\expandafter\expandafter\def\new_if_cs #1{true}{\let#1\iftrue }% -% \expandafter\expandafter\expandafter\def\new_if_cs#1{false}{\let#1\iffalse}% -% \new_if_cs#1{false}% -% \let\newif\new_if_saved} -% -% \protected\def\new_if_cs#1#2% -% {\csname\expandafter\newif\csstring#1#2\endcsname} -% -% We wrap all into one macro (the frozen stuff adds 10% runtime): - -\permanent\protected\def\newif#1% - {\permanent\protected\global\defcsname\expandafter\new_if_check\csstring#1true\endcsname {\overloaded\frozen\let#1\iftrue }% - \permanent\protected\global\defcsname\expandafter\new_if_check\csstring#1false\endcsname{\overloaded\frozen\let#1\iffalse}% - \csname\expandafter\new_if_check\csstring#1false\endcsname} - -\normalexpanded{\gdef\noexpand\new_if_check\string i\string f{}} - -%D Let's test this one: - -\newif\ifdone -\newif\iffound - -\newif\ifscratchcondition -\newif\ifscratchconditionone -\newif\ifscratchconditiontwo - -\let\htdp\boxtotal - -%D A few shortcuts: - -\permanent\protected\def\udef {\protected\def } -\permanent\protected\def\ugdef{\protected\gdef} -\permanent\protected\def\uedef{\protected\edef} -\permanent\protected\def\uxdef{\protected\xdef} - -%D For a while we keep the following, as systems like tikz need it. Best -%D not use that one \CONTEXT. - -\aliased\let\active\activecatcode - -%D Constants to be used with \type {\interactionmode}. - -\permanent\integerdef\batchmodecode \zerocount -\permanent\integerdef\nonstopmodecode \plusone -\permanent\integerdef\scrollmodecode \plustwo -\permanent\integerdef\errorstopmodecode \plusthree - -%D Of course we want even bigger log files, so we copied this from the \ETEX\ -%D source files. -%D -%D When watching such logs, beware of nasty side effects of \type {\scantokens}, -%D as in: -%D -%D \starttyping -%D \bgroup -%D \lccode`a=12\lowercase{\xdef\whatever{a}}\egroup -%D \def\whatever{test \whatever test} -%D \scantokens\expandafter{\whatever} -%D \egroup -%D \stoptyping -%D -%D In \LUATEX\ we have ways around this. - -% no longer \errorstopmode cf. plain tex 3.141592653 - -\permanent\protected\def\tracingall - {\tracingonline \plusone - \tracingcommands \plusthree - \tracingmacros \plustwo - \tracingoutput \plusone - \tracingpages \plusone - \tracingparagraphs\plusone - \tracingrestores \plusone - \tracinggroups \plusone - \tracingifs \plusone - \tracingnesting \plustwo - \tracingassigns \plustwo - \tracingmath \plusone - \tracingalignments\plusone - \showboxbreadth \maxcount - \showboxdepth \maxcount} - -\permanent\protected\def\loggingall - {\tracingall - \tracingonline \zerocount} - -\permanent\protected\def\tracingnone - {\showboxdepth \plusthree - \showboxbreadth \plusfive - \tracingalignments\zerocount - \tracingmath \zerocount - \tracingassigns \zerocount - \tracingnesting \zerocount - \tracingifs \zerocount - \tracinggroups \zerocount - \tracingrestores \zerocount - \tracingparagraphs\zerocount - \tracingpages \zerocount - \tracingoutput \zerocount - \tracingmacros \zerocount - \tracingcommands \zerocount - \tracingonline \zerocount} - -%D When we want to see a box we can as well show all of it. - -\showboxdepth \maxdimen -\showboxbreadth\maxdimen - -%D Just for tracing purposes we set: - -\tracingstats\plusone - -%D This is only used when we load \CONTEXT: - -\permanent\def\pushoverloadmode - {\edef\popoverloadmode{\overloadmode\the\overloadmode}% - \overloadmode\zerocount} - -\newtoks\everydump - -\pushoverloadmode - -\protected\def\dump - {\the\everydump - \global\everydump\emptytoks - \pushoverloadmode - \glet\dump\relax - \popoverloadmode - %let\pushoverloadmode\relax - %let\popoverloadmode\relax -% \tracingall - \normaldump} - -\permanent\protected\def\input - {\normalinput} - -\popoverloadmode - -%D \macros -%D {newconditional, -%D settrue, setfalse, -%D ifconditional,then} -%D -%D \TEX's lacks boolean variables, although the \PLAIN\ format implements \type -%D {\newif}. The main disadvantage of this scheme is that it takes three hash table -%D entries. A more memory saving alternative is presented here. A conditional is -%D defined by: -%D -%D \starttyping -%D \newconditional\doublesided -%D \setfalse -%D \stoptyping -%D Setting a conditional is done by \type{\settrue} and -%D \type{\setfalse}: -%D -%D \starttyping -%D \settrue\doublesided -%D \setfalse -%D \stoptyping -%D while testing is accomplished by: -%D -%D \starttyping -%D \ifconditional\doublesided ... \else ... \fi -%D \setfalse -%D \stoptyping -%D We cannot use the simple scheme: -%D -%D \starttyping -%D \def\settrue #1{\let#1=\iftrue} -%D \def\setfalse#1{\let#1=\iffalse} -%D \stoptyping -%D -%D Such an implementation gives problems with nested conditionals. The next -%D implementation is about as fast and just as straightforward: - -\aliased\let\conditionalfalse\plusone % maybe we will have a dedicated count/chardef -\aliased\let\conditionaltrue \zerocount % maybe we will have a dedicated count/chardef - -% \permanent\protected\def\settrue #1{\integerdef#1\conditionaltrue } -% \permanent\protected\def\setfalse#1{\integerdef#1\conditionalfalse} -% -% \permanent\protected\def\settruevalue #1{\expandafter\integerdef\csname#1\endcsname\conditionaltrue } -% \permanent\protected\def\setfalsevalue#1{\expandafter\integerdef\csname#1\endcsname\conditionalfalse} - -\permanent\protected\def\settrue #1{\enforced\let#1\conditionaltrue } -\permanent\protected\def\setfalse #1{\enforced\let#1\conditionalfalse} -\permanent\protected\def\setconditional#1{\enforced\let#1} - -\permanent\protected\def\settruevalue #1{\enforced\letcsname#1\endcsname\conditionaltrue } -\permanent\protected\def\setfalsevalue#1{\enforced\letcsname#1\endcsname\conditionalfalse} - - -\aliased\let\newconditional\setfalse -\aliased\let\ifconditional \ifcase - -\aliased\let\then\relax % so that we can say: \ifnum1>2\then -) - -\permanent\def\truecondition {\iftrue} -\permanent\def\falsecondition{\iffalse} - -% This one has to be unprotected otherwise we get a files-ends-to-soon but it's ok -% as conditions expand anyway. - -\permanent\def\quitcondition{\orelse\iffalse} - -%D \macros -%D {newmacro,setnewmacro,newfraction} -%D -%D Let's be complete and also introduce some definers. These are not mandate -%D but handy for grepping. - -\permanent\protected\def\newmacro #1{\let#1\empty} -\permanent\protected\def\setnewmacro#1{\let#1} - -\permanent\protected\def\newfraction#1{\let#1\!!plusone} - -\def\!!zerocount{0} % later redefined -\def\!!plusone {1} % later redefined - -%D It would be handy to have a primitive \type {\unless\ifcase} because then we -%D could use nicer values. Anyhow, this conditional code used to be in the \type -%D {syst-aux} module but is now promoted to here. - -%D \macros -%D {ifzeropt} -%D -%D The next macro is both cosmetic and byte saving. It is pretty \type -%D {\if}||safe too. It can be used in cases like: -%D -%D \starttyping -%D \ifzeropt \somedimen ... \else ... \fi -%D \stoptyping - -\aliased\let\ifzeropt\ifcase - -% these token list helpers might move to syst-aux.mkiv -% -% we assume a \cs. not toks0 or so -% -% \protected\def\appendtotoks #1#{\def\temp{#1}\afterassignment\doappendtotoks \scratchtoks=} -% \protected\def\prependtotoks#1#{\def\temp{#1}\afterassignment\doprependtotoks\scratchtoks=} - -\newtoks\t_syst_toks_temp \let\m_syst_toks_temp\t_syst_toks_temp - -\permanent\protected\def\appendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_l \t_syst_toks_temp=} -\permanent\protected\def\prependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_l\t_syst_toks_temp=} - -% \def\syst_toks_append {\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\m_syst_toks_temp\the\t_syst_toks_temp}}} -% \def\syst_toks_prepend{\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\t_syst_toks_temp\the\m_syst_toks_temp}}} - -\permanent\protected\def\globalappendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_g \t_syst_toks_temp=} -\permanent\protected\def\globalprependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_g\t_syst_toks_temp=} - -\def\syst_toks_append_l {\normalexpanded{\m_syst_toks_temp{\the\m_syst_toks_temp\the\t_syst_toks_temp}}} -\def\syst_toks_prepend_l{\normalexpanded{\m_syst_toks_temp{\the\t_syst_toks_temp\the\m_syst_toks_temp}}} - -\def\syst_toks_append_g {\global\syst_toks_append_l } -\def\syst_toks_prepend_g{\global\syst_toks_prepend_l} - -\permanent\protected\def\addtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_l\let\next} -\permanent\protected\def\globaladdtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_g\let\next} - -\def\syst_toks_add_l{\m_syst_toks_temp\expandafter\bgroup\the\m_syst_toks_temp} -\def\syst_toks_add_g{\global\syst_toks_add_l} - -\permanent\protected\def\addtotokscs #1#2{#1{\the#1#2}} % saves a few bytes -\permanent\protected\def\globaladdtotokscs#1#2{\global#1{\the#1#2}} % saves a few bytes - -%D \macros -%D {begcsname} -%D -%D Handy for \ETEX-only usage (avoids making \type {\relax}'s: - -% \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi} - -\aliased\let\begcsname\begincsname - -%D Now come a few macros that might be needed in successive loading. We redefine the -%D \type {\par} primitive pretty soon so that we get the equivalents right. - -% too tricky: \par is use more often than a par starts so we have too much change -% that we get assymetrical behaviour -% -% \newtoks\everyendpar -% -% \protected\def\endpar{\the\everyendpar\normalpar} -% \protected\def\par {\endpar} -% -% \protected\def\reseteverypar -% {\everypar \emptytoks -% \everyendpar\emptytoks} - -\permanent\protected\def\reseteverypar - {\everypar\emptytoks} - -\aliased\let\endgraf\par % plain, a kind of funny name -%aliased\let\endline\cr % plain, not needed and probably also confusing - -\permanent\protected\def\null{\hpack{}} - -%D The following two might be overloaded later on but some modules need then -%D earlier. These functionality is reflected in the name and will not change. - -% \bgroup -% \catcode`\^^M=\activecatcode% -% \gdef\obeylines{\catcode`\^^M\activecatcode \let^^M\par}% -% \glet^^M\par% -% \egroup -% -% \bgroup -% \gdef\obeyspaces{\catcode`\ \activecatcode}% -% \obeyspaces\glet =\space% -% \egroup - -\def\obeylines {\catcode\endoflineasciicode\activecatcode\letcharcode\endoflineasciicode\par } % check if these can be \permanent -\def\obeyspaces{\catcode\spaceasciicode \activecatcode\letcharcode\spaceasciicode \space} % check if these can be \permanent - -% %D A constant: -% -% \let\endoflinetoken=^^M - -%D Also needed might be a simple loop structure and we borrow plain \TEX's one -%D as it is often expected to be present and it is about the fastest you can -%D get. Beware: this macro does not support nested loops. We use a namespace -%D prefix \type {@@pln}. - -\permanent\def\loop#1\repeat{\def\@@plnbody{#1}\@@plniterate} % might go - -%D The following makes \type {\loop} \unknown\ \type {\if} \unknown\ \type -%D {\repeat} skippable (clever trick): - -\permanent\let\repeat\fi % so both \loop and \repeat are reserved words! - -%D The original (no \type {@@pln} there): -%D -%D \starttyping -%D \def\@@plniterate{\@@plnbody\let\next\@@plniterate\else\let\next\relax\fi\next} -%D \stoptyping -%D -%D A more efficient alternative: -%D -%D \starttyping -%D \def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\expandafter\relax\fi} -%D \stoptyping -%D -%D An even more efficient one: - -\def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\fi} - -%D We don't define a real output routine yet but at least get rid of pages: - -\output{\shipout\box\normalpagebox} - -%D Although we don't add pagenumbers yet we alias the default register used -%D for counting pages: - -\permanent\countdef\pageno\zerocount \pageno\plusone % first page is number 1 - -%D Beside the raw counter \type {\pageno} the \type {\folio} macro provides -%D the value. - -\permanent\def\folio{\the\pageno} % kind of expected and therefore reserved - -%D The following registers are kind of standard and (for the moment) we define -%D them here. This might change. - -\newskip \bigskipamount \bigskipamount = 12pt plus 4pt minus 4pt -\newskip \medskipamount \medskipamount = 6pt plus 2pt minus 2pt -\newskip \smallskipamount \smallskipamount = 3pt plus 1pt minus 1pt - -\baselineskip = 12pt -\lineskip = 1pt -\lineskiplimit = 0pt - -%D Sometimes kerns make more sense than glue but we need to be in the -%D right mode: - -\permanent\protected\def\vkern {\ifhmode\par \fi\kern} -\permanent\protected\def\hkern {\ifvmode\dontleavehmode\fi\kern} - -\permanent\protected\def\vpenalty{\ifhmode\par \fi\penalty} -\permanent\protected\def\hpenalty{\ifvmode\dontleavehmode\fi\penalty} - -%D Again a few kind-of-extensions the core. These come from plain \TEX\ but -%D are probably not used in \CONTEXT. - -\newskip \hideskip \hideskip = -1000pt plus 1fill -\newskip \centering \centering = 0pt plus 1000pt minus 1000pt - -\permanent\def\hidewidth % for alignment entries that can stick out - {\hskip\hideskip} - -\permanent\def\ialign % initialized \halign - {\everycr\emptytoks - \tabskip\zeroskip - \halign} - -\newcount \mscount - -\permanent\def\spanomit{\span\omit} % bypass error message - -\permanent\def\multispan#1% - {\omit - \mscount#1\relax - \loop - \ifnum\mscount>\plusone - \spanomit \advance\mscount\minusone - \repeat} - -\let\nopdfcompression \relax % later -\let\onlypdfobjectcompression\relax % later -\let\maximumpdfcompression \relax % later -\let\normalpdfcompression \relax % later - -%D Basic status stuff. - -% \newif\ifproductionrun % already defined - -%D For those who expect this \unknown - -\ifx\fmtname \undefined \immutable\def\fmtname {ConTeXt Initial TeX} \fi -\ifx\fmtversion\undefined \immutable\def\fmtversion{3.1415926} \fi - -%D A few bonus macros: - -%permanent\def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} -\permanent\def\modulonumber#1#2{\the\numexpr#2-(#2:#1)*#1\relax} -\permanent\def\dividenumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax} - -%D These could be set at the \LUA\ end instead: - -\immutable\edef\texenginename {\directlua{tex.print(LUATEXENGINE)}} -\immutable\edef\texengineversion {\directlua{tex.print(LUATEXVERSION)}} -\immutable\edef\texenginefunctionality{\directlua{tex.print(LUATEXFUNCTIONALITY)}} - -%D We have no reason not to enable this: - -\savingvdiscards\plusone - -%D We only can set this one via directives (system.synctex) and we only support -%D the context variant. This will go away completely. - -\newcount\synctex % \let\normalsynctex\synctex - -%D We get rid of the funny \TEX\ offset defaults of one inch by setting them to zero. - -% \voffset\zeropoint \overloaded\let\voffset\relax \newdimen\voffset \let\normalvoffset\voffset -% \hoffset\zeropoint \overloaded\let\hoffset\relax \newdimen\hoffset \let\normalhoffset\hoffset - -\matheqnogapstep\zerocount % for now - -%D Now we define a few helpers that we need in a very early stage. We have no -%D message system yet but redundant definitions are fatal anyway. - -\newcount\c_syst_helpers_n_of_namespaces \c_syst_helpers_n_of_namespaces\pluseight % 1-8 reserved for catcodes - -\def\v_interfaces_prefix_template_system{\number \c_syst_helpers_n_of_namespaces>>} -%def\v_interfaces_prefix_template_system{\characters\c_syst_helpers_n_of_namespaces>>} % no \characters yet - -\protected\def\installsystemnamespace#1% will be redefined - {\ifcsname ??#1\endcsname - \immediate\write\statuswrite{fatal error: duplicate system namespace '#1'}% - \else - \global\advance\c_syst_helpers_n_of_namespaces\plusone - \immutable\edefcsname ??#1\endcsname{\v_interfaces_prefix_template_system}% - \fi} - -%D It makes more sense to have these here: - -\aliased\let\normalsuperscript \Usuperscript -\aliased\let\normalsubscript \Usubscript -\aliased\let\normalnosuperscript\Unosuperscript -\aliased\let\normalnosubscript \Unosubscript -\aliased\let\normalstartimath \Ustartmath -\aliased\let\normalstopimath \Ustopmath -\aliased\let\normalstartdmath \Ustartdisplaymath -\aliased\let\normalstopdmath \Ustopdisplaymath - -%D Also better here: - -\immutable\def\wildcardsymbol{*} - -%D For a while we will keep these useless numbers as for instance tikz checks for them: - -\immutable\integerdef\eTeXversion 2 -\immutable\def \eTeXrevision {2} - -%D Experiment: - -\glyphdimensionsmode\plusone - -%D Just in case users use this: - -\aliased\let\immediateassign \immediate -\aliased\let\immediateassigned\localcontrolled - -%D Needed: - -\mutable\let\nexttoken \relax -\mutable\let\next \relax -\mutable\let\nextnext \relax -\mutable\let\nextnextnext\relax - -%D For now here: will get a proper solution - -\pushoverloadmode -\mutable\let\par\par -\popoverloadmode - -\protect \endinput |