%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Module: ZzTeX Main Module % % Synopsis: This is the main module of ZzTeX. It sets up character % categories and loads all the other modules. % % Note: ZzTeX assumes the use of DVIPSONE, the PostScript DVI program % from Y&Y. % % Author: Paul C. Anagnostopoulos % Created: 27 March 1989 % % Copyright 1989--2020 by Paul C. Anagnostopoulos % under The MIT License (opensource.org/licenses/MIT) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % If ZzTeX is already loaded, quit immediately. \ifx \ZzTeX\zzzundefinedzzz \else \message{... using format}\endinput \fi % Character Categories % --------- ---------- % Character INITEX ZzTeX Notes % % NUL ignored invalid Ignored in Plain TeX. % TAB invalid Space in Plain TeX. % FORMFEED active: \par % RETURN end of line end of line % space space space % # parameter % $ math shift % & alignment tab % % comment comment % @ other active: command % letters letter letter % \ escape escape % ^ superscript % _ subscript % { begin group % } end group % ~ active: tie % DELETE invalid invalid % others other invalid \chardef \catescape = 0 % Escape character (\). %^catcode \chardef \catbegin = 1 % Begin group ({). %^catcode \chardef \catend = 2 % End group (}). %^catcode \chardef \catmath = 3 % Math mode ($). %^catcode \chardef \catalign = 4 % Alignment tab (&). %^catcode \chardef \catendofline = 5 % End of line. %^catcode \chardef \catparameter = 6 % Parameter (#). %^catcode \chardef \catsuperscript = 7 % Superscript (^). %^catcode \chardef \catsubscript = 8 % Subscript (_). %^catcode \chardef \catignored = 9 % Ignored character. %^catcode \chardef \catspace = 10 % Space. %^catcode \chardef \catletter = 11 % Letter. %^catcode \chardef \catother = 12 % Other. %^catcode \chardef \catactive = 13 % Active character (tilde). %^catcode \chardef \catcomment = 14 % Comment (percent). %^catcode \chardef \catinvalid = 15 % Invalid character. %^catcode \chardef \catcsname = 16 \catcode`\^ = \catsuperscript \catcode`\^^@ = \catinvalid \catcode`\^^I = \catinvalid \catcode`\^^L = \catactive \catcode`\^^M = \catendofline \catcode`\ = \catspace \catcode`\# = \catparameter \catcode`\$ = \catmath \catcode`\& = \catalign \catcode`\% = \catcomment \catcode`\@ = \catactive \catcode`\\ = \catescape \catcode`\_ = \catsubscript \catcode`\{ = \catbegin \catcode`\} = \catend \catcode`\~ = \catactive \catcode`\^^? = \catinvalid % Characters "80--"FF are catcoded as invalid in zzmisc. \outer \def ^^L{\par} % Atsign Commands % ------ -------- % At-sign commands are reserved for extended commands within blocks. % \defineatsigncommand makes a local definition! \def \defineatsigncommand @#1{% char args {body} \withname\def{\zat#1}} \def @#1{% char %%%\relax % Stops \omit search in an alignment cell. \if \undefinedp{\zat#1}% \error{undefat}{The atsign command `\string@#1' is not defined in this block}% \fi \name{\zat#1}} % Markers % ------- % This command does nothing, but it provides a name on which to % hang a comment for ZzExplore. \def \definemarker #1{% {marker-name} } % Paragraph Programs % --------- -------- % We maintain a list of little programs that must be executed % at the beginning of every paragraph. A program is declared % with `\declareeverypar'. The programs are executed with % `\requiredeverypar'. \def \everyparlist {} \def \declareeverypar #1{% {code} \append{#1}{\everyparlist}} \def \requiredeverypar {% \maplist{##1}{\everyparlist}} % Modules % ------- \def \zremovePlaindef #1{% \let #1= \relax} \input zzprog % Must be first. \input zzreg % Must be second. \input zzerror \input zzhelp \input zzio \input zzfont \input zzvmode \input zzhmode \input zzhmodeb \input zzhyph \input zzltrspc \input zzblock \input zzxref \input zzdoc \input zzdiv \input zzpage \input zzoverlay \input zzindexv1 % Must precede body files. \input zzsect \input zztext \input zztabbing \input zznote \input zzlist \input zztabularv3 \input zzfloat \input zzart \input zztag \input zzmath \input zzfront \input zzps \input zzhyper \input zzmisc % Must be next to last. \input zzplain % Must be last. % Identification % -------------- \def \TeX {T\kern-.1667em \lower .55ex \hbox{E}\kern-.1em X} \def \ZzTeX {Z\kern -.02em z\kern -.05em \TeX} \input zzver\relax \everyjob = {\messagenl{__Welcome to ZzTeX version \ZzTeXversion__}} \def \fmtname {ZzTeX} \edef \fmtversion {\ZzTeXversion} \messagenl{__Welcome to ZzTeX version \ZzTeXversion__} \if \orp{\hmodep}{\posp{\pagetotal}} \zzerror{Spurious paragraph text appears in the ZzTeX files}% \fi