Drop set up of \XeTeXintercharclass data
[latex2e.git] / trunk / base / ltfinal.dtx
blobd93beb498552c1caae873840b15e9227c0d02b82
1 % \iffalse meta-comment
3 % Copyright 1993-2016
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 %    http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX
16 % version 2005/12/01 or later.
18 % This file has the LPPL maintenance status "maintained".
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
22 % information.
24 % The list of derived (unpacked) files belonging to the distribution
25 % and covered by LPPL is defined by the unpacking scripts (with
26 % extension .ins) which are part of the distribution.
28 % \fi
30 % \iffalse
31 %%% From File: ltfinal.dtx
33 %<*driver>
34 % \fi
35 \ProvidesFile{ltfinal.dtx}
36              [2016/01/04 v2.0j LaTeX Kernel (Final Settings)]
37 % \iffalse
38 \documentclass{ltxdoc}
39 \GetFileInfo{ltfinal.dtx}
40 \title{\filename}
41 \date{\filedate}
42 \author{%
43   Johannes Braams\and
44   David Carlisle\and
45   Alan Jeffrey\and
46   Leslie Lamport\and
47   Frank Mittelbach\and
48   Chris Rowley\and
49   Rainer Sch\"opf}
50 \begin{document}
51  \MaintainedByLaTeXTeam{latex}
52  \maketitle
53  \DocInput{ltfinal.dtx}
54 \end{document}
55 %</driver>
56 % \fi
58 % \CheckSum{593}
60 % \section{Final settings}
61 % This section contains the final settings for \LaTeX.  It initialises
62 % some debugging and typesetting parameters, sets the default
63 % |\catcode|s and uc/lc codes, and inputs the hyphenation file.
65 % \StopEventually{}
67 % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx}
68 % \changes{v0.1a}{1994/03/07}{Remove oldcomments environment}
69 % \changes{v0.1c}{1994/04/21}{Added comments, set the catcodes of
70 %    128--255.}
71 % \changes{v0.1d}{1994/04/23}{Check that \cs{font@submax} is still zero}
72 % \changes{v0.1e}{1994/05/02}{Set all the catcodes}
73 % \changes{v0.1f}{1994/05/03}{Set the catcode of control-J to be
74 %    `other', for use in messages.}
75 % \changes{v0.1g}{1994/05/05}{Added empty errhelp.}
76 % \changes{v0.1h}{1994/05/13}{Added package ot1enc, and defined
77 %    \cs{@acci}, \cs{@accii} and \cs{@acciii}.}
78 % \changes{v0.1j}{1994/05/18}{Corrected the lccode for d-bar.}
79 % \changes{v0.1k}{1994/05/19}{Removed \cs{makeat...}}
80 % \changes{v1.0n}{1994/05/31}{Renamed lthyphen.* to lthyphen.*.}
81 % \changes{v1.0o}{1994/11/17}
82 %         {\cs{@tempa} to \cs{reserved@a}}
83 % \changes{v1.0p}{1994/12/01}
84 %         {Renamed lthyphen.* to hyphen.*.}
85 % \changes{v1.0r}{1995/06/05}
86 %         {Added \cs{MakeUppercase} and \cs{MakeLowercase}.}
87 % \changes{v1.0s}{1995/06/06}
88 %         {Made \cs{MakeUppercase} and \cs{MakeLowercase} brace their
89 %         argument.}
91 % \subsection{Debugging}
93 % By default, \LaTeX{} shows statistics:
94 %    \begin{macrocode}
95 %<*2ekernel>
96 \tracingstats1
97 %    \end{macrocode}
99 % \subsection{Typesetting parameters}
101 % \begin{macro}{\@lowpenalty}
102 % \begin{macro}{\@medpenalty}
103 % \begin{macro}{\@highpenalty}
104 %    These are penalties used internally.
105 %    \begin{macrocode}
106 \newcount\@lowpenalty
107 \newcount\@medpenalty
108 \newcount\@highpenalty
109 %    \end{macrocode}
110 % \end{macro}
111 % \end{macro}
112 % \end{macro}
115 %\begin{macro}{\newmarks}
116 % \changes{v2.0a}{2014/12/30}{macro added}
117 % \changes{v2.0b}{2015/01/23}{use reserved count 256}
118 % \changes{v2.0g}{2015/06/19}{Use $-1$ for first range to get contiguous allocation}
119 % Allocate extended marks types if etex is active.
120 % Placed here at the end of the format
121 % to increase compatibility with count allocations
122 % in earlier releases.
123 %    \begin{macrocode}
124 %</2ekernel>
125 %<*2ekernel|latexrelease>
126 %<latexrelease>\IncludeInRelease{2015/01/01}%
127 %<latexrelease>                 {\newmarks}{Extended Allocation}%
128 %    \end{macrocode}
130 %    \begin{macrocode}
131 \ifx\marks\@undefined\else
132 \def\newmarks{%
133   \e@alloc\marks \e@alloc@chardef{\count256}\m@ne\e@alloc@top}
135 %    \end{macrocode}
137 %    \begin{macrocode}
138 %</2ekernel|latexrelease>
139 %<latexrelease>\EndIncludeInRelease
140 %<latexrelease>\IncludeInRelease{0000/00/00}%
141 %<latexrelease>                 {\newmarks}{Extended Allocation}%
142 %<latexrelease>\let\newmarks\@undefined
143 %<latexrelease>\EndIncludeInRelease
144 %<*2ekernel>
145 %    \end{macrocode}
146 % \end{macro}
148 %\begin{macro}{\newXeTeXintercharclass}
149 % \changes{v2.0a}{2014/12/30}{macro added}
150 % \changes{v2.0b}{2015/01/23}{use reserved count 257}
151 % \changes{v2.0f}{2015/04/28}{define \cs{xe@alloc@intercharclass} for compatibility with older xelatex initilisation}
152 %\begin{macro}{\xe@alloc@intercharclass}
153 % \changes{v2.0j}{2016/01/04}{Start allocation at one not three}
154 % Allocate |\XeTeXintercharclass|  types if xetex is active.
155 % previously defined in |xetex.ini|.
157 %    \begin{macrocode}
158 %</2ekernel>
159 %<*2ekernel|latexrelease>
160 %<latexrelease>\IncludeInRelease{2015/01/01}%
161 %<latexrelease>              {\newXeTeXintercharclass}{Extended Allocation}%
162 %    \end{macrocode}
164 % Classes allocated 1 to 254 (early 1, 2 and 3 were pre-set for CJK).
165 % \changes{v2.0g}{2015/06/19}{Use $-1$ for first range to get contiguous allocation}
166 %    \begin{macrocode}
167 \ifx\XeTeXcharclass\@undefined
168 \else
169 \countdef\xe@alloc@intercharclass=257
170 \xe@alloc@intercharclass=\thr@@
171 \def\newXeTeXintercharclass{%
172  \e@alloc\XeTeXcharclass\chardef\xe@alloc@intercharclass\m@ne\@cclv}
174 %    \end{macrocode}
176 %    \begin{macrocode}
177 %</2ekernel|latexrelease>
178 %<latexrelease>\EndIncludeInRelease
179 %<latexrelease>\IncludeInRelease{0000/00/00}%
180 %<latexrelease>              {\newXeTeXintercharclass}{Extended Allocation}%
181 %<latexrelease> \ifx\XeTeXcharclass\@undefined
182 %<latexrelease> \else
183 %<latexrelease>   \newcount\xe@alloc@intercharclass
184 %<latexrelease>    \xe@alloc@intercharclass=\thr@@
185 %<latexrelease>    \def\xe@alloc@#1#2#3#4#5{\global\advance#1\@ne
186 %<latexrelease>     \xe@ch@ck#1#4#2%
187 %<latexrelease>     \allocationnumber#1%
188 %<latexrelease>     \global#3#5\allocationnumber
189 %<latexrelease>     \wlog{\string#5=\string#2\the\allocationnumber}}
190 %<latexrelease>    \def\xe@ch@ck#1#2#3{%
191 %<latexrelease>     \ifnum#1<#2\else
192 %<latexrelease>      \errmessage{No room for a new #3}%
193 %<latexrelease>     \fi}
194 %<latexrelease>    \def\newXeTeXintercharclass{%
195 %<latexrelease>     \xe@alloc@\xe@alloc@intercharclass
196 %<latexrelease>                    \XeTeXcharclass\chardef\@cclv}
197 %<latexrelease> \fi
198 %<latexrelease>\EndIncludeInRelease
199 %<*2ekernel|latexrelease>
200 %<latexrelease>\IncludeInRelease{2016/01/01}%
201 %<latexrelease>  {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
202 \ifx\XeTeXcharclass\@undefined
203 \else
204   \countdef\xe@alloc@intercharclass=257
205   \xe@alloc@intercharclass=\z@
207 %</2ekernel|latexrelease>
208 %<latexrelease>\EndIncludeInRelease
209 %<latexrelease>\IncludeInRelease{2015/01/01}%
210 %<latexrelease>  {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
211 %<latexrelease> \ifx\XeTeXcharclass\@undefined
212 %<latexrelease> \else
213 %<latexrelease>   \xe@alloc@intercharclass=\thr@@
214 %<latexrelease> \fi
215 %<latexrelease>\EndIncludeInRelease
216 %<latexrelease>\IncludeInRelease{0000/00/00}%
217 %<latexrelease>  {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
218 %<latexrelease> \ifx\XeTeXcharclass\@undefined
219 %<latexrelease> \else
220 %<latexrelease>   \newcount\xe@alloc@intercharclass
221 %<latexrelease>   \xe@alloc@intercharclass=\thr@@
222 %<latexrelease> \fi
223 %<latexrelease>\EndIncludeInRelease
224 %<*2ekernel>
225 %    \end{macrocode}
226 % \end{macro}
227 % \end{macro}
231 % The default values of the picture and |\fbox| parameters:
232 %    \begin{macrocode}
233 \unitlength = 1pt
234 \fboxsep = 3pt
235 \fboxrule = .4pt
236 %    \end{macrocode}
237 % The saved value of \TeX's |\maxdepth|:
238 %    \begin{macrocode}
239 \@maxdepth       = \maxdepth
240 %    \end{macrocode}
241 % |\vsize| initialized because a |\clearpage| with |\vsize < \topskip|
242 %  causes trouble.
243 % |\@colroom| and |\@colht| also initialized because |\vsize| may be
244 %  set to them if a |\clearpage| is done before the |\begin{document}|
246 %    \begin{macrocode}
247 \vsize = 1000pt
248 \@colroom = \vsize
249 \@colht = \vsize
250 %    \end{macrocode}
251 % Initialise |\textheight| |\textwidth| and page style, to avoid
252 % internal errors if they are not set by the class.
253 % \changes{v0.1b}{1994/04/18}
254 %         {Initialise \cs{textheight}, \cs{textwidth} and page style}
255 %    \begin{macrocode}
256 \textheight=.5\maxdimen
257 \textwidth=\textheight
258 \ps@empty
259 %    \end{macrocode}
261 % \subsection{Lccodes for hyphenation}
263 % \changes{v2.0a}{2015/01/03}{Unicode data loading added}
264 % \changes{v2.0c}{2015/01/24}{Skip T1-code entirely with Unicode engines}
265 % \changes{v2.0d}{2015/03/26}{Use renamed 
266 %   \texttt{unicode-letters.def}}
267 % \changes{v2.0i}{2015/12/10}{Use new common Unicode data loaders}
268 % \changes{v2.0j}{2016/01/04}{Do not set up inter character classes for
269 %   XeTeX}
270 %  For $7$- and $8$-bit engines the assumption of T1 encodings is the
271 %  basis for the hyphenation patterns. That's not the case for the Unicode
272 %  engines, where the assumption is engine-native working. The common
273 %  loader system provides access to data from the Unicode Consortium
274 %  covering not only |\lccode| but also other related data. The
275 %  |\lccode| part of that at least needs to be loaded before hyphenation is
276 %  tackled: Xe\TeX{} follows the standard \TeX{} route of building patterns
277 %  into the format. Lua\TeX{} doesn't require this data be loaded \emph{here}
278 %  but it does need to be loaded somewhere. Rather than test for the Unicode
279 %  engines by name, the approach here is to look for the extended math mode
280 %  handling both provide: any other engine developed in this area will
281 %  presumably also provide |\Umathcode|.
282 %    \begin{macrocode}
283 \ifnum 0%
284   \ifx\Umathcode\@undefined\else 1\fi
285   \ifx\XeTeXmathcode\@undefined\else 1\fi
286   >\z@
287   \message{ Unicode character data,}
288   \input{load-unicode-data}
289 %</2ekernel>
290 %<*2ekernel|latexrelease>
291 %<latexrelease>\IncludeInRelease{0000/00/00}%
292 %<latexrelease>  {\XeTeXintercharclasses}{XeTeX character classes}%
293   \input{load-unicode-xetex-classes}
294 %</2ekernel|latexrelease>
295 %<latexrelease>\EndIncludeInRelease
296 %<*2ekernel>
297 %    \end{macrocode}
298 % \changes{v2.0d}{2015/02/03}{Set \cs{lccode} for \texttt{-} with Unicode
299 %   engines}
300 % There is one over-ride that makes sense here (see below for the same for
301 % $8$-bit engines): setting the lccode for |-| to itself.
302 %    \begin{macrocode}
303   \lccode`\- =`\- % default hyphen char
304 %    \end{macrocode}
305 % The alternative is that a ``traditional'' engine is in use.
306 %    \begin{macrocode}
307 \else
308 %    \end{macrocode}
309 % \changes{v1.1b}{1998/05/20}{Set up lccodes before loading
310 %    hyphenation files: pr/2639}
311 %    We set things up so that hyphenation files can assume that the
312 %    default (T1) lccodes are in use (at present this also sets up the
313 %    uccodes).
314 %    We temporarily define |\reserved@a| to apply |\reserved@c| to
315 %    all the numbers in the range of its arguments.
316 %    \begin{macrocode}
317 \def\reserved@a#1#2{%
318    \@tempcnta#1\relax
319    \@tempcntb#2\relax
320    \reserved@b
322 \def\reserved@b{%
323    \ifnum\@tempcnta>\@tempcntb\else
324       \reserved@c\@tempcnta
325       \advance\@tempcnta\@ne
326       \expandafter\reserved@b
327    \fi
329 %    \end{macrocode}
330 %    Depending on the \TeX{} version, we might not be allowed to do
331 %    this for non-ASCII characters.
332 % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher
333 %                   half of character table.}
334 %    \begin{macrocode}
335 \def\reserved@c#1{%
336    \count@=#1\advance\count@ by -"20
337    \uccode#1=\count@
338    \lccode#1=#1
340 \reserved@a{`\a}{`\z}
341 \ifnum\inputlineno=\m@ne\else
342   \reserved@a{"A0}{"BC}
343   \reserved@a{"E0}{"FF}
345 %    \end{macrocode}
346 % The upper case characters need their |\uccode| and |\lccode| values
347 % set, and their |\sfcode| set to 999.
348 %    \begin{macrocode}
349 \def\reserved@c#1{%
350    \count@=#1\advance\count@ by "20
351    \uccode#1=#1
352    \lccode#1=\count@
353    \sfcode#1=999
355 \reserved@a{`\A}{`\Z}
356 \ifnum\inputlineno=\m@ne\else
357   \reserved@a{"80}{"9C}
358   \reserved@a{"C0}{"DF}
360 %    \end{macrocode}
361 % Well, it would be nice if that were correct, but unfortunately, the
362 % Cork encoding contains some odd slots whose uccode or lccode isn't
363 % quite what you'd expect.
364 %    \begin{macrocode}
365 \uccode`\^^Y=`\I     % dotless i
366 \lccode`\^^Y=`\^^Y   % dotless i
367 \uccode`\^^Z=`\J     % dotless j, ae in OT1
368 \lccode`\^^Z=`\^^Z   % dotless j, ae in OT1
369 \ifnum\inputlineno=\m@ne\else
370   \lccode`\^^9d=`\i    % dotted I
371   \uccode`\^^9d=`\^^9d % dotted I
372   \lccode`\^^9e=`\^^9e % d-bar
373   \uccode`\^^9e=`\^^d0 % d-bar
375 %    \end{macrocode}
376 % Finally here is one that helps hyphenation in the OT1 encoding.
377 % \changes{v1.0z}{1996/10/31}
378 %    {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)}
379 %    \begin{macrocode}
380 \lccode`\^^[=`\^^[   % oe in OT1
381 %    \end{macrocode}
383 % And we also set the |\lccode| of |\-| and |\textcompwordmark| so
384 % that they do not prevent hyphenation in the remainder of the word
385 % (as suggested by Lars Helstr\"om).
386 % \changes{v1.1e}{2003/10/13}
387 %    {Added extra \cs{lccode} for \cs{-} and \cs{textcompwordmark}}
388 %    \begin{macrocode}
389 \lccode`\- =`\-   % default hyphen char
390 \lccode 127=127   % alternate hyphen char
391 \lccode 23 =23    % textcompwordmark in T1
392 %    \end{macrocode}
394 % End of the conditional to select either Unicode or T1 encoding defaults.
395 %    \begin{macrocode}
397 %    \end{macrocode}
399 %  This is as good a place as any to active a few Xe\TeX{}-specific
400 %  settings
401 %    \begin{macrocode}
402 \ifx\XeTeXuseglyphmetrics\@undefined
403 \else
404   \XeTeXuseglyphmetrics=1 %
405   \XeTeXdashbreakstate=1 %
407 %    \end{macrocode}
409 % \subsection{Hyphenation}
411 % \changes{v0.1a}{1994/03/07}{move code here from lhyphen.dtx}
412 % \changes{v0.1a}{1994/03/07}
413 %         {use \cs{InputIfFileExists} not \cs{IfFileExists}}
414 % \changes{v1.0x}{1995/11/01}
415 %      {(DPC) Switch meaning of \cs{@addtofilelist} for cfg files}%
416 % The following code will be compiled into the format file. It checks
417 % for the existence of \texttt{hyphen.cfg} in inputs that file if
418 % found. Otherwise it inputs \texttt{hyphen.ltx}.  Note that these
419 % are loaded in \emph{before} the |\catcode|s are set, so local
420 % hyphenation files can use 8-bit input.
422 % We try to load the customized hyphenation description file.
423 %    \begin{macrocode}
424 \InputIfFileExists{hyphen.cfg}
425            {\typeout{===========================================^^J%
426                       Local configuration file hyphen.cfg used^^J%
427                      ===========================================}%
428              \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%
429            }
430            {\input{hyphen.ltx}}
431 \let\@addtofilelist\@gobble
432 %    \end{macrocode}
436 % \subsection{Font loading}
437 %    Fonts loaded during the formatting process might already have
438 %    changed the |\font@submax| from |0pt| to something higher.
439 %    If so, we put out a bold warning.
440 % \changes{v0.1l}{1994/05/20}{Use new font warning commands}
441 %    \begin{macrocode}
442 % \changes{v1.1c}{2000/08/23}{Fix typo in warning}
443 \ifdim \font@submax >\z@
444    \@font@warning{Size substitutions with differences\MessageBreak
445                  up to \font@submax\space have occurred.\MessageBreak
446                 \MessageBreak
447                 Please check the transcript file
448                 carefully\MessageBreak
449                 and redo the format generation if necessary!
450                 \@gobbletwo}%
451    \errhelp{Only stopped, to give you time to
452             read the above message.}
453    \errmessage{}
454 %    \end{macrocode}
455 %    We reset the macro. Otherwise every user will get a warning on
456 %    every job.
457 %    \begin{macrocode}
458 \def\font@submax{0pt}
460 %    \end{macrocode}
462 % \subsection{Input encoding}
464 % We temporarily define |\reserved@a| to apply |\reserved@c| to all the
465 % numbers in the range of its arguments.
466 %    \begin{macrocode}
467 \def\reserved@a#1#2{%
468    \@tempcnta#1\relax
469    \@tempcntb#2\relax
470    \reserved@b
472 \def\reserved@b{%
473    \ifnum\@tempcnta>\@tempcntb\else
474       \reserved@c\@tempcnta
475       \advance\@tempcnta\@ne
476       \expandafter\reserved@b
477    \fi
479 %    \end{macrocode}
480 % \changes{v0.1e}{1994/05/02}{Added setting the special catcodes.}
481 % \changes{v0.1f}{1994/05/02}{Set the catcode of control-J.}
482 % Set the special catcodes (although some of these are useless, since an
483 % error will have occurred if the catcodes have changed).  Note that
484 % |^^J| has catcode `other' for use in warning messages.
485 %    \begin{macrocode}
486 \catcode`\ =10
487 \catcode`\#=6
488 \catcode`\$=3
489 \catcode`\%=14
490 \catcode`\&=4
491 \catcode`\\=0
492 \catcode`\^=7
493 \catcode`\_=8
494 \catcode`\{=1
495 \catcode`\}=2
496 \catcode`\~=13
497 \catcode`\@=11
498 \catcode`\^^I=10
499 \catcode`\^^J=12
500 \catcode`\^^L=13
501 \catcode`\^^M=5
502 %    \end{macrocode}
503 % \changes{v0.1e}{1994/05/02}{Added setting the `other' catcodes.}
504 % Set the `other' catcodes.
505 %    \begin{macrocode}
506 \def\reserved@c#1{\catcode#1=12\relax}
507 \reserved@c{`\!}
508 \reserved@c{`\"}
509 \reserved@a{`\'}{`\?}
510 \reserved@c{`\[}
511 \reserved@c{`\]}
512 \reserved@c{`\`}
513 \reserved@c{`\|}
514 %    \end{macrocode}
515 % \changes{v0.1e}{1994/05/02}{Added setting the `letter' catcodes.}
516 % Set the `letter' catcodes.
517 %    \begin{macrocode}
518 \def\reserved@c#1{\catcode#1=11\relax}
519 \reserved@a{`\A}{`\Z}
520 \reserved@a{`\a}{`\z}
521 %    \end{macrocode}
522 % \changes{v0.1e}{1994/05/02}{Made slot 127 illegal}
523 % \changes{v1.0n}{1994/11/18}
524 %         {re-allow slots 127--255}
525 % All the characters in the range 0--31 and 127--255 are illegal,
526 % \emph{except} tab (|^^I|), nl (|^^J|), ff (|^^L|) and cr (|^^M|).
528 % Now allow 8-bit characters, although their use in this way is
529 % strongly discouraged. See |inputenc.dtx| for a supported mechanism
530 % for 8-bit input.
531 %    \begin{macrocode}
532 \def\reserved@c#1{\catcode#1=15\relax}
533 \reserved@a{0}{`\^^H}
534 \reserved@c{`\^^K}
535 \reserved@a{`\^^N}{31}
536 %\ifnum\inputlineno=\m@ne
537   \catcode"7F=15
538 %\else
539 %  \reserved@a{"7F}{"FF}
540 %\fi
541 %    \end{macrocode}
543 % \subsection{Lccodes and uccodes}
545 % \changes{v1.1b}{1998/05/20}{Set up uc/lccodes after loading
546 %    hyphenation files: pr/2639}
547 %    We now again set up the default (T1) uc/lccodes.
548 %    The lower case characters need their |\uccode| and |\lccode| values
549 %    set. Some of this is a repeat of the set-up before loading
550 %    hyphenation files.
551 %    Depending on the \TeX{} version, we might not be allowed to do
552 %    this for non-ASCII characters.
553 % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher
554 %                   half of character table.}
555 % \changes{v2.0a}{2015/01/03}{Skip resetting codes with Unicode engines}
556 %   For the Unicode engines (Xe\TeX{} and Lua\TeX{}) there is no need to
557 %   do any of this: they use hyphenation data which does not alter any
558 %   of the set up and so this entire block is skipped.
559 %    \begin{macrocode}
560 \ifnum 0%
561   \ifx\Umathcode\@undefined\else 1\fi
562   \ifx\XeTeXmathcode\@undefined\else 1\fi
563   >\z@
564 \else
565 \def\reserved@c#1{%
566    \count@=#1\advance\count@ by -"20
567    \uccode#1=\count@
568    \lccode#1=#1
570 \reserved@a{`\a}{`\z}
571 \ifnum\inputlineno=\m@ne\else
572   \reserved@a{"A0}{"BC}
573   \reserved@a{"E0}{"FF}
575 %    \end{macrocode}
576 % The upper case characters need their |\uccode| and |\lccode| values
577 % set, and their |\sfcode| set to 999.
578 %    \begin{macrocode}
579 \def\reserved@c#1{%
580    \count@=#1\advance\count@ by "20
581    \uccode#1=#1
582    \lccode#1=\count@
583    \sfcode#1=999
585 \reserved@a{`\A}{`\Z}
586 \ifnum\inputlineno=\m@ne\else
587   \reserved@a{"80}{"9C}
588   \reserved@a{"C0}{"DF}
590 %    \end{macrocode}
591 % Well, it would be nice if that were correct, but unfortunately, the
592 % Cork encoding contains some odd slots whose uccode or lccode isn't
593 % quite what you'd expect.
594 %    \begin{macrocode}
595 \uccode`\^^Y=`\I     % dotless i
596 \lccode`\^^Y=`\^^Y   % dotless i
597 \uccode`\^^Z=`\J     % dotless j, ae in OT1
598 \lccode`\^^Z=`\^^Z   % dotless j, ae in OT1
599 \ifnum\inputlineno=\m@ne\else
600   \lccode`\^^9d=`\i    % dotted I
601   \uccode`\^^9d=`\^^9d % dotted I
602   \lccode`\^^9e=`\^^9e % d-bar
603   \uccode`\^^9e=`\^^d0 % d-bar
605 %    \end{macrocode}
606 % Finally here is one that helps hyphenation in the OT1 encoding.
607 % \changes{v1.0z}{1996/10/31}
608 %    {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)}
609 %    \begin{macrocode}
610 \lccode`\^^[=`\^^[   % oe in OT1
611 \fi % End of reset block for 8-bit engines
612 %    \end{macrocode}
614 % \begin{macro}{\MakeUppercase}
615 % \begin{macro}{\MakeUppercase}
616 % \begin{macro}{\@uclclist}
618 % \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from
619 %    \cs{@uclclist} as these are macros.}
621 %    And whilst we're doing things with uc/lc tables, here are two
622 %    commands to upper- and lower-case a string.
624 %    \emph{Note} that this implementation is subject to change!  At
625 %    the moment we're not providing any way to extend the list of
626 %    uc/lc commands, since finding a good interface is difficult.
627 %    These commands have some nasty features, such as uppercasing
628 %    mathematics, environment names, labels, etc.  A much better
629 %    long-term solution is to use all-caps fonts, but these aren't
630 %    generally available.
631 %    \begin{macrocode}
632 \DeclareRobustCommand{\MakeUppercase}[1]{{%
633       \def\i{I}\def\j{J}%
634       \def\reserved@a##1##2{\let##1##2\reserved@a}%
635       \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
636       \protected@edef\reserved@a{\uppercase{#1}}%
637       \reserved@a
638    }}
639 \DeclareRobustCommand{\MakeLowercase}[1]{{%
640       \def\reserved@a##1##2{\let##2##1\reserved@a}%
641       \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
642       \protected@edef\reserved@a{\lowercase{#1}}%
643       \reserved@a
644    }}
645 \def\@uclclist{\oe\OE\o\O\ae\AE
646       \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH}
647 %    \end{macrocode}
648 %    The above code works, but has the nasty side-effect that if you
649 %    say something like:
650 %\begin{verbatim}
651 %    \markboth{\MakeUppercase\contentsname}
652 %             {\MakeUppercase\contentsname}
653 %\end{verbatim}
654 %    then the uppercasing is only done to the first letter of the
655 %    contents name, since the mark expands out to:
656 %\begin{verbatim}
657 %    \mark{\protect\MakeUppercase Table of Contents}
658 %         {\protect\MakeUppercase Table of Contents}
659 %\end{verbatim}
660 %    In order to get round this, we redefine |\MakeUppercase| and
661 %    |\MakeLowercase| to grab their argument and brace it.  This is a
662 %    very low-level hack, and is \emph{not} recommended practice!
663 %    This is an instance of a general problem that makes it unsafe to
664 %    grab arguments unbraced, and probably needs a more general
665 %    solution.  For the moment though, this hack will do:
666 %    \begin{macrocode}
667 \protected@edef\MakeUppercase#1{\MakeUppercase{#1}}
668 \protected@edef\MakeLowercase#1{\MakeLowercase{#1}}
669 %    \end{macrocode}
670 % \end{macro}
671 % \end{macro}
672 % \end{macro}
674 % \changes{v1.0h}{1994/05/13}{Added output enc stuff}
675 % \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts}
677 % \changes{v0.1a}{1994/03/07}{Add code from the old dump.dtx}
679 % \subsection{Applying Patch files}
680 % Between major releases, small patches will be distributed in
681 % files |ltpatch.ltx| which must be added at this point.
682 % \changes{v1.0m}{1994/06/08}{Add patch file system}
683 % \changes{v2.0h}{2015/06/23}
684 %     {set \cs{patch@level} in ltvers rather than in ltfinal/ltpatch}
686 % Patch file code removed.
687 %    \begin{macrocode}
688 %\IfFileExists{ltpatch.ltx}
689 %  {\typeout{=================================^^J%
690 %             Applying patch file ltpatch.ltx^^J%
691 %            =================================}
692 %   \def\fmtversion@topatch{unknown}
693 %   \input{ltpatch.ltx}
694 %   \ifx\fmtversion\fmtversion@topatch
695 %      \ifx\patch@level\@undefined
696 %        \typeout{^^J^^J^^J%
697 %         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
698 %         !! Patch file `ltpatch.ltx' not suitable for this^^J%
699 %         !! version of LaTeX.^^J^^J%
700 %         !! Please check if initex found an old patch file:^^J%
701 %         !! --- if so, rename it or delete it, and redo the^^J%
702 %         !! initex run.^^J%
703 %         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
704 %        \batchmode \@@end
705 %      \else
706 %    \end{macrocode}
707 % \changes{v1.0q}{1995/04/21}
708 %         {Allow initial patch level 0}
709 % \changes{v1.0t}{1995/06/13}
710 %         {Add patch level string more carefully}
711 % The code below adds the `patch level' string to the first |\typeout|
712 % in the startup banner.
713 %    \begin{macrocode}
714 %        \def\fmtversion@topatch{0}%
715 %        \ifx\fmtversion@topatch\patch@level\else
716 %          \def\reserved@a\typeout##1##2\reserved@a{%
717 %                 \typeout{##1 patch level \patch@level}##2}
718 %          \everyjob\expandafter\expandafter\expandafter{%
719 %             \expandafter\reserved@a\the\everyjob\reserved@a}
720 %          \let\reserved@a\relax
721 %          \the\everyjob
722 %        \fi
723 %      \fi
724 %   \else
725 %      \typeout{^^J^^J^^J%
726 %    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
727 %    !! Patch file `ltpatch.ltx' (for version <\fmtversion@topatch>)^^J%
728 %    !! is not suitable for version <\fmtversion> of LaTeX.^^J^^J%
729 %    !! Please check if initex found an old patch file:^^J%
730 %    !! --- if so, rename it or delete it, and redo the^^J%
731 %    !!     initex run.^^J%
732 %    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
733 %       \batchmode \@@end
734 %   \fi
735 %   \let\fmtversion@topatch\relax
736 %  }{}
737 %    \end{macrocode}
739 % \subsection{Freeing Memory}
741 % \begin{macro}{\reserved@a}
742 % \begin{macro}{\reserved@b}
743 % \changes{v1.0v}{1995/10/17}{reset here after the \cs{input} above}
744 % And just to make sure nobody relies on those definitions of
745 % |\reserved@b| and friends.
746 % These macros are reserved for use in the kernel. \emph{Do not use
747 % them as general scratch macros}.
748 %    \begin{macrocode}
749 \let\reserved@a\@filelist
750 \let\reserved@b=\@undefined
751 \let\reserved@c=\@undefined
752 \let\reserved@d=\@undefined
753 \let\reserved@e=\@undefined
754 \let\reserved@f=\@undefined
755 %    \end{macrocode}
756 % \end{macro}
757 % \end{macro}
759 % \begin{macro}{\toks}
760 % \changes{v1.0y}{1996/07/10}
761 %      {Free up memory from scratch registers /2213}
762 %    \begin{macrocode}
763 \toks0{}
764 \toks2{}
765 \toks4{}
766 \toks6{}
767 \toks8{}
768 %    \end{macrocode}
769 % \end{macro}
771 % \begin{macro}{\errhelp}
772 % \changes{v0.1g}{1994/05/05}{Set error help empty.}
773 % \changes{v1.1d}{2000/09/01}{Set error help empty at very end
774 %                             (pr/449 done correctly).}
775 % Empty the error help message, which may have some rubbish:
776 %    \begin{macrocode}
777 \errhelp{}
778 %    \end{macrocode}
779 % \end{macro}
781 % \subsection{Initialise file list}
783 % \begin{macro}{\@providesfile}
784 % \changes{v1.0v}{1995/10/17}{reset macro}
785 % Initialise for use in the document. During initex a modified version
786 % has been used which leaves debugging information for |latexbug.tex|.
787 %    \begin{macrocode}
788 \def\@providesfile#1[#2]{%
789     \wlog{File: #1 #2}%
790     \expandafter\xdef\csname ver@#1\endcsname{#2}%
791   \endgroup}
792 %    \end{macrocode}
793 % \end{macro}
795 % \begin{macro}{\@filelist}
796 % \changes{v1.0w}{1995/10/19}{Move after \cs{reserved@a} setting:-)}
797 % \begin{macro}{\@addtofilelist}
798 % Reset |\@filelist| so files input while making the format are not
799 % listed. The list built up so far may take up a lot of memory and so
800 % it is moved to |\reserved@a| where it will be overwritten as soon
801 % as almost any \LaTeX\ command is issued in a class file.
802 % However the |latexbug.tex| program will be able to access this
803 % information and insert it into a bug report.
804 %    \begin{macrocode}
805 \let\@filelist\@gobble
806 \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}%
807 %    \end{macrocode}
808 % \end{macro}
809 % \end{macro}
811 % \subsection{Dumping the format}
812 %    Finally we make |@| into a letter, ensure the format will
813 % be in the `normal' error mode, and dump everything into the
814 %    format file.
815 % \changes{v1.0t}{1995/06/13}
816 %         {Call \cs{errorstopmode}}
817 %    \begin{macrocode}
818 \makeatother
819 \errorstopmode
820 \dump
821 %</2ekernel>
822 %    \end{macrocode}
824 % \Finale