% This is MLTEXTST.TEX (Version 1.2) in text format, as of Dec 07, 1995. % Test file to check MLTeX implementations. % % Copyright (C) 1995 by B.Raichle; all rights are reserved. % % Usage: % % Run iniTeX on this file. Do not try to use plain-TeX or LaTeX. % Needs the font metric files: cmr10.tfm, cmti10.tfm % % % Changes: % % 95/12/05 v1.0 % - initial version % 95/12/06 v1.1 % - don't show tracing output % - \nonstopmode and additional test for bug 2. % 95/12/07 v1.2 % - added MLTeX version numbers (and release dates) % - added test for MLTeX version 2.2 % % % History of MLTeX for TeX 3.x: % % 90/04/02 Version ?? (for TeX 3.0) % \charsublist, \charsublistmax % ??/??/?? Version 1.0 % 92/02/03 Version 2 (for TeX 3.1--3.141) % |effective_char| uses explicit font information % 93/10/29 Version 2.01 % fix \*leaders problem % 95/12/06 Version 2.2 (for TeX 3.14159) % fix font loading bug % fix invalid |font_info| access % in work Version 3.0 % complete re-implementation % % \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 % \immediate\write16{} \immediate\write16{Test for bugs in MLTeX (1995/12/07 v1.2 [br])} \immediate\write16{} % % check for plain-TeX: % we have to ensure that _no_ fonts are preloaded \expandafter\ifx\csname active\endcsname\relax \else \message{Please (Ini)TeX this file, no plain-TeX, no LaTeX!} \expandafter\endinput\expandafter\end\fi % check for MLTeX \expandafter\ifx\csname charsubdef\endcsname\relax \message{This test file can only be used with MLTeX!} \expandafter\endinput\fi % \nonstopmode %%%\tracingonline=1 \tracingoutput=1 \showboxbreadth=255 %%%\tracinglostchars=100 \tracingcharsubdef=1 \hsize=5in % % % 1. Check for bug accessing the wrong character metrics: % (in versions before Feb 1992) % \font\tenrm=cmr10\relax % % The group is only necessary, if you want to use this % test in your own macros. \charsubdefmax is saved % explicitly for very old versions of MLTeX which have % an additional bug when assigning this special integer. \begingroup \count255=\charsubdefmax \charsubdefmax=256 % enable all substitutions % very old versions of MLTeX will \charsubdef`\i=1 `\M % substitute "i" by "M" \setbox0=\hbox{\tenrm i}% <-- here \dimen0=\wd0 % get width of box (either "i" or "M") % get width of "i" \charsubdefmax=-1 % disable all substitutions \setbox0=\hbox{\tenrm i}% \dimen2=\wd0 % get width of box % restore former value of \charsubdefmax \charsubdefmax=\count255 \expandafter\endgroup \ifdim\dimen0=\dimen2\relax \immediate\write16{..... Ok, this is a newer MLTeX version (>= 2.0).} \immediate\write16{} \else \immediate\write16{% ..... This is a very old version of MLTeX < 2.0 (released before Feb. 1992)} \immediate\write16{% ..... immediately update to the newest MLTeX version!} \immediate\write16{} \expandafter\endinput\expandafter\end \fi % % % 2. Check for font loading bug: % (in versions before Dec 1995) % % - Define a \charsubdef of an existing character with % a non-existing base character % \charsubdef `A=`a 128 %%%\message{now: \string\charsubdefmax=\number\charsubdefmax} % % - now load font (do not preload this font!!!!!!) % \immediate\write16{} \immediate\write16{..... If there will be an error "Bad metric (TFM) file",} \immediate\write16{..... please update to the newest MLTeX version!} \immediate\write16{} \font\test=cmti10\relax \begingroup \setbox0=\hbox{\test A} \expandafter\endgroup \ifdim\wd0>0pt\relax \else \immediate\write16{} \immediate\write16{% ..... This seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)} \immediate\write16{% ..... this version has bugs,} \immediate\write16{% ..... please update to the newest MLTeX version!} \immediate\write16{} \expandafter\endinput\expandafter\end \fi \immediate\write16{..... Good, no "Bad metric (TFM) file" bug,} \immediate\write16{..... seems to be the a MLTeX version > 2.01.} % % % 3. Check for invalid |font_info| access: % \immediate\write16{} \font\tenrm=cmr10\relax % \setbox0=\hbox{\tenrm \char`a}\dimen1=\wd0 \setbox0=\hbox{\tenrm \char`M}\dimen3=\wd0 \setbox0=\hbox{\tenrm \char0}\dimen5=\wd0 % \charsubdef 128=`a `a \setbox0=\hbox{\tenrm \char128} \dimen0=\wd0 % get width of `a % % Now the \charsubdef is changed using % an existing base character: \charsubdef 128=`a `M \setbox0=\hbox{\unhbox0} \dimen2=\wd0 % get width of `a or `M % % And then we remove it. MLTeX will try to access the 128th % entry in the |char_base| array, which is the first entry in % the width index array. % For MLTeX 2.2 this was "fixed", now it will report a warning % "Missing char... no substitution for ..." and MLTeX will use % the first character of the font. \charsubdefmax=-1 \setbox0=\hbox{\unhbox0}% \dimen4=\wd0 % %%%\message{\the\dimen0-\the\dimen1-\the\dimen2-\the\dimen3-% %%% \the\dimen4-\the\dimen5-} % \def\x#1\fi\fi{\fi\fi#1} \ifdim\dimen0=\dimen2\relax \ifdim\dimen0=\dimen4\relax \immediate\write16{} \immediate\write16{% ...... Seems to be MLTeX version 3.x (unreleased),} \immediate\write16{% ...... from whom did you get this version? :-)} \immediate\write16{} \immediate\write16{% Congratulations, you have the best MLTeX version!} \immediate\write16{} \x{\endinput\csname end\endcsname}% \fi\fi % \def\x#1\fi{\fi#1} \ifdim\dimen4=\dimen5\relax \else \immediate\write16{} \immediate\write16{% ..... Seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)} \immediate\write16{% ..... this version has bugs,} \immediate\write16{% ..... please update to the newest MLTeX version!} \immediate\write16{} \expandafter\endinput\expandafter\end \fi % \immediate\write16{} \immediate\write16{% ...... Seems to be MLTeX version 2.2 (released Dec. 1995).} \immediate\write16{} \immediate\write16{% Congratulations, you have a MLTeX version with all known bugs fixed.} \immediate\write16{} \end % %%% END OF FILE %%%