From 2c3cf1152cb4655cf77cc39aeddf7be69ddd8e12 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Mon, 28 Jan 2019 22:04:36 +0000
Subject: bezos (28jan19)

git-svn-id: svn://tug.org/texlive/trunk@49850 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/bezos/esindex.sty | 296 ++++++++++++++++++--------
 1 file changed, 204 insertions(+), 92 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/bezos/esindex.sty')

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
-- 
cgit v1.2.3

