%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.11.29 09:55} %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} %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