summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/bezos/esindex.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-28 22:04:36 +0000
committerKarl Berry <karl@freefriends.org>2019-01-28 22:04:36 +0000
commit2c3cf1152cb4655cf77cc39aeddf7be69ddd8e12 (patch)
treeea755bf2e22f56aac9fe4efab81443de7417be86 /Master/texmf-dist/tex/latex/bezos/esindex.sty
parent99c613f04edeed8a28efac69411132ea2cd8164d (diff)
bezos (28jan19)
git-svn-id: svn://tug.org/texlive/trunk@49850 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/bezos/esindex.sty')
-rw-r--r--Master/texmf-dist/tex/latex/bezos/esindex.sty296
1 files changed, 204 insertions, 92 deletions
diff --git a/Master/texmf-dist/tex/latex/bezos/esindex.sty b/Master/texmf-dist/tex/latex/bezos/esindex.sty
index 3b2d61e02c0..ac00170d3a8 100644
--- a/Master/texmf-dist/tex/latex/bezos/esindex.sty
+++ b/Master/texmf-dist/tex/latex/bezos/esindex.sty
@@ -1,25 +1,11 @@
-% +--------------------------------------------------+
-% | Typeset ensindex.tex to get the documentation. |
-% +--------------------------------------------------+
%
-%% Copyright (C) 1998-2004, 2006, 2008 Javier Bezos
-%% All Rights Reserved
-%% http://www.tex-tipografia.com
-%%
-%% This work 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".
-%%
-%% This Current Maintainer of this work is Javier Bezos.
-%%
-%% This work consists of the files esindex.tex and esindex.sty.
-
+% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% Repository: https://github.com/jbezos/esindex
+%
% Changes
%
% 2006-05-12. Bug fixed. Missing accents in multilevel entries.
@@ -29,44 +15,50 @@
% Macro \ignorewords.
% 2008-09-28. Added \everyesindex.
% Macro \esindexsort.
+% 2019-01-25. Macro \esindexactual.
+% Package option nospanish.
+% Adapted to xe/lua, with:
+% Macros \esindexreplace, \esindexlastchar, \esindexkey
-\ProvidesPackage{esindex}[2008/09/28 v1.4 Spanish indexes]
+\ProvidesPackage{esindex}[2019/01/28 v1.5 Spanish indexes]
\def\esx@level{`\!}
\def\esx@actual{`\@}
\def\esx@encap{`\|}
\def\esx@quote{`\"}
+\DeclareOption{ignorespaces}{%
+ \def\esx@zapspace#1\esx@zapspace{\zap@space#1 \@empty}}
-\def\esx@error{\PackageError{esindex}{Unknown index parameter}%
- {Except for ignorespaces and replaceindex, options^^J%
- in this package ave the form parameter=value, where^^J%
- parameter stands for of the following MakeIndex ones:^^J%
- encap, level, actual, quote}}
+\DeclareOption{replaceindex}{%
+ \AtBeginDocument{%
+ \let\esx@trueindex\index
+ \let\index\esindex}}
-\def\esx@process#1=#2\esx@process{%
- \@ifundefined{esx@#1}{\esx@error}{%
- \expandafter\edef\csname esx@#1\endcsname
- {\string`\expandafter\noexpand\csname\string#2\endcsname}}}
+\DeclareOption{nospanish}{\esx@spanishfalse}
\DeclareOption*{%
\@expandtwoargs\in@{=}{\CurrentOption}%
\ifin@
\expandafter\esx@process\CurrentOption\esx@process
\else
- \def\esx@a{ignorespaces}
- \ifx\esx@a\CurrentOption
- \def\esx@zapspace#1\esx@zapspace{\zap@space#1 \@empty}%
- \else\def\esx@a{replaceindex}
- \ifx\esx@a\CurrentOption
- \AtBeginDocument{%
- \let\esx@trueindex\index
- \let\index\esindex}
- \else
- \esx@error
- \fi
- \fi
+ \esx@error
\fi}
+\def\esx@process#1=#2\esx@process{%
+ \@ifundefined{esx@#1}{\esx@error}{%
+ \expandafter\edef\csname esx@#1\endcsname
+ {\string`\expandafter\noexpand\csname\string#2\endcsname}}}
+
+\def\esx@error{\PackageError{esindex}{Unknown index parameter}%
+ {Except for ignorespaces, nospanish, replaceindex, options^^J%
+ in this package ave the form parameter=value, where^^J%
+ parameter stands for of the following MakeIndex ones:^^J%
+ encap, level, actual, quote}}
+
+\newif\ifesx@spanish
+\esx@spanishtrue
+\let\esx@spanishaccents\relax
+\let\esx@spanishquotes\relax
\let\esx@zapspace\@empty
\def\esx@trueindex{\index}
@@ -87,7 +79,7 @@
\lowercase{
\gdef\esx@index#1#2{%
- \let\esx@g\@empty
+ \let\esx@g\@empty % used to build the keysort@actual list
\esx@bar@idx#2|\@@
\expandafter\esx@@index\esx@b!\@@
\toks@\expandafter{\esx@g}%
@@ -105,63 +97,97 @@
\gdef\esx@bar@eat#1|{\def\esx@a{|#1}}
}
+\gdef\esindexexpandkey{\protected@edef\esindexkey{\esindexkey}}
+
+% The following is called for every ! level, much like a loop. #1 is
+% the current level.
+
\lowercase{
\gdef\esx@@index#1!#2\@@{%
\begingroup
\let\IeC\@firstofone
\def\@tabacckludge##1{\csname\string##1\endcsname}%
- \def\'##1{\@ifundefined{esx@index@q@\string##1}%
- {##1}%
- {\csname esx@index@q@\string##1\endcsname}}%
- \ifnum\catcode`\'=\active
- \let'\'%
- \fi
- \def\~##1{\string##1\string^^ff}%
- \ifnum\catcode`\~=\active
- \let~\~%
- \fi
- \def\"##1{\@ifundefined{esx@index@qq@\string##1}%
- {\string"##1}%
- {\csname esx@index@qq@\string##1\endcsname}}%
- \ifnum\catcode`\"=\active
- \let"\"%
- \fi
- \def\esx@a{#1}%
- \@ifundefined{esx@sort@\expandafter\strip@prefix\meaning\esx@a}%
+ \esx@spanishaccents
+ \def\esindexkey{#1}%
+ % Apply \esindexsort
+ \@ifundefined{esx@sort@\expandafter\strip@prefix\meaning\esindexkey}%
{\@temptokena{#1}}%
{\@temptokena\expandafter\expandafter\expandafter{%
- \csname esx@sort@\expandafter\strip@prefix\meaning\esx@a\endcsname}}%
+ \csname esx@sort@\expandafter\strip@prefix\meaning\esindexkey\endcsname}}%
+ \edef\esindexkey{\the\@temptokena}%
+ % Execute \everyesindex and apply accents, so that \'a becomes a, and
+ % redefinitions in \everyesindex are also "applied"
\the\everyesindex
- % Particles
+ \esindexexpandkey
+ \esx@spanishreplacements
+ \@temptokena\expandafter{\esindexkey}%
+ % Key now in \@temptokena
+ % Particles, with \ignorewords. \esx@remwords works on \@temptokena
\@for\esx@a:=\esx@ignorewords\do{%
\expandafter\esx@remwords\expandafter{\esx@a}}%
- \toks@\expandafter{\esx@g}%
- % Adds @ and removes spaces.
+ \toks@\expandafter{\esx@g}% \esx@g here contains previous ! levels
+ % Key still in \@temptokena, now without particles.
+ % Add current key and @, and also remove spaces if 'ignorespaces'.
\protected@xdef\esx@g{%
\the\toks@
\expandafter\esx@zapspace\the\@temptokena\esx@zapspace
\string &}%
+ % Key built until now in \esx@g (including previous levels,
+ % current level key, but not the current actual entry).
\endgroup
\begingroup
- \def*##1{% <- its lower case is the quote char (")
- \ifcat##1a%
- \@ifundefined{spanish@sh@\string*\string##1@}%
- {\string*##1}%
- {\string*\string*##1}%
- \else
- \string*\string##1%
- \fi}%
- \def\esx@b{#2}%
+ % Used in the protected expansion below, and only for " in spanish:
+ \esx@spanishquotes
+ % Set actual, if there is a saved one with \esindexactual.
+ \def\esx@a{#1}%
+ \@ifundefined{esx@actual@\expandafter\strip@prefix\meaning\esx@a}%
+ {\def\esx@a{#1}}%
+ {\expandafter\let\expandafter\esx@a
+ \csname esx@actual@\expandafter\strip@prefix\meaning\esx@a\endcsname}%
+ % Add actual, and go to the next ! level
\toks@\expandafter{\esx@g}%
- \ifx\esx@b\@empty
- \protected@xdef\esx@g{\the\toks@#1}%
+ \def\esx@b{#2}%
+ \ifx\esx@b\@empty % ie, if no further ! levels
+ \protected@xdef\esx@g{\the\toks@\esx@a}%
\else
- \protected@xdef\esx@g{\the\toks@#1!}%
- \esx@@index#2\@@
+ \protected@xdef\esx@g{\the\toks@\esx@a!}%
+ \esx@@index#2\@@ % if there are, continue
\fi
\endgroup}
}
-\endgroup
+
+\ifesx@spanish
+\lowercase{
+ \def\esx@spanishquotes{%
+ \def*##1{% <- its lower case is the quote char (")
+ \ifcat##1a%
+ \@ifundefined{spanish@sh@\string*\string##1@}%
+ {\string*##1}%
+ {\string*\string*##1}%
+ \else
+ \string*\string##1%
+ \fi}}
+ \gdef\esx@spanishaccents{%
+ \def\'##1{\@ifundefined{esx@index@q@\string##1}%
+ {##1}%
+ {\csname esx@index@q@\string##1\endcsname}}%
+ \def\~##1{\string##1\esindexlastchar}%
+ \def\"##1{\@ifundefined{esx@index@qq@\string##1}%
+ {\string"##1}%
+ {\csname esx@index@qq@\string##1\endcsname}}%
+ \ifnum\catcode`\'=\active
+ \let'\'%
+ \fi
+ \ifnum\catcode`\~=\active
+ \let~\~%
+ \fi
+ \ifnum\catcode`\"=\active
+ \let"\"%
+ \fi}
+}
+\fi
+
+\endgroup % Finishes special catcodes
\def\ignorewords#1{%
\protected@edef\esx@ignorewords{\zap@space#1 \@empty}}
@@ -186,19 +212,105 @@
\def\esx@a{#1}%
\@namedef{esx@sort@\expandafter\strip@prefix\meaning\esx@a}}
+\def\esindexactual#1{%
+ \def\esx@a{#1}%
+ \@namedef{esx@actual@\expandafter\strip@prefix\meaning\esx@a}}
+
\newtoks\everyesindex
-\def\esx@index@q@n{n\string^^ff}
-\def\esx@index@q@N{N\string^^ff}
-\@namedef{esx@index@q@\string\i}{i}
+%-------------------------
+
+\long\def\esx@afterfi#1\fi{\fi#1}
+\def\esx@replace#1#2#3{% in #1 -> repl #2 by #3
+ \toks@{}%
+ \def\esx@replace@aux##1#2##2#2{%
+ \ifx\esx@nil##2%
+ \toks@\expandafter{\the\toks@##1}%
+ \else
+ \toks@\expandafter{\the\toks@##1#3}%
+ \esx@afterfi
+ \esx@replace@aux##2#2%
+ \fi}%
+ \expandafter\esx@replace@aux#1#2\esx@nil#2%
+ \edef#1{\the\toks@}}
+
+\def\esindexreplace#1#2{\esx@replace\esindexkey{#1}{#2}}
+
+%-------------------------
+
+\let\esx@spanishreplacements\relax
+
+\ifesx@spanish
+
+ \def\esx@index@q@n{n\esindexlastchar}
+ \def\esx@index@q@N{N\esindexlastchar}
+ \@namedef{esx@index@q@\string\i}{i}
+
+ \def\esx@index@qq@o{.o}
+ \def\esx@index@qq@O{.O}
+ \def\esx@index@qq@a{.a}
+ \def\esx@index@qq@A{.A}
+ \def\esx@index@qq@u{u}
+ \def\esx@index@qq@U{U}
+ \def\esx@index@qq@c{c}
+ \def\esx@index@qq@C{C}
+
+ \def\esx@@spanishreplacements{%
+ \esindexreplace{á}{a}%
+ \esindexreplace{é}{e}%
+ \esindexreplace{í}{i}%
+ \esindexreplace{ó}{o}%
+ \esindexreplace{ú}{u}%
+ \esindexreplace{ñ}{n\esindexlastchar}%
+ \esindexreplace{ü}{u}%
+ \esindexreplace{Á}{A}%
+ \esindexreplace{É}{E}%
+ \esindexreplace{Í}{I}%
+ \esindexreplace{Ó}{O}%
+ \esindexreplace{Ú}{U}%
+ \esindexreplace{Ñ}{N\esindexlastchar}%
+ \esindexreplace{Ü}{U}}
+
+\fi
+
+\begingroup
+ \catcode`\^=7
+ \ifx\directlua\@undefined
+ \ifx\XeTeXinterchartoks\@undefined
+ \catcode`\^^ff=12
+ \xdef\esindexlastchar{^^ff}
+ \else
+ \catcode`\^^^^ffff=12
+ \xdef\esindexlastchar{^^^^ffff}
+ \global\let\esx@spanishreplacements\esx@@spanishreplacements
+ \fi
+ \else
+ \catcode`\^^^^ffff=12
+ \xdef\esindexlastchar{^^^^ffff}
+ \global\let\esx@spanishreplacements\esx@@spanishreplacements
+ \fi
+\endgroup
+
+\endinput
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
-\def\esx@index@qq@o{.o}
-\def\esx@index@qq@O{.O}
-\def\esx@index@qq@a{.a}
-\def\esx@index@qq@A{.A}
-\def\esx@index@qq@u{u}
-\def\esx@index@qq@U{U}
-\def\esx@index@qq@c{c}
-\def\esx@index@qq@C{C}
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
-\endinput \ No newline at end of file
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file