summaryrefslogtreecommitdiff
path: root/indexing/texindex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /indexing/texindex
Initial commit
Diffstat (limited to 'indexing/texindex')
-rw-r--r--indexing/texindex/ix.collapse28
-rw-r--r--indexing/texindex/ix.extract7
-rw-r--r--indexing/texindex/ix.format33
-rw-r--r--indexing/texindex/ix.genkey20
-rw-r--r--indexing/texindex/ix.polish16
-rw-r--r--indexing/texindex/ix.rotate19
-rw-r--r--indexing/texindex/test.idx14
-rw-r--r--indexing/texindex/test.ind44
-rw-r--r--indexing/texindex/texindex9
-rw-r--r--indexing/texindex/texindex.pdfbin0 -> 22933 bytes
-rw-r--r--indexing/texindex/texindex.tex61
11 files changed, 251 insertions, 0 deletions
diff --git a/indexing/texindex/ix.collapse b/indexing/texindex/ix.collapse
new file mode 100644
index 0000000000..cedcd045ab
--- /dev/null
+++ b/indexing/texindex/ix.collapse
@@ -0,0 +1,28 @@
+# ix.collapse : awk - script
+# kollabiere Zahlenlisten bei identische Begriffe
+# Eingabeformat :
+# string1 \t num
+# string2 \t num
+# string2 \t num
+# ...
+# Ausgabeformat:
+# string1 \t num
+# string2 \t num, num
+BEGIN {
+ altwort = "ASDF!@#$*&%$IU11@"
+ FS = OFS = "\t"
+ }
+$1 != altwort {
+ if (NR > 1)
+ printf "\n"
+ altwort = $1
+ printf "%s\t%s", $1, $2
+ next
+ }
+ {
+ printf " %s",$2
+ }
+END {
+ if (NR > 1)
+ printf "\n"
+ }
diff --git a/indexing/texindex/ix.extract b/indexing/texindex/ix.extract
new file mode 100644
index 0000000000..65d0ed5751
--- /dev/null
+++ b/indexing/texindex/ix.extract
@@ -0,0 +1,7 @@
+# ix.extract : sed - script, um die Daten aus einem LaTeX - *.idx - File
+# rauszuholen.
+# Eingabeformat:
+# \indexentry{Begriff}{Seitenzahl}
+# Ausgabeformat:
+# Begriff \t Seitenzahl
+s/\\indexentry{\(.*\)}{\(.*\)}/\1 \2/
diff --git a/indexing/texindex/ix.format b/indexing/texindex/ix.format
new file mode 100644
index 0000000000..eb2b389ad5
--- /dev/null
+++ b/indexing/texindex/ix.format
@@ -0,0 +1,33 @@
+# ix.format : awk - script
+# entfernt Sortierschluessel, fuegt \item etc. ein
+BEGIN {
+ FS = OFS = "\t"
+ printf "\\begin{theindex}"
+ }
+ {
+ n = split($2,feld,", ")
+ if (n > 3)
+ {
+ for (i=4; i <=n; i++)
+ feld[3] = feld[3] ", " feld[i]
+ n = 3
+ }
+ for (i = 1; feld[i]==altfeld[i] && i<=n ; i++)
+ ;
+ for (k=i; k <=n; k++)
+ {
+ printf "\n\\"
+ for (j=1; j<k; j++)
+ printf "sub"
+ printf "item %s ",feld[k]
+ }
+ nzahl = split($3,zahlfeld," ")
+ for (j=1; j<nzahl; j++)
+ printf"%s, ",zahlfeld[j]
+ printf "%s",zahlfeld[nzahl]
+ for (j=1; j<=i; j++)
+ altfeld[i] = feld[i]
+ }
+END {
+ printf "\n\\end{theindex}\n"
+ }
diff --git a/indexing/texindex/ix.genkey b/indexing/texindex/ix.genkey
new file mode 100644
index 0000000000..b1ffba45fa
--- /dev/null
+++ b/indexing/texindex/ix.genkey
@@ -0,0 +1,20 @@
+# ix.genkey : Generierung eines Sortierschluessels ohne Sonderzeichen
+# Eingabe: string1 string2 ... \t num num ...
+# Ausgabe: string1 string2 ... (ohne S.Z.) \t string1 string2 ... \t num num ..
+#
+# Ersetze global die Tilde durch Spaces
+s/~/ /g
+# kopiere die Zeile in den Zwischenpuffer
+h
+# alles hinter \t loeschen
+s/ .*$//
+# zum Sortieren loesche alle nicht - alphanumerischen Zeichen
+s/[^a-zA-Z0-9 ]//g
+# falls dabei eine leere Zeile rauskommt, setze ein Space rein
+s/^$/ /
+# kopiere die urspruengliche Zeile aus dem Puffer hinter den Speicher
+G
+# ersetze newline zwischen den Zeilen durch \t
+s/\n/ /
+# Falls ein Komma am Ende des Strings steht, loesche es
+s/, / /
diff --git a/indexing/texindex/ix.polish b/indexing/texindex/ix.polish
new file mode 100644
index 0000000000..1c4d110977
--- /dev/null
+++ b/indexing/texindex/ix.polish
@@ -0,0 +1,16 @@
+# ix.polish : sed - script zum letzten Nachpolieren der Eintraege
+# \item etc. einruecken, eckige Klammern in \verb - Anweisungen abaendern
+#
+# Packe vor jedes \item ein \indexspace
+/\\item/i\
+ \\indexspace
+# ruecke \items ein
+/^\\item/s/^/ /
+# ruecke \subitems etwas mehr ein
+/^\\subitem/s/^/ /
+# ruecke \subsubitems noch etwas mehr ein
+/^\\subsubitem/s/^/ /
+# aendere [ in \verb+
+s/\[/\\verb+/g
+# aendere ] in +
+s/\]/+/g
diff --git a/indexing/texindex/ix.rotate b/indexing/texindex/ix.rotate
new file mode 100644
index 0000000000..ab3b785291
--- /dev/null
+++ b/indexing/texindex/ix.rotate
@@ -0,0 +1,19 @@
+# ix.rotate: awk - script zur Rotation von Index - Begriffen
+# Eingabe:
+# string1 string2 string3 ... \t num num ...
+# Ausgabe:
+# string1 string2 string3 ... \t num num ...
+# string2 string3 ... , string1 \t num num ...
+# string3 ..., string1 string2 \t num num ...
+#
+BEGIN {
+ FS = OFS = "\t"
+ }
+ {
+ print $1, $2 # Drucke die unrotierte Form
+ for (i=1; (j=index(substr($1, i+1)," "))> 0;)
+ {
+ i += j # Finde jeden Blank und rotiere um ihn
+ printf "%s, %s\t%s\n",substr($1,i+1),substr($1,1,i-1),$2
+ }
+ }
diff --git a/indexing/texindex/test.idx b/indexing/texindex/test.idx
new file mode 100644
index 0000000000..e27fba9481
--- /dev/null
+++ b/indexing/texindex/test.idx
@@ -0,0 +1,14 @@
+\indexentry{FORTRAN}{1}
+\indexentry{Programmiersprache FORTRAN}{1}
+\indexentry{gro"se Gnus}{1}
+\indexentry{Suche~nach Syntax~f"ur FORTRAN}{2}
+\indexentry{Befehl [WRITE]}{5}
+\indexentry{FORTRAN}{5}
+\indexentry{fiese, kleine Gnus}{5}
+\indexentry{[@#$%!@]spiel!}{6}
+\indexentry{Testeintrag~doppelt}{6}
+\indexentry{Testeintrag~doppelt}{7}
+\indexentry{Testeintrag~doppelt}{7}
+\indexentry{Gnus}{7}
+\indexentry{b"ose gro"se Gnus}{8}
+\indexentry{letzter Eintrag}{9}
diff --git a/indexing/texindex/test.ind b/indexing/texindex/test.ind
new file mode 100644
index 0000000000..e074ecbc12
--- /dev/null
+++ b/indexing/texindex/test.ind
@@ -0,0 +1,44 @@
+\begin{theindex}
+ \indexspace
+ \item Befehl \verb+WRITE+ 5
+ \indexspace
+ \item b"ose gro"se Gnus 8
+ \indexspace
+ \item Eintrag
+ \subitem letzter 9
+ \indexspace
+ \item fiese
+ \subitem kleine Gnus 5
+ \indexspace
+ \item FORTRAN 1, 5
+ \subitem Programmiersprache 1
+ \subitem Suche nach Syntax f"ur 2
+ \indexspace
+ \item Gnus 7
+ \subitem b"ose gro"se 8
+ \subitem fiese
+ \subsubitem kleine 5
+ \subitem gro"se 1
+ \indexspace
+ \item gro"se Gnus 1
+ \subitem b"ose 8
+ \indexspace
+ \item kleine Gnus
+ \subitem fiese 5
+ \indexspace
+ \item letzter Eintrag 9
+ \indexspace
+ \item Programmiersprache FORTRAN 1
+ \indexspace
+ \item \verb+@#$%!@+spiel! 6
+ \indexspace
+ \item Suche nach Syntax f"ur FORTRAN 2
+ \indexspace
+ \item Syntax f"ur FORTRAN
+ \subitem Suche nach 2
+ \indexspace
+ \item Testeintrag doppelt 6, 7
+ \indexspace
+ \item \verb+WRITE+
+ \subitem Befehl 5
+\end{theindex}
diff --git a/indexing/texindex/texindex b/indexing/texindex/texindex
new file mode 100644
index 0000000000..55c4d728f1
--- /dev/null
+++ b/indexing/texindex/texindex
@@ -0,0 +1,9 @@
+sed -f ix.extract $1.idx |
+sort -t +0 -1 +1n -2 |
+uniq |
+awk -f ix.collapse |
+awk -f ix.rotate |
+sed -f ix.genkey |
+sort -f -d |
+awk -f ix.format |
+sed -f ix.polish > $1.ind
diff --git a/indexing/texindex/texindex.pdf b/indexing/texindex/texindex.pdf
new file mode 100644
index 0000000000..7b257e98a6
--- /dev/null
+++ b/indexing/texindex/texindex.pdf
Binary files differ
diff --git a/indexing/texindex/texindex.tex b/indexing/texindex/texindex.tex
new file mode 100644
index 0000000000..d7174754fc
--- /dev/null
+++ b/indexing/texindex/texindex.tex
@@ -0,0 +1,61 @@
+\documentstyle[12pt,german,refman]{article}
+\title{TEXINDEX}
+\begin{document}
+\maketitle
+\subsubsection*{NAME}
+{\tt texindex}
+\subsubsection*{SYNOPSIS}
+\verb+texindex file+
+\subsubsection*{DESCRIPTION}
+\verb+Texindex+
+dient zur Generierung eines sortierten Stichwortverzeichnisses unter \LaTeX.
+Aus einem *.idx - File, das von \LaTeX\ aus \verb+\index+-Eintr"agen
+erzeugt wird, macht texindex ein *.ind - File, das dann "uber
+\verb+\input+ oder \verb+\include+ im Quelltext eingebunden werden kann.
+Die Extension .idx soll {\em nicht\/} angegeben werden.
+
+Wenn in den \verb+\index+-Eintr"agen
+ein Space gefunden wird, so wird um ihn rotiert, so da"s jedes einzelne Wort
+im Eintrag gefunden werden kann. Mit einer Tilde (\verb+~+) anstatt eines Spaces
+wird die Rotation unterdr"uckt. Ein Beispiel: auf
+Seite 2 steht der Eintrag
+\verb+\index{grosse Gnus}+ . Es werden die Eintr"age
+\begin{verbatim}
+\item Gnus
+\subitem gro"se 2
+\item gro"se Gnus 2
+\end{verbatim}
+ins Stichwortverzeichnis
+gemacht.
+
+Wenn ein Wort in dem \verb+\index+-Eintrag in eckigen Klammern
+steht, dann wird es in \verb-\verb+- eingef"ugt.
+
+Eine weitere Unterteilung ist dadurch m"oglich, da"s man Kommas in den
+\verb+\index+-Eintrag einf"ugt. Aus \verb+\index{kleine, fiese M"ucken}+
+ergibt sich folgendes (komplettes) *.ind-File:
+\begin{verbatim}
+\begin{theindex}
+ \indexspace
+ \item fiese M"ucken
+ \subitem kleine 3
+ \indexspace
+ \item kleine
+ \subitem fiese M"ucken 3
+ \indexspace
+ \item M"ucken
+ \subitem kleine
+ \subsubitem fiese 3
+\end{theindex}
+\end{verbatim}
+
+\subsubsection*{BUGS}
+Syntaktisch inkorrekte *.idx - Files f"uhren zu merkw"urdigen Ergebnissen.
+
+Wenn in den \verb+\index+-Eintr"agen Tabulatorzeichen stehen, werden
+die Ergebnisse interessant, aber nicht sinnvoll.
+
+\subsubsection*{FILES}
+\verb+Texindex+ verwended die Files
+ix.collapse, ix.extract, ix.format, ix.genkey, ix.polish, ix.rotate.
+\end{document}