diff options
Diffstat (limited to 'indexing/xindex')
46 files changed, 1165 insertions, 691 deletions
diff --git a/indexing/xindex/CHANGELOG b/indexing/xindex/CHANGELOG index df515fcbec..3684255a78 100644 --- a/indexing/xindex/CHANGELOG +++ b/indexing/xindex/CHANGELOG @@ -1,3 +1,10 @@ +0.61 2024-09-22 - fix for hyperref with \see and \seealso +0.60 2024-05-16 - more fixes for UCA as default mode +0.59 2024-05-13 - removed the xindex-cfg.lua +0.58 2024-05-12 - Use UCA as default + fix for french sorting +0.57 2024-01-20 - Test version for UCA +0.56 2024-01-12 - fix for leading spaces of index entries 0.55 2023-07-30 - fix for wrong presort -- disabled the use of \writeidx 0.54 2023-07-28 - do not print control output for testing 0.53 2023-07-16 - added function literize to escape special lua characters diff --git a/indexing/xindex/README.md b/indexing/xindex/README.md index 3d4dbd0198..b35fa53647 100644 --- a/indexing/xindex/README.md +++ b/indexing/xindex/README.md @@ -1,15 +1,17 @@ # xindex -Copyright 2019-2023 Herbert Voß +Copyright 2019-2024 Herbert Voß +The files xindex-lapp.lua and xindex-pretty.lua have the MIT licence. +all other files are LPPL 1.3 Unicode compatible index programm for LaTeX. It needs Lua 5.3 which will be included in at least LuaTeX 1.09 (TeXLive 2019) * xindex.lua -- main file -* xindex-cfg.lua -- config module * xindex-cfg-common.lua -- main config module * xindex-cfg-uca.lua -- config module for uca +* xindex-cfg-no_uca.lua -- config module for old mode * xindex-base.lua -- base file * xindex-baselib.lua -- base file * xindex-lib.lua -- functions module @@ -29,18 +31,22 @@ possible options are (short,long): -q,--quiet -h,--help -v... Verbosity level; can be -v, -vv, -vvv - -c,--config (default cfg) - -e,--escapechar (default ") - -n,--noheadings + -V,--version -a,--no_casesensitive -b,--no_labels + -c,--config (default "") + -e,--escapechar (default ") + -f,--fix_hyperref + -g,--no_pagenumber + -i,--ignoreSpace + -k,--checklang + -l,--language (default en) + -n,--noheadings -o,--output (default "") - -l,--language (default en) -p,--prefix (default L) - -u,--use_UCA - -g,--no_pagenumber -s,--use_stdin - -V,--version + -u,--use_UCA no more needed + -x,--no_UCA <files...> (default stdin) .idx file(s) Testfiles: diff --git a/indexing/xindex/doc/Makefile b/indexing/xindex/doc/Makefile index 725576594d..4cf5b6ef78 100644 --- a/indexing/xindex/doc/Makefile +++ b/indexing/xindex/doc/Makefile @@ -13,7 +13,7 @@ ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Chan #TDS = ~/PSTricks/PSTricks-TDS -all : doc clean +all : doc # clean doc: $(LATEX) --shell-escape --interaction=nonstopmode $(MAIN) diff --git a/indexing/xindex/doc/tests/HADW.pdf b/indexing/xindex/doc/tests/HADW.pdf Binary files differindex b5be513894..6adda4baa5 100644 --- a/indexing/xindex/doc/tests/HADW.pdf +++ b/indexing/xindex/doc/tests/HADW.pdf diff --git a/indexing/xindex/doc/tests/HADW.tex b/indexing/xindex/doc/tests/HADW.tex index 0ce50d0b10..34feccc755 100644 --- a/indexing/xindex/doc/tests/HADW.tex +++ b/indexing/xindex/doc/tests/HADW.tex @@ -14,7 +14,7 @@ \makeatother \begin{document} -Run with \verb|xindex --config HAdW-eKO| +Run with \verb|xindex --config HAdW-eKO -x| no UCA \printindex \end{document} diff --git a/indexing/xindex/doc/tests/Umlaute.ind b/indexing/xindex/doc/tests/Umlaute.ind index 3ad13d9ff0..5367f8bbc0 100644 --- a/indexing/xindex/doc/tests/Umlaute.ind +++ b/indexing/xindex/doc/tests/Umlaute.ind @@ -23,8 +23,8 @@ \item Oberin, {5f} \item Obstler, {7} \item Ödem, {4} - \item oder, {8} \item Oder, \seealso{Fluss}{33}, {58} + \item oder, {8} \item Öl, {8} \item ölen, {9} \item Oligarch, {28} diff --git a/indexing/xindex/doc/tests/Umlaute.pdf b/indexing/xindex/doc/tests/Umlaute.pdf Binary files differindex 7fdc54812c..6060678d9c 100644 --- a/indexing/xindex/doc/tests/Umlaute.pdf +++ b/indexing/xindex/doc/tests/Umlaute.pdf diff --git a/indexing/xindex/doc/tests/Umlaute2.ind b/indexing/xindex/doc/tests/Umlaute2.ind index 94419c09d2..5367f8bbc0 100644 --- a/indexing/xindex/doc/tests/Umlaute2.ind +++ b/indexing/xindex/doc/tests/Umlaute2.ind @@ -11,24 +11,24 @@ \textbf{G}\label{L-xindex-G} \nopagebreak[4] \item Göbel, {58} - \item Göthe, {58} \item Goethe, {58} - \item Götz, {58} \item Goldmann, {58} + \item Göthe, {58} + \item Götz, {58} \indexspace \textbf{O}\label{L-xindex-O} \nopagebreak[4] - \item Ödem, {4} - \item Öl, {8} - \item ölen, {9} - \item Öresund, {2}, {4} - \item Österreich, {1f} \item Ober, {4}, {6} \item Oberin, {5f} \item Obstler, {7} - \item oder, {8} + \item Ödem, {4} \item Oder, \seealso{Fluss}{33}, {58} + \item oder, {8} + \item Öl, {8} + \item ölen, {9} \item Oligarch, {28} + \item Öresund, {2}, {4} \item Ostern, {3f} + \item Österreich, {1f} \end{theindex} diff --git a/indexing/xindex/doc/tests/Umlaute2.pdf b/indexing/xindex/doc/tests/Umlaute2.pdf Binary files differindex d19db6ea79..a07a43df34 100644 --- a/indexing/xindex/doc/tests/Umlaute2.pdf +++ b/indexing/xindex/doc/tests/Umlaute2.pdf diff --git a/indexing/xindex/doc/tests/buch.ind b/indexing/xindex/doc/tests/buch.ind index 91f07404d0..3567565fae 100644 --- a/indexing/xindex/doc/tests/buch.ind +++ b/indexing/xindex/doc/tests/buch.ind @@ -17,9 +17,6 @@ \indexspace \textbf{A}\label{L-xindex-A} \nopagebreak[4] - \item AMS, {376} - \item ANSI, {67} - \item AUC\TeX , {29} \item Abbildung, {309} \item Abbildungsverzeichnis, {310}, {475} \item Absatz, {7}, {381} @@ -33,12 +30,15 @@ \item Akzent, {73}, {406}, {433}, {447} \item Albanisch, {67} \item American Mathematical Society (AMS), {415} + \item AMS, {376} \item Anführungszeichen, {81} \item Anhang, {62} + \item ANSI, {67} \item Atom, {400f} - \item Autor, {54} - \item Autor"=Jahr"=Schema, {544} + \item AUC\TeX , {29} \item Autor-Stil, {586} + \item Autor"=Jahr"=Schema, {544} + \item Autor, {54} \indexspace \textbf{B}\label{L-xindex-B} @@ -78,7 +78,6 @@ \indexspace \textbf{C}\label{L-xindex-C} \nopagebreak[4] - \item CMYK, {671} \item cc, {859} \item class option, {386} \item Clipping, {247} @@ -86,6 +85,7 @@ \item Clown, {256} \item Cluster, {248} \item cm, {859} + \item CMYK, {671} \item Con\TeX t, {879} \item continued fraction, {430} \item Cork-Kodierung, {72} @@ -95,8 +95,6 @@ \indexspace \textbf{D}\label{L-xindex-D} \nopagebreak[4] - \item DIN\,5007, {512} - \item DIN~476, {91} \item Dänisch, {67}, {76} \item Dateilinks, {188} \item Datum, {54} @@ -113,11 +111,12 @@ \item Dezimalstellen, {248} \item Differentialquotient, {414} \item dimen register, {860} + \item DIN\,5007, {512} + \item DIN~476, {91} \item displaymath mode, {381} \item Distribution, {13} \item Divisior, {431} \item \idxtextClasses - \subitem -\,{\sffamily IEEEtran}, {185} \subitem -\,{\sffamily amsart}, {415} \subitem -\,{\sffamily amsbook}, {415} \subitem -\,{\sffamily article}, {52f}, {59f}, {93}, {128}, {150}, {383}, {474} @@ -125,6 +124,7 @@ \subitem -\,{\sffamily book}, {59f}, {93}, {113}, {128}, {150}, {202}, {383f}, {434}, {474f} \subitem -\,{\sffamily ctexart}, {572} \subitem -\,{\sffamily europecv}, {827f}, {830} + \subitem -\,{\sffamily IEEEtran}, {185} \subitem -\,{\sffamily letter}, {59ff} \subitem -\,{\sffamily memoir}, {59f} \subitem -\,{\sffamily powerdot}, {615} @@ -168,15 +168,16 @@ \indexspace \textbf{F}\label{L-xindex-F} \nopagebreak[4] - \item FNDB, {872} \item Fallunterscheidung, {392}, {425} - \item Farbe, {236}, {669} - \subitem -\,Modell, {680} + \item Farbe \subitem -\,konvertieren, {680} - \item Farbmodell, {236}, {669} + \subitem -\,Modell, {680} + \item Farbe, {236}, {669} + \item Farbmodell \subitem -\,CMYK, {673} \subitem -\,HSB, {673} \subitem -\,RGB, {673} + \item Farbmodell, {236}, {669} \item Farbserie, {672}, {680} \item Farbwert, {680} \item Faröisch, {67} @@ -185,8 +186,9 @@ \item Fettschrift, {220} \item Finnisch, {67}, {76}, {80} \item Flattersatz, {142f}, {223}, {358}, {538f}, {640} - \item Float, {309} \item float box, {337} + \item Float, {309} + \item FNDB, {872} \item Folie, {621} \item Folienübergänge, {639} \item Fontfamilie, {661} @@ -205,7 +207,6 @@ \indexspace \textbf{G}\label{L-xindex-G} \nopagebreak[4] - \item GUI, {9}, {29} \item Galizisch, {67} \item Gaußscher Algorithmus, {448} \item GenericError, {869} @@ -222,6 +223,7 @@ \item Griechisch, {76}, {80} \item Grundlinie, {224}, {264} \item Gruppe, {252}, {864} + \item GUI, {9}, {29} \item Guillemets, {82} \indexspace @@ -237,15 +239,6 @@ \textbf{I}\label{L-xindex-I} \nopagebreak[4] \item IDE, {29} - \item IPA, {72} - \item ISO 8859-1, {67} - \item ISO 8859-15, {67} - \item ISO 8859-2, {67} - \item ISO 8859-3, {67} - \item ISO 8859-4, {67} - \item ISO-Image, {14} - \item ISO~216, {91} - \item IUPAC, {814} \item in, {859} \item indent, {476} \item Index, {32}, {405}, {408f}, {432}, {699} @@ -257,17 +250,25 @@ \item Integrationsvariable, {414} \item interline spacing, {405} \item Internetadresse, {84} + \item IPA, {72} \item Irisch, {67} \item Isländisch, {67}, {76} - \item italic, {86} + \item ISO 8859-15, {67} + \item ISO 8859-1, {67} + \item ISO 8859-2, {67} + \item ISO 8859-3, {67} + \item ISO 8859-4, {67} + \item ISO-Image, {14} + \item ISO~216, {91} \item Italic-Korrektur, {88} + \item italic, {86} \item Italienisch, {76}, {80} \item Items, {413} + \item IUPAC, {814} \indexspace \textbf{K}\label{L-xindex-K} \nopagebreak[4] - \item \KOMAScript , {59ff}, {93} \item Kapitel, {62}, {76} \item Kapitelanfang, {62} \item Katalanisch, {67} @@ -279,9 +280,11 @@ \item Klammersymbole, {394} \item Knoten, {775} \item Kochsche Schneeflocke, {778} - \item Kodierung, {38}, {67} + \item Kodierung \subitem -\,ascii, {67} + \item Kodierung, {38}, {67} \item Kolumnentitel, {121}, {126} + \item \KOMAScript , {59ff}, {93} \item Komma, {248} \item Kommutative Diagramme, {448} \item Konventionen, {213} @@ -294,10 +297,9 @@ \indexspace \textbf{L}\label{L-xindex-L} \nopagebreak[4] - \item LR-Box, {173} - \item \LaTeX -Editor, {29} \item Label, {181}, {245}, {387}, {626} \item largesymbols, {396} + \item \LaTeX -Editor, {29} \item Latin-1, {68} \item Laufweite, {596} \item Layout, {9}, {377}, {618} @@ -307,10 +309,11 @@ \item Lettisch, {67} \item Liedtexte, {145} \item Ligaturen, {89} - \item Linie, {219}, {230} + \item Linie \subitem -\,farbig, {217} \subitem -\,horizontal, {216}, {230} \subitem -\,vertikal, {216}, {223}, {230} + \item Linie, {219}, {230} \item Linksbündig, {223} \item Linux, {13} \item list of tables, {256} @@ -322,11 +325,11 @@ \subitem -\,Tabellenüberschrift, {259} \subitem -\,Tabellenunterschrift, {259} \item lot, {256} + \item LR-Box, {173} \indexspace \textbf{M}\label{L-xindex-M} \nopagebreak[4] - \item MLA, {586} \item Mac OS~X, {13}, {67} \item Mac\TeX , {13} \item Makefile, {9} @@ -344,11 +347,13 @@ \item Matrix, {227}, {383}, {405f}, {426}, {449} \item Mediävalziffern, {595} \item Metronyme, {564} - \item MiK\TeX , {13}, {21}, {23} + \item MiK\TeX \subitem -\,Paketmanager, {21} + \item MiK\TeX , {13}, {21}, {23} \item Mikrotypografie, {7} \item Minimalbeispiel, {888} \item Minuskelziffern, {595} + \item MLA, {586} \item mm, {859} \item Modulo, {433} \item Monospaceschrift, {64} @@ -361,9 +366,9 @@ \indexspace \textbf{N}\label{L-xindex-N} \nopagebreak[4] - \item NEJM, {585} \item Navigationsleiste, {33}, {616}, {619} \item Navigator, {33} + \item NEJM, {585} \item Neunerteilung, {103} \item Niederländisch, {67}, {76}, {80} \item Niedersorbisch, {76} @@ -378,8 +383,8 @@ \item Onlinequelle, {561} \item OpenOffice, {35} \item OpenType, {12}, {72}, {601} - \item Operator, {378}, {400}, {408}, {414}, {449} \item Operator-Symbol, {408} + \item Operator, {378}, {400}, {408}, {414}, {449} \item Operatorname, {408} \item option clash, {871} \item optischer Randausgleich, {163} @@ -393,7 +398,6 @@ \nopagebreak[4] \item \protect \nxLnotation {p}-Spalte, {271} \item p-Spalte, {268} - \item PDF/A, {189} \item Page Coded Language, {750} \item Paginierung, {115} \item Papierbreite, {96} @@ -403,6 +407,7 @@ \item Parabel, {770} \item Patronyme, {564} \item pc, {860} + \item PDF/A, {189} \item pdf\TeX , {11}, {13} \item pdfe\TeX , {11} \item Pfade, {31} @@ -432,7 +437,6 @@ \textbf{R}\label{L-xindex-R} \nopagebreak[4] \item \protect \nxLnotation {r}-Spalte, {271} - \item RGB, {674} \item Radikand, {432} \item Rahmenfarbe, {389} \item Randbemerkung, {157} @@ -442,6 +446,7 @@ \item Referenzieren, {245} \item Rekursion, {865} \item Relationssymbol, {380} + \item RGB, {674} \item robust, {377f} \item Roman-Zeichensatz, {399} \item root, {14} @@ -454,7 +459,6 @@ \indexspace \textbf{S}\label{L-xindex-S} \nopagebreak[4] - \item SQL-Datenbank, {247} \item Satzprogramm, {6} \item Satzspiegel, {91}, {94}, {103} \item Satzspiegelberechnung, {103} @@ -465,6 +469,7 @@ \item Schreibmaschinenschrift, {64} \item Schrift \subitem -\,Breite, {64} + \subitem -\,fett, {411}, {451} \subitem -\,Gewicht, {87} \subitem -\,Größe, {412} \subitem -\,Höhe, {64} @@ -473,7 +478,6 @@ \subitem -\,Stil, {378} \subitem -\,Tiefe, {64} \subitem -\,Warnung, {883} - \subitem -\,fett, {411}, {451} \item Schriftattribut, {660} \item Schrifteinbindung, {9} \item Schriftfamilie, {85}, {442}, {595} @@ -498,8 +502,8 @@ \item sidebar, {619} \item Sigel, {561} \item Silbentrennung, {149} - \item skip, {58}, {860} \item skip register, {860f} + \item skip, {58}, {860} \item Skriptsprache, {13} \item slanted, {86} \item Slowakisch, {67}, {80} @@ -518,14 +522,16 @@ \item Spaltenzwischenraum, {290} \item Spanisch, {67}, {76}, {80} \item Sprachauswahl, {9} + \item SQL-Datenbank, {247} \item Standardsprache, {76} \item Sternversion, {215} \item Subscript, {378}, {393}, {409} \item Sumatra-PDF, {23} \item Summe, {393}, {438} \item Superscript, {378}, {409} - \item Symbol, {400} + \item Symbol \subitem -\,gestockt, {411} + \item Symbol, {400} \item Syntax, {214} \item Systemadministrator, {14} \item Systemmeldung, {883} @@ -533,14 +539,13 @@ \indexspace \textbf{T}\label{L-xindex-T} \nopagebreak[4] - \item TDS, {172}, {872} - \item TOC, {128} - \item Tabelle, {309f} + \item Tabelle \subitem -\,Breite, {214}, {289} \subitem -\,Farbe, {273} - \subitem -\,Kopf, {222} \subitem -\,gerahmt, {224} \subitem -\,geschachtelt, {268} + \subitem -\,Kopf, {222} + \item Tabelle, {309f} \item Tabellenbeschriftung, {62} \item Tabellenbreite, {215} \item Tabellenkalkulation, {282} @@ -549,5 +554,126 @@ \item Tabellenunterschrift \subitem -\,\nxLPack {longtable}, {259} \item Tabellenverzeichnis, {310}, {475} - \item {\ttfamily tabular} Env., \idxbf{0--218} + \item {\ttfamily tabular} Env., \idxbf{214--218} + \item Tagebuchnotation, {561} + \item Tcheschisch, {80} + \item TDS, {172}, {872} + \item Teilungsverhältnis, {62} + \item Template, {657} + \item \TeX -Collection, {13} + \item \TeXLive, {3}, {13--21}, {23}, {25f}, {31}, {512}, {542}, {590}, {610}, {766}, {855}, {870}, {872ff}, {877ff}, {890} + \item \TeX maker, {29} + \item \TeX nicCenter, {31}, {35}, {38} + \item \TeX Shop, {23} + \item \TeX Studio, {23} + \item Text, {398} + \item Textanteil, {309} + \item Textkörper, {51}, {53}, {871} + \item Textmodus, {411}, {450} + \item Textschrift, {411} + \item Textverarbeitung, {6} + \item Textverarbeitungsprogramm, {7} + \item \TeX works, {23} + \item Titel, {54}, {413} + \item Titelkopf, {658} + \item TOC, {128} + \item Tortendiagramm, {244}, {746} + \item Transparenz, {631} + \item Trennalgorithmus, {75} + \item Trennlinie, {221} + \item Trennregeln, {77} + \item Trennung, {222} + \item Tridiagonalmatrix, {428} + \item TrueType, {12}, {72}, {601} + \item Tschechisch, {67}, {76} + \item Türkisch, {67}, {76}, {80} + \item Type-3, {70} + \item Type"~1, {12} + \item Typewriterschrift, {64} + \item Typografie, {213} + +\indexspace +\textbf{U}\label{L-xindex-U} +\nopagebreak[4] + \item Überschriftenformat, {77} + \item Übersetzung, {207} + \item Ukrainisch, {76}, {80} + \item Umbruch, {7} + \item Umbruchmöglichkeit, {252} + \item Umgebung, {848} + \item Umgebungsvariable, {14} + \item Umkodierung, {38} + \item Ungarisch, {67}, {76}, {80} + \item Unicode, {11} + \item Unsichtbarkeit, {631} + \item Untergleichung, {437}, {454} + \item Unterstrich, {449} + \item Updatemanager, {18} + \item URL, {84}, {190} + \item USB-Stick, {879} + \item UTF-16, {189} + \item UTF-8, {38}, {67} + +\indexspace +\textbf{V}\label{L-xindex-V} +\nopagebreak[4] + \item Variable, {414} + \item Vektor, {407}, {448} + \item Vektorschrift, {54}, {71}, {85} + \item Verbatim-Modus, {654} + \item vertikale Linien, {223} + \item Verzeichnisse, {63} + \item Viewer, {31f} + \item Vollbildmodus, {639} + \item Vordergrundfarbe, {658} + +\indexspace +\textbf{W}\label{L-xindex-W} +\nopagebreak[4] + \item Waisenkind, {103} + \item Warnung, {883} + \item Wickelfalz, {832} + \item Wiederholungsfaktor, {215} + \item Windows 1250, {67} + \item Windows 1252, {67} + \item Windows 1257, {67} + \item Windows, {13}, {21} + \item Witwe, {102} + \item Wörterbuch, {40} + \item Worttrennung, {143}, {223} + \item Wortzwischenraum, {165} + \item Wurzel, {431} + \item Wurzelexponent, {432} + +\indexspace +\textbf{X}\label{L-xindex-X} +\nopagebreak[4] + \item X-Spalte, {290} + \item Xem\TeX , {13} + +\indexspace +\textbf{Z}\label{L-xindex-Z} +\nopagebreak[4] + \item Zahlenkolonnen, {247} + \item Zähler, {383f}, {387}, {862} + \item Zählung, {267} + \item Zeichen (aktives), {408} + \item Zeichensatzbefehle, {87} + \item Zeile + \subitem -\,Abstand, {234} + \subitem -\,Breite, {289} + \subitem -\,Farbe, {236} + \subitem -\,Höhe, {219} + \subitem -\,Tiefe, {220} + \subitem -\,Vorschub, {269} + \subitem -\,Zähler, {230} + \item Zeilenabstand, {56} + \item Zeilenhöhe, {378} + \item Zeilenmodus, {376--380}, {391}, {404} + \item Zeilenumbruch, {380} + \item Zellenfarbe, {236} + \item Zentrieren, {141} + \item Zickzackfalz, {832} + \item Zufallszahlen, {448} + \item Zusammenfassung, {63} \end{theindex} diff --git a/indexing/xindex/doc/tests/buch.pdf b/indexing/xindex/doc/tests/buch.pdf Binary files differindex 15984473ac..6ac37cb8a6 100644 --- a/indexing/xindex/doc/tests/buch.pdf +++ b/indexing/xindex/doc/tests/buch.pdf diff --git a/indexing/xindex/doc/tests/demo-hyperref.ind b/indexing/xindex/doc/tests/demo-hyperref.ind index 639cedcaab..50054a6a7e 100644 --- a/indexing/xindex/doc/tests/demo-hyperref.ind +++ b/indexing/xindex/doc/tests/demo-hyperref.ind @@ -36,198 +36,5 @@ \item demnach, \hyperpage{35}, \hyperpage{38} \item Demonstration, \hyperpage{29}, \hyperpage{35} \item den, \hyperpage{46} - \item der, \hyperpage{34}, \hyperpage{37}, \hyperpage{41} - \item Deshalb, \hyperpage{14} - \item Deutschland, \hyperpage{8}, \hyperpage{27} - \item die, \hyperpage{21}, \hyperpage{39}, \hyperpage{41} - \item Diktatur, \hyperpage{16} - \item dominiere, \hyperpage{9} - \item durch, \hyperpage{31} - -\indexspace -\textbf{E}\label{L-xindex-E} -\nopagebreak[4] - \item ein, \hyperpage{36} - \item einer, \hyperpage{22} - \item einschlägige, \hyperpage{31} - \item Ende, \hyperpage{21} - \item endet, \hyperpage{15} - \item er, \hyperpage{2}, \hyperindexformat{\seealso{foo}}{4} - \item erkennen, \hyperpage{31} - \item ersten, \hyperpage{21} - \item erzählt, \hyperpage{1} - \item es, \hyperpage{8}, \hyperpage{38} - \item etwa, \hyperpage{19}, \hyperpage{21} - \item Europaplatz., \hyperpage{25} - -\indexspace -\textbf{F}\label{L-xindex-F} -\nopagebreak[4] - \item Feindbild, \hyperpage{7} - \item Festakt, \hyperpage{19} - \item Flaggen, \hyperpage{36} - \item Flüchtlinge, \hyperpage{11} - \item für, \hyperpage{10}, \hyperpage{26} - -\indexspace -\textbf{G}\label{L-xindex-G} -\nopagebreak[4] - \item gaben, \hyperpage{30} - \item gehabt, \hyperpage{36} - \item gehe, \hyperpage{9} - \item gekommen., \hyperpage{38} - \item Gelassenheit, \hyperpage{4} - \item gelästert, \hyperpage{46} - \item Gleichzeitig, \hyperpage{4} - \item gut, \hyperpage{9} - -\indexspace -\textbf{H}\label{L-xindex-H} -\nopagebreak[4] - \item haben, \hyperpage{32}, \hyperpage{35}, \hyperpage{42} - \item haben., \hyperpage{35} - \item hatte, \hyperpage{25} - \item Hilfe, \hyperpage{10} - -\indexspace -\textbf{I}\label{L-xindex-I} -\nopagebreak[4] - \item illegalen, \hyperpage{36} - \item Im, \hyperpage{43} - \item in, \hyperpage{15}, \hyperpage{19} - \item ist, \hyperpage{43} - -\indexspace -\textbf{J}\label{L-xindex-J} -\nopagebreak[4] - \item jedoch, \hyperpage{36} - \item jungen, \hyperpage{40} - -\indexspace -\textbf{K}\label{L-xindex-K} -\nopagebreak[4] - \item keine, \hyperpage{36} - \item Kilometer, \hyperpage{23} - \item Kundgebung, \hyperpage{23}, \hyperpage{42} - -\indexspace -\textbf{L}\label{L-xindex-L} -\nopagebreak[4] - \item leben., \hyperpage{14} - \item lernen, \hyperpage{14} - -\indexspace -\textbf{M}\label{L-xindex-M} -\nopagebreak[4] - \item machen., \hyperpage{8} - \item mahnte, \hyperpage{2} - \item man, \hyperpage{14} - \item Männer, \hyperpage{40} - \item Märtyrer, \hyperpage{1} - \item mehr, \hyperpage{3}, \hyperpage{32} - \item Menschen, \hyperpage{34} - \item Migranten, \hyperpage{12} - \item Minderheiten, \hyperpage{5} - \item mit, \hyperpage{14}, \hyperpage{29} - \item möglich., \hyperpage{14} - \item Motto, \hyperpage{29} - \item müsse, \hyperpage{14} - -\indexspace -\textbf{N}\label{L-xindex-N} -\nopagebreak[4] - \item N, \hyperpage{31} - \item nach, \hyperpage{19} - \item Nation., \hyperpage{30} - \item neigte, \hyperpage{21} - \item Neonazis, \hyperpage{31} - \item Netz, \hyperpage{43} - \item nicht, \hyperpage{14}, \hyperpage{38} - \item Nicht-Perfekten, \hyperpage{14} - -\indexspace -\textbf{O}\label{L-xindex-O} -\nopagebreak[4] - \item Obwohl, \hyperpage{8} - \item Osten, \hyperpage{46} - \item Östereich, \hyperpage{1} - -\indexspace -\textbf{P}\label{L-xindex-P} -\nopagebreak[4] - \item Perfekte, \hyperpage{15} - \item Pessimismus., \hyperpage{10} - \item Plakate, \hyperpage{35} - \item Polizei, \hyperpage{32}, \hyperpage{38} - -\indexspace -\textbf{R}\label{L-xindex-R} -\nopagebreak[4] - \item rechten, \hyperpage{23} - \item richtig, \hyperpage{13} - -\indexspace -\textbf{S}\label{L-xindex-S} -\nopagebreak[4] - \item sagte, \hyperpage{36} - \item sei, \hyperpage{12}, \hyperpage{38} - \item seiner, \hyperpage{1} - \item sich, \hyperpage{19}, \hyperpage{21}, \hyperpage{30}, \hyperpage{32} - \item Sie, \hyperpage{35} - \item sind, \hyperpage{42} - \item Sprecher, \hyperpage{36} - \item Staatsoper, \hyperpage{20} - \item Stunden, \hyperpage{19} - \item Symbole, \hyperpage{36} - \item Szenecodes, \hyperpage{31} - -\indexspace -\textbf{T}\label{L-xindex-T} -\nopagebreak[4] - \item Tag, \hyperpage{29} - \item tausend, \hyperpage{33} - \item teilgenommen, \hyperpage{42} - \item Teilnehmer, \hyperpage{21}, \hyperpage{30} - -\indexspace -\textbf{U}\label{L-xindex-U} -\nopagebreak[4] - \item über, \hyperpage{45} - \item Überholmanöver, \hyperpage{17} - \item überwiegend, \hyperpage{39} - \item unbegrenzt, \hyperpage{14} - \item und, \hyperpage{5}, \hyperpage{11\nohyperpage{f}}, \hyperpage{35} - \item unklar., \hyperpage{43} - -\indexspace -\textbf{V}\label{L-xindex-V} -\nopagebreak[4] - \item versammelten, \hyperpage{21} - \item verwendet, \hyperpage{36} - \item Volksvertreter, \hyperpage{6} - -\indexspace -\textbf{W}\label{L-xindex-W} -\nopagebreak[4] - \item Während, \hyperpage{17} - \item warnte, \hyperpage{4} - \item weiter, \hyperpage{24} - \item wenige, \hyperpage{23} - \item Wer, \hyperpage{14} - \item wichtig, \hyperpage{12} - \item wieder, \hyperpage{44} - \item Wir, \hyperpage{25} - \item wird, \hyperpage{43} - \item Woher, \hyperpage{38} - -\indexspace -\textbf{Z}\label{L-xindex-Z} -\nopagebreak[4] - \item zahlreiche, \hyperpage{30} - \item zeitgleich, \hyperpage{21} - \item zu, \hyperpage{3}, \hyperpage{8}, \hyperpage{14}, \hyperpage{28}, \hyperpage{31} - \item zufolge, \hyperpage{30} - \item zum, \hyperpage{7} - \item zunächst, \hyperpage{38} - \item Zwischenfällen, \hyperpage{38} + \item der, \hyperpage{15}, \hyperpage{18\nohyperpage{f}}, \hyperpage{28\nohyperpage{f}}, \hyperpage{34}, \hyperpage{37}, \hyperpage{41} \end{theindex} diff --git a/indexing/xindex/doc/tests/demo-hyperref.pdf b/indexing/xindex/doc/tests/demo-hyperref.pdf Binary files differindex 6f8ce53806..4555bea9a5 100644 --- a/indexing/xindex/doc/tests/demo-hyperref.pdf +++ b/indexing/xindex/doc/tests/demo-hyperref.pdf diff --git a/indexing/xindex/doc/tests/demo.ind b/indexing/xindex/doc/tests/demo.ind index d53fd6826f..7ab85d75a4 100644 --- a/indexing/xindex/doc/tests/demo.ind +++ b/indexing/xindex/doc/tests/demo.ind @@ -48,127 +48,11 @@ \item demnach, {35}, {38} \item Demonstration, {29}, {35} \item den, {46} - \item der, {34}, {37}, {41} - \item Deshalb, {14} - \item Deutschland, {8}, {27} - \item die, {21}, {39}, {41} - \item Diktatur - \subitem -\,Afrika - \subsubitem --\,Kongo, {17} - \subsubitem --\,Nigeria, {16} - \subitem -\,Asien - \subsubitem --\,Nordvietnam, {38} - \subitem -\,Regierungsform, {29} - \item dominiere, {9} - \item durch, {31} - -\indexspace -\textbf{E}\label{L-xindex-E} -\nopagebreak[4] - \item ein, {36} - \item einer, {22} - \item einschlägige, {31} - \item Ende, {21} - \item endet, {15} - \item er, {2}, {4} - \item erkennen, {31} - \item ersten, {21} - \item erzählt, {1} - \item es, {8}, {38} - \item etwa, {19}, {21} - \item Europaplatz., {25} - -\indexspace -\textbf{F}\label{L-xindex-F} -\nopagebreak[4] - \item Feindbild, {7} - \item Festakt, {19} - \item Flaggen, {36} - \item Flüchtlinge, {11} - \item Frust, {17} - \item für, {10}, {26} - -\indexspace -\textbf{G}\label{L-xindex-G} -\nopagebreak[4] - \item gaben, {30} - \item gehabt, {36} - \item gehe, {9} - \item gekommen., {38} - \item Gelassenheit, {4} - \item gelästert, {46} - \item Gleichzeitig, {4} - \item gut, {9} - -\indexspace -\textbf{H}\label{L-xindex-H} -\nopagebreak[4] - \item haben, {32}, {35}, {42} - \item haben., {35} - \item hatte, {25} - \item Hilfe, {10} - -\indexspace -\textbf{I}\label{L-xindex-I} -\nopagebreak[4] - \item illegalen, {36} - \item Im, {43} - \item in, {15}, {19} - \item ist, {43} - -\indexspace -\textbf{J}\label{L-xindex-J} -\nopagebreak[4] - \item jedoch, {36} - \item jungen, {40} - -\indexspace -\textbf{K}\label{L-xindex-K} -\nopagebreak[4] - \item keine, {36} - \item Kilometer, {23} - \item Kundgebung, {23}, {42} - -\indexspace -\textbf{L}\label{L-xindex-L} -\nopagebreak[4] - \item leben., {14} - \item lernen, {14} - -\indexspace -\textbf{M}\label{L-xindex-M} -\nopagebreak[4] - \item machen., {8} - \item mahnte, {2} - \item man, {14} - \item Männer, {40} - \item Märtyrer, {1} - \item mehr, {3}, {32} - \item Menschen, {34} - \item Migranten, {12} - \item Minderheiten, {5} - \item mit, {14}, {29} - \item möglich., {14} - \item Motto, {29} - \item müsse, {14} - -\indexspace -\textbf{N}\label{L-xindex-N} -\nopagebreak[4] - \item nach, {19} - \item Nach, {31} - \item Nation., {30} - \item neigte, {21} - \item Neonazis, {31} - \item Netz, {43} - \item nicht, {14}, {38} - \item Nicht-Perfekten, {14} + \item der, {15}, {18f}, {28f}, {34}, {37}, {41} \indexspace \textbf{O}\label{L-xindex-O} \nopagebreak[4] - \item Obwohl, {8} - \item Osten, {46} \item Österreich, \textbf{1--38} \indexspace @@ -213,6 +97,7 @@ \nopagebreak[4] \item über, {45} \item Überholmanöver, {17} + \clearpage \item überholt, {38} \item überwiegend, {39} \item unbegrenzt, {14} diff --git a/indexing/xindex/doc/tests/demo.pdf b/indexing/xindex/doc/tests/demo.pdf Binary files differindex 27a9ed59f7..20e969941c 100644 --- a/indexing/xindex/doc/tests/demo.pdf +++ b/indexing/xindex/doc/tests/demo.pdf diff --git a/indexing/xindex/doc/tests/demo2.ind b/indexing/xindex/doc/tests/demo2.ind index a2bfb309fc..00c8844d21 100644 --- a/indexing/xindex/doc/tests/demo2.ind +++ b/indexing/xindex/doc/tests/demo2.ind @@ -14,7 +14,7 @@ \indexspace \textbf{F}\label{L-xindex-F} \nopagebreak[4] - \item foo, {1}, \textit{1f}, \see{bar}{2}, {2}, \textbf{3}, {3f} + \item foo, {1}, \textit{1}, {2}, \textit{2}, \see{bar}{2}, \textbf{3}, {3f} \indexspace \textbf{G}\label{L-xindex-G} diff --git a/indexing/xindex/doc/tests/demo3.pdf b/indexing/xindex/doc/tests/demo3.pdf Binary files differindex 942185026b..0a645eabc5 100644 --- a/indexing/xindex/doc/tests/demo3.pdf +++ b/indexing/xindex/doc/tests/demo3.pdf diff --git a/indexing/xindex/doc/tests/demo4.pdf b/indexing/xindex/doc/tests/demo4.pdf Binary files differindex 24d7696e5b..2a06e1fa08 100644 --- a/indexing/xindex/doc/tests/demo4.pdf +++ b/indexing/xindex/doc/tests/demo4.pdf diff --git a/indexing/xindex/doc/tests/french.idx b/indexing/xindex/doc/tests/french.idx new file mode 100644 index 0000000000..01b880e40f --- /dev/null +++ b/indexing/xindex/doc/tests/french.idx @@ -0,0 +1,46 @@ +\indexentry{CÔTÉ}{1} +\indexentry{cote}{1} +\indexentry{Côté}{1} +\indexentry{COTÉ}{1} +\indexentry{côte}{1} +\indexentry{COTE}{1} +\indexentry{côté}{1} +\indexentry{Coté}{1} +\indexentry{coté}{1} +\indexentry{Cote}{1} +\indexentry{CÔTE}{1} +\indexentry{Côte}{1} +\indexentry{lésé}{1} +\indexentry{péché}{1} +\indexentry{bohème}{1} +\indexentry{gêné}{1} +\indexentry{pêche}{1} +\indexentry{cæsium}{1} +\indexentry{pêcher}{1} +\indexentry{révèle}{1} +\indexentry{pécher}{1} +\indexentry{révélé}{1} +\indexentry{Bohême}{1} +\indexentry{relève}{1} +\indexentry{PÉCHÉ}{1} +\indexentry{maçon}{1} +\indexentry{relevé}{1} +\indexentry{Élève}{1} +\indexentry{gêne}{1} +\indexentry{élevé}{1} +\indexentry{MÂCON}{1} +\indexentry{gène}{1} +\indexentry{Bohémien}{1} +\indexentry{caennais}{1} +\indexentry{lèse}{1} +\indexentry{coexistence}{1} +\indexentry{cœur}{1} +\indexentry{coefficient}{1} +\indexentry{cafard}{1} +\indexentry{CŒUR}{1} +\indexentry{CÆSIUM}{1} +\indexentry{coté}{1} +\indexentry{cœur}{1} +\indexentry{péché}{1} +\indexentry{coté}{2} +\indexentry{coefficient}{2} diff --git a/indexing/xindex/doc/tests/french.ind b/indexing/xindex/doc/tests/french.ind new file mode 100644 index 0000000000..e9a08a059b --- /dev/null +++ b/indexing/xindex/doc/tests/french.ind @@ -0,0 +1,77 @@ + +\begin{theindex} + +\indexspace +\textbf{B}\label{L-xindex-B} +\nopagebreak[4] + \item bohème, {1} + \item Bohême, {1} + \item Bohémien, {1} + +\indexspace +\textbf{C}\label{L-xindex-C} +\nopagebreak[4] + \item caennais, {1} + \item cæsium, {1} + \item CÆSIUM, {1} + \item cafard, {1} + \item coefficient, {1\,sq.} + \item cœur, {1} + \item CŒUR, {1} + \item coexistence, {1} + \item cote, {1} + \item Cote, {1} + \item COTE, {1} + \item côte, {1} + \item Côte, {1} + \item CÔTE, {1} + \item coté, {1} + \item Coté, {1} + \item COTÉ, {1} + \item côté, {1} + \item Côté, {1} + \item CÔTÉ, {1} + \item coté, {2} + +\indexspace +\textbf{E}\label{L-xindex-E} +\nopagebreak[4] + \item Élève, {1} + \item élevé, {1} + +\indexspace +\textbf{G}\label{L-xindex-G} +\nopagebreak[4] + \item gène, {1} + \item gêne, {1} + \item gêné, {1} + +\indexspace +\textbf{L}\label{L-xindex-L} +\nopagebreak[4] + \item lèse, {1} + \item lésé, {1} + +\indexspace +\textbf{M}\label{L-xindex-M} +\nopagebreak[4] + \item MÂCON, {1} + \item maçon, {1} + +\indexspace +\textbf{P}\label{L-xindex-P} +\nopagebreak[4] + \item pêche, {1} + \item péché, {1} + \item PÉCHÉ, {1} + \item pécher, {1} + \item pêcher, {1} + +\indexspace +\textbf{R}\label{L-xindex-R} +\nopagebreak[4] + \item relève, {1} + \item relevé, {1} + \item révèle, {1} + \item révélé, {1} +\end{theindex} diff --git a/indexing/xindex/doc/tests/french.pdf b/indexing/xindex/doc/tests/french.pdf Binary files differnew file mode 100644 index 0000000000..80f4889341 --- /dev/null +++ b/indexing/xindex/doc/tests/french.pdf diff --git a/indexing/xindex/doc/tests/french.tex b/indexing/xindex/doc/tests/french.tex new file mode 100644 index 0000000000..8f2191c0dd --- /dev/null +++ b/indexing/xindex/doc/tests/french.tex @@ -0,0 +1,20 @@ +\documentclass[paper=a4,twocolumn]{scrartcl} +\usepackage{libertinus-otf} +\usepackage[french]{babel} +\usepackage{makeidx} \makeindex +\newcommand*{\IND}[1]{\index{#1}#1\par} +\begin{document} +%%% xindex -l fr <file> +\IND{CÔTÉ} \IND{cote} \IND{Côté} \IND{COTÉ} \IND{côte} +\IND{COTE} \IND{côté} \IND{Coté} \IND{coté} \IND{Cote} +\IND{CÔTE} \IND{Côte} \IND{lésé} \IND{péché} +\IND{bohème} \IND{gêné} \IND{pêche} \IND{cæsium} +\IND{pêcher} \IND{révèle} \IND{pécher} \IND{révélé} +\IND{Bohême} \IND{relève} \IND{PÉCHÉ} \IND{maçon} +\IND{relevé} \IND{Élève} \IND{gêne} \IND{élevé} +\IND{MÂCON} \IND{gène} \IND{Bohémien} \IND{caennais} +\IND{lèse} \IND{coexistence} \IND{cœur} +\IND{coefficient} \IND{cafard} \IND{CŒUR} \IND{CÆSIUM} +\newpage \IND{coté} \IND{cœur} \IND{péché} \newpage +\IND{coté}\IND{coefficient} \printindex +\end{document} diff --git a/indexing/xindex/doc/tests/runTests.sh b/indexing/xindex/doc/tests/runTests.sh index a8a8b5fe6d..d1a181db1c 100755 --- a/indexing/xindex/doc/tests/runTests.sh +++ b/indexing/xindex/doc/tests/runTests.sh @@ -25,7 +25,7 @@ xindex demo-hyperref > /dev/null lualatex demo-hyperref > /dev/null echo "HADW" -xindex -l de -c HAdW-eKO HADW > /dev/null +xindex -l de -c HAdW-eKO HADW -x > /dev/null lualatex HADW > /dev/null echo "Umlaute" @@ -36,4 +36,14 @@ echo "Umlaute2" xindex -l de -c DIN2 Umlaute2 > /dev/null lualatex Umlaute2 > /dev/null +echo "french" +lualatex french > /dev/null +xindex -l fr french > /dev/null +lualatex Umlaute2 > /dev/null + +echo "see" +lualatex see > /dev/null +xindex see > /dev/null +lualatex see > /dev/null + rm -fr *.aux *.log *.ilg *.out
\ No newline at end of file diff --git a/indexing/xindex/doc/tests/see.idx b/indexing/xindex/doc/tests/see.idx new file mode 100644 index 0000000000..52326372ba --- /dev/null +++ b/indexing/xindex/doc/tests/see.idx @@ -0,0 +1,15 @@ +\indexentry{usus|hyperpage}{2} +\indexentry{confarreatio|hyperpage}{2} +\indexentry{coemptio|hyperpage}{3} +\indexentry{marriage|hyperpage}{3} +\indexentry{marriage|hyperpage}{4} +\indexentry{marriage|hyperpage}{4} +\indexentry{marriage|hyperpage}{5} +\indexentry{marriage|hyperindexformat{\seealso{usus}}}{5} +\indexentry{marriage|hyperindexformat{\seealso{coemptio}}}{6} +\indexentry{marriage|hyperindexformat{\seealso{confarreatio}}}{6} +\indexentry{"|hyperpage}{7} +\indexentry{foo"|hyperpage}{8} +\indexentry{comemp|hyperindexformat{\seealso{coemptio}}}{9} +\indexentry{com"|hyperpage}{9} +\indexentry{com|hyperindexformat{\seealso{coemptio}}}{9} diff --git a/indexing/xindex/doc/tests/see.ind b/indexing/xindex/doc/tests/see.ind new file mode 100644 index 0000000000..83b103c64b --- /dev/null +++ b/indexing/xindex/doc/tests/see.ind @@ -0,0 +1,30 @@ + +\begin{theindex} +\textbf{Symbols}\label{L-xindex-symbols} +\nopagebreak[4] + \item ", \hyperpage{7} + +\indexspace +\textbf{C}\label{L-xindex-C} +\nopagebreak[4] + \item coemptio, \hyperpage{3} + \item com", \hyperpage{9} + \item com, \hyperindexformat{\seealso{coemptio}}{9} + \item comemp, \hyperindexformat{\seealso{coemptio}}{9} + \item confarreatio, \hyperpage{2} + +\indexspace +\textbf{F}\label{L-xindex-F} +\nopagebreak[4] + \item foo", \hyperpage{8} + +\indexspace +\textbf{M}\label{L-xindex-M} +\nopagebreak[4] + \item marriage, \hyperpage{3\nohyperpage{ff}}, \hyperindexformat{\seealso{usus}}{5}, \hyperindexformat{\seealso{confarreatio}}{6}, \hyperindexformat{\seealso{coemptio}}{6} + +\indexspace +\textbf{U}\label{L-xindex-U} +\nopagebreak[4] + \item usus, \hyperpage{2} +\end{theindex} diff --git a/indexing/xindex/doc/tests/see.pdf b/indexing/xindex/doc/tests/see.pdf Binary files differnew file mode 100644 index 0000000000..4f8c759611 --- /dev/null +++ b/indexing/xindex/doc/tests/see.pdf diff --git a/indexing/xindex/doc/tests/see.tex b/indexing/xindex/doc/tests/see.tex new file mode 100644 index 0000000000..5f63c68ea6 --- /dev/null +++ b/indexing/xindex/doc/tests/see.tex @@ -0,0 +1,31 @@ +\documentclass[paper=a4,parskip=half-,ngerman]{scrartcl} +\usepackage{fontspec} +\usepackage{libertinus-otf} +\usepackage{babel} +\usepackage{makeidx} +\makeindex +\usepackage{hyperref} +\begin{document} + + +\printindex + + +Page 1 +\index{usus} +\index{confarreatio} \newpage Page 2 +\index{coemptio} +\index{marriage}\newpage Page 3 +\index{marriage} +\index{marriage}\newpage Page 4 +\index{marriage} +\index{marriage|seealso{usus}}\newpage Page 5 +\index{marriage|seealso{coemptio}} +\index{marriage|seealso{confarreatio}} \newpage Page 6 +Vert\index{"|} \newpage Page 7 +\index{foo"||see{bar}} \newpage Page 8 +\index{comemp|seealso{coemptio}} +\index{com"||seealso{coemptio}} +\index{com|seealso{coemptio}} + +\end{document} diff --git a/indexing/xindex/doc/xindex-doc.pdf b/indexing/xindex/doc/xindex-doc.pdf Binary files differindex 31143f6fe1..911775ac8a 100644 --- a/indexing/xindex/doc/xindex-doc.pdf +++ b/indexing/xindex/doc/xindex-doc.pdf diff --git a/indexing/xindex/doc/xindex-doc.tex b/indexing/xindex/doc/xindex-doc.tex index df19098a87..8508ace554 100644 --- a/indexing/xindex/doc/xindex-doc.tex +++ b/indexing/xindex/doc/xindex-doc.tex @@ -81,7 +81,7 @@ \def\setVersion#1{\setVVersion#1!!} \def\setVVersion#1=#2!!{\def\xIndexVersion{#2}} -\setVersion{version = 0.55}% can be automatically changed by perl +\setVersion{version = 0.61}% can be automatically changed by perl @@ -94,7 +94,6 @@ %\enlargethispage{1cm} \tableofcontents -\clearpage \begin{noteblock} \raggedright Thanks to: \\ @@ -102,8 +101,9 @@ Mark Baudoin; Denis Bitouzé; Andreas Deininger; Brian Dunn; -Gonzalo Pesquero Serrano; +Daniel Flipo; Michal Hoftich; +Dohyun Kim; Mykel Kochenderfer; Alexey Kuznetsov; Frank Mittelbach; @@ -112,6 +112,7 @@ Heiko Oberdiek; Matteo Paolini; Stefan Pinnow; Florent Rougon; +Gonzalo Pesquero Serrano; Martin Sievers; Simon Spiegel; Jürgen Spitzmüller; @@ -167,7 +168,7 @@ EntryList[2] = { \subsection{Syntax} The \Index{syntax} is \verb|xindex [...] <file(s)>| where \verb|[...]| are optional \Index{argument}s, either in short or -long form which, of course, can be mixed: +long7 form which, of course, can be mixed: \begin{verbatim} xindex @@ -188,7 +189,7 @@ xindex [-o,--output ] default is <input>.ind [-p,--prefix] default L [-s,--use_stdin ] default is false - [-u,--use_UCA ] default is false + [-x,--no_UCA ] default is false <files...> (default stdin) file(s)[.idx] one or more files \end{verbatim} @@ -269,19 +270,19 @@ are alphabetized. compiler=lualatex, crop, xindex, - xindexOptions=-u, % use unicode + xindexOptions=-l fr, runs=2,code,docType=latex, showFilename, align=\centering, lstOptions={columns=fixed}]{xindex} %! lualatex -%! xindex -u (use unicode) \documentclass{scrartcl} +\usepackage{multicol} \makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} +\renewenvironment{theindex}{% only for demonstration + \begin{multicols}{2}[\section*{\indexname}] \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} + \let\item\@idxitem}{\end{multicols}} \makeatother %StartVisiblePreamble \usepackage{makeidx}\makeindex @@ -299,9 +300,9 @@ are alphabetized. \item Left paranthesis \{ \index{\braceLeft} \item Right paranthesis \} \index{\braceRight} \end{itemize} -run \texttt{xindex -u <file.idx>}\index{file.idx@\texttt{<file.idx>}|textit}\index{123} +run \texttt{xindex -l fr <file.idx>}\index{file.idx@\texttt{<file.idx>}|textit}\index{123} \index{Etage} \index{Ètagé} -\newpage +\twocolumn \printindex \end{document} \end{externalDocument} @@ -310,7 +311,7 @@ It is by design that the braces \{ and \} cannot be used as index entry. The \em xindex defines the two commands \Lcs{braceLeft} and \Lcs{braceRight} which can be used instead (see examples above and and below). -The same example without using unicode sorting (no option \Loption{-u}): +The same example without using unicode sorting (option \Loption{-x}): \begin{externalDocument}[ @@ -320,7 +321,7 @@ The same example without using unicode sorting (no option \Loption{-u}): compiler=lualatex, crop, xindex, -% xindexOptions=-u, % use unicode + xindexOptions=-x, % do not use unicode runs=2,code,docType=latex, showFilename, align=\centering, @@ -328,11 +329,12 @@ The same example without using unicode sorting (no option \Loption{-u}): %! lualatex %! xindex (no unicode sort -- simple ascii) \documentclass{scrartcl} +\usepackage{multicol} \makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} +\renewenvironment{theindex}{% only for demonstration + \begin{multicols}{2}[\section*{\indexname}] \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} + \let\item\@idxitem}{\end{multicols}} \makeatother %StartVisiblePreamble \usepackage{makeidx}\makeindex @@ -350,9 +352,9 @@ The same example without using unicode sorting (no option \Loption{-u}): \item Left paranthesis \{ \index{\braceLeft} \item Right paranthesis \} \index{\braceRight} \end{itemize} -run \texttt{xindex -u <file.idx>}\index{file.idx@\texttt{<file.idx>}|textit}\index{123} +run \texttt{xindex -x <file.idx>}\index{file.idx@\texttt{<file.idx>}|textit}\index{123} \index{Etage} \index{Ètagé} -\newpage +\twocolumn \printindex \end{document} \end{externalDocument} @@ -386,9 +388,8 @@ The following example shows how to use it: frame, compiler=lualatex, crop, - force=false, xindex, - xindexOptions=-e ">", + xindexOptions=-e ">" -n, runs=2,code,docType=latex, showFilename, align=\centering, @@ -417,7 +418,7 @@ The following example shows how to use it: \item Group start \{ \index{\braceLeft} \item Group end \{ \index{\braceRight} \end{itemize} -Run \texttt{xindex} with \texttt{xindex -e ">"}\index{<file.idx>}\index{123} +Run \texttt{xindex} with \texttt{xindex -e ">" -n}\index{<file.idx>}\index{123} \newpage \printindex \end{document} @@ -457,7 +458,6 @@ The following example was run with \verb|xindex -l it <file>.idx|: frame, compiler=lualatex, crop, - force=false, xindex, xindexOptions=-l it -e ">", runs=2,code,docType=latex, @@ -467,11 +467,12 @@ The following example was run with \verb|xindex -l it <file>.idx|: %! lualatex \documentclass{scrartcl} \usepackage[italian]{babel} +\usepackage{multicol} \makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} +\renewenvironment{theindex}{% only for demonstration + \begin{multicols}{2}[\section*{\indexname}] \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} + \let\item\@idxitem}{\end{multicols}} \makeatother %StartVisiblePreamble \usepackage{makeidx}\makeindex @@ -487,8 +488,7 @@ The following example was run with \verb|xindex -l it <file>.idx|: \item At siboli @ \index{At (>@)} \end{itemize} Initio \texttt{xindex} con \texttt{xindex -l it -e ">"}\index{123} -\newpage -\printindex +\twocolumn \printindex \end{document} \end{externalDocument} @@ -504,7 +504,6 @@ package \Lpack{babel} or \Lpack{polyglossia} are used. frame, compiler=lualatex, crop, - force=false, xindex, xindexOptions=-k -e "?", runs=2,code,docType=latex, @@ -513,11 +512,12 @@ package \Lpack{babel} or \Lpack{polyglossia} are used. lstOptions={columns=fixed}]{xindex} %! lualatex \documentclass{scrartcl} +\usepackage{multicol} \makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} +\renewenvironment{theindex}{% only for demonstration + \begin{multicols}{2}[\section*{\indexname}] \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} + \let\item\@idxitem}{\end{multicols}} \makeatother %StartVisiblePreamble \usepackage[dutch]{babel} % !!!! @@ -534,7 +534,7 @@ package \Lpack{babel} or \Lpack{polyglossia} are used. \item At character @ \index{At (?@)}\index{?@} \end{itemize} Run \texttt{xindex} with \texttt{xindex -k -e "?"}\index{123} -\newpage\index{xindex@\texttt{xindex}} +\twocolumn\index{xindex@\texttt{xindex}} \printindex \end{document} \end{externalDocument} @@ -555,7 +555,7 @@ This allows to have different indexes with different language. compiler=lualatex, crop, xindex, - xindexOptions=-u -l RU -c RU, + xindexOptions=-l RU -c RU -n, runs=2,code,docType=latex, showFilename, align=\centering, @@ -564,18 +564,19 @@ This allows to have different indexes with different language. ]{xindex} %! lualatex \documentclass{scrartcl} +\usepackage{multicol} \makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} +\renewenvironment{theindex}{% only for demonstration + \begin{multicols}{2}[\section*{\indexname}] \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} + \let\item\@idxitem}{\end{multicols}} \makeatother %StartVisiblePreamble \usepackage[russian]{babel} \usepackage{fontspec} \usepackage[regular]{newcomputermodern} \defaultfontfeatures{Ligatures=TeX} -\usepackage{xindex}\makeindex % run with xindex -u -l RU -c RU <file> +\usepackage{xindex}\makeindex % run with xindex -l RU -c RU <file> %StopVisiblePreamble \pagestyle{empty} \begin{document} @@ -599,7 +600,7 @@ This allows to have different indexes with different language. \verb|\index{Ёж!ушастый (Hemiechinus auritus)}|% \index{Ёж!ушастый (Hemiechinus auritus)} \end{tabular} -\printindex % xindex -u -l RU -c RU <file> +\printindex % xindex -l RU -c RU -n <file> \end{document} \end{externalDocument} @@ -609,8 +610,207 @@ This allows to have different indexes with different language. \section{Sorting} + + + +\subsection{Default sorting by the UCA (Unicode Collection Algorithm)} +This Lua library from Michal Hoftich is part of \TeXLive\ and is used by default +for sorting. The supported languages and variants are listed in the file +\Lfile{lua-uca-languages.lua}: + +\texttt{af, +am, +ar, +as, +az, +be, +bg, +bn, +bs, +bs\_cyrl, +ca, +chr, +cs, +cy, +da, +de, +de\_din2, +dsb, +dz, +ee, +el, +en, +eo, +es, +et, +fa, +fi, +fil, +fo, +fr, +fr\_backward\_accents, +ga, +gl, +gu, +ha, +haw, +he, +hr, +hi, +hsb, +hu, +hy, +id, +ig, +is, +it, +ja, +ka, +kk, +kl, +km, +kn, +ko, +kok, +ky, +lb, +lkt, +ln, +lo, +lt, +lv, +mk, +ml, +mn, +mr, +ms, +mt, +my, +nb, +ne, +nl, +nn, +no, +om, +pa, +pl, +ps, +pt, +ro, +ru, +se, +si, +sk, +sl, +smn, +sq, +sr, +sr\_latn, +sv, +sw, +ta, +te, +th, +tk, +to, +tr, +ug, +uk, +ur, +uz, +vi, +vo, +wae, +wo, +yi, +yo, +zh, +zu} + + + +The sorting order can be easily modified. Read the documentation of the package \texttt{LUA-UCA} +on how to do it and what languages are supported so far. Any additional code setting for +UCA should be done in the file \Lfile{xindex-cfg-uca.lua}, which will automatically be read +by \Lprog{xindex}. + +\begin{importantblock} +If possible, you should use the Unicode sorting by default and only for some special cases +where you define your own sorting scheme, you should use the \verb|-x| option. +\end{importantblock} + + +\begin{externalDocument}[ +% grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, + mpwidth=0.55\linewidth, +% pages={6}, + frame=false, + compiler=lualatex, + crop, + xindex, + xindexOptions=-l cs, + runs=2,code,docType=latex, + showFilename, + align=\centering, + usefancyvrb, +% lstOptions={columns=fixed} +]{xindex} +%! lualatex +\documentclass[paper=a6]{scrartcl} +\makeatletter +\def\theindex{% only for demonstration + \section*{\indexname} + \parskip\z@ \@plus .3\p@\relax \parindent\z@ + \let\item\@idxitem} +\makeatother +%StartVisiblePreamble +\usepackage{multicol} +\usepackage{makeidx}\makeindex +\def\Index#1{#1\index{#1}} +%StopVisiblePreamble +\pagestyle{empty} +\begin{document} +Sorted with \verb|-l cs| +\Index{ahoj} \Index{crha}, \Index{čaj}, \Index{chachar}, +\Index{rak}, \Index{řeka}, \Index{srp}, \Index{šutr}, +\Index{hudba}, \Index{linux}, \Index{zebra}, +\Index{žába}, \Index{7 dubů} +\begin{multicols}{2} \printindex \end{multicols} +\end{document} +\end{externalDocument} + + + + +Modifications can be done in a config file which is then loaded by the +option \texttt{-c}. For example: the file \Lfile{xindex-cfg-uca.lua} has +modification for french and norwegian. For french the standard sorting rules +\texttt{fr\_backward\_accents}, are a bit +special and should be the default also for the language \texttt{fr}: + +\begin{verbatim} +languages.fr = function(collator_obj) + -- reverse search for accents in French (recommended): + collator_obj.accents_backward = true + local tailoring = function(s) collator_obj:tailor_string(s) end + tailoring("&æ=ae") + tailoring("&œ=oe") + tailoring("&th<þ<<<Þ") -- Canadian, see SGQRI004.pdf + return collator_obj +end +\end{verbatim} + +Add any additional modifications to this file or create an own +config file and load it with \texttt{-c}. + + \subsection{Default sorting by a character table} -The default sorting is unicode aware and uses a translation table for accented characters: +This sorting is not completely unicode aware. It uses a translation table for accented characters, +which should only be used if the standard sorting method with UCA is not possible! This kind of sortierung +has to be choosed by the option \texttt{-x} (don't use UCA). The option \texttt{-u} for +using UCA is deprecated, because using UCA is the default. + +Again, if on wants to use an own transformation table, then use something like: \begin{verbatim} alphabet_lower = { -- for sorting @@ -684,6 +884,8 @@ alphabet_upper = { -- for sorting \end{verbatim} +\subsection{Examples} +\subsubsection{German language and no UCA} \begin{externalDocument}[ grfOptions={scale=0.9},%width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, @@ -693,7 +895,7 @@ alphabet_upper = { -- for sorting compiler=lualatex, crop, xindex, - xindexOptions=-l de, + xindexOptions=-l de -x, runs=2,code,docType=latex, showFilename, usefancyvrb, @@ -719,7 +921,65 @@ alphabet_upper = { -- for sorting \makeatother \pagestyle{empty} \begin{document} -Sorted with \verb|-l DE| +Sorted with \verb|-l DE -x|\par +\Index{Österreich} \Index{Öresund} +\Index{Ostern} \Index{Ober} +\Index{Oberin} \Index{Österreich} +\Index{Öresund} \Index{Ostern} +\Index{Ober} \Index{Oberin} +\Index{Obstler} \Index{Öl} +\Index{ölen} \Index{Ödem} +\Index{Oligarch} \Index{Oder} +\Index{oder} \index{Fluss!Oder} +\index{Oder|seealso{Fluss}} +\Index{Göbel} \Index{Goethe} +\Index{Göthe} \Index{Götz} +\Index{Goldmann} + +\printindex +\end{document} +\end{externalDocument} + + +\subsubsection{German language (DIN2) and no UCA} + +In this case a letter Ö, Ä, Ü, ö, ä, ü is converted to Oe, Ae, Ue, oe, ae, ue before sorting: + +\noindent +\begin{externalDocument}[ + grfOptions={scale=0.9},%width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, + mpwidth=0.4\linewidth, + pages={2}, + frame=false, + compiler=lualatex, + crop, + xindex, + xindexOptions=-c DIN2 -l DE -x, + runs=2,code,docType=latex, + showFilename, + align=\centering, + lstOptions={columns=fixed}]{xindex} +%! lualatex +\documentclass[paper=a5]{scrartcl} +\usepackage[ngerman]{babel} +%StartVisiblePreamble +\usepackage{makeidx}\makeindex +\newcommand\Index[1]{\index{#1}#1} +%StopVisiblePreamble +\usepackage{multicol} +\makeatletter +\def\theindex{% only for demonstration + \newpage + \section*{\indexname} + \begin{multicols}{2} + \parskip\z@ \@plus .3\p@\relax \parindent\z@ + \let\item\@idxitem} +\def\endtheindex{\end{multicols}} +\makeatother +\pagestyle{empty} +\begin{document} +Sorted with +\verb|--config DIN2 -l DE -x| \Index{Österreich} \Index{Öresund} \Index{Ostern} \Index{Ober} @@ -734,16 +994,74 @@ Sorted with \verb|-l DE| \Index{Göbel} \Index{Goethe} \Index{Göthe} \Index{Götz} \Index{Goldmann} +\printindex +\end{document} +\end{externalDocument} + + +\clearpage%%%%%%%%%%% +\subsubsection{German language with UCA} + +\begin{externalDocument}[ + grfOptions={scale=0.9},%width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, + mpwidth=0.4\linewidth, + pages={2}, + frame=false, + compiler=lualatex, + crop, + xindex, + xindexOptions=-l de, % german and UCA + runs=2,code,docType=latex, + showFilename, + usefancyvrb, + align=\centering, +% lstOptions={columns=fixed} +]{xindex} +%! lualatex +\documentclass[paper=a5]{scrartcl} +\usepackage[ngerman]{babel} +%StartVisiblePreamble +\usepackage{makeidx}\makeindex +\newcommand\Index[1]{\index{#1}#1} +%StopVisiblePreamble +\usepackage{multicol} +\makeatletter +\def\theindex{% only for demonstration + \newpage + \section*{\indexname} + \begin{multicols}{2} + \parskip\z@ \@plus .3\p@\relax \parindent\z@ + \let\item\@idxitem} +\def\endtheindex{\end{multicols}} +\makeatother +\pagestyle{empty} +\begin{document} +Sorted with \verb|-l DE| and using UCA\par +\Index{Österreich} \Index{Öresund} +\Index{Ostern} \Index{Ober} +\Index{Oberin} \Index{Österreich} +\Index{Öresund} \Index{Ostern} +\Index{Ober} \Index{Oberin} +\Index{Obstler} \Index{Öl} +\Index{ölen} \Index{Ödem} +\Index{Oligarch} \Index{Oder} +\Index{oder} \index{Fluss!Oder} +\index{Oder|seealso{Fluss}} +\Index{Göbel} \Index{Goethe} +\Index{Göthe} \Index{Götz} +\Index{Goldmann} \printindex \end{document} \end{externalDocument} +\subsubsection{German language (DIN2) with UCA} -The same sorted with the German DIN variant 2 with \verb|--config DIN2|, which -is part of the \TeX\ distribution. In this case a letter Ö is converted to Oe before sorting -the word beginning with the letter Ö: +The same sorted with the German DIN variant 2. It uses also the config +file +with \verb|--config DIN2|, but sets the language internally to \verb|de_din2| for +UCA and do not use the character tables: \noindent \begin{externalDocument}[ @@ -799,6 +1117,10 @@ Sorted with \end{externalDocument} +\clearpage + +\subsubsection{Japanese language with UCA} + The following runs with \verb|xindex -l jp <file>|: @@ -814,13 +1136,13 @@ The following runs with \verb|xindex -l jp <file>|: \edef\FancyVerbStartString{\perCent StartVisiblePreamble} \edef\FancyVerbStopString{\perCent StopVisiblePreamble} \colorbox{black!20}{\parbox{\linewidth}{% -\VerbatimInput[fontfamily=helvetica]{Examples/xindex-9.tex} +\VerbatimInput[fontfamily=helvetica]{Examples/xindex-12.tex} }} \edef\FancyVerbStartString{\string\begin\string{document\string}} \edef\FancyVerbStopString{\string\end\string{document\string}} \colorbox{black!10}{\parbox{\linewidth}{% -\VerbatimInput[fontfamily=helvetica]{Examples/xindex-9.tex} +\VerbatimInput[fontfamily=helvetica]{Examples/xindex-12.tex} }} %\end{minipage}\hfill @@ -849,8 +1171,7 @@ The following runs with \verb|xindex -l jp <file>|: \usepackage{fontspec} \setmainfont{SourceHanSans} \usepackage[japanese]{babel} -\addto\captionsjapanese{% - \def\indexname{指数}} +\addto\captionsjapanese{\def\indexname{指数}} \usepackage{hvindex}% for \Index \usepackage{makeidx}\makeindex %StopVisiblePreamble @@ -865,12 +1186,10 @@ The following runs with \verb|xindex -l jp <file>|: \makeatother \pagestyle{empty} \begin{document} -\Index{車} \Index{車道} -日本\index{日本|fbox} \Index{病院} \Index{コンピュータ} -\Index{プリンタ} \Index{印刷} \Index{スイミングプール} \Index{天王} -\Index{広島} \Index{ドイツ} \Index{日本} \Index{ワープロ} -\Index{foo} und \Index{bar} \Index{//} \Index{4711} -\newpage\printindex +\Index{車} \Index{車道} 日本\index{日本|fbox} \Index{病院} \Index{コンピュータ} +\Index{プリンタ} \Index{印刷} \Index{スイミングプール} \Index{天王} \Index{広島} +\Index{ドイツ} \Index{日本} \Index{ワープロ} +\Index{foo} und \Index{bar} \Index{//} \Index{4711} \newpage\printindex \end{document} \end{externalDocument} %\end{minipage} @@ -878,70 +1197,6 @@ The following runs with \verb|xindex -l jp <file>|: \setsansfont{Libertinus Sans}\rmfamily -\subsection{Sorting by using UCA (Unicode Collation Algorithm)} -With the optional argument \verb|-u| or alternatively \verb|--use_UCA| the sorting will be done -by Michal Hoftich's Lua package \texttt{LUA-UCA}, which should be part of any \TeX{} installation. - -The sorting order can be easily modified. Read the documentation of the package \texttt{LUA-UCA} -on how to do it and what languages are supported so far. Any additional code setting for -UCA should be done in the file \Lfile{xindex-cfg-uca.lua}, which will automatically be read -by \Lprog{xindex}. - -\iffalse -\begin{noteblock} -This package can display, in a -\begin{itemize} - \item to change dimensions and colors ; -\end{itemize} -It's -\end{noteblock} -\fi -\begin{importantblock} -If possible, you should use the Unicode sorting by default and only for some special cases -where you define your own sorting scheme, you should not use the \verb|-u| option. -\end{importantblock} - - -\begin{externalDocument}[ -% grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, - mpwidth=0.55\linewidth, -% pages={6}, - frame=false, - compiler=lualatex, - crop, - force=false, - xindex, - xindexOptions=-u -l cs, - runs=2,code,docType=latex, - showFilename, - align=\centering, - usefancyvrb, -% lstOptions={columns=fixed} -]{xindex} -%! lualatex -\documentclass[paper=a6]{scrartcl} -\makeatletter -\def\theindex{% only for demonstration - \section*{\indexname} - \parskip\z@ \@plus .3\p@\relax \parindent\z@ - \let\item\@idxitem} -\makeatother -%StartVisiblePreamble -\usepackage{multicol} -\usepackage{makeidx}\makeindex -\def\Index#1{#1\index{#1}} -%StopVisiblePreamble -\pagestyle{empty} -\begin{document} -Sorted with \verb|-u -l cs| -\Index{ahoj} \Index{crha}, \Index{čaj}, \Index{chachar}, -\Index{rak}, \Index{řeka}, \Index{srp}, \Index{šutr}, -\Index{hudba}, \Index{linux}, \Index{zebra}, -\Index{žába}, \Index{7 dubů} -\begin{multicols}{2} \printindex \end{multicols} -\end{document} -\end{externalDocument} - \subsection{Case sensitive index entries} @@ -1000,7 +1255,6 @@ foo\newpage \end{externalDocument} -\clearpage The same example sorted with the \verb|-a| or \verb|--no_casesensitive| has another output: now \verb|xindex-cfg-common.lua| is the first one of the \verb|xindex-???| series. @@ -1138,7 +1392,6 @@ Test -\clearpage \section{Pagenumbers} \subsection{Compressing pagenumber series}\label{Compressing} @@ -1175,7 +1428,6 @@ folium = { pages={6}, frame=false, compiler=lualatex, - force=false, crop, xindex, xindexOptions=-l fr, @@ -1234,7 +1486,6 @@ of the same type, so we get \texttt{1f} in the output. frame=false, compiler=lualatex, crop, - force=false, xindex, xindexOptions=-l de, runs=2,code,docType=latex, @@ -1301,7 +1552,6 @@ envStop = "\\end{description}" % xindexOptions=-c description -g, runs=2, code,docType=latex, - force=false, %xindex -c description -n -g xindex-17.idx %xindex -c description -n --no_pagenumber gls.idx % runsequence={lualatex,{xindex -c description -n -g},lualatex,lualatex}, @@ -1727,14 +1977,13 @@ baz\index{foo!bar!baz} foobar% \end{externalDocument} - -%\clearpage +\clearpage \section{\texttt{hyperref}} Using the package \Lpack{hyperref} is no problem: -\enlargethispage{2.5\normalbaselineskip} +%\enlargethispage{2.5\normalbaselineskip} \begin{externalDocument}[ % grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, @@ -1767,23 +2016,19 @@ Using the package \Lpack{hyperref} is no problem: %StopVisiblePreamble \pagestyle{empty} \begin{document} -Sorted with \verb|-l DE| -\Index{Österreich} \Index{Öresund} -\Index{Ostern} \Index{Ober} \Index{Oberin} -\Index{Österreich} \index{Öresund|textbf} -\Index{Ostern} \Index{Ober} \Index{Oberin} -\Index{Obstler} \Index{Öl} \Index{ölen} -\Index{Ödem} \Index{Oligarch} \Index{Oder} -\Index{oder} \index{Fluss!Oder|textit} -\Index{Oder|seealso{Fluss}} \Index{Göbel} -\Index{Goethe} \Index{Göthe} \Index{Götz} -\newpage\Index{Goldmann} \Index{Goethe} -\newpage \printindex +Sorted with \verb|-l DE| \par +\Index{Österreich} \Index{Öresund} \Index{Ostern} +\Index{Ober} \Index{Oberin} \Index{Österreich} +\index{Öresund|textbf} \Index{Ostern} \Index{Ober} +\Index{Oberin} \Index{Obstler} \Index{Öl} \Index{ölen} +\Index{Ödem} \Index{Oligarch} \Index{Oder} \Index{oder} +\index{Fluss!Oder|textit} \Index{Oder|seealso{Fluss}} +\Index{Göbel} \Index{Goethe} \Index{Göthe} \Index{Götz} +\newpage\Index{Goldmann} \Index{Goethe} \newpage \printindex \end{document} \end{externalDocument} - The following example fixes a problem with \Lpack{hyperref} and escaping the | character, e.g.\verb/"|/. In such a case \Lpack{hyperref} ignores the vertical bar. With the optional parameter \verb/-f | --fix_hyperref/, which is still experimental, @@ -1791,7 +2036,6 @@ With the optional parameter \verb/-f | --fix_hyperref/, which is still experimen of using this problematic vertical character, you can use \Lcs{textbar}, which also solves the problem. - \begin{externalDocument}[ % grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, % mpwidth=0.55\linewidth, @@ -1799,7 +2043,6 @@ problem. frame=false, compiler=lualatex, crop, - force=false, shellesc, % xindex, % xindexOptions=-, @@ -1877,7 +2120,6 @@ such commands are ignored. In the following example we put an horizontal line af pages={2}, frame=false, compiler=lualatex, - force=false, crop, xindex, xindexOptions=-l de, @@ -1981,7 +2223,6 @@ In the documents preamble there is the definition: % grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, mpwidth=0.6\linewidth, pages={2}, - force=false, frame=false, compiler=lualatex, crop, @@ -2127,10 +2368,8 @@ and adds the program \Lprog{xindex} as the default program to \Lpack{imakeidx}. mpwidth=0.55\linewidth, pages={6}, frame=false, - force=false, compiler=lualatex, crop, - force=false, % xindex, % xindexOptions=-l de, runs=2,code,docType=latex, @@ -2229,6 +2468,54 @@ in the argument of \Lcs{indexentry}. \appendix \section{Examples} +Correct french sorting with UCA: + +\begin{externalDocument}[ +% grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, + mpwidth=0.55\linewidth, + pages={3}, + frame=false, + compiler=lualatex, + crop, + xindex, + xindexOptions=-l fr, + runs=2,code,docType=latex, + showFilename, + align=\centering, + grfOptions={width=\linewidth}, + lstOptions={columns=fixed}]{xindex} +%! lualatex --shell-escape +\documentclass[paper=a4,twocolumn]{scrartcl} +\usepackage{libertinus-otf} +\let\NewPage\newpage% only for demo +\makeatletter +\renewcommand\newpage{\NewPage\let\ps@plain\ps@empty} +\makeatother +%StartVisiblePreamble +\usepackage[french]{babel} +\usepackage[imakeidx]{xindex} \makeindex +\newcommand*{\IND}[1]{\index{#1}#1\par} +%StopVisiblePreamble +\begin{document} +%%% xindex -l fr <file> +\IND{CÔTÉ} \IND{cote} \IND{Côté} \IND{COTÉ} \IND{côte} +\IND{COTE} \IND{côté} \IND{Coté} \IND{coté} \IND{Cote} +\IND{CÔTE} \IND{Côte} \IND{lésé} \IND{péché} +\IND{bohème} \IND{gêné} \IND{pêche} \IND{cæsium} +\IND{pêcher} \IND{révèle} \IND{pécher} \IND{révélé} +\IND{Bohême} \IND{relève} \IND{PÉCHÉ} \IND{maçon} +\IND{relevé} \IND{Élève} \IND{gêne} \IND{élevé} +\IND{MÂCON} \IND{gène} \IND{Bohémien} \IND{caennais} +\IND{lèse} \IND{coexistence} \IND{cœur} +\IND{coefficient} \IND{cafard} \IND{CŒUR} \IND{CÆSIUM} +\newpage \IND{coté} \IND{cœur} \IND{péché} \newpage +\IND{coté}\IND{coefficient} \printindex +\end{document} +\end{externalDocument} + + + + \begin{externalDocument}[ % grfOptions={width=\dimexpr\linewidth-2\fboxsep-2\fboxrule}, mpwidth=0.55\linewidth, diff --git a/indexing/xindex/latex/xindex.sty b/indexing/xindex/latex/xindex.sty index 24d0076590..143e36b431 100644 --- a/indexing/xindex/latex/xindex.sty +++ b/indexing/xindex/latex/xindex.sty @@ -1,10 +1,10 @@ %% This is file `xindex.sty', %% -%% Copyright (C) 2018-2023 +%% Copyright (C) 2018-2024 %% Herbert Voss %% %% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3c +%% 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 @@ -13,7 +13,7 @@ % % % ------------------------------------- -\ProvidesPackage{xindex}[2023/07/30 v. 0.55 write into an idx file (hv)] +\ProvidesPackage{xindex}[2024/05/16 v. 0.61 write into an idx file (hv)] % \RequirePackage{xkeyval} diff --git a/indexing/xindex/lualatex/xindex-AU.lua b/indexing/xindex/lualatex/xindex-AU.lua index 59c26294bf..845fc45c5d 100644 --- a/indexing/xindex/lualatex/xindex-AU.lua +++ b/indexing/xindex/lualatex/xindex-AU.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-AU'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/lualatex/xindex-DIN2.lua b/indexing/xindex/lualatex/xindex-DIN2.lua index 5d9bd56dc8..445edc904e 100644 --- a/indexing/xindex/lualatex/xindex-DIN2.lua +++ b/indexing/xindex/lualatex/xindex-DIN2.lua @@ -16,25 +16,31 @@ if not modules then modules = { } end modules ['xindex-DIN2'] = { license = "LPPL 1.3" } -itemPageDelimiter = "," -- Hello, 14 -compressPages = true -- something like 12--15, instead of 12,13,14,15. the |( ... |) syntax is still valid -fCompress = true -- 3f -> page 3, 4 and 3ff -> page 3, 4, 5 -minCompress = 3 -- 14--17 or -numericPage = true -- for non numerical pagenumbers, like "VI-17" -sublabels = {"", "-\\,", "--\\,", "---\\,"} -- for the (sub(sub(sub-items first one is for item -pageNoPrefixDel = "" -- a delimiter for page numbers like "VI-17" -indexOpening = "" -- commands after \begin{theindex} -rangeSymbol = "--" -idxnewletter = "\\textbf" -- Only valid if -n is not set -envStart = "\\begin{theindex}" -envStop = "\\end{theindex}" - - +--UCA language = "de_din2" -- +if use_UCA then +languages.de = function(collator_obj) + local function tailor(a, b, tbl) + local autf = collator_obj:string_to_codepoints(a) + local butf = collator_obj:string_to_codepoints(b) + collator_obj:tailor(autf,butf, tbl) + end + local tailoring = function(s) collator_obj:tailor_string(s) end + languages.de(collator_obj) + tailoring "&Ö=Oe" + tailoring "&ö=oe" + tailoring "&Ä=Ae" + tailoring "&ä=ae" + tailoring "&Ü=Ue" + tailoring "&ü=ue" + tailoring "&ß=ss" + return collator_obj +end +end --[[ + Only used for -x option (no UCA): Each character's position in this array-like table determines its 'priority'. Several characters in the same slot have the same 'priority'. ]] - alphabet_lower = { -- for sorting { ' ' }, -- only for internal tests { 'a', 'á', 'à', 'å', 'æ', }, @@ -100,4 +106,3 @@ alphabet_upper = { -- for sorting { 'Y', 'Ý', 'Ÿ' }, { 'Z', 'Ž' } } - diff --git a/indexing/xindex/lualatex/xindex-HAdW-eKO.lua b/indexing/xindex/lualatex/xindex-HAdW-eKO.lua index ecf51a290d..52edc98854 100644 --- a/indexing/xindex/lualatex/xindex-HAdW-eKO.lua +++ b/indexing/xindex/lualatex/xindex-HAdW-eKO.lua @@ -11,7 +11,7 @@ -- configuration for index files of the Heidelberger Akademie der Wissenschaften if not modules then modules = { } end modules ['xindex-HAdW-eKO'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/lualatex/xindex-RU.lua b/indexing/xindex/lualatex/xindex-RU.lua index 626cc1c17d..3d2610d994 100644 --- a/indexing/xindex/lualatex/xindex-RU.lua +++ b/indexing/xindex/lualatex/xindex-RU.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-RU'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex.lua", author = "Alexey Kuznetzov", copyright = "Herbert Voß", diff --git a/indexing/xindex/lualatex/xindex-base.lua b/indexing/xindex/lualatex/xindex-base.lua index ff44943724..d06df7cb2f 100644 --- a/indexing/xindex/lualatex/xindex-base.lua +++ b/indexing/xindex/lualatex/xindex-base.lua @@ -8,7 +8,7 @@ -- $Id: xindex-base.lua 22 2022-02-07 12:18:15Z hvoss $ ----------------------------------------------------------------------- -local info = { version = 0.55 } +local info = { version = 0.61 } -- check config if pageNoPrefixDel ~= "" then @@ -53,13 +53,13 @@ hyperpage, lines = checkHyperpage(lines) -- hyperref used? if hyperpage then writeLog(1,"We have hyperpages.\n",1) else writeLog(1,"We have no hyperpages.\n",1) - end +end --print("Presort of \\indexentry lines") --table.sort(lines) -- no presort to keep macros inserted by \writeidx if vlevel > 1 then - writeLog(1,"--------------- Input data (mot sorted) ----------------\n",2) + writeLog(1,"--------------- Input data (not sorted) ----------------\n",2) for _,l in pairs(lines) do writeLog(1,l.."\n",2) end writeLog(1,"--------------- end Input data -------------------------\n",2) end @@ -95,11 +95,17 @@ for k,v in ipairs(lines) do end writeLog(1,"... done\n",0) -writeLog(1,"------------------ Start list after getEntryAndPage() ------------------------\n,",2) +writeLog(1,"------------------ Start list after getEntryAndPage() ------------------------\n",2) printList(Index,2) writeLog(1,"\n------------------ end list after getEntryAndPage() ------------------------\n",2) writeLog(2,"Sorting entries: for LARGE idx files it can take some minutes ... \n",0) +writeLog(1,"\n------------------ Start list before table.sort(Hooks and UTFCompare)------------\n",2) +printList(Index,2) +writeLog(1,require 'xindex-pretty'.dump(Index),3) -- only for internal dump +writeLog(1,"\n------------------ end list before table.sort(Hooks and UTFCompare)------------\n",2) + + if SORTprehook then writeLog(2, "PreHook begin\n", 0) Index = SORTprehook(Index) @@ -112,8 +118,14 @@ writeLog(2, "GenerateSortKeys end\n", 0) k = 0 writeLog(2, "Sort begin\n", 0) -table.sort(Index,UTFCompare) + +if use_UCA then + table.sort(Index, UCACompare) +else + table.sort(Index,UTFCompare) +end writeLog(2, "Sort end\n", 0) + if SORTposthook then writeLog(2, "PostHook begin\n", 0) Index = SORTposthook(Index) @@ -168,15 +180,19 @@ if use_UCA then v = NewIndex[i] -- the collator:get_lowest_char will return character on the given -- position. It will be lowercase and without accents. - local codepoints = collator_obj:string_to_codepoints(NormalizedUpper(v.SortKey)) + if v.SortKey ~= nil then + codepoints = collator_obj:string_to_codepoints(utf8_upper(v.SortKey)) + else + codepoints = collator_obj:string_to_codepoints(utf8_upper(v.sortChar)) + end v.sortChar = getSortChar(codepoints) --or getSortChar(collator_obj:string_to_codepoints(NormalizedUpper(v.Entry))) if not v.sortChar then -- alternativelly use v.Entry if SortKey doesn't contain usable string - codepoints = collator_obj:string_to_codepoints(NormalizedUpper(v.Entry)) + codepoints = collator_obj:string_to_codepoints(utf8_upper(v.Entry)) v.sortChar = getSortChar(codepoints) end +-- print("v.sortchar="..v.sortChar) end - writeLog(2,"done\n",0) else for i=1, #NewIndex do if NewIndex[i]["SortKey"] ~= nil then @@ -187,6 +203,9 @@ else end end + +writeLog(2,"done\n",0) + if SORTendhook then NewIndex = SORTendhook(NewIndex) end diff --git a/indexing/xindex/lualatex/xindex-baselib.lua b/indexing/xindex/lualatex/xindex-baselib.lua index 36269520c9..1f278b31ad 100644 --- a/indexing/xindex/lualatex/xindex-baselib.lua +++ b/indexing/xindex/lualatex/xindex-baselib.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-baselib'] = { - version = 0.55, + version = 0.61, comment = "base library to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/lualatex/xindex-cfg-common.lua b/indexing/xindex/lualatex/xindex-cfg-common.lua index e02da6f3fc..e727a75113 100644 --- a/indexing/xindex/lualatex/xindex-cfg-common.lua +++ b/indexing/xindex/lualatex/xindex-cfg-common.lua @@ -9,13 +9,27 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-cfg-common'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", license = "LPPL 1.3" } +itemPageDelimiter = "," -- Hello, 14 +compressPages = true -- something like 12--15, instead of 12,13,14,15. the |( ... |) syntax is still valid +fCompress = true -- 3f -> page 3, 4 and 3ff -> page 3, 4, 5 +minCompress = 3 -- 14--17 or +rangeSymbol = "--" +numericPage = true -- for non numerical pagenumbers, like "VI-17" +sublabels = {"", "-\\,", "--\\,", "---\\,"} -- for the (sub(sub(sub-items first one is for item +pageNoPrefixDel = "" -- a delimiter for page numbers like "VI-17" -- not used !!! +indexOpening = "" -- commands after envStart +idxnewletter = "\\textbf" -- Only valid if -n is not set +envStart = "\\begin{theindex}" +envStop = "\\end{theindex}" + + indexheader = { cs = {"Symboly", "Čísla", "czech"}, da = {"Symboler", "Tal", "danish"}, @@ -30,6 +44,7 @@ indexheader = { ru = {"Символы", "Числа", "russian"}, } + --[[ babel afrikaans azerbaijani diff --git a/indexing/xindex/lualatex/xindex-cfg.lua b/indexing/xindex/lualatex/xindex-cfg-no_uca.lua index b9960963bd..7a013a3025 100644 --- a/indexing/xindex/lualatex/xindex-cfg.lua +++ b/indexing/xindex/lualatex/xindex-cfg-no_uca.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-cfg'] = { - version = 0.55, + version = 0.61, comment = "main configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", @@ -18,7 +18,7 @@ if not modules then modules = { } end modules ['xindex-cfg'] = { itemPageDelimiter = "," -- Hello, 14 compressPages = true -- something like 12--15, instead of 12,13,14,15. the |( ... |) syntax is still valid -fCompress = true -- 3f -> page 3, 4 and 3ff -> page 3, 4, 5 +fCompress = true -- 3f -> page 3, 4 and 3ff -> page 3, 4, 5 minCompress = 3 -- 14--17 or rangeSymbol = "--" numericPage = true -- for non numerical pagenumbers, like "VI-17" @@ -29,6 +29,8 @@ idxnewletter = "\\textbf" -- Only valid if -n is not set envStart = "\\begin{theindex}" envStop = "\\end{theindex}" +-- The following is not needed for sorting with UCA !!!! + --[[ Each character's position in this array-like table determines its 'priority'. Several characters in the same slot have the same 'priority'. diff --git a/indexing/xindex/lualatex/xindex-cfg-uca.lua b/indexing/xindex/lualatex/xindex-cfg-uca.lua index 8dad47adda..e13803f7ca 100644 --- a/indexing/xindex/lualatex/xindex-cfg-uca.lua +++ b/indexing/xindex/lualatex/xindex-cfg-uca.lua @@ -9,13 +9,27 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-cfg-lua'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex-cfg-uca.lua", author = "Herbert Voss", copyright = "Herbert Voss", license = "LPPL 1.3" } +languages.fr = function(collator_obj) + -- reverse search for accents in French (recommended): + collator_obj.accents_backward = true + -- accents: sorting order in French + local tailoring = function(s) collator_obj:tailor_string(s) end + tailoring("&æ=ae") + tailoring("&œ=oe") + tailoring("&th<þ<<<Þ") -- Canadian, see SGQRI004.pdf + -- lowercase before uppercase in French + --collator_obj:uppercase_first() + return collator_obj +end + + -- put any additional code for lua-uca here --- languages.no = function(collator_obj) local tailoring = function(s) collator_obj:tailor_string(s) end @@ -50,4 +64,4 @@ Symbol Example Description <<<< か<<<<カ Identifies a quaternary difference between "か" and "カ". (New in ICU 53.) ICU permits up to three quaternary relations in a row (except for intervening "=" identity relations). = x = y Signifies no difference between "x" and "y". & &Z Instructs ICU to reset at this letter. These rules will be relative to this letter from here on, but will not affect the position of Z itself. -]]
\ No newline at end of file +]] diff --git a/indexing/xindex/lualatex/xindex-danteedition.lua b/indexing/xindex/lualatex/xindex-danteedition.lua index 477eb5ccca..b615b2b220 100644 --- a/indexing/xindex/lualatex/xindex-danteedition.lua +++ b/indexing/xindex/lualatex/xindex-danteedition.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-cfg'] = { - version = 0.55, + version = 0.61, comment = "configuration file for the DANTE Edition", author = "Herbert Voss", copyright = "Herbert Voss", @@ -91,3 +91,18 @@ alphabet_upper = { -- for sorting { 'Y', 'Ý', 'Ÿ' }, { 'Z', 'Ž' } } + +folium = { + cs = {"f.", "ff."}, + da = {"f", "ff"}, + de = {"f", "ff"}, + en = {"f", "ff"}, + es = {"f", "ff"}, + fr = {"\\,sq.","\\,sqq."}, + it = {"f", "ff"}, + jp = {"シンボル","番号"}, + nl = {"f.", "ff."}, + no = {"\\,f.","\\,ff."}, + ru = {"",""}, -- doesn't exist +} + diff --git a/indexing/xindex/lualatex/xindex-dtk.lua b/indexing/xindex/lualatex/xindex-dtk.lua index b420597720..c7822591ff 100644 --- a/indexing/xindex/lualatex/xindex-dtk.lua +++ b/indexing/xindex/lualatex/xindex-dtk.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-cfg'] = { - version = 0.55, + version = 0.61, comment = "DTK configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/lualatex/xindex-lib.lua b/indexing/xindex/lualatex/xindex-lib.lua index 60c4d9a196..3f24bee367 100644 --- a/indexing/xindex/lualatex/xindex-lib.lua +++ b/indexing/xindex/lualatex/xindex-lib.lua @@ -9,13 +9,17 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-lib'] = { - version = 0.55, + version = 0.61, comment = "main library to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", license = "LPPL 1.3" } +require ("unicode") +utf8_lower = unicode.utf8.lower +utf8_upper = unicode.utf8.upper + local escapechar1 = "\"" local escapechar2 = "\"\"" local Letters = "ÄÖÜäöüabcdefghijklmnopqrstuvwxyzßABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -55,29 +59,37 @@ function Lower(strOrig) -- return UTF string.lower end function NormalizedLower(strOrig) -- return normalized UTF string.lower (ä -> a) - local str = "" - for i=1, utf.len(strOrig) do - local c = get_normalized_char(alphabet_lower_map,utf.sub(strOrig,i,i)) - str = str..string.lower(c) + if use_UCA then + return strOrig + else + local str = "" + for i=1, utf.len(strOrig) do + local c = get_normalized_char(alphabet_lower_map,utf.sub(strOrig,i,i)) + str = str..string.lower(c) + end + return str end - return str end function NormalizedUpper(strOrig) -- return normalized UTF string.upper (ä -> A) - local str = {} - local c - for i=1, utf.len(strOrig) do - c = get_normalized_char(alphabet_lower_map,utf.sub(strOrig,i,i)) - str[#str + 1] = c - end - strOrig = table.concat(str) - str = {} - for i=1, utf.len(strOrig) do - c = get_normalized_char(alphabet_upper_map,utf.sub(strOrig,i,i)) - c = NormalizedUppercase(c) - str[#str + 1] = c + if use_UCA then + return strOrig + else + local str = {} + local c + for i=1, utf.len(strOrig) do + c = get_normalized_char(alphabet_lower_map,utf.sub(strOrig,i,i)) + str[#str + 1] = c + end + strOrig = table.concat(str) + str = {} + for i=1, utf.len(strOrig) do + c = get_normalized_char(alphabet_upper_map,utf.sub(strOrig,i,i)) + c = NormalizedUppercase(c) + str[#str + 1] = c + end + return table.concat(str) end - return table.concat(str) end function NormalizedUppercase(chr) -- return normalized UTF uppercase letter @@ -284,7 +296,8 @@ function getEntryAndPage(w, nextW, EntryList) --print("Entry:"..EntryList[#EntryList]["sortChar"]) if args_v then if Special == "" then Special = "-" end - writeLog(1,"getEntryAndPage: "..tostring(IndexString,pageNo,Special,utf.sub(IndexString,1,1),macro).."\n",2) + writeLog(1,"getEntryAndPage: ".. + tostring(IndexString,pageNo,Special,utf.sub(IndexString,1,1),macro).."\n",2) end return EntryList end @@ -293,6 +306,7 @@ function compressEntryList(EntryList) -- require 'xindex-pretty'.dump(EntryList) -- only for internal dump local newList = {} newList[1] = EntryList[1] -- at least one entry + print("----------------- start compressEntryList ----------------") local nPages = 1 for k=2,#EntryList do if EntryList[k] then -- exists? @@ -337,7 +351,6 @@ EntryList[2] = { } ]] - function deletePageDups(pages) if #pages == 1 then return pages end local newPages = {pages[1]} @@ -360,7 +373,7 @@ end function compressPageList(pages) -- called with (v["pages"]) writeLog(1,"compressPageList: we have "..#pages.." pages for this entry\n",2) --- require 'xindex-pretty'.dump(pages) -- only for internal dump + --print(require 'xindex-pretty'.dump(pages)) -- only for internal dump pages = deletePageDups(pages) -- delete duplicate page numbers with same special local str if #pages == 1 then -- only one pageno @@ -380,6 +393,26 @@ function compressPageList(pages) -- called with (v["pages"]) -- (pages[1]["special"] == pages[2]["special"]) then -- pages[2] = nil end + else -- pages are not numbers + rangeStartA,rangeEndA = pages[1]["number"]:find("-") or 0,0 + rangeStartB,rangeEndB = pages[2]["number"]:find("-") or 0,0 + if rangeStartA > 1 then + pageA = pages[1]["number"]:gmatch("([^-]+)")(1) -- split 12--44 into 12 + pageB = pages[2]["number"] + if pageA > pageB then -- change pages + local temp = pages[1]["number"] + pages[1]["number"] = pages[2]["number"] + pages[2]["number"] = temp + end + elseif rangeStartB > 1 then -- change pages + pageA = pages[1]["number"] + pageB = pages[2]["number"]:gmatch("([^-]+)")(1) -- split 12--44 into 12 + if pageA > pageB then + local temp = pages[1]["number"] + pages[1]["number"] = pages[2]["number"] + pages[2]["number"] = temp + end + end end return pages end @@ -397,7 +430,7 @@ function compressPageList(pages) -- called with (v["pages"]) series = {pages[2]} startIndex = 3 end -if args_v then print ("compressPageList: more than two pages for the entry\n") end + if args_v then print ("compressPageList: more than two pages for the entry\n") end for i=startIndex,#pages do if (toNumber(pages[i-1]["number"]) and toNumber(pages[i]["number"])) then -- do we have two arabic or two roman numbers? if ((toNumber(pages[i]["number"])-toNumber(pages[i-1]["number"])) == 1) and @@ -574,6 +607,7 @@ function GenerateSortKey(a) end -- s:gsub("%s+", "") strip spaces -- a["SortKey"] = a["SortKey"]:gsub("%s+", "") + --print("Sortkey: " .. a["SortKey"]) if not use_UCA then -- test if it is a symbol after 9 and before A or after Z if (a["SortKey"]:byte() > 57 and a["SortKey"]:byte() < 65) or (a["SortKey"]:byte() > 90 and a["SortKey"]:byte() < 97) or @@ -581,28 +615,44 @@ function GenerateSortKey(a) a["SortKey"] = "/"..a["SortKey"] -- sort it after / end end - --print("Sortkey: " .. a["SortKey"]) end function GenerateSortKeys(Index) - for _, entry in ipairs(Index) do + for _, entry in ipairs(Index) do -- print("<<".._..entry["Entry"]) - GenerateSortKey(entry) - end + GenerateSortKey(entry) + end end -function UTFCompare(a,b) - local A = a["SortKey"] - local B = b["SortKey"] - if use_UCA then - compare = collator_obj:compare_strings(A,B) +-- Entry = "Johann", -- the index item foo@bar +-- pages = { -- the page number(s) and the part after | +-- { number = 111, + + +function UCACompare(a,b) + local pageA = a["pages"][1]["number"] + local pageB = b["pages"][1]["number"] + if ignoreSpace then + A = a["Entry"]:gsub("%s+", "")..tostring(pageA) -- str = str:gsub("%s+", "") + B = b["Entry"]:gsub("%s+", "")..tostring(pageB) else - compare = A<B + A = a["Entry"]..tostring(pageA) + B = b["Entry"]..tostring(pageB) end - writeLog(1,"UTFCompare: "..A.."<"..B.." : "..tostring(compare).."\n",2) + if A=="Abendmahl" or B=="Abendmahl" then print(A,B,A==B) end + if A==B then return True end + --print(A,B) + compare = collator_obj:compare_strings(A,B) +-- writeLog(1,"UCACompare: "..A.."<"..B.." : "..tostring(compare).."\n",2) return compare end +function UTFCompare(a,b) + local A = a["SortKey"] + local B = b["SortKey"] +-- writeLog(1,"UTFCompare: "..A.."<"..B.." : "..tostring(A<B).."\n",2) + return A<B +end function pageCompare(a,b) -- a = {{number=...,special=..},{...,...}} -- a["number"], b["number"] are something like "3" or "VI-17" or "9--31" @@ -709,7 +759,7 @@ function getPageList(v,hyperpage) else Pages = compressPageList(v["pages"]) end --- require 'xindex-pretty'.dump(Pages) -- only for internal dump +-- print(require 'xindex-pretty'.dump(Pages)) -- only for internal dump local pageNo --[[ \indexentry{Auto|hyperindexformat{\textbf}}{1} @@ -719,18 +769,17 @@ function getPageList(v,hyperpage) \item foo, \hyperpage{1\nohyperpage{f}}, \hyperpage{4\nohyperpage{ff}}, \hyperpage{8} - ]] if hyperpage then - if string.find(v["pages"][1]["special"],"hyperindexformat") then --- pageNo = v["pages"][1]["special"].."{"..checkFF(Pages[1]["number"].."}") - pageNo = v["pages"][1]["special"].."{"..Pages[1]["number"].."}" + if string.find(Pages[1]["special"],"hyperindexformat") then +-- pageNo = Pages[1]["special"].."{"..checkFF(Pages[1]["number"].."}") + pageNo = Pages[1]["special"].."{"..Pages[1]["number"].."}" else pageNo = "\\hyperpage{"..checkFF(Pages[1]["number"]).."}" end for i=2,#Pages do - if string.find(v["pages"][i]["special"],"hyperindexformat") then - pageNo = pageNo..", "..v["pages"][i]["special"].."{"..Pages[i]["number"].."}" + if string.find(Pages[i]["special"],"hyperindexformat") then + pageNo = pageNo..", "..Pages[i]["special"].."{"..Pages[i]["number"].."}" -- pageNo = pageNo..", "..v["pages"][i]["special"].."{"..checkFF(Pages[i]["number"].."}") else pageNo = pageNo..", \\hyperpage{"..checkFF(Pages[i]["number"]).."}" @@ -784,8 +833,9 @@ end function checkHyperpage(lines) local hyperpage = false + local l for i=1,#lines do - if string.find(lines[i],'hyperpage}') then + if string.find(lines[i],'hyperpage}') or string.find(lines[i],'hyperindexformat}') then hyperpage = true break end @@ -796,49 +846,49 @@ function checkHyperpage(lines) -- hyperref ignores the vertical bar in "| and also other escape chars -- -- \index{"|} -> \indexentry{"|hyperpage}{1} -> \textbar|hyperpage - -- \index{foo"|bar} -> \indexentry{foo"|hyperindexformat{\bar}}{1} -> foo\textbar bar|hyperpage + -- \index{foo"|bar} -> \indexentry{foo"||hyperindexformat{\bar}}{1} -> foo\textbar bar|hyperpage end local sub_str0 = esc_char..'|hyperpage' local sub_str1 = esc_char..'|hyperindexformat' for i=1,#lines do - local l = lines[i] + l = lines[i] if fix_hyperref then - s0 = l:find(sub_str0) -- test for hyperpage - s1 = l:find(esc_char..sub_str0) - --print(i,l,s0,s1) + s0 = l:find(sub_str0) -- test for "|hyperpage + s1 = l:find(esc_char..sub_str0) -- test for ”"|hyperpage if s0 == nil then s0 = 0 s1 = 0 end if s1 == nil and s0 > 0 then -- no ""| - l = l:gsub(sub_str0, '\\textbar|hyperpage') -- "| -> \textbar - else - -- part 2 - s0 = l:find(sub_str1) - s1 = l:find(esc_char..sub_str1) - --print(i,l,s0,s1) - if s0 == nil then + l = l:gsub(sub_str0, '\\textbar|hyperpage') -- "|hyperpage -> \textbar|hyperpage + end + -- part 2 + s0 = l:find(sub_str1) -- look for "|hyperindexformat + s1 = l:find(esc_char..sub_str1) -- look for ""|hyperindexformat + --print(i,l,s0,s1) + if s0 == nil then s0 = 0 s1 = 0 - elseif s1 == nil then + elseif s1 == nil then s1 = 0 - end - if s1 == 0 and s0 > 0 then + end + if s1 == 0 and s0 > 0 then -- found "|hyperindexformat -- get foo and bar from {foo"|hyperindexformat{\bar}} - items = l:gmatch("%{(.-)%}") - var = {} - for item in items do + -- \indexentry{marriage|hyperindexformat{\seealso{coemptio}}}{301} + items = l:gmatch("%{(.-)%}") + var = {} + for item in items do var[#var+1] = item - end - if s0 > 2 then + end + if s0 > 2 then u1 = var[1]:split('"|')[1] -- foo - else + else u1 = '' - end - v1 = var[1]:split("\\")[2] -- bar - l = '{'..u1..'\\textbar '..v1.."|hyperpage}{"..var[2].."}" - -- l = foo"|bar -> foo\textbar bar end + v1 = var[1]:split("\\")[2] -- bar + print(u1,v1,var[1],var[2]) + l = '{'..u1..'\\textbar '..v1.."|hyperindexformat}{"..var[2].."}" + -- l = foo"|bar -> foo\textbar bar end end lines[i] = string.gsub(l,'|?hyperpage}{','}{') @@ -1018,7 +1068,7 @@ function getSortChar(codepoints) local sort_char = utf8.char(table.unpack(codes)) --print("SortChar:"..sort_char) -- print unicode category of the first char - return upper(sort_char) -- use unicode.utf8.upper to make the char uppercase + return unicode.utf8.upper(sort_char) -- use unicode.utf8.upper to make the char uppercase end end diff --git a/indexing/xindex/lualatex/xindex-norsk.lua b/indexing/xindex/lualatex/xindex-norsk.lua index f51d19db0e..91d83a95a2 100644 --- a/indexing/xindex/lualatex/xindex-norsk.lua +++ b/indexing/xindex/lualatex/xindex-norsk.lua @@ -10,7 +10,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-no'] = { - version = 0.55, + version = 0.61, comment = "configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/lualatex/xindex-pretty.lua b/indexing/xindex/lualatex/xindex-pretty.lua index bdf6591ff8..c41ba8c8cc 100644 --- a/indexing/xindex/lualatex/xindex-pretty.lua +++ b/indexing/xindex/lualatex/xindex-pretty.lua @@ -7,7 +7,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-pretty'] = { - version = 0.55, + version = 0.61, comment = "dump a Lua table for debugging", author = "Steve Donovan", copyright = "Steve Donovan", diff --git a/indexing/xindex/lualatex/xindex-yannis.lua b/indexing/xindex/lualatex/xindex-yannis.lua index a07d5e2f4d..ebf27cfb75 100644 --- a/indexing/xindex/lualatex/xindex-yannis.lua +++ b/indexing/xindex/lualatex/xindex-yannis.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- if not modules then modules = { } end modules ['xindex-yannis'] = { - version = 0.55, + version = 0.61, comment = "main configuration to xindex.lua", author = "Herbert Voss", copyright = "Herbert Voss", diff --git a/indexing/xindex/scripts/xindex.lua b/indexing/xindex/scripts/xindex.lua index 041235d289..fd510451ca 100755 --- a/indexing/xindex/scripts/xindex.lua +++ b/indexing/xindex/scripts/xindex.lua @@ -9,7 +9,7 @@ ----------------------------------------------------------------------- xindex = xindex or { } - local version = 0.55 + local version = 0.61 xindex.version = version --xindex.self = "xindex" @@ -46,7 +46,7 @@ local args = require ('xindex-lapp') [[ -V,--version -a,--no_casesensitive -b,--no_labels - -c,--config (default cfg) + -c,--config (default "") -e,--escapechar (default ") -f,--fix_hyperref -g,--no_pagenumber @@ -57,7 +57,8 @@ local args = require ('xindex-lapp') [[ -o,--output (default "") -p,--prefix (default L) -s,--use_stdin - -u,--use_UCA + -u,--use_UCA no more needed + -x,--no_UCA <files...> (default stdin) .idx file(s) ]] @@ -170,7 +171,6 @@ end logFile = io.open(logfilename,"w+") require('xindex-lib') - writeLog(2,"xindex v."..version.." (c) Herbert Voß\n",-1) writeLog(1,"Verbose level = "..vlevel.."\n",1) writeLog(2,"Logfile:"..logfilename.."\n",1) @@ -202,45 +202,13 @@ writeLog(2,"ignore space for sorting: "..tostring(ignoreSpace).."\n",-1) labelPrefix = args.prefix writeLog(2,"Label prefix: "..labelPrefix.."\n",-1) -writeLog(2,"Loading common config file ".."xindex-cfg-common\n",1) +writeLog(2,"Loading all config files ... \n",1) +writeLog(2,"Loading common config file ".."xindex-cfg-common\n",1) -- we need config for lang setting Config_File_Common = kpse.find_file("xindex-cfg-common.lua") cfg_common = require(Config_File_Common) -local user_config_file = "xindex-"..args["config"]..".lua" -print("Local config file is: "..user_config_file) -writeLog(2,"Loading local config file "..user_config_file,0) -if kpse.find_file(user_config_file) - then Config_File = kpse.find_file(user_config_file) - else print("Cannot find config file with kpse.find_file!!") -end -print("\nLocal KPSE config file is: "..Config_File.."\n") -cfg = require(Config_File) -writeLog(2," ... done\n",0) - --- Create the character list maps for faster sorting - -alphabet_lower_map = CreateCharListMap(alphabet_lower) -alphabet_upper_map = CreateCharListMap(alphabet_upper) - -esc_char = args.escapechar -esc_char2 = esc_char..esc_char -writeLog(2,"Escapechar = "..esc_char.."\n",1) -escape_chars = { -- by default " is the escape char - {esc_char2, '//escaped2//', esc_char }, - {esc_char..'@', '//escapedat//', '@' }, - {esc_char..'|', '//escapedvert//', '|' }, - {esc_char..'!', '//escapedexcl//', '!' }, - {'', '\\textbar', '|' }, - {'', '\\braceLeft', '{' }, - {'', '\\braceRight', '}' } -} - -outFile = io.open(outfilename,"w+") - check_language = args["checklang"] local aux_language = "" - - if check_language then print("check aux file for unknown language") -- writeLog(2,'Check language in aux file\n',0) @@ -287,32 +255,17 @@ else end end ---print("Sprache:"..language) - -writeLog(2,"Language = "..language.."\n",1) -if (indexheader[language] == nil) then - writeLog(2,'Corrected the unknown language "'..language..'" to "en"'.."\n",0) - language = "en" -end - -index_header = indexheader[language] -if vlevel > 0 then for i=1,#index_header do writeLog(2,index_header[i].."\n",1) end end -if (folium[language] == nil) then - writeLog(2,'Corrected the unknown language "'..language..'" for page folium to "en"'.."\n",0) - page_folium = folium["en"] -else - page_folium = folium[language] -end +-- next config is UCA -use_UCA = args["use_UCA"] +use_UCA = not args["no_UCA"] if use_UCA then writeLog(1,"Will use LUA-UCA\n",1) ducet = require "lua-uca.lua-uca-ducet" collator = require "lua-uca.lua-uca-collator" languages = require "lua-uca.lua-uca-languages" collator_obj = collator.new(ducet) - - local uca_config_file = "xindex-cfg-uca.lua" + + uca_config_file = "xindex-cfg-uca.lua" -- for additional language definition writeLog(2,"Loading local UCA config file "..uca_config_file,0) UCA_Config_File = kpse.find_file(uca_config_file) uca_cfg = require(UCA_Config_File) @@ -331,11 +284,65 @@ if use_UCA then print("[Lua-UCA] Loading language: " .. language) collator_obj = languages[language](collator_obj) end + alphabet_lower_map = {} -- empty tables for UCA sorting + alphabet_upper_map = {} else writeLog(1,"Will _not_ use LUA-UCA\n",1) + -- Create the character list maps for faster sorting if not using UCA + writeLog(2,"Loading config file for no UCA".."xindex-cfg-no_uca\n",1) + Config_File_UCA = kpse.find_file("xindex-cfg-no_uca.lua") + cfg_UCA = require(Config_File_UCA) + alphabet_lower_map = CreateCharListMap(alphabet_lower) + alphabet_upper_map = CreateCharListMap(alphabet_upper) +end + +-- at last the user config + +if args["config"] ~= '""' then + local user_config_file = "xindex-"..args["config"]..".lua" + print("Local config file is: "..user_config_file) + writeLog(2,"Loading local config file "..user_config_file,0) + if kpse.find_file(user_config_file) then + Config_File = kpse.find_file(user_config_file) + else + Config_File = "" + print("Cannot find config file with kpse.find_file!!") + end + print("\nLocal KPSE config file is: "..Config_File.."\n") + cfg = require(Config_File) + writeLog(2," ... done\n",0) end -upper = unicode.utf8.upper +--print("Sprache:"..language) + +writeLog(2,"Language = "..language.."\n",1) +if (indexheader[language] == nil) then + writeLog(2,'Corrected the unknown language "'..language..'" to "en"'.."\n",0) + language = "en" +end + +index_header = indexheader[language] +if vlevel > 0 then for i=1,#index_header do writeLog(2,index_header[i].."\n",1) end end +if (folium[language] == nil) then + writeLog(2,'Corrected the unknown language "'..language..'" for page folium to "en"'.."\n",0) + page_folium = folium["en"] +else + page_folium = folium[language] +end + + +esc_char = args.escapechar +esc_char2 = esc_char..esc_char +writeLog(2,"Escapechar = "..esc_char.."\n",1) +escape_chars = { -- by default " is the escape char + {esc_char2, '//escaped2//', esc_char }, + {esc_char..'@', '//escapedat//', '@' }, + {esc_char..'|', '//escapedvert//', '|' }, + {esc_char..'!', '//escapedexcl//', '!' }, + {'', '\\textbar', '|' }, + {'', '\\braceLeft', '{' }, + {'', '\\braceRight', '}' } +} no_caseSensitive = args["no_casesensitive"] if no_caseSensitive then |