diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/babeltools/babeltools.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/babeltools/babeltools.sty | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/babeltools/babeltools.sty b/Master/texmf-dist/tex/latex/babeltools/babeltools.sty new file mode 100644 index 00000000000..2818aa36519 --- /dev/null +++ b/Master/texmf-dist/tex/latex/babeltools/babeltools.sty @@ -0,0 +1,362 @@ +% Copyright (c) 2010 by Javier Bezos. +% All Rights Reserved. +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% The Current Maintainer of this work is Javier Bezos. +% +% TODO: +% noshorthands -> shorthands=off, nocitations, nocrossrefs + +\ProvidesPackage{babeltools}[2010/10/14 v0.2 Tools for the babel system (beta)] + +\edef\bbtl@savedcatcodes{% + \catcode`\noexpand\~=\the\catcode`\~ + \catcode`\noexpand\:=\the\catcode`\: + \catcode`\noexpand\"=\the\catcode`\"} +\catcode`\~=\active +\catcode`\"=12 +\catcode`\:=12 + +\def\bbtl@meaning{\expandafter\strip@prefix\meaning} + +\def\bbtl@ifshorthand#1{% + \@expandtwoargs\in@{#1}{\bbtl@o@shorthands}% + \ifin@ + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\let\bbtl@afterbabelhook\@empty +\newcommand\AfterBabel[1]{% + \g@addto@macro\bbtl@afterbabelhook{#1}} + +\let\bbtl@atendofbabelhook\@empty +\newcommand\AtEndOfBabel[1]{% + \g@addto@macro\bbtl@atendofbabelhook{#1}} + +\let\bbtl@beforebabelhook\@empty +\newcommand\BeforeBabel[1]{% + \g@addto@macro\bbtl@beforebabelhook{#1}} + +% Not to be redefined. The current value, saved by babel, is +% restored. More robust code is necessary, I think. + +\def\bbtl@restore@org#1{% + \@ifundefined{#1 }% Not robust? + {\expandafter\let\csname #1\expandafter\endcsname + \csname org@#1\endcsname}% + {\expandafter\let\csname #1 \expandafter\endcsname + \csname org@#1\endcsname}} + +\def\bbtl@save@org#1{% + \expandafter\let\csname org@#1\expandafter\endcsname + \csname #1\endcsname} + +% Citations and cross refs +% ~~~~~~~~~~~~~~~~~~~~~~~~ + +\let\bbtl@ignorepackages\@empty + +\DeclareOption{nocitations} + {\g@addto@macro\bbtl@ignorepackages{,cite,natbib,}% + \AfterBabel{% + \bbtl@restore@org{nocite}% + \bbtl@restore@org{bibcite}% + \bbtl@restore@org{@bibitem}%S + \bbtl@restore@org{@citex}}} + +\DeclareOption{nocrossrefs} + {\g@addto@macro\bbtl@ignorepackages{,varioref,}% + \BeforeBabel{% + \bbtl@save@org{@newl@bel}}% babel DOESN'T save it! + \AfterBabel{% + \bbtl@restore@org{@newl@bel}% + \bbtl@restore@org{ref}% Robust + \bbtl@restore@org{pageref}}}% Robust + +% More cases are to be added, but they must be delayed at the end of +% begin document, because they are related to loaded packages (see +% babel.dtx) +% +% Shorthands +% ~~~~~~~~~~ +% Some languages use the shortand mechanism for tools not defined +% otherwise, so you can still use them with \babelshorthand{..}. +% Then you can use it conveniently to define your own macros. + +% ~ is an special case, as it's defined in babel.def + +% New shorthands +% -------------- + +\DeclareOption{adaptive}% + {\AfterBabel{% + \let\bbtl@initiate@active@char\initiate@active@char + \let\initiate@active@char\bbtl@set@shorthand + \let\bbtl@declare@shorthand\declare@shorthand + \let\declare@shorthand\bbtl@declare + \let\bbl@activate\bbtl@activate + \let\bbtl@deactivate\bbl@deactivate + \let\bbl@deactivate\bbtl@restore}} + +% Do \bbtl@initiate@active@char but don't make the char active. +% Not necessary and a source of bugs. + +\def\bbtl@set@shorthand#1{% + \expandafter\edef\csname bbtl@savecat\string#1\endcsname + {\the\catcode`#1}% + \bbtl@initiate@active@char{#1}% + \catcode`#1=\csname bbtl@savecat\string#1\endcsname\relax + \addto\bbtl@select{\shorthandon{#1}}} + +\def\bbtl@use@shorthand{% + \if@safe@actives + \bbl@afterelse + \string + \else + \bbl@afterfi + {\ifx\thepage\relax + \bbl@afterelse + \string + \else + \bbl@afterfi + \bbtl@use@sh + \fi}% + \fi} + +\def\bbtl@use@sh#1{% + \ifx\protect\@unexpandable@protect + \bbl@afterelse + \noexpand#1% + \else% + \bbl@afterfi + \textormath + {\csname active@char\string#1\endcsname}% + {\csname normal@char\string#1\endcsname}% + \fi} + +\gdef\bbtl@activate#1{% + \begingroup + \lccode`\~=`#1 + \lowercase{% + \endgroup + \def~{\bbtl@use@shorthand~}}} + +\def\bbtl@restore#1{% + \shorthandon{#1}% + \begingroup + \lccode`\~=`#1 + \lowercase{% + \endgroup + \bbtl@deactivate{~}}} + +\def\bbtl@declare#1#2{% + \@ifundefined{bbtl@savecat\expandafter\string\@firstoftwo#2\@empty}% + {\@gobble}% + {\bbtl@declare@shorthand{#1}{#2}}} + +% No shorthands +% ------------- + +% This is done after 'adaptive', if present. + +\DeclareOption{shorthands=off}% + {\AfterBabel{\bbl@doshorthands}} + +\def\babelshorthand#1{% + \def\bbtl@tempa{#1}% + \@ifundefined{bbtl@@\languagename @@\bbtl@meaning\bbtl@tempa}% + {#1}% + {\@nameuse{bbtl@@\languagename @@\bbtl@meaning\bbtl@tempa}}} + +% Select +% ---------------------- +\let\bbtl@o@shorthands\@empty + +% TO DO: package options are expanded by LaTeX, and ~ raises +% an error, but not \string~. Is there a way to fix it? + +% This is done after 'adaptive', if present. + +\def\bbl@doshorthands{% + \let\bbtl@s@initiate@active@char\initiate@active@char + \def\initiate@active@char##1{% + \bbtl@ifshorthand{\string##1}% + {\bbtl@s@initiate@active@char{##1}}% + {}}% + \let\bbtl@s@declare@shorthand\declare@shorthand + \def\declare@shorthand##1##2{% + \bbtl@ifshorthand{\expandafter\string\@firstoftwo##2\@empty}% + {\bbtl@s@declare@shorthand{##1}{##2}}% + {\def\bbtl@tempa{##2}% + \@namedef{bbtl@@##1@@\bbtl@meaning\bbtl@tempa}}}% + \let\bbtl@s@activate\bbl@activate + \def\bbl@activate##1{% + \bbtl@ifshorthand{\string##1}% + {\bbtl@s@activate{##1}}% + {}}% + \let\bbtl@s@deactivate\bbl@deactivate + \def\bbl@deactivate##1{% + \bbtl@ifshorthand{\string##1}% + {\bbtl@s@deactivate{##1}}% + {}}} + +% No config +% ~~~~~~~~~ +% Make sure an unexpected local config doesn't spoil your document. +% Use of config files is strongly discouraged, but some sites +% use them + +\DeclareOption{noconfig} + {\AfterBabel{\let\loadlocalcfg\@gobble}} + +% Captions +% ~~~~~~~~ + +% redefining names. Somewhat experimental. + +\def\bbtl@captions{% + \bbtl@elt\prefacename\bbtl@elt\refname\bbtl@elt\abstractname + \bbtl@elt\bibname\bbtl@elt\chaptername\bbtl@elt\appendixname + \bbtl@elt\contentsname\bbtl@elt\listfigurename + \bbtl@elt\listtablename\bbtl@elt\indexname + \bbtl@elt\figurename\bbtl@elt\tablename\bbtl@elt\partname + \bbtl@elt\enclname\bbtl@elt\ccname\bbtl@elt\headtoname + \bbtl@elt\pagename\bbtl@elt\seename\bbtl@elt\alsoname + \bbtl@elt\proofname\bbtl@elt\glossaryname} + +% 1: \captions... expanded #2 repl fun bbtl@f #3 \...name +% \lang...name +\def\bbtl@rep#1\@@\@@#2#3#4{% + \in@{#3}{#1}% + \ifin@ + #2#1\@@\@@#3#4% + \else + \PackageWarningNoLine{babeltools}% + {No \string#3 in \bbtl@l}% + \fi} + +% \bbtl@f is a helper macro: +% 1 \...name +% bbtl@f: +% #1 prev, #2 def of \...name, #3 after +% #4 \...name, #5 \lang...name +\DeclareOption{langcaptions} + {\def\bbtl@repdef#1{% + \def\bbtl@f##1#1##2##3\@@\@@##4##5{% + \def##5{##2}% + \@namedef{captions\bbtl@l}{##1##4{##5}##3}}}% + \def\bbtl@elt#1{% + \bbtl@repdef#1% + \@temptokena\expandafter\expandafter\expandafter{% + \csname captions\bbtl@l\endcsname}% + % If \lang...name undefined + \edef\bbtl@t{% + \noexpand\bbtl@rep + \the\@temptokena + \noexpand\@@\noexpand\@@ + \noexpand\bbtl@f + \noexpand#1 + \expandafter\noexpand + \csname\bbtl@l\expandafter\@gobble\string#1\endcsname}% + \bbtl@t}% + \def\bbtl@repdo{% + \@for\bbtl@l:=\bbtl@options\do{% + \@ifundefined{captions\bbtl@l}{}{% + \bbtl@captions}}}% + \AtEndOfBabel{\bbtl@repdo}} + +% Key=value package options +% ~~~~~~~~~~~~~~~~~~~~~~~~~ + +\def\bbtl@process#1=#2\bbtl@process#3{% + \expandafter\ifx\csname bbtl@o@#1\endcsname\@empty + \expandafter\edef\csname bbtl@o@#1\endcsname{#2}% + \DeclareOption{\CurrentOption}{}% + \fi} + +\DeclareOption*{% + \@expandtwoargs\in@{\string=}{\CurrentOption}% + \ifin@ + \expandafter\bbtl@process\CurrentOption\bbtl@process\CurrentOption + \fi} + +% Process options +% ~~~~~~~~~~~~~~~~ + +\ProcessOptions + +% shorthands=... option is handled here. + +\show\bbtl@o@shorthands + +\ifx\bbtl@o@shorthands\@empty\else + \edef\bbtl@o@shorthands{\bbtl@meaning\bbtl@o@shorthands}% + \bbtl@ifshorthand{'}% + {\PassOptionsToPackage{activeacute}{babel}}{} + \bbtl@ifshorthand{`}% + {\PassOptionsToPackage{activegrave}{babel}}{} + \bbtl@ifshorthand{:}{}% + {\g@addto@macro\bbtl@ignorepackages{,hhline,}} +% After any redefinition, the shorthand mechanism comes. + \AfterBabel{\bbl@doshorthands} +\fi + +% The first \LdfInit loads the babel core (the sty file doesn't!) +% That means babeltools is not compatible with classes loading +% a language: + +\@ifundefined{ldf@finish}% + {\def\LdfInit{% + \expandafter\let\expandafter\bbtl@options + \csname opt@babel.sty\endcsname + \bbtl@beforebabelhook + \AtBeginDocument{% + \let\bbtl@ifpackageloaded\@ifpackageloaded + \def\@ifpackageloaded##1{% + \@expandtwoargs\in@{,##1,}{\bbtl@ignorepackages}% + \ifin@ + \expandafter\@gobbletwo + \else + \expandafter\bbtl@ifpackageloaded + \fi + {##1}}}% + \chardef\atcatcode =\catcode`\@ + \catcode`\@=11\relax + \input babel.def\relax + \catcode`\@ =\atcatcode + \let\atcatcode\relax + \bbtl@afterbabelhook + \AtEndOfPackage{\bbtl@atendofbabelhook}% + \LdfInit}} + {\PackageError{babeltools}% + {Too late -- babel has been loaded}% + {babeltools can be used only before babel.\MessageBreak + Very likely a package or the class has loaded it.}} + +\AtEndOfBabel{% + \AtBeginDocument{\let\@ifpackageloaded\bbtl@ifpackageloaded}} + +\bbtl@savedcatcodes + +\endinput + +============================== +============================== + +- Attributes? +- Quotes '' + + + + |