From b572f74da989fae48c1fead703f711d70657a0fd Mon Sep 17 00:00:00 2001 From: adam Date: Fri, 13 Nov 2009 21:01:06 +0000 Subject: Ordnung im Verzeichnis "ktouch" einbringen: - Verschiebe die neue Keyboard-Datei "de.neo2.all.keyboard.xml" in das Verzeichnis "keyboards". - Verschiebe die alten Keyboard-Dateien "*.keyboard" in das Unterverzeichnis "keyboards/kde3" (da veraltet). - Verschiebe alle Lektionen in das Verzeichnis "lectures". MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Konventionen zur Namensgebung bei den Lektionen einhalten: - Ändere die Dateinamen und Titel der Lektionen gemäß http://wiki.neo-layout.org/wiki/EigeneKTouchLektionenSchreiben#Konventionen um. - Den Titel der Neo2-Keyboarddatei anpassen von "Neo 2" auf "Deutsch (Neo2)". Sonstiges: - Auslagern der "README.txt" Datei in das Wiki und verlinke darauf. - Hinzufügen einer neuen Lektion "german.neo2.10000words.ktouch.xml". - Hinzufügen eines Tools zum generieren von KTouch-Lektionen "tools/sortWords". git-svn-id: https://svn.neo-layout.org@2122 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- ktouch/tools/sortWords/sortWords.sh | 234 ++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 ktouch/tools/sortWords/sortWords.sh (limited to 'ktouch/tools/sortWords/sortWords.sh') diff --git a/ktouch/tools/sortWords/sortWords.sh b/ktouch/tools/sortWords/sortWords.sh new file mode 100644 index 0000000..46b548d --- /dev/null +++ b/ktouch/tools/sortWords/sortWords.sh @@ -0,0 +1,234 @@ +#!/bin/bash +# Autor: Adam Taras +# Datum: 20.06.2009 + +#=== Hilfe === +printHelp(){ +echo "Usage: "$0" [OPTIONEN]" +echo "Liest aus der Datei \"$fileIn\" alle Wörter ein und gibt diese sortiert nach der in der Datei \"$fileKey\" festgelegten Reihenfolge weider aus." +echo "Sie werden einmal in eine Klartextdatei \"$fileOut\" und in eine KTouch-Lektion \"$fileKTouch\" geschrieben." +echo "Dabei ist egal, wie die Worte in \"$fileIn\" voneinander getrennt sind. (Windows-Zeilentrennzeichen, Linux-Zeilentrennzeichen, Leerzeichen, Tabulator, ...)" +echo +echo " -k berücksichtige nur komplett klein geschriebene Worte" +echo " -w wandle alle Worte in klein-schreibeise um. Setzt automatisch die Option '-k'" +echo " -e entfernt doppelt vorkommende Worte und sortiert dabei die Ergebnisliste nach dem Alphabet. Empfehlenswert in Verbindung mit der Option '-w', da hierbei zwei gleiche Worte auftreten können, die sich zuvor durch Groß/kleinschreibung unterschieden haben" +echo " -f: faltet die Ausgabedatei \"$fileOut\" nach der angegebenen Anzahl von Spalten. Standard=80" +echo " -z: maximale Anzahl an Zeilen pro Trainings-Lektion-Stufe. (WARNUNG: Ausführung dauert sehr lange!)" +echo +echo "Beispiel: ./sortWords.sh -w -e -z:4" +exit 0 +} + + +#=== Parameter === +# Datei mit den häufigsten Wörtern der deutschen Sprache. Es ist egal, wie die Wörter von einander getrennt sind. +fileIn=in.txt +# Falls eine benutzerspezifische Zeichenreihenfolge gewählt werden soll, muss sie sich in dieser Datei befinden. +fileKey=key.conf +# Die standard Ausgabedatei +fileOut=out.txt +# Die standard Ausgabedatei für eine KTouch-Lektion +fileKTouch=out.ktouch.xml +# Sollen nur klein geschriebene Worte berücksichtigt werden? +paramSet_k=false +# Sollen alle Worte in kleinschreibweise umgewandelt werden? +paramSet_w=false +# Sollen doppelte Einträge in der Quelldatei igonriert werden? Die Wörter müssen dazu jedoch alphabetisch sortiert werden +paramSet_e=false +# Sollen die Zeilen auf eine Maximale Größe pro Trainigs-Lektion-Stufe begrenzt werden? +paramSet_z=false +# Nach wie vielen Spalten sollen die Zeilen der Ausgabedatei umgebrochen werden? +paramF_Amount=80 +# Wie viele Zeilen sind pro Trainings-Lektion-Stufe maximal erlaubt? +paramZ_Amount=4 + +# Lese die Parameter aus der Kommandozeile aus +for param +do + case $param in + -k ) paramSet_k=true;; + -w ) paramSet_w=true; paramSet_k=true;; + -e ) paramSet_e=true;; + -f:[[:digit:]]* ) paramF_Amount=`echo $param | grep -E -o [[:digit:]]+`;; + -z:[[:digit:]]* ) paramSet_z=true; paramZ_Amount=`echo $param | grep -E -o [[:digit:]]+`;; + * ) printHelp;; + esac +done +# TODO: Lese den Letzten Parameter als fileIn raus und Prüfe, ob dieser existiert + + +#=== Initialisierung === +# Temporäre Datei +fileTmpFormatted=tmpFormatted.txt + +# Falls ein KeyFile existiert, wird es geladen +# Das key-Array enthält die Buchstaben, die in jeder neuen Lektion hinzu kommen +echo -n "Zeichenreihenfolge wird geladen: " +if [ -e $fileKey ] +then + echo -n "Aus Datei \"$fileKey\"..." + key=(`grep ^[^#] key.conf | head -n 1`) +else + echo -n "Standard..." + # Lade die Standard-Zeichenreihenfolge + key=(en ar ud it l g c h o s w k p m z b v f ä q j y ü ß ö x) +fi +# Falls der Parameter '-k' NICHT gewählt wurde, füge die großen Buchstaben direkt an die kleinen an. +if [ $paramSet_k = false ] +then + for smallKey in `echo ${key[*]}` + do + bigKey=`echo $smallKey | tr 'a-zäöü' 'A-ZÄÖÜ'` + list=$list' '$smallKey$bigKey + done + key=($list) +fi +echo "OK" + + +#=== Quelldatei einlesen === +echo -n "Quelldatei \"$fileIn\" wird eingelesen..." +if [ ! -e $fileIn ] +then + echo FEHLER: Die Quelldatei $fileIn existiert nicht! + exit 1 +fi +# assertion: Quelldatei existiert +wordsCount=`wc -w $fileIn | grep -E -o [[:digit:]]+` +echo "OK" +echo "Wörter gesamt = $wordsCount" + + +#=== Formatiere den Quelltext === + # Entferne alle NICHT-Buchstaben und alle NICHT-Whitespace + # Ersetze Whitespace durch ein einzelnes LineFeed-Zeichen + # Wandle alle Großbuchstaben in Kleinbuchstaben um (|tr 'A-ZÄÖÜ' 'a-zäöü' \) + # Filtere alle ein-buchstabigen Wörter raus + # Entferne die doppelten Wörter (leider wird hierbei auch sortiert) + # Schreibe in eine temporäre Datei +echo -n "Formatiere den Quelltext..." +cat $fileIn \ + | tr -d -c 'a-zA-ZäöüÄÖÜß\n\t ' \ + | tr -s [:space:] '\n' \ + | grep -E -x .\{2,\} \ + > $fileTmpFormatted + +# Wandle alle Worte in kleinschreibweise um +if [ $paramSet_w = true ] +then + tr 'A-ZÄÖÜ' 'a-zäöü' < $fileTmpFormatted > $fileTmpFormatted.small + rm $fileTmpFormatted + mv $fileTmpFormatted.small $fileTmpFormatted +fi + +# Entferne doppelte Wörter +if [ $paramSet_e = true ] +then + sort -u $fileTmpFormatted > $fileTmpFormatted.sorted + rm $fileTmpFormatted + mv $fileTmpFormatted.sorted $fileTmpFormatted +fi + +# Ausgabe +wordsCount=`wc -l $fileTmpFormatted | grep -E -o [[:digit:]]+` +echo "OK" +echo "Nach dem Filtern bleiben $wordsCount Wörter übrig." + + +#=== Hauptschleife === +pOld=. # Nur initialisierung +rm $fileOut +echo +echo Buchstaben \| Anzahl der neuen Wörter +echo ===================================== +for newKey in `echo ${key[*]}` +do + pNew=$pNew$newKey + #Schreibe in Datei + echo "===$newKey===" >> $fileOut + grep -E -x [$pNew]+ $fileTmpFormatted \ + | grep -E -x -v [$pOld]+ \ + | tr -s '\n' ' ' \ + | sed -e 's/ $//' \ + >> $fileOut + echo >> $fileOut + #Ausgabe auf die Konsole + echo $newKey \| `grep -E -x [$pNew]+ $fileTmpFormatted | grep -E -x -v -c [$pOld]+` + pOld=$pNew +done +echo + + +#=== Faltung === +echo -n "Falte die Datei \"$fileOut\" nach spätestens $paramF_Amount Spalten..." +fold -s -w $paramF_Amount < $fileOut \ + | sed -e 's/ $//' \ + > $fileOut.wrapped +rm $fileOut +mv $fileOut.wrapped $fileOut +echo "OK" + + +#=== Zeilen Begrenzung === +if [ $paramSet_z = true ] +then + echo -n "Trainings-Lektions-Stufen werden auf $paramZ_Amount Zeilen begrenzt" + rm -f $fileOut.splitted + zeilenNr=1 + count=0 + teileNaechsteZeile=false + zeilenGesamt=`wc -l $fileOut | grep -E -o [[:digit:]]+` + while [ $zeilenNr -le $zeilenGesamt ] + do + zeile=`sed -n ${zeilenNr}p $fileOut` + if [ `echo $zeile | grep -c ^===` -gt 0 ] + then + teileNaechsteZeile=false + kopfZeile=$zeile + count=0 + echo -n "." + else + if [ $teileNaechsteZeile = true ] + then + # insert new line at this position + echo $kopfZeile >> $fileOut.splitted + teileNaechsteZeile=false + fi + count=`expr $count + 1` + if [ $count -eq $paramZ_Amount ] + then + teileNaechsteZeile=true + count=0 + fi + fi + zeilenNr=`expr $zeilenNr + 1` + echo $zeile >> $fileOut.splitted + done + rm $fileOut + mv $fileOut.splitted $fileOut + echo "OK" +fi + + +#=== Erstelle KTouch-Lektion === +echo -n "Erstelle KTouch-Lektion \"$fileKTouch\"..." +echo -e "\n"\ + "Deutsch (Neo2 Sortierte Wörter)\n"\ + "`date -I` - Neo2 - Mit \"$0\" automatisch generierte Datei\n"\ + "Monospace\n"\ + "" > $fileKTouch +sed -e 's/^===/ \n /' \ + -e 's/===$/<\/NewCharacters>/' \ + -e '/^ /! s/$/<\/Line>/' -e '/^ /! s/^/ /' \ + -e '/^ / i\ <\/Level>' \ + $fileOut >> $fileKTouch +sed -e '6d' $fileKTouch > $fileKTouch.tmp #Entferne die erste zu viel eingefügte " " Zeile +rm $fileKTouch +mv $fileKTouch.tmp $fileKTouch +echo -e " \n \n" >> $fileKTouch +echo "OK" + + +#=== Clean & Exit === +rm $fileTmpFormatted +exit 0 \ No newline at end of file -- cgit v1.2.3