% This is `mltrip.tex' for MLTeX v2.2 (as of December 17, 1995). % % A test file to check for correct MLTeX implementations similar to % `trip.tex', Knuth's torture test for TeX. % % Copyright (C) 1997 by B. Raichle; all rights are reserved. % % MLTeX is copyright (C) 1990-92 by Michael J. Ferguson; all rights are reserved. % MLTeX Version 2.2 is copyright (C) 1995 by B. Raichle; all rights are reserved. % The TeX program is copyright (C) 1982 by D. E. Knuth. % TeX is a trademark of the American Mathematical Society. % % % Usage: % % 1. Run iniTeX with the MLTeX extensions on this file. % Do not try to use plain-TeX or LaTeX. % 2. Compare the produced log file with the one provided. % 3. Take a look at the dvi file and compare it with the % description at the end of the log file. % 4. (optional) Use dvitype to convert the dvi file to the % ASCII representation of its contents using these options: % Output level = 2 % Starting page = * (default) % Number of pages = 1000000 (default) % Resolution = 7227/100 % New magnification = 0 (default) % Compare the output with the provided file `mltrip.typ'. % % % Needs: % % - MLTeX v2.2 % - font metric file cmr10.tfm % - dvitype (if you want to compare the dvi files) % % % Changes: % % 97/01/06 v1.0a % - initial version % 97/01/08 v1.0b % - added error count + \inputlineno test, fixed log output % 97/01/14 v1.0c % - added tests for math character substitution % \catcode`\{=1 \catcode`\}=2 \catcode`\$=3 \catcode`\#=6 \catcode`\^=7 \endlinechar=`\^^M\newlinechar=`\^^J \def\space{ } \nonstopmode % \def\typeout#1{\immediate\write16{#1}} \countdef\errorcount=254 \errorcount=0 \def\error#1{\advance\errorcount 1% \typeout{^^J^^J\space\space\space ERROR: #1^^J^^J}} % \typeout{^^J"Trip" test for MLTeX implementations (1997/01/14 v1.0c [br])^^J} % % check for plain-TeX: % we have to ensure that _no_ fonts are preloaded \expandafter\ifx\csname active\endcsname\relax \else \typeout{Please (Ini)TeX this file, no plain-TeX, no LaTeX!^^J} \expandafter \endinput\csname @@end\expandafter\endcsname\expandafter\end\fi\relax % check for MLTeX \expandafter\ifx\csname charsubdef\endcsname\relax \typeout{This test file can only be used with MLTeX!^^J} \expandafter\endinput\expandafter\end\fi\relax % check for MLTeX v2.2 % (former MLTeX versions have initialized \charsubdefmax with 0) \ifnum\charsubdefmax<0 \else \typeout{...ouch, an old MLTeX version!^^J% This test file can only be used with MLTeX v2.2 or newer!^^J} \expandafter\endinput\expandafter\end\fi\relax % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \typeout{Test font load bug (in MLTeX < v2.2):} % define substitution of an existing char with a non-existing base char \charsubdef `\A=`\a 128 % load font (which should be preloaded before!) \font\test=cmr10 \relax \test \textfont0=\test \textfont1=\test \font\smalltest=cmr10 \relax % our symbols font \fontdimen22\smalltest=7pt \textfont2=\smalltest \scriptfont2=\smalltest \scriptscriptfont2=\smalltest \font\bigtest=cmr10 \relax % our extension font \textfont3=\bigtest \scriptfont3=\bigtest \scriptscriptfont3=\bigtest \thinmuskip=18mu plus 18mu \medmuskip=36mu plus 9mu minus 18mu \thickmuskip=54mu minus 18mu \relax % \hsize=2in \parindent=.5pt \parfillskip=0pt plus1fil\relax \baselineskip=12pt \topskip=10pt \relax \tracingonline=1\showboxbreadth=255\showboxdepth=255 \tracinglostchars=1 %%%\tracingcharsubdef=1 \message{done.} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \typeout{Test assignments to \string\charsubdefmax:} \charsubdefmax=-1 % reset because of \charsubdef`\A ... \begingroup %%%\tracingrestores=10 \count0=\charsubdefmax \begingroup \charsubdef 224 = `\` `a \ifnum\charsubdefmax=224 \else \error{\string\charsubdefmax\space set incorrectly (1)!}\fi \endgroup \ifnum\count0=\charsubdefmax \else \error{\string\charsubdefmax\space reset incorrectly (1)!}\fi % Test of a bug in MLTeX v2.2! \begingroup \charsubdef 228 = `\" `a \global\charsubdef 224 = `\` `a \ifnum\charsubdefmax=228\else \error{\string\charsubdefmax\space set incorrectly (2)!}\fi \endgroup \ifnum\charsubdefmax=-1 \else % BUG: 224 was expected, not -1! \error{\string\charsubdefmax\space reset incorrectly (2)!}\fi % ...instead we use a simpler test: \begingroup \charsubdef 226 = `\^ `a \charsubdef 224 = `\` `a \ifnum\charsubdefmax=226 \else \error{\string\charsubdefmax\space set incorrectly (3)!}\fi \global\charsubdef 228 = `\" `a \endgroup \ifnum\charsubdefmax=228 \else \error{\string\charsubdefmax\space reset incorrectly (3)!}\fi % reset former value of \charsubdef and \charsubdefmax \global\charsubdef 224=0 0 \global\charsubdef 228=0 0 \global\charsubdefmax=\count0 \endgroup \message{done.} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \typeout{Test char substitution, box packing and repacking:} \charsubdef 224 = 18 `a % "E0 \`a \charsubdef 225 = 19 `a % "E1 \'a \charsubdef 226 = 94 `a % "E2 \^a \charsubdef 228 = 127 `a % "E4 \"a % define some substitutions whose characters doesn't exist in cmr10: \charsubdef 192 = 200 `a \charsubdef 193 = `a 129 \charsubdef 194 = 128 129 % \setbox2=\hbox{\char`a}\setbox4=\hbox{\char0} \message{<2 missing char warnings:} \setbox0=\hbox{\char224\char192\char193\char194} \message{>,} \ifdim\wd0=2\wd2 \else \error{box width dimension set incorrectly (1)!}\fi % \setbox0=\hbox{\char224} \ifdim\wd0=\wd2 \else \error{box width dimension set incorrectly (2)!}\fi % re-access character dimensions while substitution is disabled % (=> warning message, width of \char224 is first char in font, i.e. \char0) \message{<1 missing substitution warning:} {\charsubdefmax=0 \global\setbox0=\hbox{\unhbox0}} \message{>,} \ifdim\wd0=\wd4 \else \error{box width dimension set incorrectly (3)!}\fi % re-box it again (=> no warning message!) \setbox0=\hbox{\unhbox0} \ifdim\wd0=\wd2 \else \error{box width dimension set incorrectly (4)!}\fi % \message{<2 missing substitution warnings:} \setbox0=\vbox{\char224 \charsubdefmax=0\par} \message{>,} \message{done.} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%\typeout{Test math character substitutions:} %%\setbox0=\hbox{$\mathchar"2E0 % |fetch| %% \mathaccent"70E1 a % |fetch| + |make_math_accent| %% \mathaccent"7013 \mathchar"2E2 % |fetch| %% \mathop{\mathchar"0E4}{}% |fetch| %% \delimiter"43E03E1 % |var_delimiter| %% $}\showbox0 %%\message{done.} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \typeout{Test dvi output with substitutions:} % define correct substitutions \charsubdef 192 = 18 `a % \`a \charsubdef 193 = 19 `a % \'a \charsubdef 194 = 94 `a % \^a \charsubdef 196 = 127 `a % \"a \charsubdef 199 = 24 `c % \c{c} % define correct substitutions \charsubdef 204 = 18 16 % \`\i \charsubdef 205 = 19 16 % \'\i \charsubdef 206 = 94 16 % \^\i \charsubdef 208 = 127 16 % \"\i \charsubdef 207 = 24 `i % \c{i} % define substitutions with non-existing characters \charsubdef 210 = 128 `a % \`a \charsubdef 211 = 128 `a % \'a \charsubdef 212 = 128 `a % \^a \charsubdef 214 = 128 `a % \"a \charsubdef 213 = 128 `c % \c{c} % define correct substitutions \charsubdef 224 = 18 `a % \`a \charsubdef 225 = 19 `a % \'a \charsubdef 226 = 94 `a % \^a \charsubdef 228 = 127 `a % \"a \charsubdef 227 = 24 `c % \c{c} % \setbox0=\vbox{% \def\row#1 #2 #3 #4 {--\char#1--\hbox{\char#2}--\char#3--\char#4--\par}% a-grave: \row 192 204 210 224 % a-acute: \row 193 205 211 225 % a-circonflex: \row 194 206 212 226 % a-umlaut: \row 196 208 214 228 % c-cedille: \row 199 207 213 227 % } % % redefine the correct substitutions \charsubdef 204 = 18 `a % \`a <= \`\i \charsubdef 205 = 19 `a % \'a <= \'\i \charsubdef 206 = 94 `a % \^a <= \^\i \charsubdef 208 = 127 `a % \"a <= \"\i \charsubdef 207 = 24 `c % \c{c} <= \c\i % \begingroup \message{,} \endgroup \message{done.} % \def\row#1#2#3{\space\space #1: -- \string#2#3 -- \string#2#3-- -- --} \typeout{^^J^^JTo complete the test:^^J=====================^^J^^J% 1. Compare the log file with the one provided.^^J% 2. Compare the dvi output:^^J% The dvi file should contain 5 lines of text, each line beginning^^J% with an ASCII description of the accented character, a colon^^J% followed by five en-dashes and two accented characters:^^J% \row{a-grave}{\`}{a}^^J% \row{a-acute}{\'}{a}^^J% \row{a-circonflex}{\^}{a}^^J% \row{a-umlaut}{\"}{a}^^J% \row{c-cedille}{\c}{{c}}^^J% The spacing between the first accented character and the first^^J% two en-dashes has to be correct, whereas the en-dash after the^^J% second accented character has to touch the character! Otherwise^^J% your MLTeX implementation is incorrect.^^J} % % Test for correct number of lines: \ifnum 255=\inputlineno \else \error{`mltrip.tex' corrupted! (l.\the\inputlineno)}\fi \ifnum\errorcount>0 \error{There was atleast one error!}\fi \end\relax \typeout{Can't happen in MLTeX "trip" test!} %% End of file `mltrip.tex'.