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

% 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

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

\def\contextversion{2005.01.31}

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

\input syst-pln.tex % english / stripped plain
\input syst-prm.tex % english / saved primitives (will be extended)

\input syst-etx.tex % english / etex
\input syst-omg.tex % english / omega-aleph
\input syst-xtx.tex % english / xetex
\input syst-gen.tex % english
\input syst-ext.tex % english
\input syst-new.tex % english
\input syst-con.tex % english

\input math-pln.tex % english / basic plain math

%D To enable selective loading, we say:

\CONTEXTtrue

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

\input supp-ini.tex % english
\input supp-fil.tex % english
\input supp-dir.tex % english

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

\input mult-ini.tex % english
\input mult-sys.tex % english
\input mult-con.tex % english
\input mult-com.tex % english

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

\input thrd-ran.tex % english / based on: Donald Arseneau
\input thrd-trg.tex % english / based on: David Carlisle

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

\input supp-box.tex % english
\input supp-mrk.tex % english
\input supp-vis.tex % english
\input supp-fun.tex % english
\input supp-eps.tex % english
\input supp-pdf.tex % english
\input supp-spe.tex % english
\input supp-mps.tex % english
\input supp-mpe.tex % english
\input supp-tpi.tex % english
\input supp-mat.tex % english
\input supp-ran.tex % english
\input supp-ali.tex % english

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

\input typo-ini.tex % english / I must not forget about this module

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

\input verb-ini.tex % english / replaces supp-ver

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

\input core-var.tex % english
\input core-ins.tex % english
\input core-fil.tex % english
\input core-con.tex % english

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

\input cont-fil.tex % english

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

\input thrd-tab.tex % english / based on: Michael Wichura / will be reimplemented

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

\input supp-lan.tex % english
\input supp-num.tex % english

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

\input enco-ini.tex % english
\input filt-ini.tex % english
\input hand-ini.tex % english
\input regi-ini.tex % english
\input lang-ini.tex % english
\input unic-ini.tex % english

\input colo-ini.tex % english
\input colo-ext.tex % english

\input spec-mis.tex % english
\input spec-ini.tex % english
\input spec-def.tex % english
\input spec-var.tex % english

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

\input lang-spe.tex % english
\input lang-lab.tex % english

\input lang-ger.tex % english
\input lang-ita.tex % english
\input lang-sla.tex % english

\input lang-alt.tex % english
\input lang-ana.tex % english
\input lang-art.tex % english
\input lang-bal.tex % english
\input lang-cel.tex % english
\input lang-grk.tex % english
\input lang-ind.tex % english
\input lang-ura.tex % english

\input lang-vn.tex  % english / vietnamese, maybe this belongs in lang-ita

%D All kind of symbols are handled in:

\input symb-ini.tex % english

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

\input core-gen.tex
\input core-new.tex
\input core-uti.tex
\input core-mar.tex
\input core-mak.tex
\input core-dat.tex
\input core-grd.tex
\input core-ver.tex
\input core-vis.tex
%input core-con.tex
\input core-rul.tex % english
\input core-tab.tex
\input core-nav.tex
\input core-ref.tex
\input core-obj.tex % english
\input core-buf.tex
\input core-lst.tex
\input core-num.tex % english
\input core-itm.tex
\input core-des.tex
\input core-mat.tex % english
\input core-syn.tex
\input core-spa.tex
\input core-sys.tex

\input page-ini.tex
\input page-not.tex % english
\input page-one.tex
\input page-lay.tex
\input page-log.tex
\input page-txt.tex
\input page-sid.tex
\input page-flt.tex
\input page-mul.tex
\input page-set.tex
\input page-lyr.tex % english
\input page-mak.tex
\input page-num.tex % english
\input page-lin.tex
\input page-mar.tex % english
\input page-bck.tex % english
\input page-app.tex % english / unfinished
\input page-flw.tex % english / experimental: flows
\input page-spr.tex % english / experimental: spreads

\input core-job.tex

% so far

