From 2c3cf1152cb4655cf77cc39aeddf7be69ddd8e12 Mon Sep 17 00:00:00 2001 From: Karl Berry 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