1% This is MLTEXTST.TEX (Version 1.2) in text format, as of Dec 07, 1995. 2% Test file to check MLTeX implementations. 3% 4% Copyright (C) 1995 by B.Raichle; all rights are reserved. 5% 6% Usage: 7% 8% Run iniTeX on this file. Do not try to use plain-TeX or LaTeX. 9% Needs the font metric files: cmr10.tfm, cmti10.tfm 10% 11% 12% Changes: 13% 14% 95/12/05 v1.0 15% - initial version 16% 95/12/06 v1.1 17% - don't show tracing output 18% - \nonstopmode and additional test for bug 2. 19% 95/12/07 v1.2 20% - added MLTeX version numbers (and release dates) 21% - added test for MLTeX version 2.2 22% 23% 24% History of MLTeX for TeX 3.x: 25% 26% 90/04/02 Version ?? (for TeX 3.0) 27% \charsublist, \charsublistmax 28% ??/??/?? Version 1.0 29% 92/02/03 Version 2 (for TeX 3.1--3.141) 30% |effective_char| uses explicit font information 31% 93/10/29 Version 2.01 32% fix \*leaders problem 33% 95/12/06 Version 2.2 (for TeX 3.14159) 34% fix font loading bug 35% fix invalid |font_info| access 36% in work Version 3.0 37% complete re-implementation 38% 39% 40\catcode`\{=1 \catcode`\}=2 \catcode`\#=6 41% 42\immediate\write16{} 43\immediate\write16{Test for bugs in MLTeX (1995/12/07 v1.2 [br])} 44\immediate\write16{} 45% 46% check for plain-TeX: 47% we have to ensure that _no_ fonts are preloaded 48\expandafter\ifx\csname active\endcsname\relax \else 49 \message{Please (Ini)TeX this file, no plain-TeX, no LaTeX!} 50 \expandafter\endinput\expandafter\end\fi 51% check for MLTeX 52\expandafter\ifx\csname charsubdef\endcsname\relax 53 \message{This test file can only be used with MLTeX!} 54 \expandafter\endinput\fi 55% 56\nonstopmode 57%%%\tracingonline=1 \tracingoutput=1 \showboxbreadth=255 58%%%\tracinglostchars=100 \tracingcharsubdef=1 59\hsize=5in 60% 61% 62% 1. Check for bug accessing the wrong character metrics: 63% (in versions before Feb 1992) 64% 65\font\tenrm=cmr10\relax 66% 67% The group is only necessary, if you want to use this 68% test in your own macros. \charsubdefmax is saved 69% explicitly for very old versions of MLTeX which have 70% an additional bug when assigning this special integer. 71\begingroup 72 \count255=\charsubdefmax 73 \charsubdefmax=256 % enable all substitutions 74 % very old versions of MLTeX will 75 \charsubdef`\i=1 `\M % substitute "i" by "M" 76 \setbox0=\hbox{\tenrm i}% <-- here 77 \dimen0=\wd0 % get width of box (either "i" or "M") 78 % get width of "i" 79 \charsubdefmax=-1 % disable all substitutions 80 \setbox0=\hbox{\tenrm i}% 81 \dimen2=\wd0 % get width of box 82 % restore former value of \charsubdefmax 83 \charsubdefmax=\count255 84\expandafter\endgroup 85\ifdim\dimen0=\dimen2\relax 86 \immediate\write16{..... Ok, this is a newer MLTeX version (>= 2.0).} 87 \immediate\write16{} 88\else 89 \immediate\write16{% 90..... This is a very old version of MLTeX < 2.0 (released before Feb. 1992)} 91 \immediate\write16{% 92..... immediately update to the newest MLTeX version!} 93 \immediate\write16{} 94 \expandafter\endinput\expandafter\end 95\fi 96% 97% 98% 2. Check for font loading bug: 99% (in versions before Dec 1995) 100% 101% - Define a \charsubdef of an existing character with 102% a non-existing base character 103% 104\charsubdef `A=`a 128 105%%%\message{now: \string\charsubdefmax=\number\charsubdefmax} 106% 107% - now load font (do not preload this font!!!!!!) 108% 109\immediate\write16{} 110\immediate\write16{..... If there will be an error "Bad metric (TFM) file",} 111\immediate\write16{..... please update to the newest MLTeX version!} 112\immediate\write16{} 113\font\test=cmti10\relax 114\begingroup 115 \setbox0=\hbox{\test A} 116\expandafter\endgroup 117\ifdim\wd0>0pt\relax \else 118 \immediate\write16{} 119 \immediate\write16{% 120..... This seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)} 121 \immediate\write16{% 122..... this version has bugs,} 123 \immediate\write16{% 124..... please update to the newest MLTeX version!} 125 \immediate\write16{} 126 \expandafter\endinput\expandafter\end 127\fi 128\immediate\write16{..... Good, no "Bad metric (TFM) file" bug,} 129\immediate\write16{..... seems to be the a MLTeX version > 2.01.} 130% 131% 132% 3. Check for invalid |font_info| access: 133% 134\immediate\write16{} 135\font\tenrm=cmr10\relax 136% 137\setbox0=\hbox{\tenrm \char`a}\dimen1=\wd0 138\setbox0=\hbox{\tenrm \char`M}\dimen3=\wd0 139\setbox0=\hbox{\tenrm \char0}\dimen5=\wd0 140% 141\charsubdef 128=`a `a 142\setbox0=\hbox{\tenrm \char128} 143\dimen0=\wd0 % get width of `a 144% 145% Now the \charsubdef is changed using 146% an existing base character: 147\charsubdef 128=`a `M 148\setbox0=\hbox{\unhbox0} 149\dimen2=\wd0 % get width of `a or `M 150% 151% And then we remove it. MLTeX will try to access the 128th 152% entry in the |char_base| array, which is the first entry in 153% the width index array. 154% For MLTeX 2.2 this was "fixed", now it will report a warning 155% "Missing char... no substitution for ..." and MLTeX will use 156% the first character of the font. 157\charsubdefmax=-1 158\setbox0=\hbox{\unhbox0}% 159\dimen4=\wd0 160% 161%%%\message{\the\dimen0-\the\dimen1-\the\dimen2-\the\dimen3-% 162%%% \the\dimen4-\the\dimen5-} 163% 164\def\x#1\fi\fi{\fi\fi#1} 165\ifdim\dimen0=\dimen2\relax \ifdim\dimen0=\dimen4\relax 166 \immediate\write16{} 167 \immediate\write16{% 168...... Seems to be MLTeX version 3.x (unreleased),} 169 \immediate\write16{% 170...... from whom did you get this version? :-)} 171 \immediate\write16{} 172 \immediate\write16{% 173Congratulations, you have the best MLTeX version!} 174 \immediate\write16{} 175 \x{\endinput\csname end\endcsname}% 176\fi\fi 177% 178\def\x#1\fi{\fi#1} 179\ifdim\dimen4=\dimen5\relax \else 180 \immediate\write16{} 181 \immediate\write16{% 182..... Seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)} 183 \immediate\write16{% 184..... this version has bugs,} 185 \immediate\write16{% 186..... please update to the newest MLTeX version!} 187 \immediate\write16{} 188 \expandafter\endinput\expandafter\end 189\fi 190% 191\immediate\write16{} 192\immediate\write16{% 193...... Seems to be MLTeX version 2.2 (released Dec. 1995).} 194\immediate\write16{} 195\immediate\write16{% 196Congratulations, you have a MLTeX version with all known bugs fixed.} 197\immediate\write16{} 198\end 199% 200%%% END OF FILE %%% 201