#!/bin/sh # Benoetigte Pakete: grep sed awk ispell # ################################################################ # Environment ################################################################ # # Unter diesem Verzeichnis ist die Woerterbuch-Datei zu finden SteakDIR=/usr/local/share/steak/Datensatz #SteakDIR=/usr/local/share/steak/Datensatz # Der Name der Woerterbuch-Datei SteakFILE=ger-eng.txt #SteakFILE=Datenbank.txt # Unter diesem Verzeichnis ist die ausfuehrbaren Dateien zu finden BINDIR=/usr/local/share/steak #BINDIR=/usr/local/share/steak # Temp-Dir TMPDIR=/tmp # Dieses Programm braucht unbeding gnu-grep GREP="grep" # SLEEPTIME=30 # Die Option, mit der man ispell bei den deutschsprachigen Texten aufruft: ISPELLDEUTSCH="-d deutsch -Tlatin1" # Die Uebersetzung folgt nach dem Regel: #CONFIGVAR="ENGLISCH<->DEUTSCH" CONFIGVAR="ENGLISCH->DEUTSCH" #CONFIGVAR="DEUTSCH->ENGLISCH" # NLSEP='-s ) ' #NLSEP='-s )\ ' #NLSEP='-s' ################################################################ # # Hier wird nach der persoenlichen Config-Datei gesucht! # if [ -r $HOME/.Steakconfig ] then . $HOME/.Steakconfig fi # # ################################################################ HELPFILE=$BINDIR/usr/local/share/steak/help.txt # Die Dateien heissen woerterbuch+pid TMPDATEI="$TMPDIR/woerterbuch_$$" # # IGNORVAR="J" POLLVAR="J" KONTEXTAUSGABEVAR="J" WAITVAR="J" ISPELLVAR="J" CLIPBOARDVAR="N" # 1 steht fuer AND, 2 fuer OR und 0 fuer gar keine Verbindung ANDORVAR="0" WORTANZAHLVAR="1" # # Mit Hilfe von "printbuffer" (bzw. "xcb") hat man Zugriff auf den Zwischenpuffer BUFFERPROGRAMM="$BINDIR/printbuffer" #BUFFERPROGRAMM="xcb -p 0" # Zeitbeschraenktes Lesen (poll) #READPROGRAMM="timed-read" READPROGRAMM="$BINDIR/poll" #READPROGRAMM="read" SPACEFILTER="$BINDIR/spacefilter" ################################################################ terminat_funktion () { rm -f $TMPDATEI $TMPDATEI~ exit 0 } # Routine fuer den Fall "ctrl-c" trap terminat_funktion 2 or_funktion () { WORTANZAHLVAR="$#" if [ $# != 1 ] then XXX="$1" shift for YYYSCHLEIFE do XXX="$XXX"'\>\|\<'"$YYYSCHLEIFE" done fi } and_funktion () { WORTANZAHLVAR="$#" if [ $# != 1 ] then if [ $# = 2 ] then XXX="$1"'\>.*\<'"$2"'\>\|\<'"$2"'\>.*\<'"$1" else XXX="$1"'\>.*\<'"$2"'\>.*\<'"$3"'\>\|\<'"$1"'\>.*\<'"$3"'\>.*\<'"$2"'\>\|\<'"$2"'\>.*\<'"$1"'\>.*\<'"$3"'\>\|\<'"$2"'\>.*\<'"$3"'\>.*\<'"$1"'\>\|\<'"$3"'\>.*\<'"$1"'\>.*\<'"$2"'\>\|\<'"$3"'\>.*\<'"$2"'\>.*\<'"$1" fi fi } ganze_wort_suchen_funktion () { if [ $IGNORVAR = "J" ] then # Zwischen Gross- und Kleinschreibung nicht unterscheiden case $CONFIGVAR in "ENGLISCH->DEUTSCH") $GREP -i "::.*::.*\(\<$XXX\>\)" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "DEUTSCH->ENGLISCH") $GREP -i "\(\<$XXX\>\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "ENGLISCH<->DEUTSCH") $GREP -i "\(\<$XXX\>\).*::.*::\|::.*::.*\(\<$XXX\>\)" $SteakDIR/$SteakFILE 1> $TMPDATEI esac else case $CONFIGVAR in "ENGLISCH->DEUTSCH") $GREP "::.*\(\<$XXX\>\)" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "DEUTSCH->ENGLISCH") $GREP "\(\<$XXX\>\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "ENGLISCH<->DEUTSCH") $GREP "\(\<$XXX\>\).*::.*::\|::.*::.*\(\<$XXX\>\)" $SteakDIR/$SteakFILE 1> $TMPDATEI esac fi } wort_praefix_suchen_funktion () { if [ $IGNORVAR = "J" ] then case $CONFIGVAR in "ENGLISCH->DEUTSCH") $GREP -i "::.*::.*\(\<$XXX\)" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "DEUTSCH->ENGLISCH") $GREP -i "\(\<$XXX\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "ENGLISCH<->DEUTSCH") $GREP -i "::.*::.*\(\<$XXX\)\|\(\<$XXX\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI esac else case $CONFIGVAR in "ENGLISCH->DEUTSCH") $GREP "::.*::.*\(\<$XXX\)" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "DEUTSCH->ENGLISCH") $GREP "\(\<$XXX\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI ;; "ENGLISCH<->DEUTSCH") $GREP "::.*::.*\(\<$XXX\)\|\(\<$XXX\).*::.*::" $SteakDIR/$SteakFILE 1> $TMPDATEI esac fi } ausgabe_funktion () { case $CONFIGVAR in "ENGLISCH->DEUTSCH") echo "--------------------------------------------------" echo " English -> Deutsch" awk -F"::" '{print $3 " :== " $2}' $TMPDATEI | nl -w 3 "$NLSEP" ;; "DEUTSCH->ENGLISCH") echo "--------------------------------------------------" echo " Deutsch -> English" awk -F"::" '{print $2 " :== " $3}' $TMPDATEI | nl -w 3 "$NLSEP" ;; "ENGLISCH<->DEUTSCH") echo "--------------------------------------------------" echo " Deutsch <-> English" awk -F"::" '{print $2 " :== " $3}' $TMPDATEI | nl -w 3 "$NLSEP" esac } mit_und_ohne_kontext_ausgabe_funktion () { echo "--------------------------------------------------" case $CONFIGVAR in "ENGLISCH->DEUTSCH") echo " English -> Deutsch" $GREP -i -e "::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$" $TMPDATEI | awk -F"::" '{print $3 " :== " $2}' | nl -w 3 "$NLSEP" ;; "DEUTSCH->ENGLISCH") echo " Deutsch -> English" $GREP -i -e "^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP" ;; "ENGLISCH<->DEUTSCH") echo " Deutsch <-> English" $GREP -i -e "\(^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::\)\|\(::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$\)" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP" esac if [ $POLLVAR = "J" ] then echo "Moechten Sie das Wort in einem Kontext sehen (j/n)?" # Im Kontext if [ $READPROGRAMM = "read" ] then read XXXREAD else XXXREAD=`$BINDIR/poll $SLEEPTIME` fi else if [ $KONTEXTAUSGABEVAR = "J" ] then echo echo "---------- Jetzt die Kontext-Eintraege ----------" XXXREAD="j" else XXXREAD="N" fi fi case $XXXREAD in [jJyY]) if [ $POLLVAR = "J" ] then clear fi case $CONFIGVAR in "ENGLISCH->DEUTSCH") echo " English -> Deutsch" $GREP -iv -e "::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$" $TMPDATEI | awk -F"::" '{print $3 " :== " $2}' | nl -w 3 "$NLSEP" XXXKONTEXT=`$GREP -iv -e "::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$" $TMPDATEI | awk -F"::" '{print $3 " :== " $2}' | nl -w 3 "$NLSEP"` if [ -z "$XXXKONTEXT" ]; then (echo ; echo " Keine Kontext-Eintraege gefunden!!!"); fi ;; "DEUTSCH->ENGLISCH") echo " Deutsch -> English" $GREP -iv -e "^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP" XXXKONTEXT=`$GREP -iv -e "^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP"` if [ -z "$XXXKONTEXT" ]; then (echo ; echo " Keine Kontext-Eintraege gefunden!!!"); fi ;; "ENGLISCH<->DEUTSCH") echo " Deutsch <-> English" $GREP -iv -e "\(^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::\)\|\(::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$\)" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP" XXXKONTEXT=`$GREP -iv -e "\(^\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\).*\)*\( \)*::.*::\)\|\(::.*::\( \)*\(.*\(,\|;\)\)*\( \)*\(\<$XXX\>\)\( \)*\({.*}\)\?\( \)*\(\[.*\]\)\?\( \)*\(\(,\|;\)\w*\)*$\)" $TMPDATEI | awk -F"::" '{print $2 " :== " $3}' | nl -w 3 "$NLSEP"` if [ -z "$XXXKONTEXT" ]; then (echo ; echo " Keine Kontext-Eintraege gefunden!!!"); fi esac ;; *) terminat_funktion esac } ######################################################################################### # Hier faengt das Programm an!!! ######################################################################################### if [ -r $BINDIR/version.txt ] then . $BINDIR/version.txt fi if [ "$BUFFERPROGRAMM" = "xcb -p 0" ] then xcb -S 0 fi # Hier wird geschaut, ob das Programm mit einem Argument aufgerufen wurde oder nicht... if [ $# -eq 0 ] # Falls das Programm ohne Arg. gerufen wird, wird das Wort, das im Buffer ist uebernommen! then XXX=`$BUFFERPROGRAMM | sed -f $BINDIR/iso2txt` XXXUMLAUT=`$BUFFERPROGRAMM` # Sonst wird nach dem Arg1 gesucht... else for XXXSCHLEIFE do case $XXXSCHLEIFE in -v) echo "steak, version $VERSIONNUMMER: the dictionary for Unix (razi@cs.uni-frankfurt.de)" terminat_funktion ;; -h) #clear echo echo "steak, version $VERSIONNUMMER: the dictionary for Unix (razi@cs.uni-frankfurt.de)" echo cat $HELPFILE terminat_funktion ;; -noignor) IGNORVAR="N" ;; -and) ANDORVAR="1" ISPELLVAR="N" ;; -or) ANDORVAR="2" ISPELLVAR="N" ;; -e) CONFIGVAR="ENGLISCH->DEUTSCH" ;; -d) CONFIGVAR="DEUTSCH->ENGLISCH" ;; -de|-ed) CONFIGVAR="ENGLISCH<->DEUTSCH" ;; -nowait) POLLVAR="N" WAITVAR="N" SLEEPTIME=0 ISPELLVAR="N" ;; -noispell) ISPELLVAR="N" ;; -k) POLLVAR="N" KONTEXTAUSGABEVAR="N" ;; +k) POLLVAR="N" KONTEXTAUSGABEVAR="J" ;; -clipboard) CLIPBOARDVAR="J" XXX=`$BUFFERPROGRAMM | sed -f $BINDIR/iso2txt` XXXUMLAUT=`$BUFFERPROGRAMM` ;; *) if [ $CLIPBOARDVAR = "N" ] then XXX=`echo "$XXXSCHLEIFE" | sed -f $BINDIR/iso2txt` XXXUMLAUT=`echo "$XXXSCHLEIFE"` fi esac done if [ -z "$XXX" ] then XXX=`$BUFFERPROGRAMM | sed -f $BINDIR/iso2txt` XXXUMLAUT=`$BUFFERPROGRAMM` fi fi # Falls das leere Wort als Eingabe -> beende das Programm if ( test -z "$XXX" || test "$XXX" = " " ) then echo echo "Bitte geben Sie beim Aufruf des Programms immer ein Wort ein!!!" echo if [ $WAITVAR = "J" ] then sleep 5 fi terminat_funktion fi # Anfangs- und End-Leer-Zeichen werden eliminiert! SPAXXX=`$SPACEFILTER "$XXX"` XXX="$SPAXXX" case $ANDORVAR in "1") and_funktion $XXX ;; "2") or_funktion $XXX esac if ganze_wort_suchen_funktion then mit_und_ohne_kontext_ausgabe_funktion else echo "Das Wort \"$XXX\" wurde nicht gefunden" if wort_praefix_suchen_funktion then echo "Die Woerter mit Praefix \"$XXX\" sind:" ausgabe_funktion else echo "Kein Wort wurde mit dem Praefix \"$XXX\" gefunden." if [ $ISPELLVAR = "J" ] then echo "Ispell wird gestartet!!!" sleep 2 case $CONFIGVAR in "ENGLISCH->DEUTSCH") echo "$XXX" > $TMPDATEI ispell $TMPDATEI XXX=`cat $TMPDATEI` #ACHTUNG was passiert falls cat mehrere Namen ausspuckt!!! ;; "DEUTSCH->ENGLISCH") echo "$XXXUMLAUT" > $TMPDATEI ispell $ISPELLDEUTSCH $TMPDATEI XXX=`cat $TMPDATEI | sed -f $BINDIR/iso2txt` XXXUMLAUT=`cat $TMPDATEI` ;; "ENGLISCH<->DEUTSCH") echo "$XXX" > $TMPDATEI ispell $TMPDATEI XXX=`cat $TMPDATEI` esac if ganze_wort_suchen_funktion then echo "Das Wort \"$XXX\" existiert im Woerterbuch..." mit_und_ohne_kontext_ausgabe_funktion else echo "Das Wort \"$XXX\" wurde auch nicht gefunden!" if wort_praefix_suchen_funktion then echo "Aber die Woerter mit Praefix \"$XXX\" sind:" ausgabe_funktion else echo fi fi fi fi fi sleep $SLEEPTIME terminat_funktion