% \iffalse meta-comment % % Copyright 1989-1997 Johannes L. Braams and any individual authors % listed elsewhere in this file. All rights reserved. % % For further copyright information see any other copyright notices in % this file. % % This file is part of the Babel system release 3.7. % -------------------------------------------------- % This system is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % % For error reports concerning UNCHANGED versions of this file no % more than one year old, see bugs.txt. % % Please do not request updates from me directly. Primary % distribution is through the CTAN archives. % % % IMPORTANT COPYRIGHT NOTICE: % % You are NOT ALLOWED to distribute this file alone. % % You are allowed to distribute this file under the condition that it % is distributed together with all the files listed in manifest.txt. % % If you receive only some of these files from someone, complain! % % Permission is granted to copy this file to another file with a % clearly different name and to customize the declarations in that % copy to serve the needs of your installation, provided that you % comply with the conditions in the file legal.txt from the LaTeX2e % distribution. % % However, NO PERMISSION is granted to produce or to distribute a % modified version of this file under its original name. % % You are NOT ALLOWED to change this file. % % % \fi % \CheckSum{708} % % \iffalse %<*dtx> \ProvidesFile{bbplain.dtx} [1997/04/28 v1.0m Babel support for plain-based formats] % % % Babel package for LaTeX version 2e % Copyright (C) 1989 - 1997 % by Johannes Braams % % Please report errors to: J.L. Braams % JLBraams@cistron.nl % % This file is part of the babel system, it provides the source % code for the extra definitions needed to be able to use babel % with a plain-based format. %<*filedriver> \documentclass{ltxdoc} \font\manual=logo10 % font used for the METAFONT logo, etc. \newcommand*\MF{{\manual META}\-{\manual FONT}} \newcommand*{\babel}{\textsf{babel}} \newcommand*{\langvar}{$\langle \it lang \rangle$} \newcommand*{\note}[1]{} \newcommand*{\Lopt}[1]{\textsf{#1}} \newcommand*{\file}[1]{\texttt{#1}} \begin{document} \DocInput{bbplain.dtx} \end{document} % % \fi % % \GetFileInfo{bbplain.dtx} % \StopEventually{} % % \section{Support for formats based on \textsc{plain}\TeX} % % The following code duplicates or emulates parts of \LaTeXe\ that % are needed for \babel. % % \changes{bbplain-1.0f}{1996/07/09}{Consistently use \cs{@undefined} % instead of \cs{undefined}} % \changes{bbplain-1.0f}{1996/07/09}{added \cs{@empty}} % \changes{bbplain-1.0h}{1996/10/07}{Only load the necessary parts % into the format, let this file be read agian by babel.def} % \begin{macrocode} %<*code> \ifx\adddialect\@undefined % \end{macrocode} % When |\adddialect| is still undefined we are making a % format. In that case only the first part of this file is needed. % \begin{macrocode} \def\@empty{} % \end{macrocode} % We need to define |\loadlocalcfg| for plain users as the % \LaTeX\ definition uses |\InputIfFileExists|. % \changes{bbplain-1.0c}{1995/07/26}{Added definition of % \cs{loadlocalcfg}} % \changes{bbplain-1.0d}{1996/01/08}{Also reset category codes after % loading the configuration file as \cs{AtEndOfPackage} is % undefined in this case} % \begin{macrocode} \def\loadlocalcfg#1{% \openin0#1.cfg \ifeof0 \closein0 \else \closein0 {\immediate\write16{*************************************}% \immediate\write16{* Local config file #1.cfg used}% \immediate\write16{*}% } \input #1.cfg\relax \fi % \end{macrocode} % We have to execute \cs{@endofldf} in this case % \begin{macrocode} \@endofldf } % \end{macrocode} % % \changes{bbplain-1.0c}{1995/11/08}{Moved the \cs{dump} code here from % \file{babel.dtx}} % % \changes{bbplain-0.1}{1991/10/31}{Added redefinition of \cs{dump} to % add a message to \cs{everyjob}} % We want to add a message to the message \LaTeX$\:$2.09 puts in % the |\everyjob| register. This could be done by the following % code: % \begin{verbatim} % \let\orgeveryjob\everyjob % \def\everyjob#1{% % \orgeveryjob{#1}% % \orgeveryjob\expandafter{\the\orgeveryjob\immediate\write16{% % hyphenation patterns for \the\loaded@patterns loaded.}}% % \let\everyjob\orgeveryjob\let\orgeveryjob\@undefined} % \end{verbatim} % The code above redefines the control sequence \cs{everyjob} % in order to be able to add something to the current contents of % the register. This is necessary because the processing of % hyphenation patterns happens long before \LaTeX\ fills the % register.\\ % There are some problems with this approach though. % \begin{itemize} % \item When someone wants to use several hyphenation patterns with % \SliTeX\ the above scheme won't work. The reason is that \SliTeX\ % overwrites the contents of the |\everyjob| register with its own % message. % \item Plain \TeX\ does not use the |\everyjob| register so the % message would not be displayed. % \end{itemize} % To circumvent this a `dirty trick' can be used. As this code is % only processed when creating a new format file there is one % command that is sure to be used, |\dump|. Therefore the orginal % |\dump| is saved in |\org@dump| and a new definition is supplied. % \begin{macrocode} \let\orig@dump=\dump \def\dump{% % \end{macrocode} % To make sure that \LaTeX$\:$2.09 executes the % |\@begindocumenthook| we would want to alter |\begin{document}|, % but as this done too often already, we add the new code at the % front of |\@preamblecmds|. But we can only do that after it has % been defined, so we add this peice of code to |\dump|. % \changes{bbplain-1.0c}{1995/11/19}{Add execution of % \cs{@begindocumenthook} to \cs{@preamblecmds}} % \changes{bbplain-1.0i}{1997/01/02}{\cs{document} is not a % \LaTeX2.09-only command; AMS\TeX defines it too; now use % \cs{@ztryfc} to detect \LaTeX2.09} % \changes{bbplain-1.0j}{1997/01/07}{Add the definition of % \cs{@begindocumenthook} to the \LaTeX2.09 format} % \begin{macrocode} \ifx\@ztryfc\@undefined \else \toks0=\expandafter{\@preamblecmds} \edef\@preamblecmds{\noexpand\@begindocumenthook\the\toks0} \def\@begindocumenthook{} \fi % \end{macrocode} % This new definition starts by adding an instruction to write a % message on the terminal and in the transcript file to inform the % user of the preloaded hyphenation patterns. % \changes{bbplain-1.0f}{1996/07/09}{Use \cs{toks8} instead of % \cs{patterns@loaded}} % \begin{macrocode} \everyjob\expandafter{\the\everyjob% \immediate\write16{\the\toks8 loaded.}}% % \end{macrocode} % Then everything is restored to the old situation and the format % is dumped. % \begin{macrocode} \let\dump\orig@dump\let\orig@dump\@undefined\dump} \expandafter\endinput \fi % \end{macrocode} % The rest of this file is not processed by ini\TeX\ but during the % normal document run. % A number of \LaTeX\ macro's that are needed later on. % \begin{macrocode} \long\def\@firstofone#1{#1} \long\def\@firstoftwo#1#2{#1} \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} \def\@star@or@long#1{% \@ifstar {\let\l@ngrel@x\relax#1}% {\let\l@ngrel@x\long#1}} \let\l@ngrel@x\relax \def\@car#1#2\@nil{#1} \def\@cdr#1#2\@nil{#2} \let\@typeset@protect\relax \long\def\@gobble#1{} \edef\@backslashchar{\expandafter\@gobble\string\\} \def\strip@prefix#1>{} \def\g@addto@macro#1#2{{% \toks@\expandafter{#1#2}% \xdef#1{\the\toks@}}} \def\@namedef#1{\expandafter\def\csname #1\endcsname} % \end{macrocode} % \LaTeXe\ has the command |\@onlypreamble| which adds commands to % a list of commands that are no longer needed after % |\begin{document}|. % \begin{macrocode} \ifx\@preamblecmds\@undefined \def\@preamblecmds{} \fi \def\@onlypreamble#1{% \expandafter\gdef\expandafter\@preamblecmds\expandafter{% \@preamblecmds\do#1}} \@onlypreamble\@onlypreamble % \end{macrocode} % Mimmick \LaTeX's |\AtBeginDocument|; for this to work the user % needs to add |\begindocument| to his file. % \begin{macrocode} \def\begindocument{% \@begindocumenthook \global\let\@begindocumenthook\@undefined \def\do##1{\global\let ##1\@undefined}% \@preamblecmds \global\let\do\noexpand } % \end{macrocode} % % \changes{bbplain-1.0j}{1997/01/07}{\cs{@begindocumenthook} might % already be defined} % \changes{bbplain-1.0k}{1997/01/14}{missing \cs{@undefined} added} % \begin{macrocode} \ifx\@begindocumenthook\@undefined \def\@begindocumenthook{} \fi \@onlypreamble\@begindocumenthook \def\AtBeginDocument{\g@addto@macro\@begindocumenthook} % \end{macrocode} % We also have to mimick \LaTeX's |\AtEndOfPackage|. Our % replacement macro is much simpler; it stores its argument in % |\@endofldf|. % \begin{macrocode} \def\AtEndOfPackage#1{\g@addto@macro\@endofldf{#1}} \@onlypreamble\AtEndOfPackage \def\@endofldf{} \@onlypreamble\@endofldf % \end{macrocode} % \LaTeX\ needs to be able to switch off writing to its auxiliary % files; plain doesn't have them by default. % \changes{bbplain-v1.0m}{1997/04/28}{Set \cs{if@filesw} to \cs{iffalse} % only for plain \TeX} % \begin{macrocode} \ifx\bye\@undefined\else \expoandafter\let\csname if@filesw\expandafter\csname iffalse\endcsname \fi % \end{macrocode} % Mimick \LaTeX's commands to define control sequences. % \changes{bbplain-1.0e}{1996/02/22}{Provide a more complete emulation % of \cs{DeclareRobustCommand} and \cs{newcommand}} % \begin{macrocode} \def\newcommand{\@star@or@long\new@command} \def\new@command#1{% \@testopt{\@newcommand#1}0} \def\@newcommand#1[#2]{% \@ifnextchar [{\@xargdef#1[#2]}% {\@argdef#1[#2]}} \long\def\@argdef#1[#2]#3{% \@yargdef#1\@ne{#2}{#3}} \long\def\@xargdef#1[#2][#3]#4{% \expandafter\def\expandafter#1\expandafter{% \expandafter\@protected@testopt\expandafter #1% \csname\string#1\expandafter\endcsname{#3}}% \expandafter\@yargdef \csname\string#1\endcsname \tw@{#2}{#4}} \long\def\@yargdef#1#2#3{% \@tempcnta#3\relax \advance \@tempcnta \@ne \let\@hash@\relax \edef\reserved@a{\ifx#2\tw@ [\@hash@1]\fi}% \@tempcntb #2% \@whilenum\@tempcntb <\@tempcnta \do{% \edef\reserved@a{\reserved@a\@hash@\the\@tempcntb}% \advance\@tempcntb \@ne}% \let\@hash@##% \l@ngrel@x\expandafter\def\expandafter#1\reserved@a} \let\providecommand\newcommand % \end{macrocode} % % \begin{macrocode} \def\DeclareRobustCommand{\@star@or@long\declare@robustcommand} \def\declare@robustcommand#1{% \edef\reserved@a{\string#1}% \def\reserved@b{#1}% \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}% \edef#1{% \ifx\reserved@a\reserved@b \noexpand\x@protect \noexpand#1% \fi \noexpand\protect \expandafter\noexpand\csname \expandafter\@gobble\string#1 \endcsname }% \expandafter\new@command\csname \expandafter\@gobble\string#1 \endcsname } \def\x@protect#1{% \ifx\protect\@typeset@protect\else \@x@protect#1% \fi } \def\@x@protect#1\fi#2#3{% \fi\protect#1% } % \end{macrocode} % % \LaTeX\ has a macro to check whether a certain package was loaded % with specific options. The command has two extra arguments which % are code to be executed in either the true or false case. % This is used to detect whether the document needs one of the % accents to be activated (\Lopt{activegrave} and % \Lopt{activeacute}). For plain \TeX\ we assume that the user % wants them to be active by default. Therefore the only thing we % do is execute the third argument (the code for the true case). % % \begin{macrocode} \def\@ifpackagewith#1#2#3#4{% #3} % \end{macrocode} % % \changes{bbplain-1.0e}{1996/01/15}{Added the \cs{newcommand} code} % For the following code we need to make sure that the commands % |\newcommand| and |\providecommand| exist with some sensible % definition. They are not fully equivalent to their \LaTeXe\ % versions; just enough to make things work in plain~\TeX % environments. % % \changes{bbplain-1.0k}{1997/01/14}{\cs{newcount} is an \cs{outer} % command, can't use it inside an \cs{if} construct} % \changes{bbplain-1.0l}{1997/01/19}{Mixed up the definition of \cs{@tempcntb}} % \begin{macrocode} \ifx\@tempcnta\@undefined \csname newcount\endcsname\@tempcnta\relax \fi \ifx\@tempcntb\@undefined \csname newcount\endcsname\@tempcntb\relax \fi % \end{macrocode} % To prevent wasting two counters in \LaTeX$\:$2.09 (because % counters with the same name are allocated later by it) we reset % the counter that holds the next free counter (|\count10|). % \begin{macrocode} \ifx\bye\@undefined \advance\count10 by -2\relax \fi \ifx\@ifnextchar\@undefined \def\@ifnextchar#1#2#3{% \let\reserved@d=#1% \def\reserved@a{#2}\def\reserved@b{#3}% \futurelet\@let@token\@ifnch} \def\@ifnch{% \ifx\@let@token\@sptoken \let\reserved@c\@xifnch \else \ifx\@let@token\reserved@d \let\reserved@c\reserved@a \else \let\reserved@c\reserved@b \fi \fi \reserved@c} \def\:{\let\@sptoken= } \: % this makes \@sptoken a space token \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} \fi \def\@testopt#1#2{% \@ifnextchar[{#1}{#1[#2]}} \def\@protected@testopt#1{%% \ifx\protect\@typeset@protect \expandafter\@testopt \else \@x@protect#1% \fi} \long\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax #2\relax}\fi} \long\def\@iwhilenum#1{\ifnum #1\expandafter\@iwhilenum \else\expandafter\@gobble\fi{#1}} % \end{macrocode} % Code from \file{ltoutenc.dtx}, adapted for use in the plain \TeX\ % environment. % \begin{macrocode} \def\DeclareTextCommand{% \@dec@text@cmd\providecommand } \def\ProvideTextCommand{% \@dec@text@cmd\providecommand } \def\DeclareTextSymbol#1#2#3{% \@dec@text@cmd\chardef#1{#2}#3\relax } \def\@dec@text@cmd#1#2#3{% \expandafter\def\expandafter#2% \expandafter{% \csname#3-cmd\expandafter\endcsname \expandafter#2% \csname#3\string#2\endcsname }% % \let\@ifdefinable\@rc@ifdefinable \expandafter#1\csname#3\string#2\endcsname } \def\@current@cmd#1{% \ifx\protect\@typeset@protect\else \noexpand#1\expandafter\@gobble \fi } \def\@changed@cmd#1#2{% \ifx\protect\@typeset@protect \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax \expandafter\ifx\csname ?\string#1\endcsname\relax \expandafter\def\csname ?\string#1\endcsname{% \@changed@x@err{#1}% }% \fi \global\expandafter\let \csname\cf@encoding \string#1\expandafter\endcsname \csname ?\string#1\endcsname \fi \csname\cf@encoding\string#1% \expandafter\endcsname \else \noexpand#1% \fi } \def\@changed@x@err#1{% \errhelp{Your command will be ignored, type to proceed}% \errmessage{Command \protect#1 undefined in encoding \cf@encoding}} \def\DeclareTextCommandDefault#1{% \DeclareTextCommand#1?% } \def\ProvideTextCommandDefault#1{% \ProvideTextCommand#1?% } \expandafter\let\csname OT1-cmd\endcsname\@current@cmd \expandafter\let\csname?-cmd\endcsname\@changed@cmd \def\DeclareTextAccent#1#2#3{% \DeclareTextCommand#1{#2}[1]{\accent#3 ##1} } \def\DeclareTextCompositeCommand#1#2#3#4{% \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname \edef\reserved@b{\string##1}% \edef\reserved@c{% \expandafter\@strip@args\meaning\reserved@a:-\@strip@args}% \ifx\reserved@b\reserved@c \expandafter\expandafter\expandafter\ifx \expandafter\@car\reserved@a\relax\relax\@nil \@text@composite \else \edef\reserved@b##1{% \def\expandafter\noexpand \csname#2\string#1\endcsname####1{% \noexpand\@text@composite \expandafter\noexpand\csname#2\string#1\endcsname ####1\noexpand\@empty\noexpand\@text@composite {##1}% }% }% \expandafter\reserved@b\expandafter{\reserved@a{##1}}% \fi \expandafter\def\csname\expandafter\string\csname #2\endcsname\string#1-\string#3\endcsname{#4} \else \errhelp{Your command will be ignored, type to proceed}% \errmessage{\string\DeclareTextCompositeCommand\space used on inappropriate command \protect#1} \fi } \def\@text@composite#1#2#3\@text@composite{% \expandafter\@text@composite@x \csname\string#1-\string#2\endcsname } \def\@text@composite@x#1#2{% \ifx#1\relax #2% \else #1% \fi } % \def\@strip@args#1:#2-#3\@strip@args{#2} \def\DeclareTextComposite#1#2#3#4{% \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}% \bgroup \lccode`\@=#4% \lowercase{% \egroup \reserved@a @% }% } % \def\UseTextSymbol#1#2{% % \let\@curr@enc\cf@encoding % \@use@text@encoding{#1}% #2% % \@use@text@encoding\@curr@enc } \def\UseTextAccent#1#2#3{% % \let\@curr@enc\cf@encoding % \@use@text@encoding{#1}% % #2{\@use@text@encoding\@curr@enc\selectfont#3}% % \@use@text@encoding\@curr@enc } \def\@use@text@encoding#1{% % \edef\f@encoding{#1}% % \xdef\font@name{% % \csname\curr@fontshape/\f@size\endcsname % }% % \pickup@font % \font@name % \@@enc@update } \def\DeclareTextSymbolDefault#1#2{% \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}% } \def\DeclareTextAccentDefault#1#2{% \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}% } \def\cf@encoding{OT1} % \end{macrocode} % Currently we only use the \LaTeXe\ method for accents for those % that are known to be made active in \emph{some} language % definition file. % \begin{macrocode} \DeclareTextAccent{\"}{OT1}{127} \DeclareTextAccent{\'}{OT1}{19} \DeclareTextAccent{\^}{OT1}{94} \DeclareTextAccent{\`}{OT1}{18} \DeclareTextAccent{\~}{OT1}{126} % \end{macrocode} % The following two control sequences are used in \file{babel.def} % but are not defined for \textsc{plain} \TeX. % \changes{bbplain-1.0f}{1996/07/10}{Added \cs{textquotedblright} and % \cs{textquoteright}} % \changes{bbplain-1.0g}{1996/08/15}{Added \cs{ss} and \cs{i}} % \begin{macrocode} \DeclareTextSymbol{\textquotedblright}{OT1}{`\"} \DeclareTextSymbol{\textquoteright}{OT1}{`\'} \DeclareTextSymbol{\i}{OT1}{16} \DeclareTextSymbol{\ss}{OT1}{25} % \end{macrocode} % For a couple of languages we need the \LaTeX-control sequence % |\scriptsize| to be available. Because plain \TeX\ doesn't have % such a sofisticated font mechanism as \LaTeX\ has, we just |\let| % it to |\sevenrm|. % \changes{bbplain-1.0f}{1996/07/10}{Added definition of % \cs{scriptsize}} % \begin{macrocode} \ifx\scriptsize\@undefined \let\scriptsize\sevenrm \fi % % \end{macrocode} % \endinput %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~}