diff options
Diffstat (limited to 'tex/context/base/mkii/core-job.mkii')
-rw-r--r-- | tex/context/base/mkii/core-job.mkii | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/tex/context/base/mkii/core-job.mkii b/tex/context/base/mkii/core-job.mkii new file mode 100644 index 000000000..e2dc16031 --- /dev/null +++ b/tex/context/base/mkii/core-job.mkii @@ -0,0 +1,419 @@ +%D \module +%D [ file=core-job, % copied from main-001, +%D version=1997.03.31, +%D title=\CONTEXT\ Core Macros, +%D subtitle=Job Handling, +%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 This module is still to be split and documented. + +\writestatus{loading}{ConTeXt Core Macros / Job Handling} + +\unprotect + +\let \currentproject \empty +\let \currentproduct \empty +\let \currentenvironment \empty +\let \currentcomponent \empty + +\let \loadedfiles \empty +\let \processedfiles \empty + +\let \nomorefiles \relax + +\let \allinputpaths \empty +\let \locatedfilepath \empty + +\newcount\textlevel +\newcount\fileprocesslevel + +\setvalue{\c!file::0}{\jobname} + +\def\processedfile % is used in styles, don't change ! + {\getvalue{\c!file::\number\fileprocesslevel}} + +\def\dostarttextfile#1% + {\global\advance\fileprocesslevel\plusone + \setxvalue{\c!file::\number\fileprocesslevel}{#1}% + \@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles} + +\def\dostoptextfile + {\global\advance\fileprocesslevel\minusone} + +\def\processlocalfile#1#2% + {#1{#2}\donothing{\readfile{#2}\donothing\donothing}} + +\def\processfile#1% + {\ifx\allinputpaths\empty + \def\next{\processlocalfile\readlocfile}% + \else + \let\filepath\empty + \def\docommand##1% + {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse + \ifdone\expandafter\quitcommalist\fi}% + \doifparentfileelse{#1} % new + {\processcommacommand [\allinputpaths]\docommand} + {\processcommacommand[.,\allinputpaths]\docommand}% + \ifx\filepath\empty + \def\next{\processlocalfile\readlocfile}% fall back ../../.. + \else + \def\next{\processlocalfile{\readsetfile\filepath}}% file found + \fi + \fi + \next{#1}} + +\def\doifinputfileelse#1% rarely used + {\ifx\allinputpaths\empty + \@EA\secondoftwoarguments + \else + \let\filepath\empty + \def\docommand##1% + {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse + \ifdone\expandafter\quitcommalist\fi}% + \processcommacommand[.,\allinputpaths]\docommand + \ifx\filepath\empty + \@EAEAEA\secondoftwoarguments + \else + \@EAEAEA\firstoftwoarguments + \fi + \fi} + +\let\locatedfilepath\empty + +\def\locatefilepath#1% + {\let\locatedfilepath\empty + \ifx\allinputpaths\empty \else + \def\docommand##1% + {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\locatedfilepath{##1}}\donefalse + \ifdone\expandafter\quitcommalist\fi}% + \doifparentfileelse{#1} % new + {\processcommacommand [\allinputpaths]\docommand} + {\processcommacommand[.,\allinputpaths]\docommand}% + \fi} + +\def\usepath[#1]% + {\def\docommand##1% + {\doifelse{##1}\v!reset + {\let\allinputpaths\empty} + {\sanitizefilename#1\to\ascii + \defconvertedcommand\ascii\ascii + \addtocommalist\ascii\allinputpaths}}% + \processcommalist[#1]\docommand} + +\def\usesubpath[#1]% test for a real long time, permits ../{name} i.e. braces + {\ifx\allinputpaths\empty + \sanitizefilename#1\to\allinputpaths + \else + \def\docommand##1% + {\def\dodocommand####1% + {\sanitizefilename####1\to\ascii + \defconvertedcommand\ascii\ascii + \addtocommalist{##1/\ascii}\allinputpaths}% + \processcommalist[#1]\dodocommand}% + \processcommacommand[\allinputpaths]\docommand + \fi} + +\def\registerfileinfo[#1#2]#3% geen \showmessage ? + {\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}% + \immediatewriteutility{f #1 {#3}}} + +\ifx\preloadfonts \undefined \let\preloadfonts \relax \fi +\ifx\preloadspecials\undefined \let\preloadspecials\relax \fi + +\ifx\disableXML\undefined \let\disableXML\relax \fi + +\def\doloadsystemfile#1% mkii with fallback to tex + {\readsysfile{#1.\mksuffix} + {\showmessage\m!systems2{#1.\mksuffix}} + {\readsysfile{#1.tex}{\showmessage\m!systems2{#1.tex}}\donothing}} + +\def\loadsystemfiles + {\reportprotectionstate + \doloadsystemfile\f!newfilename + \doloadsystemfile\f!locfilename + \doloadsystemfile\f!expfilename + \readsysfile{\f!sysfilename.\mksuffix} + {\showmessage\m!systems2{\f!sysfilename.\mksuffix}} + {\readsysfile{\f!sysfilename.tex} + {\showmessage\m!systems2{\f!sysfilename.tex}} + {\readsysfile{\f!sysfilename.rme} + {\showmessage\m!systems2{\f!sysfilename.rme}% + \doglobal\appendtoks % brrr better \setcatcodetable\ctxcatcodes + \bgroup + \disableXML + \readsysfile{\f!errfilename.\mksuffix}\donothing\donothing + \egroup + \to\everygoodbye}% + \donothing}}} + +%D Loading of \type {cont-usr.tex} (edited by the user) +%D and \type {cont-fmt.tex} (generated by texexec). This is +%S obsolete now that we have enough memory for patterns. + +% \def\loaduserspecifications +% {% this used to be the file where users can tune their system, especially patterns +% \readsysfile\f!usrfilename{\showmessage\m!systems2\f!usrfilename}\donothing +% % this one took care of user preferences (fonts, messages) but lm made this obsolete +% \readjobfile\f!fmtfilename{\showmessage\m!systems2\f!fmtfilename}\donothing +% % from now on we preload all patterns (only in mkii) +% \preloadallpatterns} + +\let\loaduserspecifications\relax + +%D We don't want multiple jobfiles to interfere. + +\def\loadoptionfile + {\readjobfile{\jobname.\f!optionextension} + {\showmessage\m!systems2{\jobname.\f!optionextension}}% + {\writestatus\m!systems {no \jobname.\f!optionextension}}} + +% Most natural ... +% +% \def\doateverystarttext +% {\the\everystarttext +% \global\let\doateverystarttext\relax} +% +% ... most practical, since we can load env's in a +% something.run file (nested \starttext's; see for +% instance x-res-08, where we definitely want to +% open the file!). + +\def\doateverystarttext + {\the\everystarttext + \global\everystarttext\emptytoks} + +\def\starttext + {\doateverystarttext + \ifcase\textlevel + \registerfileinfo[begin]\jobname + \expandafter\startcopyingblocks + \fi + \global\advance\textlevel\plusone} + +\def\stoptext + {\global\advance\textlevel\minusone + \ifnum\textlevel>\zerocount \else + \page[\v!last]\page % new, moved from everybye to here; flushes headers, colors etc etc etc + \the\everystoptext + %\the\everybye % + %\the\everygoodbye % == \end (new) + %\expandafter\normalend % + \expandafter\finalend + \fi} + +\def\forcequitjob#1% + {\writestatus\m!systems{forcing quit: #1}% + \batchmode + \dorecurse\textlevel\stoptext + \normalend} + +\let\autostoptext\relax + +\def\autostarttext + {\ifcase\textlevel + \starttext + \writestatus\m!systems{auto \string\starttext..\string\stoptext}% + \let\autostoptext\stoptext + \fi} + +\def\finalend + {\ifnum\textlevel>\zerocount \else + \the\everybye + \the\everygoodbye + \doifsometokselse\everynotabene{\writeline\the\everynotabene\writeline}\donothing + \global\everybye \emptytoks % rather unneeded + \global\everygoodbye\emptytoks % but for sure + \expandafter\normalend + \fi} + +\let\end\finalend + +\def\emergencyend + {\writestatus\m!systems{invalid \@EA\string\csname\e!start\v!text\endcsname...\@EA\string\csname\e!stop\v!text\endcsname\space structure}% + \stoptext} + +\def\currentfile{\inputfilename} + +\def\doexecutefileonce#1% + {\beforesplitstring#1\at.\to\currentfile + \fullexpandtwoargsafter\doifnotinset\currentfile\loadedfiles + {\fullexpandoneargafter\addtocommalist\currentfile\loadedfiles + \doexecutefile{#1}}} + +\def\doexecutefile#1% + {\registerfileinfo[begin]{#1}% + \dostarttextfile{#1}% + \processfile{#1}% + \dostoptextfile + \registerfileinfo[end]{#1}} + +\def\donotexecutefile#1% + {} + +\def\verwerkfile#1 % + {\doexecutefile{#1}} + +\def\useenvironment[#1]% maybe commalist + {\environment #1 \relax} + +\def\environment #1 % at outermost level only (load only once) + {\pushmacro\startenvironment + \pushmacro\stopenvironment + \def\startenvironment ##1 {}% + \let\stopenvironment\relax + \startreadingfile + \doexecutefileonce{#1} + \stopreadingfile + \popmacro\stopenvironment + \popmacro\startenvironment} + +\def\component #1 % at outermost level only + {\dostarttextfile{#1}% + \processfile{#1}% + \dostoptextfile} + +\newcount\filelevel + +\let\currentcomponent \v!text +\let\currentcomponentpath\f!currentpath + +\def\donextlevel#1#2#3#4#5#6#7\\% + {\pushmacro\currentcomponent + \pushmacro\currentcomponentpath + \let\currentcomponent#1% + \setsystemmode\currentcomponent + \splitfilename{#1}% + \ifx\splitoffpath\empty + \let\currentcomponentpath\f!currentpath + \else + \let\currentcomponentpath\splitoffpath + \fi + \beforesplitstring#7\at.\to#2\relax % can become path + base + \ifcase\filelevel\relax + \starttext + \def\project ##1 {#3{##1}}% + \def\environment ##1 {#4{##1}}% + \def\product ##1 {#5{##1}}% + \def\component ##1 {#6{##1}}% + \fi + \advance\filelevel\plusone + \fullexpandoneargafter\addtocommalist{#1}\loadedfiles} + +\def\doprevlevel + {\popmacro\currentcomponentpath + \popmacro\currentcomponent + \setsystemmode\currentcomponent + \ifnum\filelevel=\plusone + \expandafter\stoptext + \else + \advance\filelevel\minusone + \expandafter\endinput + \fi} + +\def\startproject #1 % + {\donextlevel\v!project\currentproject + \donotexecutefile\doexecutefileonce + \doexecutefileonce\doexecutefile#1\\} + +\def\startproduct #1 % + {\doateverystarttext + \donextlevel\v!product\currentproduct + \doexecutefileonce\doexecutefileonce + \donotexecutefile\doexecutefile#1\\} + +\def\startcomponent #1 % + {\doateverystarttext + \donextlevel\v!component\currentcomponent + \doexecutefileonce\doexecutefileonce + \donotexecutefile\doexecutefile#1\\} + +\def\startenvironment #1 % + {\donextlevel\v!environment\currentenvironment + \donotexecutefile\doexecutefileonce + \donotexecutefile\donotexecutefile#1\\} + +% \startproject test +% 1: \startmode[*project] project \stopmode \endgraf +% 2: \startmode[*product] product \stopmode \endgraf +% \stopproject + +\def\stopproject {\doprevlevel} +\def\stopproduct {\doprevlevel} +\def\stopcomponent {\doprevlevel} +\def\stopenvironment{\doprevlevel} + +% more or less replaced by modes + +\setvalue{\e!start\v!localenvironment}[#1]% + {\let\loadedlocalenvironments\empty + \def\docommand##1% + {\beforesplitstring##1\at.\to\someevironment + \fullexpandoneargafter\addtocommalist\someevironment\loadedlocalenvironments}% + \processcommalist[#1]\docommand + \fullexpandtwoargsafter\doifcommonelse % no longer next needed + {\currentproject,\currentproduct,% + \currentcomponent,\currentenvironment} + {\loadedlocalenvironments} + {\letvalue{\e!stop\v!localenvironment}\relax} + {\grabuntil{\e!stop\v!localenvironment}\gobbleoneargument}} % TH: fixed, was \relax + +\setvalue{\v!localenvironment}#1 {\doexecutefileonce{#1}} + +% NOT TOEVOEGEN: \the\everytrace + +\neverypar=\emptytoks + +% \appendtoks \flushnotes \to \everypar +% \appendtoks \synchronizesidefloats \to \everypar +% \appendtoks \checkindentation \to \everypar +% \appendtoks \showparagraphnumber \to \everypar +% \appendtoks \flushmargincontents \to \everypar +% \appendtoks \flushcommentanchors \to \everypar +% \appendtoks \synchronizenotes \to \everypar + +% \appendtoks \flushnotes \to \everydisplay +% \appendtoks \adjustsidefloatdisplaylines \to \everydisplay + +% soon, when pdftex 1.22 is out in the field: + +\chardef\systemcommandmode\zerocount % 0=unknown 1=disabled 2=enabled + +\def\checksystemcommandmode + {\ifx\pdfshellescape\undefined \else + \chardef\systemcommandmode \ifcase\pdfshellescape \plusone \else \plustwo \fi + \fi + \global\let\checksystemcommandmode\relax} + +\def\reportsystemcommandmode + {\ifcase\systemcommandmode + \or + \writestatus\m!systems{system commands are disabled}% + \or + \writestatus\m!systems{system commands are enabled}% + \fi} + +% \ifx\etexversion\undefined \else \ifnum\etexversion<202 +% \prependtoks +% \writestatus\m!systems{eTeX version \number\etexversion\space -> too old (bugs)}% +% \writeline +% \to \everyjob +% \fi \fi + +% \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion<120 +% \prependtoks +% \writestatus\m!systems{pdfTeX version \number\pdftexversion\space -> please update}% +% \writeline +% \to \everyjob +% \fi \fi + +% Default-instellingen (verborgen) + +\resetutilities + +\protect \endinput |