summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-07-31 18:27:06 +0000
committerKarl Berry <karl@freefriends.org>2011-07-31 18:27:06 +0000
commitdac945b204407dae96f70ec228206516093156d7 (patch)
tree02ca182689947e45dec95e17ba08b503c959bd17 /Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
parentc1840548792cfbc7c9f746da1d53d89b94406e72 (diff)
l3kernel (5jun11)
git-svn-id: svn://tug.org/texlive/trunk@23282 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx647
1 files changed, 647 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
new file mode 100644
index 00000000000..69aaf46357b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -0,0 +1,647 @@
+% \iffalse meta-comment
+%
+%% File: l3bootstrap.dtx Copyright (C) 2011 The LaTeX3 project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "expl3 bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+%<*package>
+\def\GetIdInfo$%
+ Id: #1 #2 #3-#4-#5 #6 #7 $#8%
+ {%
+ \def\ExplFileDate{#3/#4/#5}%
+ \def\ExplFileVersion{#2}%
+ }
+\GetIdInfo$Id: l3bootstrap.dtx 2478 2011-06-19 21:34:23Z joseph $
+ {L3 experimental bootstrap code}
+%</package>
+%<*driver>
+\documentclass[full]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \pkg{l3bootstrap} package\\ Bootstrap code^^A
+% \thanks{This file describes v\ExplFileVersion,
+% last revised \ExplFileDate.}^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team@latex-project.org}
+% {latex-team@latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released \ExplFileDate}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{Using the \LaTeX3 modules}
+%
+% The modules documented in \file{source3} are designed to be used on top of
+% \LaTeXe{} and are loaded all as one with the usual |\usepackage{expl3}| or
+% |\RequirePackage{expl3}| instructions. These modules will also form the
+% basis of the \LaTeX3 format, but work in this area is incomplete and not
+% included in this documentation at present.
+%
+% As the modules use a coding syntax different from standard
+% \LaTeXe{} it provides a few functions for setting it up.
+%
+% \begin{function}{\ExplSyntaxOn, \ExplSyntaxOff}
+% \begin{syntax}
+% \cs{ExplSyntaxOn} \meta{code} \cs{ExplSyntaxOff}
+% \end{syntax}
+% The \cs{ExplSyntaxOn} function switches to a category code
+% regim{\'e} in which spaces are ignored and in which the colon (|:|)
+% and underscore (|_|) are treated as \enquote{letters}, thus allowing
+% access to the names of code functions and variables. Within this
+% environment, |~| is used to input a space. The \cs{ExplSyntaxOff}
+% reverts to the document category code regim{\'e}.
+% \end{function}
+%
+% \begin{function}{\ExplSyntaxNamesOn, \ExplSyntaxNamesOff}
+% \begin{syntax}
+% \cs{ExplSyntaxNamesOn} \meta{code} \cs{ExplSyntaxNamesOff}
+% \end{syntax}
+% The \cs{ExplSyntaxOn} function switches to a category code
+% regim{\'e} in which the colon (|:|) and underscore (|_|) are treated as
+% \enquote{letters}, thus allowing access to the names of code functions
+% and variables. In contrast to \cs{ExplSyntaxOn}, using
+% \cs{ExplSyntaxNamesOn} does not cause spaces to be ignored.
+% The \cs{ExplSyntaxNamesOff} reverts to the document category code
+% regim{\'e}.
+% \end{function}
+%
+% \begin{function}{\ProvidesExplPackage, \ProvidesExplClass, \ProvidesExplFile}
+% \begin{syntax}
+% |\RequirePackage{expl3}| \\
+% \cs{ProvidesExplPackage} \Arg{package} \Arg{date} \Arg{version}
+% ~~\Arg{description}
+% \end{syntax}
+% These functions act broadly in the same way as the \LaTeXe{} kernel
+% functions \cs{ProvidesPackage}, \cs{ProvidesClass} and
+% \cs{ProvidesFile}. However, they also implicitly switch
+% \cs{ExplSyntaxOn} for the remainder of the code with the file. At the
+% end of the file, \cs{ExplSyntaxOff} will be called to reverse this.
+% (This is the same concept as \LaTeXe{} provides in turning on
+% \cs{makeatletter} within package and class code.)
+% \end{function}
+%
+% \begin{function}{\GetIdInfo}
+% \begin{syntax}
+% |\RequirePackage{l3names}|
+% \cs{GetIdInfo} |$Id:| \meta{SVN info field} |$| \Arg{description}
+% \end{syntax}
+% Extracts all information from a SVN field. Spaces are not
+% ignored in these fields. The information pieces are stored in
+% separate control sequences with \cs{ExplFileName} for the part of the
+% file name leading up to the period, \cs{ExplFileDate} for date,
+% \cs{ExplFileVersion} for version and \cs{ExplFileDescription} for the
+% description.
+% \end{function}
+%
+% To summarize: Every single package using this syntax should identify
+% itself using one of the above methods. Special care is taken so that
+% every package or class file loaded with \cs{RequirePackage} or alike
+% are loaded with usual \LaTeXe{} category codes and the \LaTeX3 category code
+% scheme is reloaded when needed afterwards. See implementation for
+% details. If you use the \cs{GetIdInfo} command you can use the
+% information when loading a package with
+% \begin{verbatim}
+% \ProvidesExplPackage{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+% \end{verbatim}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{Bootstrap code}
+%
+% \begin{macrocode}
+%<*initex|package>
+% \end{macrocode}
+%
+% \subsection{Format-specific code}
+%
+% The very first thing to do is to bootstrap the \IniTeX{} system so
+% that everything else will actually work. \TeX{} does not start with
+% some pretty basic character codes set up.
+% \begin{macrocode}
+%<*initex>
+\catcode `\{ = 1 \relax
+\catcode `\} = 2 \relax
+\catcode `\# = 6 \relax
+\catcode `\^ = 7 \relax
+%</initex>
+% \end{macrocode}
+%
+% Tab characters should not show up in the code, but to be on the
+% safe side.
+% \begin{macrocode}
+%<*initex>
+\catcode `\^^I = 10 \relax
+%</initex>
+% \end{macrocode}
+%
+% For \LuaTeX{} the extra primitives need to be enabled before
+% they can be use. No \cs{ifdefined} yet, so do it the old-fashioned
+% way. The primitive \cs{strcmp} is simulated using some \Lua{}
+% code, which currently has to be applied to every job as the \Lua{}
+% code is not part of the format. Thanks to Taco Hoekwater for this
+% code. The odd \cs{csname} business is needed so that the later
+% deletion code will work.
+% \begin{macrocode}
+%<*initex>
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+\else
+ \directlua
+ {
+ tex.enableprimitives('',tex.extraprimitives ())
+ lua.bytecode[1] = function ()
+ function strcmp (A, B)
+ if A == B then
+ tex.write("0")
+ elseif A < B then
+ tex.write("-1")
+ else
+ tex.write("1")
+ end
+ end
+ end
+ lua.bytecode[1]()
+ }
+ \everyjob\expandafter
+ {\csname\detokenize{luatex_directlua:D}\endcsname{lua.bytecode[1]()}}
+ \long\edef\pdfstrcmp#1#2%
+ {%
+ \expandafter\noexpand\csname\detokenize{luatex_directlua:D}\endcsname
+ {%
+ strcmp%
+ (%
+ "\noexpand\luaescapestring{#1}",%
+ "\noexpand\luaescapestring{#2}"%
+ )%
+ }%
+ }
+\fi
+%</initex>
+% \end{macrocode}
+%
+% \subsection{Package-specific code}
+%
+% The package starts by identifying itself: the information itself is
+% taken from the SVN |Id| string at the start of the source file.
+% \begin{macrocode}
+%<*package>
+\ProvidesPackage{l3bootstrap}
+ [%
+ \ExplFileDate\space v\ExplFileVersion\space
+ L3 Experimental bootstrap code%
+ ]
+%</package>
+% \end{macrocode}
+%
+% For \LuaTeX{} the functionality of the \cs{pdfstrcmp} primitive
+% needs to be provided: the \pkg{pdftexmcds} package is used to
+% do this if necessary. At present, there is also a need to deal
+% with some low-level allocation stuff that could usefully be added
+% to \texttt{lualatex.ini}. As it is currently not, load Heiko
+% Oberdiek's \pkg{luatex} package instead.
+% \begin{macrocode}
+%<*package>
+\def\@tempa%
+ {%
+ \def\@tempa{}%
+ \RequirePackage{luatex}%
+ \RequirePackage{pdftexcmds}%
+ \let\pdfstrcmp\pdf@strcmp
+ }
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+\else
+ \expandafter\@tempa
+\fi
+%</package>
+% \end{macrocode}
+%
+% \begin{macro}{\ExplSyntaxOff, \ExplSyntaxOn}
+% Experimental syntax switching is set up here for the package-loading
+% process. These are redefined in \pkg{expl3} for the package and in
+% \pkg{l3final} for the format.
+% \begin{macrocode}
+%<*package>
+\protected\edef\ExplSyntaxOff
+ {%
+ \catcode 9 = \the\catcode 9\relax
+ \catcode 32 = \the\catcode 32\relax
+ \catcode 34 = \the\catcode 34\relax
+ \catcode 38 = \the\catcode 38\relax
+ \catcode 58 = \the\catcode 58\relax
+ \catcode 94 = \the\catcode 94\relax
+ \catcode 95 = \the\catcode 95\relax
+ \catcode 124 = \the\catcode 124\relax
+ \catcode 126 = \the\catcode 126\relax
+ \endlinechar = \the\endlinechar\relax
+ \chardef\csname\detokenize{l_expl_status_bool}\endcsname = 0 \relax
+ }
+\protected\edef\ExplSyntaxOn
+ {
+ \catcode 9 = 9 \relax
+ \catcode 32 = 9 \relax
+ \catcode 34 = 12 \relax
+ \catcode 58 = 11 \relax
+ \catcode 94 = 7 \relax
+ \catcode 95 = 11 \relax
+ \catcode 124 = 12 \relax
+ \catcode 126 = 10 \relax
+ \endlinechar = 32 \relax
+ \chardef\csname\detokenize{l_expl_status_bool}\endcsname = 1 \relax
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_expl_status_bool}
+% The status for experimental code syntax: this is off at present. This
+% code is used by both the package and the format.
+% \begin{macrocode}
+\expandafter\chardef\csname\detokenize{l_expl_status_bool}\endcsname = 0 \relax
+% \end{macrocode}
+%\end{macro}
+%
+% \subsection{Dealing with package-mode meta-data}
+%
+% \begin{macro}{\GetIdInfo}
+% \begin{macro}[aux]
+% {
+% \GetIdInfoFull, \GetIdInfoAuxI, \GetIdInfoAuxII, \GetIdInfoAuxIII,
+% \GetIdInfoAuxCVS, \GetIdInfoAuxSVN
+% }
+% Functions for collecting up meta-data from the SVN information
+% used by the \LaTeX3 Project.
+% \begin{macrocode}
+%<*package>
+\protected\def\GetIdInfo
+ {
+ \begingroup
+ \catcode 32 = 10 \relax
+ \GetIdInfoAuxI
+ }
+\protected\def\GetIdInfoAuxI$#1$#2%
+ {
+ \def\tempa{#1}%
+ \def\tempb{Id}%
+ \ifx\tempa\tempb
+ \def\tempa
+ {%
+ \endgroup
+ \def\ExplFileDate{0000/00/00}%
+ \def\ExplFileDescription{#2}%
+ \def\ExplFileName{[unknown~name]}%
+ \def\ExplFileVersion{000}%
+ }%
+ \else
+ \def\tempa
+ {%
+ \endgroup
+ \GetIdInfoAuxII$#1${#2}%
+ }%
+ \fi
+ \tempa
+ }
+\protected\def\GetIdInfoAuxII$#1 #2.#3 #4 #5 #6 #7 #8$#9%
+ {%
+ \def\ExplFileName{#2}%
+ \def\ExplFileVersion{#4}%
+ \def\ExplFileDescription{#9}%
+ \GetIdInfoAuxIII#5\relax#3\relax#5\relax#6\relax
+ }
+\protected\def\GetIdInfoAuxIII#1#2#3#4#5#6\relax
+ {%
+ \ifx#5/%
+ \expandafter\GetIdInfoAuxCVS
+ \else
+ \expandafter\GetIdInfoAuxSVN
+ \fi
+ }
+\protected\def\GetIdInfoAuxCVS#1,v\relax#2\relax#3\relax
+ {\def\ExplFileDate{#2}}
+\protected\def\GetIdInfoAuxSVN#1\relax#2-#3-#4\relax#5Z\relax
+ {\def\ExplFileDate{#2/#3/#4}}
+%</package>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ProvidesExplPackage, \ProvidesExplClass, \ProvidesExplFile}
+% For other packages and classes building on this one it is convenient
+% not to need \cs{ExplSyntaxOn} each time.
+% \begin{macrocode}
+%<*package>
+\protected\def\ProvidesExplPackage#1#2#3#4%
+ {%
+ \ProvidesPackage{#1}[#2 v#3 #4]%
+ \ExplSyntaxOn
+ }
+\protected\def\ProvidesExplClass#1#2#3#4%
+ {%
+ \ProvidesClass{#1}[#2 v#3 #4]%
+ \ExplSyntaxOn
+ }
+\protected\def\ProvidesExplFile#1#2#3#4%
+ {%
+ \ProvidesFile{#1}[#2 v#3 #4]%
+ \ExplSyntaxOn
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@pushfilename, \@popfilename}
+% The idea here is to use \LaTeXe{}'s \cs{@pushfilename} and
+% \cs{@popfilename} to track the current syntax status. This can be
+% achieved by saving the current status flag at each push to a stack,
+% then recovering it at the pop stage and checking if the code
+% environment should still be active.
+% \begin{macrocode}
+%<*package>
+\edef\@pushfilename
+ {%
+ \edef\expandafter\noexpand
+ \csname\detokenize{l_expl_status_stack_tl}\endcsname
+ {%
+ \noexpand\ifodd\expandafter\noexpand
+ \csname\detokenize{l_expl_status_bool}\endcsname
+ 1%
+ \noexpand\else
+ 0%
+ \noexpand\fi
+ \expandafter\noexpand
+ \csname\detokenize{l_expl_status_stack_tl}\endcsname
+ }%
+ \ExplSyntaxOff
+ \unexpanded\expandafter{\@pushfilename}%
+ }
+\edef\@popfilename
+ {%
+ \unexpanded\expandafter{\@popfilename}%
+ \noexpand\if a\expandafter\noexpand\csname
+ \detokenize{l_expl_status_stack_tl}\endcsname a%
+ \ExplSyntaxOff
+ \noexpand\else
+ \noexpand\expandafter
+ \expandafter\noexpand\csname
+ \detokenize{expl_status_pop:w}\endcsname
+ \expandafter\noexpand\csname
+ \detokenize{l_expl_status_stack_tl}\endcsname
+ \noexpand\@nil
+ \noexpand\fi
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_expl_status_stack_tl}
+% As \pkg{expl3} itself cannot be loaded with the code environment
+% already active, at the end of the package \cs{ExplSyntaxOff} can
+% safely be called.
+% \begin{macrocode}
+%<*package>
+\@namedef{\detokenize{l_expl_status_stack_tl}}{0}
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[aux]{\expl_status_pop:w}
+% The pop auxiliary function removes the first item from the stack,
+% saves the rest of the stack and then does the test. As
+% \cs{ExplSyntaxOff} is already defined as a protected macro, there
+% is no need for \cs{noexpand} here.
+% \begin{macrocode}
+%<*package>
+\expandafter\edef\csname\detokenize{expl_status_pop:w}\endcsname#1#2\@nil
+ {%
+ \def\expandafter\noexpand
+ \csname\detokenize{l_expl_status_stack_tl}\endcsname{#2}%
+ \noexpand\ifodd#1\space
+ \noexpand\expandafter\noexpand\ExplSyntaxOn
+ \noexpand\else
+ \noexpand\expandafter\ExplSyntaxOff
+ \noexpand\fi
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% We want the \pkg{expl3} bundle to be loaded \enquote{as one};
+% this command is
+% used to ensure that one of the |l3| packages isn't loaded on its own.
+% \begin{macrocode}
+%<*package>
+\expandafter\protected\expandafter\def
+ \csname\detokenize{package_check_loaded_expl:}\endcsname
+ {%
+ \@ifpackageloaded{expl3}
+ {}
+ {%
+ \PackageError{expl3}
+ {Cannot load the expl3 modules separately}
+ {%
+ The expl3 modules cannot be loaded separately;\MessageBreak
+ please \string\usepackage\string{expl3\string} instead.
+ }%
+ }%
+ }
+%</package>
+% \end{macrocode}
+%
+% \subsection{The \cs{pdfstrcmp} primitive in \XeTeX{}}
+%
+% Only \pdfTeX{} has a primitive called \cs{pdfstrcmp}. The \XeTeX{}
+% version is just \cs{strcmp}, so there is some shuffling to do.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname pdfstrcmp\endcsname\relax
+ \let\pdfstrcmp\strcmp
+\fi
+% \end{macrocode}
+%
+% \subsection{Engine requirements}
+%
+% The code currently requires functionality equivalent to \cs{pdfstrcmp}
+% in addition to \eTeX{}. The former is therefore used as a test for
+% a suitable engine.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdfstrcmp\endcsname\relax
+%<*package>
+ \PackageError{l3names}{Required primitive not found: \protect\pdfstrcmp}
+ {%
+ LaTeX3 requires the e-TeX primitives and
+ \string\pdfstrcmp.\MessageBreak
+ These are available in engine versions: \MessageBreak
+ - pdfTeX 1.30 \MessageBreak
+ - XeTeX 0.9994 \MessageBreak
+ - LuaTeX 0.60 \MessageBreak
+ or later. \MessageBreak
+ \MessageBreak
+ Loading of expl3 will abort!
+ }
+%</package>
+%<*initex>
+ \newlinechar`\^^J\relax
+ \errhelp{%
+ LaTeX3 requires the e-TeX primitives and
+ \string\pdfstrcmp. ^^J
+ These are available in engine versions: ^^J
+ - pdfTeX 1.30 ^^J
+ - XeTeX 0.9994 ^^J
+ - LuaTeX 0.60 ^^J
+ or later. ^^J
+ For pdfTeX and XeTeX the '-etex' command-line switch is also
+ needed.^^J
+ ^^J
+ Format building will abort!
+ }
+%</initex>
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% \subsection{The \LaTeX3 code environment}
+%
+% \begin{macro}{\ExplSyntaxNamesOn, \ExplSyntaxNamesOff}
+% These can be set up early, as they are not used anywhere in the
+% package or format itself. Using an \cs{edef} here makes the
+% definitions that bit clearer later.
+% \begin{macrocode}
+\protected\edef\ExplSyntaxNamesOn
+ {%
+ \expandafter\noexpand
+ \csname\detokenize{char_set_catcode_letter:n}\endcsname{58}%
+ \expandafter\noexpand
+ \csname\detokenize{char_set_catcode_letter:n}\endcsname{95}%
+ }
+\protected\edef\ExplSyntaxNamesOff
+ {%
+ \expandafter\noexpand
+ \csname\detokenize{char_set_catcode_math_subscript:n}\endcsname{58}%
+ \expandafter\noexpand
+ \csname\detokenize{char_set_catcode_other:n}\endcsname{95}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% The code environment is now set up for the format: the package deals
+% with this using \cs{ProvidesExplPackage}.
+% \begin{macrocode}
+%<*initex>
+\catcode 9 = 9 \relax
+\catcode 32 = 9 \relax
+\catcode 34 = 12 \relax
+\catcode 58 = 11 \relax
+\catcode 94 = 7 \relax
+\catcode 95 = 11 \relax
+\catcode 124 = 12 \relax
+\catcode 126 = 10 \relax
+\endlinechar = 32 \relax
+%</initex>
+% \end{macrocode}
+%
+% \begin{macro}{\ExplSyntaxOn, \ExplSyntaxOff}
+% The idea here is that multiple \cs{ExplSyntaxOn} calls are not
+% going to mess up category codes, and that multiple calls to
+% \cs{ExplSyntaxOff} are also not wasting time.
+% \begin{macrocode}
+%<*initex>
+\protected \def \ExplSyntaxOn
+ {
+ \bool_if:NF \l_expl_status_bool
+ {
+ \cs_set_protected_nopar:Npx \ExplSyntaxOff
+ {
+ \char_set_catcode:nn { 9 } { \char_value_catcode:n { 9 } }
+ \char_set_catcode:nn { 32 } { \char_value_catcode:n { 32 } }
+ \char_set_catcode:nn { 34 } { \char_value_catcode:n { 34 } }
+ \char_set_catcode:nn { 38 } { \char_value_catcode:n { 38 } }
+ \char_set_catcode:nn { 58 } { \char_value_catcode:n { 58 } }
+ \char_set_catcode:nn { 94 } { \char_value_catcode:n { 94 } }
+ \char_set_catcode:nn { 95 } { \char_value_catcode:n { 95 } }
+ \char_set_catcode:nn { 124 } { \char_value_catcode:n { 124 } }
+ \char_set_catcode:nn { 126 } { \char_value_catcode:n { 126 } }
+ \tex_endlinechar:D =
+ \tex_the:D \tex_endlinechar:D \scan_stop:
+ \bool_set_false:N \l_expl_status_bool
+ \cs_set_protected_nopar:Npn \ExplSyntaxOff { }
+ }
+ }
+ \char_set_catcode_ignore:n { 9 } % tab
+ \char_set_catcode_ignore:n { 32 } % space
+ \char_set_catcode_other:n { 34 } % double quote
+ \char_set_catcode_alignment:n { 38 } % ampersand
+ \char_set_catcode_letter:n { 58 } % colon
+ \char_set_catcode_math_superscript:n { 94 } % circumflex
+ \char_set_catcode_letter:n { 95 } % underscore
+ \char_set_catcode_other:n { 124 } % pipe
+ \char_set_catcode_space:n { 126 } % tilde
+ \tex_endlinechar:D = 32 \scan_stop:
+ \bool_set_true:N \l_expl_status_bool
+ }
+\protected \def \ExplSyntaxOff { }
+%</initex>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_expl_status_bool}
+% A flag to show the current syntax status.
+% \begin{macrocode}
+%<*initex>
+\chardef \l_expl_status_bool = 0 ~
+%</initex>
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex \ No newline at end of file