summaryrefslogtreecommitdiff
path: root/tex/context/base/mkii/core-ctx.mkii
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkii/core-ctx.mkii')
-rw-r--r--tex/context/base/mkii/core-ctx.mkii203
1 files changed, 203 insertions, 0 deletions
diff --git a/tex/context/base/mkii/core-ctx.mkii b/tex/context/base/mkii/core-ctx.mkii
new file mode 100644
index 000000000..c693d10db
--- /dev/null
+++ b/tex/context/base/mkii/core-ctx.mkii
@@ -0,0 +1,203 @@
+%D \module
+%D [ file=core-ctx,
+%D version=2006.08.16, % old stuff
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Job Control,
+%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 Core Macros / Job Control}
+
+\unprotect
+
+\chardef\preprocessmethod 2 % 0=no check 1=present_check 2=log_check
+\chardef\preprocessstate 0 % 1=found 2=not_present (skip)
+\chardef\preprocesslocal 0 % 0=no 1=yes
+\def \preprocesssuffix {.prep}
+
+\def\loadctxpreplist
+ {\begingroup
+ \chardef\XMLtokensreduction\plusone
+ \ifcase\preprocessmethod
+ % no checking
+ \or
+ % simple checking
+ \or
+ \doiffileexistselse{./\jobname.ctl}
+ {\bgroup
+ \defineXMLenvironment[ctx:preplist][local=no]
+ {\doifelse{\XMLop{local}}{yes}
+ {\global\chardef\preprocesslocal\plusone
+ \writestatus\m!systems{loading ctx log file (local)}}%
+ {\writestatus\m!systems{loading ctx log file (specified)}}}
+ \donothing
+ \defineXMLenvironmentsave[ctx:prepfile][done=no]
+ \donothing
+ {\edef\readfilename{\XMLflush{ctx:prepfile}}%
+ \ifcase\preprocesslocal\else
+ \splitfilename\readfilename
+ \let\readfilename\splitoffbase
+ \fi
+ \writestatus\m!systems{registering \readfilename\space -> \XMLop{done}}%
+ \setxvalue{fp..\readfilename}{\XMLop{done}}}%
+ \processXMLfile{./\jobname.ctl}%
+ \egroup}%
+ {\global\chardef\preprocessmode\plusone}%
+ \fi
+ \global\let\loadctxpreplist\relax
+ \endgroup}
+
+\appendtoks\loadctxpreplist\to\everystarttext % will become: \prependtoks\loadctxpreplist\to\everyjob
+
+\def\docheckprepfile
+ {\ifcase\preprocessmethod
+ \iftracefiles\writestatus\m!systems{preprocessing - not needed}\fi
+ % no preprocessing
+ \or
+ % only check for existence
+ \iftracefiles\writestatus\m!systems{preprocessing - check existence of \readfilename\preprocesssuffix}\fi
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ \donothing
+ \or
+ % check when in list, otherwise assume normal file
+ \bgroup
+ \splitfilename\readfilename
+ \ifx\splitofftype\empty
+ % saveguard and speed up
+ \iftracefiles\writestatus\m!systems{preprocessing - no suffix}\fi
+ \egroup
+ \else\ifcase\preprocesslocal
+ % also ./ strippen
+ \iftracefiles\writestatus\m!systems{preprocessing - check presence of \readfilename\preprocesssuffix}\fi
+ \doifdefinedelse{fp..\readfilename}
+ {\egroup
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ {\chardef\preprocessstate\plustwo}}%
+ {\doifdefinedelse{fp.../\readfilename}
+ {\egroup
+ \edef\readfilename{./\readfilename}%
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ {\chardef\preprocessstate\plustwo}}%
+ {\doifdefinedelse{fp..\splitoffbase}%
+ {\egroup
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ {\chardef\preprocessstate\plustwo}}%
+ {\egroup}}}%
+ \else
+ % maybe just filecheck, why ctl
+ \iftracefiles\writestatus\m!systems{preprocessing - check local presence of \readfilename\preprocesssuffix}\fi
+ \doifdefinedelse{fp..\readfilename}
+ {\egroup
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ {\chardef\preprocessstate\plustwo}}%
+ {\egroup}%
+ \fi
+ \fi\fi}
+
+% beware, \readfilename keeps the original one, but we load and store the
+% suffixed with .prep file (if present)
+
+\def\doreadfile#1#2#3#4% beware, this one already works at format generation time!
+ {\sanitizefilename#2\to\readfilename
+ \ifx\readfilename\empty
+ % silently ignore
+ \else
+ \let\trackedfilename\readfilename
+ \chardef\preprocessstate\zerocount
+ \ifconditional\trackfilenames
+ \doifundefinedelse{fn..\trackedfilename}\donetrue\donefalse
+ \else
+ \donetrue
+ \fi
+ \ifdone
+ \checkfilename\readfilename
+ \ifcase\kindoffile
+ % not a full path or url, check for existence
+ \doifelsenothing{#1}
+ {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on tex path}\fi
+ \def\next{\redoreadfile\readfilename{#3}{#4}}}%
+ {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on #1}\fi
+ \def\next{\redoreadfile{\pathplusfile{#1}{\readfilename}}{#3}{#4}}}%
+ \else
+ % a full path or url, no further checking done
+ \docheckprepfile
+ \ifcase\preprocessstate
+ \doiffileexistselse\readfilename
+ {\iftracefiles\writestatus\m!systems{located \readfilename}\fi
+ \def\next{#3\dodoreadfile}}%
+ {\iftracefiles\writestatus\m!systems{not found \readfilename}\fi
+ \def\next{#4}}%
+ \or
+ \iftracefiles\writestatus\m!systems{located \readfilename\preprocesssuffix}\fi
+ \def\next{#3\dodoreadfile}%
+ \or
+ \iftracefiles\writestatus\m!systems{not found \readfilename\preprocesssuffix}\fi
+ \def\next{#4}%
+ \fi
+ \fi
+ \else
+ \edef\readfilename{\getvalue{fn..\readfilename}}% ??? is done !
+ \iftracefiles\writestatus\m!systems{already located \readfilename}\fi
+ \def\next{#3\dodoreadfile}%
+ \fi
+ \expandafter\next
+ \fi}
+
+\def\redoreadfile#1#2#3%
+ {\docheckprepfile
+ \ifcase\preprocessstate
+ \doiffileexistselse{#1}%
+ {\edef\readfilename{#1}%
+ \iftracefiles\writestatus\m!systems{#1 located}\fi
+ \def\next{#2\dodoreadfile}}%
+ {\iftracefiles\writestatus\m!systems{cannot locate #1}\fi
+ \advance\readlevel\minusone
+ \ifnum\readlevel>\zerocount
+ \edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}%
+ \def\next{\redoreadfile\readfilename{#2}{#3}}%
+ \else
+ \def\next{#3}%
+ \fi}%
+ \or
+ \ifcase\preprocesslocal
+ \edef\readfilename{#1}% nor found
+ \else
+ % no path prepending
+ \fi
+ \iftracefiles\writestatus\m!systems{#1\preprocesssuffix\space located}\fi
+ \def\next{#2\dodoreadfile}%
+ \or
+ \def\next{#3}%
+ \fi
+ \next}
+
+\def\dodoreadfile % we provide hooks, for instance for \enableXML
+ {\ifconditional\trackfilenames
+ \setxvalue{fn..\trackedfilename}{\readfilename\ifcase\preprocessstate\or\preprocesssuffix\fi}%
+ \fi
+ \the\everybeforereadfile
+ \ifcase\preprocessstate
+ % no checking or not found when using method 1
+ \def\dodoreadfileindeed{\inputgivenfile\readfilename}%
+ \or
+ % found when using method 1 or 2
+ \def\dodoreadfileindeed{\inputgivenfile{\readfilename\preprocesssuffix}}%
+ \or
+ % not found when using method 2
+ \let\dodoreadfileindeed\relax
+ \fi
+ \dodoreadfileindeed
+ \relax
+ \the\everyafterreadfile}
+
+\protect \endinput