\input core-sec.tex
\input page-imp.tex
\input core-tbl.tex
\input core-int.tex
\input core-ntb.tex
\input core-ltb.tex

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

\input meta-ini.tex % english
\input meta-pag.tex % english
\input meta-fig.tex % english

%D On which the next one depends:

\input core-pos.tex % english
\input core-snc.tex % english

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

\input lang-chi.tex % english

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

\input java-ini.tex % english / needs a cleanup
\input core-fld.tex % english / needs a cleanup
\input core-hlp.tex % english / will become a m-module

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

\input 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.

\input font-ini.tex % english
\input font-uni.tex % english
\input font-bfm.tex % english

\input type-ini.tex % english

\input prop-ini.tex % english
\input prop-lay.tex % english / needs core-ref.tex
\input prop-mis.tex % english

\input math-ini.tex % english / needs enco-ini.tex

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

\input core-fnt.tex % english / todo: document setupinitial !
\input core-not.tex % english
\input core-lnt.tex % english / to be documented (with idris)

\input core-mis.tex

\input core-fig.tex % english / after page body
\input core-par.tex % english / maybe this should become a m-module

\input core-box.tex % english

%D Language specific spacing.

\input lang-spa.tex % english

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

\input xtag-ini.tex % english
\input xtag-ext.tex % english
\input xtag-prs.tex % english
\input xtag-map.tex % english
\input xtag-exp.tex % english
\input xtag-pre.tex % english
\input xtag-xsd.tex % english
\input xtag-rng.tex % english
%input xtag-ent.tex % english

%D How about this:

\input meta-xml.tex % english / to be documented

% %D The next two modules implement some additional
% %D functionality concerning classes of documents and output.
% %D These modules probably will be replaced some day.
%
% \input docs-ini.tex % obsolete
% \input list-ini.tex % obsolete

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

\input cont-log.tex % english

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

\input core-ini.tex
\input core-def.tex

%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

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

\stopinterface

\startinterface dutch

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

\stopinterface

\startinterface german

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

\stopinterface

\startinterface czech

\writestring{Tento balik je zalozen na Plain TeXu. Pouziva prizpusobenou verzi}
\writestring{rozsireneho znackovaciho mechanismu J. Foxe (1987) a nekolik casti}
\writestring{sidefloat mechanismu D. Comenetze (1993). Vetsina prikazu Plain TeXu}
\writestring{D. E. Knutha (\fmtversion) je dostupna a muze byt bez problemu pouzita.}
\writestring{Tento balik pouziva balik TaBlE, ktery vytvoril M. J. Wichura (1988).}
\writestring{Je generovano jen nekolik pomocnych souboru, z nichz nektere musi byt}
\writestring{zpracovany programem TeXUtil (\utilityversion). Aktualni verze}
\writestring{}
\writestring{THE CZECH USER INTERFACE IS STILL UNDER DEVELOPMENT!}

\stopinterface

\startinterface italian

\writestring{Questo pacchetto è basato sul Plain TeX. Usa una versione adattata del}
\writestring{meccanismo di marcatura esteso di J. Fox (1987) ad alcune parti del}
\writestring{meccanismo per gli oggetti mobili laterali di D. Comenetz (1993).}
\writestring{La maggior parte del Plain TeX (\fmtversion) di D.E. Knuth è disponibile}
\writestring{e può essere usata senza problemi. Questo pacchetto usa TaBlE,}
\writestring{un pacchetto progettato da e con diritti di copia di M.J. Wichura (1988).}
\writestring{Vengono generati pochi file ausiliari, alcuni dei quali devono essere}
\writestring{elaborati da TeXUtil (\utilityversion). La versione attuale del blocco}
\writestring{è \blockversion.}
\writestring{}
\writestring{L'INTERFACCIA UTENTE ITALIANA E' ANCORA IN VIA DI SVILUPPO!}
\writestring{THE ITALIAN USER INTERFACE IS STILL UNDER DEVELOPMENT!}

\stopinterface

\startinterface romanian

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

\stopinterface

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

\writeline\writestring{\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

\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
