%D \module
%D   [       file=context,
%D        version=1995.10.10,
%D          title=\CONTEXT,
%D       subtitle=\CONTEXT\ Format Generation,
%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.

% dec 07 2001 : cont-en.efmt : 4,035,912
% aug 07 2004 : cont-en.efmt : 4,928,967 (5 more patterns)
% aug 31 2006 : cont-en.fmt  : 7,048,748 (all patterns)

% todo 1: each module english commands
% todo 2: replace lowlevel *!* by english variants
% todo 3: make files more independent
% todo 4: cleanup specials + adapt interface
% todo 5: remove/replace old stuff (by new stuff, like couplepaper)
% todo 6: create even more hooks (so that users can overload)
% todo 7: conditionals
% todo 8: redesign tui/tuo

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

%D For many years \CONTEXT\ supported both good old \TEX\ and \ETEX, but
%D the time has come (August 2006) to advance, especially now that all
%D engines provide \ETEX\ functionality and more is on the horizon.

\ifx\eTeXversion\undefined
  \immediate\write16{SORRY CONTEXT NOW NEEDS ETEX}
  \expandafter \end
\fi

%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.

\edef\contextformat {\jobname}
\edef\contextversion{2006.12.07 18:22}

%D For those who want to use this:

\def\fmtname   {context}
\def\fmtversion{3.1415926}

\let\showcontextbanner\relax

%D Here we will test for what branch of source files we will take. The
%D file suffix depends on the maintream engine: either lua enhanced,
%D or traditional:
%D
%D \starttyping
%D mki  : low level dutch
%D mkii : low level english
%D mkiv : lua enhanced
%D \stoptyping
%D
%D There is no \type {mkiii} unless you want to tag the transition
%D version that way (going completely etex, code cleanup and such).

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

\edef\mksuffix {mk\ifx\directlua\undefined ii\else iv\fi}

\def\loadcorefile#1{\normalinput#1\relax}
\def\loadmarkfile#1{\normalinput#1.\mksuffix\relax}

\ifx\directlua\undefined
  \def\loadmarkivfile#1{} \let\loadmarkiifile\loadcorefile
\else
  \def\loadmarkiifile#1{} \let\loadmarkivfile\loadcorefile
\fi

\let\loadmkiifile\loadmarkiifile
\let\loadmkivfile\loadmarkivfile
\let\loadmkfile  \loadmarkfile

\edef\contextmark{MK \ifx\directlua\undefined II\else IV\fi}

%D Welcome to the main module. When this module is ran through
%D \type{initex} or \type {tex -i} or \type {whatevertex} using
%D \type{whatever switch}, the \CONTEXT\ format file is
%D generated. During this process the user is asked for an
%D interface language. Supplying \type{dutch} will generate a
%D dutch version of \CONTEXT, supplying \type {english} will of
%D course end op in a english version.
%D
%D Another option is to use \TEXEXEC:
%D
%D \starttyping
%D texexec --make [--alone] [--engine] [--all]
%D texexec --make [--alone] [--engine] en nl ... metafun mptopdf
%D \stoptyping
%D
%D More information can be found in the \TEXEXEC\ manual.

%D When you write modules (or extensions) you should avoid
%D conflicts with existing macro names and mechanisms. If you are
%D coming from another macro package, don't assume that macros
%D with the same name are doing the same! \CONTEXT\ was written
%D from scratch and therefore similarities are often a coincidence
%D (to some extent one always ends up with the same names for
%D similar concepts). The underlying models for elementary subsystems
%D that deal with encodings, languages and fonts probably differ.
%D
%D Time has learned that users coming from \LATEX\ should not fall
%D into thinking that macros like \type {\protect} represent the
%D same functionality in both systems; actually, due to the way
%D \CONTEXT\ is set up, some of those macros do complete different
%D things. Macro packages evolve independent of each other, which
%D means that code written for one system will not work in another
%D system, unless it's real generic code.
%D
%D An API will become available soon (keep an eye on the ConTeXt
%D Wiki www.contextgarden.org) and or listen in to the context
%D mailing list (ntg-context@ntg.nl). Much additional information
%D can be found at the PRAGMA website (www.pragma-ade.com).

%D First we load the system modules. These implement a lot of
%D manipulation macros. The first one loads \PLAIN\ \TEX, as
%D minimal as possible.

\loadcorefile{syst-pln.tex}
\loadcorefile{syst-prm.tex}

\loadmkivfile{luat-env.tex}
\loadmkivfile{luat-lib.tex}
\loadcorefile{syst-cat.tex}

\loadcorefile{syst-etx.tex}
\loadcorefile{syst-pdt.tex}
\loadcorefile{syst-omg.tex}
\loadcorefile{syst-xtx.tex}
\loadcorefile{syst-mtx.tex}

\loadcorefile{syst-gen.tex}
\loadcorefile{syst-ext.tex}
\loadcorefile{syst-chr.tex}
\loadcorefile{syst-fnt.tex}
\loadcorefile{syst-new.tex}
\loadcorefile{syst-con.tex}
\loadcorefile{syst-var.tex}
\loadcorefile{syst-str.tex}

%loadcorefile{syst-tra.tex}

\loadcorefile{syst-rtp.tex}

\loadcorefile{math-pln.tex}

%D To enable selective loading, we say:

\CONTEXTtrue

%D In order to conveniently load files, we need a few
%D support modules.

\loadcorefile{supp-ini.tex}
\loadcorefile{supp-fil.tex}
\loadcorefile{supp-dir.tex}

%D After this we're ready for the multi||lingual interface
%D modules.

\loadcorefile{mult-ini.tex}
\loadcorefile{mult-fst.tex}
\loadcorefile{mult-sys.tex}
\loadcorefile{mult-con.tex}
\loadcorefile{mult-com.tex}

\loadmkivfile{luat-ini.tex}
% \loadmkivfile{luat-lib.tex}
\loadmkivfile{luat-lmx.tex}

\loadmkivfile{luat-uni.tex}

\loadmkivfile{char-ini.tex}
\loadmkivfile{char-def.tex}
\loadmkivfile{char-utf.tex}

%D We also use some third party macros. These are loaded by
%D saying:

\loadcorefile{thrd-ran.tex}  % based on: Donald Arseneau
\loadcorefile{thrd-trg.tex}  % based on: David Carlisle

%D Now we're ready for some general support modules. These
%D modules implement some basic typesetting functionality.

\loadcorefile{core-var.tex}
\loadmkivfile{luat-deb.tex}

\loadcorefile{supp-box.tex}
\loadcorefile{supp-mrk.tex}
\loadcorefile{supp-vis.tex}
\loadcorefile{supp-fun.tex}
\loadcorefile{supp-eps.tex}
\loadcorefile{supp-spe.tex}
\loadcorefile{supp-ran.tex}
\loadcorefile{supp-mps.tex}
\loadcorefile{supp-tpi.tex}
\loadcorefile{supp-mat.tex}
\loadcorefile{supp-ali.tex}
\loadcorefile{supp-num.tex}

%D The next module deals with language specific typographic
%D extensions.

\loadcorefile{typo-ini.tex}

%D Verbatim typesetting is implemented in a separate class of
%D modules. The pretty typesetting modules are loaded at run
%D time.

\loadcorefile{verb-ini.tex}

%D The following modules are not sequentially dependent,
%D i.e. they have ugly dependencies, which will be cleaned
%D up by adding more overloading.

%D When loading the font, color and special modules, we need a
%D bit more advanced file handling as well as some general
%D variables, and features, so next we load:

\loadcorefile{core-ins.tex}
\loadcorefile{core-fil.tex}
\loadcorefile{core-con.tex}

%D We already need some synonyms (patterns). At runtime this
%D file will be reloaded.

\loadcorefile{cont-fil.tex}

%D \CONTEXT\ does not implement its own table handling. We
%D just go for the best there is and load \TABLE. Just to be
%D sure we do it here, before we redefine \type{|}.

\loadcorefile{thrd-tab.tex}  % based on: Michael Wichura / will be reimplemented

%D Here comes the last support modules. They take care of
%D some language specific things.

%loadcorefile{supp-lan.tex} % replaced by lang-mis
\loadcorefile{supp-pat.tex}

%D The next few modules do what their names state. They
%D load additional definition modules when needed.

\loadcorefile{regi-ini.tex}
\loadcorefile{enco-ini.tex}
\loadcorefile{filt-ini.tex}
\loadcorefile{hand-ini.tex}
\loadcorefile{regi-syn.tex}
\loadcorefile{lang-ini.tex}
\loadcorefile{lang-ctx.tex}
\loadcorefile{lang-dis.tex}
\loadcorefile{unic-ini.tex}

% \readfile{lang-url.pat}{}{} % test

\loadcorefile{core-gen.tex}
\loadcorefile{core-new.tex}
\loadcorefile{core-uti.tex}
\loadcorefile{core-two.tex}
\loadcorefile{core-stg.tex}

\loadcorefile{spec-mis.tex}
\loadcorefile{spec-ini.tex}
\loadcorefile{spec-def.tex}
\loadcorefile{spec-var.tex}

\loadcorefile{colo-ini.tex}
\loadcorefile{colo-ext.tex}

%D For the moment we load a lot of languages. In the future
%D we'll have to be more space conservative.

\loadcorefile{lang-mis.tex}
\loadcorefile{lang-spe.tex}
\loadcorefile{lang-lab.tex}

\loadcorefile{lang-ger.tex}
\loadcorefile{lang-ita.tex}
\loadcorefile{lang-sla.tex}

\loadcorefile{lang-alt.tex}
\loadcorefile{lang-ana.tex}
\loadcorefile{lang-art.tex}
\loadcorefile{lang-bal.tex}
\loadcorefile{lang-cel.tex}
\loadcorefile{lang-grk.tex}
\loadcorefile{lang-ind.tex}
\loadcorefile{lang-ura.tex}

\loadcorefile{lang-vn.tex}

%D All kind of symbols are handled in:

\loadcorefile{symb-ini.tex}

%D Sorting:

\loadcorefile{sort-ini.tex}

%D Next we load some core macro's. These implement the
%D macros' that are seen by the users. The order of loading
%D is important, due to dependancies.

\loadcorefile{core-spa.tex}
\loadcorefile{core-grd.tex}
\loadcorefile{core-mar.tex}
\loadcorefile{core-pos.tex}
\loadcorefile{core-mak.tex}
\loadcorefile{core-dat.tex}
\loadcorefile{core-ver.tex}
\loadcorefile{core-rul.tex}
\loadcorefile{core-vis.tex}
\loadcorefile{core-num.tex}
\loadcorefile{core-tsp.tex}
\loadcorefile{core-tab.tex}
\loadcorefile{core-nav.tex}
\loadcorefile{core-ref.tex}
\loadcorefile{core-obj.tex}
\loadcorefile{core-lst.tex}
\loadcorefile{core-itm.tex}
\loadcorefile{core-des.tex}
\loadcorefile{core-mat.tex}
\loadcorefile{core-syn.tex}
\loadcorefile{core-sys.tex}

\loadcorefile{page-ini.tex}
\loadcorefile{page-bck.tex}
\loadcorefile{page-not.tex}
\loadcorefile{page-one.tex}
\loadcorefile{page-lay.tex}
\loadcorefile{page-log.tex}
\loadcorefile{page-txt.tex}
\loadcorefile{page-sid.tex}
\loadcorefile{page-flt.tex}
\loadcorefile{page-mul.tex}
\loadcorefile{page-set.tex}
\loadcorefile{page-lyr.tex}
\loadcorefile{page-mak.tex}
\loadcorefile{page-num.tex}
\loadcorefile{page-lin.tex}
\loadcorefile{page-mar.tex}

\loadcorefile{core-job.tex} % why so late?

% so far

\loadcorefile{core-sec.tex}
\loadcorefile{core-buf.tex}
\loadcorefile{core-blk.tex}
\loadcorefile{page-imp.tex}
\loadcorefile{core-tbl.tex}
\loadcorefile{core-int.tex}
\loadcorefile{core-ntb.tex}
\loadcorefile{core-ltb.tex}

%D A few more languages, that have specifics using core
%D functionality:

\loadcorefile{lang-chi.tex}
\loadcorefile{lang-jap.tex}

%D How about fill||in fields and related stuff?

\loadcorefile{java-ini.tex}
\loadcorefile{core-fld.tex}
\loadcorefile{core-hlp.tex}

%D Registers can depend on fields, so we load that now.

\loadcorefile{core-reg.tex}

%D Of course we do need fonts. There are no \TFM\ files
%D loaded yet, so the format file is independant of their
%D content. Here we also redefine \type{\it} as {\it italic}
%D instead of italian.

\loadcorefile{font-ini.tex}
\loadcorefile{font-uni.tex}
\loadcorefile{font-bfm.tex}

\loadcorefile{enco-pfr.tex}

\loadcorefile{type-ini.tex}
\loadcorefile{type-def.tex}

%D Properties. Don't ask.

\loadcorefile{prop-ini.tex}
\loadcorefile{prop-lay.tex}
\loadcorefile{prop-mis.tex}

%D Like languages, fonts, encodings and symbols, \METAPOST\
%D support is also organized in its own class of modules.

\loadcorefile{meta-ini.tex}
\loadcorefile{meta-pdf.tex}
\loadcorefile{meta-pag.tex}
\loadcorefile{meta-tex.tex}

%D Special page handling (maybe even later)

\loadcorefile{page-flw.tex}
\loadcorefile{page-spr.tex}
\loadcorefile{page-plg.tex}
\loadcorefile{page-str.tex}

%D Hm.

\loadcorefile{core-pgr.tex}
\loadcorefile{core-bar.tex}
\loadcorefile{core-snc.tex}


%D Math.

\loadcorefile{math-ini.tex}
\loadcorefile{math-ext.tex}

%D Now we're ready for more core modules.

\loadcorefile{core-fnt.tex}
\loadcorefile{core-not.tex}
\loadcorefile{core-lnt.tex}

\loadcorefile{core-mis.tex}

\loadcorefile{core-trf.tex}
\loadcorefile{core-fig.tex}
\loadcorefile{core-par.tex}

\loadcorefile{core-box.tex}
\loadcorefile{page-app.tex}
\loadcorefile{meta-fig.tex}

%D Language specific spacing.

\loadcorefile{lang-spa.tex}

%D Only the basic XML parser and remapper are part of the core.
%D These macros are loaded last since they overload and|/|or
%D extend previously defined ones.

\loadcorefile{xtag-ini.tex}
\loadcorefile{xtag-ext.tex}
\loadcorefile{xtag-prs.tex}
\loadcorefile{xtag-map.tex}
\loadcorefile{xtag-stk.tex}
\loadcorefile{xtag-exp.tex}
\loadcorefile{xtag-pre.tex}
\loadcorefile{xtag-xsd.tex}
\loadcorefile{xtag-rng.tex}
%loadcorefile{xtag-ent.tex}

%D How about this:

\loadcorefile{meta-xml.tex}

%D \TEX\ related logo's are always typeset in a special way.
%D Here they come:

\loadcorefile{cont-log.tex}

%D This one overloads af few things:

\loadcorefile{core-ctx.tex}

%D Defaults go here (more will be moved to this module
%D later):

\loadcorefile{core-lme.tex}
\loadcorefile{core-ini.tex}
\loadcorefile{core-def.tex}

%D Preloaded modules (some need xml support):

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

%D At run time, a few more files are loaded, like:
%D
%D \startitemize[packed]
%D \item \type{cont-sys}: local (system dependant) defaults
%D \item \type{cont-old}: substitutes for old (obsolete) macros
%D \item \type{cont-new}: new macro implementations (for testing)
%D \item \type{cont-fil}: filename and module synonyms
%D \stopitemize

%D Just to keep the user busy for a while, we say:

\startinterface english

\writebanner{This package is based on Plain TeX. It uses an adapted version of the}
\writebanner{extended mark mechanism of J. Fox (1987) and a few parts of the sidefloat}
\writebanner{mechanism of D. Comenetz (1993). Most of D.E. Knuth's Plain TeX}
\writebanner{(\fmtversion) is available and can be used without problems. This package}
\writebanner{uses TaBlE, a package designed and copyrighted by M.J. Wichura (1988).}
\writebanner{Only a few auxiliary files are generated, of which some must be processed}
\writebanner{by TeXExec.}

\stopinterface

\startinterface dutch

\writebanner{Dit pakket is gebaseerd op Plain TeX. Er wordt gebruik gemaakt van een}
\writebanner{aangepaste versie van het mark mechanisme van J. Fox (1987) en onderdelen}
\writebanner{van het sidefloat mechanisme van D. Comenetz (1993). De functionaliteit}
\writebanner{van D.E. Knuth's Plain TeX (\fmtversion) is grotendeels beschikbaar en}
\writebanner{kan zonder problemen worden gebruikt. Dit pakket gebruikt TaBlE, ontworpen door}
\writebanner{M.J. Wichura (1988), die ook het auteursrecht bezit. Er worden slechts een}
\writebanner{paar hulpfiles gegenereerd, waarvan er enkele moeten worden bewerkt door}
\writebanner{TeXExec.}

\stopinterface

\startinterface german

\writebanner{Dieses Paket basiert auf Plain-TeX und benutzt eine angepasste Version}
\writebanner{des erweiterten mark-Mechanismus von J. Fox (1987) und einige Teile des}
\writebanner{sidefloat-Mechanismus von D. Comenetz (1993). Ein Grossteil D.E. Knuths}
\writebanner{Plain-TeX (\fmtversion) ist verfuegbar und kann ohne Probleme benutzt werden.}
\writebanner{Dieses Paket benutzt TaBlE, ein von M.J. Wichura (1988) erstelltes und}
\writebanner{geschuetztes Paket. Nur einige Hilfsdateien werden erstellt; einige davon}
\writebanner{muessen von TeXExec bearbeitet werden.}

\stopinterface

\startinterface czech

\writebanner{Tento balik je zalozen na Plain TeXu. Pouziva prizpusobenou verzi}
\writebanner{rozsireneho znackovaciho mechanismu J. Foxe (1987) a nekolik casti}
\writebanner{sidefloat mechanismu D. Comenetze (1993). Vetsina prikazu Plain TeXu}
\writebanner{D. E. Knutha (\fmtversion) je dostupna a muze byt bez problemu pouzita.}
\writebanner{Tento balik pouziva balik TaBlE, ktery vytvoril M. J. Wichura (1988).}
\writebanner{Je generovano jen nekolik pomocnych souboru, z nichz nektere musi byt}
\writebanner{zpracovany programem TeXExec.}

\stopinterface

\startinterface italian

\writebanner{Questo pacchetto è basato sul Plain TeX. Usa una versione adattata del}
\writebanner{meccanismo di marcatura esteso di J. Fox (1987) ad alcune parti del}
\writebanner{meccanismo per gli oggetti mobili laterali di D. Comenetz (1993).}
\writebanner{La maggior parte del Plain TeX (\fmtversion) di D.E. Knuth è disponibile}
\writebanner{e può essere usata senza problemi. Questo pacchetto usa TaBlE,}
\writebanner{un pacchetto progettato da e con diritti di copia di M.J. Wichura (1988).}
\writebanner{Vengono generati pochi file ausiliari, alcuni dei quali devono essere}
\writebanner{elaborati da TeXExec.}

\stopinterface

\startinterface romanian

\writebanner{Acest pachet este bazat pe Plain TeX. Foloseste o versiune adaptata a}
\writebanner{mecanismului extins de marcare a lui J. Fox (1987) si cateva parti a mecanismului }
\writebanner{blocurilor marginale a lui D. Comenetz (1993). Cea mai mare parte a Plain Tex}
\writebanner{(\fmtversion) a lui D.E. Knuth este disponibila si poate fi folosita fara probleme.}
\writebanner{Acest pachet foloseste TaBlE, un pachet proiectat si creat de M.J. Wichura (1988).}
\writebanner{Numai un numar de fisiere auxiliare sunt generate, din care unele trebuie procesate}
\writebanner{de catre TeXExec.}

\stopinterface

\startinterface french

\writebanner{Ce package est basé sur Plain TeX. Il utilise une version modifiée du}
\writebanner{mécanisme de marquage étendu de J. Fox (1987) et une partie du}
\writebanner{mécanisme de placement latéral des flottants de D. Comenetz (1993). La}
\writebanner{majeure partie de Plain TeX (\fmtversion) de D.E. Knuth est disponible}
\writebanner{et peut être utilisée sans problèmes. Ce package utilise TaBlE, un}
\writebanner{package conçu et copyrighté par M.J. Wichura (1988). Seul quelques}
\writebanner{fichiers auxiliaire sont générés, dont certains doivent être traités}
\writebanner{par TeXExec.}

\stopinterface

\edef\copyrightversion
  {Copyright 1990-\the\normalyear\normalspace /
   PRAGMA ADE / J. Hagen - A.F. Otten}

\writeline\writebanner{\copyrightversion}\writeline

% %D Except from english, no hyphenation patterns are loaded
% %D yet. Users can specify their needs in the next module:
%
% \input cont-usr.tex

%D Let's quit this file when doing a \type {cont-..} generation.

\doifparentfileelse{context}{\donothing}{\endinput}

%D Unless we're generating a \type {cont-..} format, we also
%D do the following.

%D Except from english, no hyphenation patterns are loaded
%D yet. Users can specify their needs in the next module:

\loaduserspecifications

%D Next we default to the same language as the interface.

\unprotect

\installlanguage [\s!en] [\c!state=\v!start]

\startinterface english

  \installlanguage [\s!uk] [\c!state=\v!start]

\stopinterface

\appendtoks \language     [\s!en] \to \everyjob
\appendtoks \mainlanguage [\s!en] \to \everyjob

\startinterface german

  \installlanguage [\s!de] [\c!state=\v!start]

  \appendtoks \language     [\s!de] \to \everyjob
  \appendtoks \mainlanguage [\s!de] \to \everyjob

\stopinterface

\startinterface dutch

  \installlanguage [\s!nl] [\c!state=\v!start]

  \appendtoks \language     [\s!nl] \to \everyjob
  \appendtoks \mainlanguage [\s!nl] \to \everyjob

\stopinterface

\startinterface czech

  \installlanguage [\s!cz] [\c!state=\v!start]

  \appendtoks \language     [\s!cz] \to \everyjob
  \appendtoks \mainlanguage [\s!cz] \to \everyjob

\stopinterface

\startinterface italian

  \installlanguage [\s!it] [\c!state=\v!start]

  \appendtoks \language     [\s!it] \to \everyjob
  \appendtoks \mainlanguage [\s!it] \to \everyjob

\stopinterface

\startinterface romanian

  \installlanguage [\s!ro] [\c!state=\v!start]

  \appendtoks \language     [\s!ro] \to \everyjob
  \appendtoks \mainlanguage [\s!ro] \to \everyjob

\stopinterface

\startinterface french

  \installlanguage [\s!fr] [\c!state=\v!start]

  \appendtoks \language     [\s!fr] \to \everyjob
  \appendtoks \mainlanguage [\s!fr] \to \everyjob

\stopinterface

\protect

%D Finally we (pre)load some fonts.

\setupbodyfont [cmr,rm,12pt]

%D The next hook can be used to generate a local (extended)
%D format. This file is only searched for at the current
%D path.

% \readlocfile{cont-def.tex}
%   {\writestatus{loading}{adding extensions from cont-def}}
%   {}

%D Now dumping the format is all that's left to be done.

\errorstopmode \dump

\endinput
