%D \module
%D   [       file=context,
%D        version=2008.28.10, % 1995.10.10,
%D          title=\CONTEXT,
%D       subtitle=\CONTEXT\ Format Generation,
%D         author=Hans Hagen, % ɦɑns ɦɑˈχən
%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.

% Here is some timing (2015-04-01) luajittex format generation:
%
% 2.6 sec : normal make
% 2.0 sec : with terminal output piped to file
% 0.2 sec : format dumped
% 0.2 sec : char-def/char-ini (no bytecode)
%
% So a format still saves some 1.5 seconds (with luajjitex) startup and
% on network shares cq. when no files are cached by the os it's of course
% much worse. A zero run is .27 sec with luajittex.

% Welcome to context, pronounced as kontekst (rather dutch) and not as
% conτεχt.

\catcode`\{=1 \catcode`\}=2 \catcode`\#=6

%D From the next string (which is set by the script that assembles the
%D distribution) later on we will calculate a number that can be used
%D by use modules to identify the feature level. Starting with version
%D 2004.8.30 the low level interface is english. Watch out and adapt
%D your styles an modules.

% \everypar{\writestatus{!!!!}{some spurious input in line \the\inputlineno}\wait}

%D The order of loading will change when all modules have been cleaned
%D up and the dependencies are more consistent.

\edef\contextformat {\jobname}
\edef\contextversion{2015.05.18 12:26}
\edef\contextkind   {current}

%D For those who want to use this:

\let\fmtname   \contextformat
\let\fmtversion\contextversion

%D Loading:

\edef\mksuffix   {mkiv}
\edef\contextmark{MKIV}

\ifx\normalinput\undefined \let\normalinput\input \fi

\def\loadcorefile#1{\normalinput#1\relax}
\def\loadmarkfile#1{\normalinput#1.\mksuffix\relax}
\def\loadmkiifile#1{}
\def\loadmkivfile#1{\normalinput#1.mkiv\relax}
\def\loadmkvifile#1{\normalinput#1.mkvi\relax}

%D First we load the system modules. These implement a lot of
%D manipulation macros. We start with setting up some basic \TEX\
%D machinery.

\loadmarkfile{syst-ini}

%D Some checking (more primitives are now defined):

\ifdefined\defaultinterface   \else \def\defaultinterface  {english}         \fi
%ifdefined\messageinterface   \else \let\messageinterface  \defaultinterface \fi
\ifdefined\defaultlanguagetag \else \def\defaultlanguagetag{en}              \fi

%D We just quit if new functionality is expected.

\ifnum\luatexversion<70 % also change message
    \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.70!}
    \expandafter\end
\fi

%D There is only this way to pass the version info to \LUA\ (currently). Hm, we could
%D now put it into the environment.

\newtoks\contextversiontoks \contextversiontoks\expandafter{\contextversion}
\newtoks\contextkindtoks    \contextkindtoks   \expandafter{\contextkind}

% \normaleverypar{\wait} % uncomment for test of funny injections

%D Now the more fundamental code gets defined.

\loadmarkfile{norm-ctx}
\loadmarkfile{syst-pln}
\loadmarkfile{syst-mes}

\loadmarkfile{luat-cod}
\loadmarkfile{luat-bas}
\loadmarkfile{luat-lib}

\loadmarkfile{catc-ini}
\loadmarkfile{catc-act}
\loadmarkfile{catc-def}
\loadmarkfile{catc-ctx}
\loadmarkfile{catc-sym}

\loadmarkfile{cldf-ini}

% \tracecatcodetables

% From here on we have \unexpanded being \normalprotected, as we already had
% \unexpanded long before etex came around.

\loadmarkfile{luat-ini}
\loadmarkfile{toks-ini}

\loadmarkfile{syst-aux}
\loadmarkfile{syst-lua}
\loadmarkfile{syst-con}

\loadmarkfile{syst-fnt}
\loadmarkfile{syst-rtp}

\loadmarkfile{luat-usr}

% \loadmarkfile{luat-ini} % moved up
% \loadmarkfile{toks-ini} % moved up

\loadmkvifile{file-ini}
\loadmkvifile{file-res}
\loadmkvifile{file-lib}

\loadmarkfile{supp-dir}

\loadmarkfile{char-utf} % generic code (i.e. not much tex) ... could become unic-ini
\loadmarkfile{char-ini} % tex / context specific
\loadmarkfile{char-act} % even more specific

\loadmarkfile{mult-ini}
\loadmarkfile{mult-sys}
\loadmarkfile{mult-aux}
\loadmarkfile{mult-def}
\loadmarkfile{mult-chk}
%loadmarkfile{mult-aux} % moved up
\loadmkvifile{mult-dim}

\loadmarkfile{cldf-int} % interface

% \loadmarkfile{luat-ini}

\loadmarkfile{toks-tra}
%loadmarkfile{toks-map} % obsolete, never used

\loadmarkfile{attr-ini}

\loadmarkfile{core-ini}
\loadmarkfile{core-env}

\loadmarkfile{layo-ini}

\loadmarkfile{node-ini}

\loadmarkfile{cldf-bas} % basics / depends on nodes

\loadmarkfile{node-fin}
\loadmarkfile{node-mig}
%loadmarkfile{node-pag}

\loadmarkfile{back-ini}

\loadmarkfile{attr-col}
\loadmarkfile{attr-lay}
\loadmarkfile{attr-neg}
\loadmarkfile{attr-eff}
\loadmarkfile{attr-mkr}

\loadmarkfile{trac-tex}
\loadmarkfile{trac-deb} % will move up
\loadmarkfile{trac-ctx} % maybe move up

%loadmarkfile{blob-ini} % not to be used, we only use a helper

\loadmarkfile{supp-box}

%loadmarkfile{supp-vis} % replaced by trac-vis
%loadmarkfile{supp-fun} % mostly replaced

\loadmarkfile{supp-ran}
\loadmarkfile{supp-mat}
%loadmarkfile{spac-cha} % obsolete
%loadmarkfile{supp-num} % obsolete

\loadmarkfile{typo-ini}
\loadmarkfile{typo-bld} % par builders

\loadmarkfile{typo-inj}

\loadmkvifile{file-syn}
\loadmkvifile{file-mod}

\loadmarkfile{core-con}

\loadmarkfile{cont-fil}

\loadmarkfile{regi-ini}
\loadmarkfile{enco-ini}
\loadmarkfile{hand-ini}

\loadmarkfile{lang-ini}
\loadmarkfile{lang-hyp}
\loadmarkfile{lang-lab}

\loadmarkfile{unic-ini}

\loadmarkfile{core-uti}
\loadmarkfile{core-two}
\loadmarkfile{core-dat}

\loadmarkfile{colo-ini}
\loadmarkfile{colo-grp} % optional
\loadmarkfile{colo-ext}

\loadmarkfile{node-bck} % overloads anch-pgr (experimental and undocumented)

\loadmarkfile{pack-cut} % leftovers from trac-vis

\loadmarkfile{lang-mis}
\loadmarkfile{lang-url}
\loadmarkfile{lang-def}

\loadmkvifile{file-job} % why so late?

\loadmarkfile{symb-ini} % brrr depends on fonts

\loadmarkfile{sort-ini}

\loadmkvifile{pack-mis}
\loadmarkfile{pack-rul}
\loadmarkfile{pack-mrl}
\loadmkvifile{pack-bck}
\loadmarkfile{pack-fen}

\loadmarkfile{lxml-ini}
\loadmarkfile{lxml-sor}

\loadmkvifile{typo-prc}

\loadmarkfile{anch-pos}

\loadmkvifile{strc-ini}
\loadmarkfile{strc-tag}
\loadmarkfile{strc-doc}
\loadmarkfile{strc-num}
\loadmarkfile{strc-mar}
\loadmarkfile{strc-sbe}
\loadmkvifile{strc-lst}
\loadmarkfile{strc-sec}
\loadmarkfile{strc-pag} % hm, depends on core-num
\loadmarkfile{strc-ren}
\loadmarkfile{strc-xml}
\loadmarkfile{strc-def} % might happen later
\loadmkvifile{strc-ref}
%loadmarkfile{strc-reg}
\loadmkvifile{strc-lev} % experiment

\loadmarkfile{spac-ali}
\loadmarkfile{spac-hor}
\loadmarkfile{spac-flr}
\loadmarkfile{spac-ver}
\loadmarkfile{spac-lin}
\loadmarkfile{spac-pag}
\loadmarkfile{spac-par}
%loadmarkfile{spac-adj} % no longer needed
\loadmarkfile{spac-def}

\doiffileelse{spac-prf.mkvi}
    {\loadmkvifile{spac-prf}}
    {\loadmkivfile{spac-prf}}

\loadmarkfile{spac-grd}

%loadmarkfile{anch-pos}

\loadmkvifile{scrn-ini}
\loadmkvifile{scrn-ref}

\loadmarkfile{pack-obj}

\loadmkvifile{strc-itm}

\loadmkvifile{strc-con}
\loadmkvifile{strc-des}
\loadmkvifile{strc-enu}

\loadmarkfile{strc-ind}
\loadmarkfile{strc-lab}
\loadmarkfile{strc-syn}

\loadmarkfile{core-sys}

\loadmarkfile{page-var}
\loadmkvifile{page-otr}
\loadmarkfile{page-ini}
\loadmarkfile{page-ins}
\loadmarkfile{page-fac}
\loadmarkfile{page-brk}
\loadmarkfile{page-col}
\loadmarkfile{page-inf}
\loadmarkfile{page-grd}
\loadmarkfile{page-flt}
\loadmarkfile{page-bck}
\loadmarkfile{page-not}
\loadmarkfile{page-one}
\loadmarkfile{page-lay}
\loadmkvifile{page-box}
\loadmkvifile{page-txt}
\loadmarkfile{page-sid} % when

\loadmkvifile{strc-flt}

\loadmarkfile{page-pst}
\loadmkvifile{page-mbk}
\loadmarkfile{page-mul} % partly overloaded
\loadmarkfile{page-mix} % new
\loadmarkfile{page-set}
\loadmarkfile{pack-lyr}
\loadmarkfile{pack-pos}
\loadmkvifile{page-mak}

\loadmarkfile{strc-reg} % uses mixed columns

\loadmkvifile{page-lin}
\loadmarkfile{page-par}
\loadmarkfile{typo-pag}
\loadmarkfile{typo-mar}
\loadmarkfile{typo-itm}

\loadmarkfile{buff-ini}
\loadmarkfile{buff-ver}
\loadmkvifile{buff-par}

\loadmarkfile{buff-imp-tex}        % optional as also runtime if not loaded
\loadmarkfile{buff-imp-mp}         % optional as also runtime if not loaded
\loadmarkfile{buff-imp-lua}        % optional as also runtime if not loaded
\loadmarkfile{buff-imp-xml}        % optional as also runtime if not loaded

\loadmarkfile{buff-imp-parsed-xml} % optional
%loadmarkfile{buff-imp-parsed-lua} % optional

\loadmarkfile{strc-blk}

\loadmarkfile{page-imp}
\loadmkvifile{page-sel} % optional
\loadmkvifile{page-inj} % optional

\loadmkvifile{scrn-pag}
\loadmkvifile{scrn-wid}
\loadmkvifile{scrn-but}
\loadmkvifile{scrn-bar}

\loadmarkfile{page-com} % optional (after scrn-pag)

\loadmarkfile{strc-bkm} % bookmarks

\loadmarkfile{java-ini}

\loadmkvifile{scrn-fld}
\loadmkvifile{scrn-hlp}

\loadmarkfile{char-enc} % will move up

\loadmkvifile{font-lib} % way too late
\loadmkvifile{font-fil}
\loadmkvifile{font-var}
\loadmkvifile{font-fea}
\loadmkvifile{font-mat}
\loadmkvifile{font-ini}
\loadmkvifile{font-sym}
\loadmkvifile{font-sty}
\loadmkvifile{font-set}
\loadmkvifile{font-emp}
\loadmarkfile{font-pre}
\loadmarkfile{font-unk}
\loadmarkfile{font-tra}
\loadmarkfile{font-chk}
\loadmarkfile{font-uni}
\loadmkvifile{font-col}
\loadmkvifile{font-gds}
\loadmkvifile{font-aux}
\loadmkvifile{font-sel}

\loadmarkfile{typo-tal}
\loadmarkfile{typo-par} % par builders (uses fonts)

\loadmarkfile{tabl-com}
\loadmarkfile{tabl-pln}

\loadmarkfile{tabl-tab} % thrd-tab stripped and merged

\loadmarkfile{tabl-tbl}
\loadmarkfile{tabl-ntb}
\loadmarkfile{tabl-nte}
\loadmarkfile{tabl-ltb}
\loadmarkfile{tabl-tsp}
\loadmkvifile{tabl-xtb}
\loadmarkfile{tabl-mis}

\loadmarkfile{typo-lan}

\loadmarkfile{lxml-css}

\loadmarkfile{spac-chr} % depends on fonts

\loadmarkfile{blob-ini} % not to be used, we only use a helper

\loadmarkfile{trac-vis}
\loadmarkfile{trac-jus}

\loadmarkfile{typo-cln}
\loadmarkfile{typo-wrp}
\loadmarkfile{typo-spa}
\loadmarkfile{typo-krn}
\loadmkvifile{typo-itc}
\loadmarkfile{typo-dir}
\loadmarkfile{typo-brk}
\loadmarkfile{typo-cap}
\loadmarkfile{typo-dig}
\loadmarkfile{typo-rep}
\loadmkvifile{typo-txt}
\loadmarkfile{typo-drp}
\loadmarkfile{typo-fln}
\loadmarkfile{typo-sus}
\loadmarkfile{typo-lig}
\loadmarkfile{typo-chr}

\loadmkvifile{type-ini}
\loadmarkfile{type-set}

\loadmarkfile{scrp-ini}

\loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect)
\loadmarkfile{lang-rep} % can be optional (bt 2013 side effect)

\loadmarkfile{prop-ini} % only for downward compatibility

\loadmarkfile{mlib-ctx} % messy order

\loadmarkfile{meta-ini}
\loadmarkfile{meta-tex}
\loadmarkfile{meta-fun}
\loadmarkfile{meta-pag}
\loadmarkfile{meta-grd}
\loadmarkfile{meta-fnt}

\loadmarkfile{page-mrk} % depends on mp

\loadmarkfile{page-flw}
\loadmarkfile{page-spr}
\loadmarkfile{page-plg}
\loadmarkfile{page-str}

\loadmarkfile{anch-pgr} % can be moved up (nicer for dependencies)
\loadmkvifile{anch-bck}
\loadmarkfile{anch-tab} % overloads tabl-tbl
\loadmarkfile{anch-bar}
%loadmarkfile{anch-snc} % when needed this one will be redone

\loadmarkfile{math-ini} % way after font-pre !
\loadmarkfile{math-pln}
\loadmarkfile{math-for}
\loadmarkfile{math-def} % also saves some meanings
\loadmarkfile{math-ali}
%loadmarkfile{math-arr}
\loadmkvifile{math-stc}
\loadmarkfile{math-frc}
\loadmarkfile{math-mis}
\loadmarkfile{math-scr}
\loadmarkfile{math-int}
\loadmarkfile{math-del}
\loadmarkfile{math-fen}
\loadmkvifile{math-acc}
\loadmkvifile{math-rad}
\loadmarkfile{math-inl}
\loadmarkfile{math-dis}
%loadmarkfile{math-lan}

%loadmarkfile{phys-dim} % moved to after typo-scr

\loadmarkfile{strc-mat}

\loadmarkfile{chem-ini}
\loadmarkfile{chem-str}

\loadmarkfile{typo-scr}
\loadmarkfile{phys-dim}

\loadmarkfile{node-rul}
\loadmkvifile{font-sol} % font solutions

\loadmkvifile{strc-not}
\loadmkvifile{strc-lnt}

\loadmarkfile{pack-com}
\loadmarkfile{typo-del}

\loadmarkfile{grph-trf}
\loadmarkfile{grph-inc}
\loadmarkfile{grph-fig}
\loadmarkfile{grph-raw}

\loadmarkfile{pack-box}
\loadmarkfile{pack-bar}
\loadmarkfile{page-app}
\loadmarkfile{meta-fig}

\loadmarkfile{lang-spa} % will become obsolete

% old bibtex support: (will be m-oldbibtex.mkiv)

% \loadmarkfile{bibl-bib}
% \loadmarkfile{bibl-tra}

% new bibtex support:

\loadmarkfile{publ-ini}
\loadmarkfile{publ-tra}
\loadmarkfile{publ-xml}
\loadmarkfile{publ-old}

%loadmarkfile{x-xtag}  % no longer preloaded

\loadmarkfile{meta-xml}

\loadmarkfile{cont-log}

\loadmarkfile{task-ini}

\loadmarkfile{cldf-ver} % verbatim, this can come late
\loadmarkfile{cldf-com} % commands, this can come late

\loadmarkfile{core-ctx} % this order might change but we need to check depedencies / move to another namespace

\loadmarkfile{core-def}

%usemodule[x][res-04] % xml resource libraries
%usemodule[x][res-08] % rlx runtime conversion
%usemodule[x][res-12] % rli external indentification

% now we hook in backend code (needs checking)

\loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend
\loadmarkfile{mlib-pdf}
\loadmarkfile{mlib-pps}
\loadmarkfile{meta-pdf}
\loadmarkfile{grph-epd}

\loadmarkfile{back-exp}

\loadmarkfile{cont-run} % the main runner (used in cont-yes.mkiv)

\setupcurrentlanguage[\defaultlanguagetag]

\prependtoks
    \ctxlua{statistics.starttiming(statistics)}%
\to \everyjob

\appendtoks
    \ctxlua{statistics.stoptiming(statistics)}%
\to \everyjob

\appendtoks
    \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkiv","\contextkind")}% can become automatic
\to \everydump

\errorstopmode \dump \endinput
