#!/bin/bash # Version="00.02.00 - 201202019" # Hinweis: Tabulatoren sind auf Einrückung "4 Zeichen" optimiert. # # kleines Tool für ein Forenspiel auf Ubuntuusers # http://forum.ubuntuusers.de/post/3813547/ # Das Tool erzeugt aus einem gegebenen Satz einen spez. Syntax: # Alle ersten Buchstaben (format_b) und das letzte Substantiv (format_s) # des Satzes werden speziell formatiert. # Das Ergebnis kann dann einfach mit "copy und paste" übernommen werden. # Bitte überprüfe das Resultat im Forum vor der Veröffentlichung # mit der "Vorschau"-Funktion. # Optional: xsel (universe) - ermöglicht das Kopieren in die Zwischablage # Optional: zenity (siehe: http://wiki.ubuntuusers.de/Zenity) # Hinweis: zenity (3.2; alt: 2.3x) unterstützt erst ab 11.10 Formulare, # daher wird die verwendete Ubuntuversion zusätzlich abgefragt. function usuage { cat <<-EOF Dieses Programm formatiert den Eingabetext für das Forenspiel "Satz aus Buchstaben des letzten Substantives" auf UbuntuUsers - siehe: http://forum.ubuntuusers.de/post/3813547/ ${0#./} ["Satz"] ["Kommentar"] Aufruf bei installiertem Zenity ohne Parameter möglich. -h --help Hilfetext wird angezeigt. -v Skript-Version wird angezeigt. EOF exit 0 } case $1 in -v) sed -n '2,2p' "$0" && exit 0 ;; # Version ausgeben -h|--help) usuage ;; # Hilfetext ausgeben "") dpkg-query --show zenity > /dev/null # zenity installiert? zenity_installiert=$? # ja(0) oder nein(1) if [ $zenity_installiert = 1 ]; then echo " Zenity ist nicht installiert." echo " Aufruf ohne Satzparameter nicht möglich!" usuage fi ;; *) Satz="$1" # Satz belegen Kommentar="$2" ;; # Kommentar belegen esac # Allg. Formatdefinitionen fett=("'''" "'''") # fett rot=("[color=red]" "[/color]") # rot fettrot=("'''[color=red]" "[/color]'''") # fett und rot unterstrichen=("__'''" "'''__") # unterstrichen fettblau=("'''[color=mediumblue]" "[/color]'''") # fett und blau grossfett=("~+('''" "''')+~") # gross und fett klein=("~-(" ")-~") # klein (für Kommentar) # Konkrete Formate definieren format_b=("${fettrot[@]}") # Formatierung Buchstabe format_s=("${fett[@]}") # Formatierung Substantiv format_v=("${fettblau[@]}") # Formatierung Vorgabe ("Lösungswort") format_k=("${klein[@]}") # Formatierung Kommentar # Falls xsel vorhanden, wird das Ergebnisses automatisch in die Zwischenablage kopiert. # Hier wird der passende Ausgabehinweis dazu definiert zwtext=("Das Ergebnis wird in die Zwischenablage kopiert - später mit \"Strg+v\" einfügen." "Kopiere den nachfolgenden Text und füge ihn mit \"Strg+v\" ein:") dpkg-query --show xsel > /dev/null # xsel installiert? xsel_installiert=$? # ja(0) oder nein(1) zwtext=${zwtext[$xsel_installiert]} # Je nach Rückgabewert (0 oder 1) wird Text aus Vektor genommen # DistriVersion prüfen; unterstützt zenity Formulare? Belegen der Variablen zen_forms - ja(0) oder nein(1) distri_ver=$(lsb_release -rs) if [ ${distri_ver/./} -ge 1110 ]; then zen_forms=0 else zen_forms=1 fi # Satz erfassen und in Worte zerlegen # Falls Satzparameter leer, wird Zenity aufgerufen. if [ $zen_forms = 0 ]; then # Falls Formulare unterstützt werden Satz=${Satz-$(zenity --forms --add-entry="Satz:" --add-entry="Kommentar:" --text="Gib den Satz (und optional einen Kommentar) für das Forenspiel ein:" --ok-label="${zwtext-"Fertig!"}" --title="Forenspiel \"Satz aus Substantiv\"" --width=750)} [ $? = 1 ] && fehler[0]="Abbruch!" # Abbruch Button wurde gewählt IFS="|" && Satz=(${Satz[@]}) && unset IFS # Formularausgabe [ "${Satz[0]}" = "" ] && fehler[1]="Eingabe (Satz) fehlt!" # OK Button, aber leere Eingabe Worte=(${Satz[0]}) # Satz in Worte (Vektor) zerlegen Kommentar="${Kommentar-${Satz[1]}}" elif [ $zen_forms = 1 ]; then # Falls keine Formulare unterstützt werden Satz=${Satz-$(zenity --entry --text="Gib den Satz für das Forenspiel ein:" --ok-label="${zwtext-"Fertig!"}" --title="Forenspiel \"Satz aus Substantiv\"" --width=750)} if [ $? = 1 ]; then fehler[0]="Abbruch!" # Abbruch Button wurde gewählt elif [ "${Satz}" = "" ]; then fehler[1]="Eingabe (Satz) fehlt!" else Kommentar=${Kommentar-$(zenity --entry --text="Optional: Gib einen Kommentar für das Forenspiel ein:" --cancel-label="kein Kommentar verwenden" --ok-label="Satz und Kommentar verwenden - später mit \"Strg+v\" einfügen." --title="Forenspiel \"Satz aus Substantiv\"" --width=750)} fi Worte=(${Satz}) # Satz in Worte (Vektor) zerlegen fi # Kommentar formatieren (falls nicht leer) cr="\\\\" [ ! "${Kommentar}" = "" ] && Kommentar="$cr ${format_k[0]}(${Kommentar})${format_k[1]}" # Formatierung anwenden - Formatsyntax erzeugen for (( i = ${#Worte[@]} - 1; i >= 0; i=$i - 1 )); do pre_alpha="${Worte[$i]%%[[:alpha:]]*}" # Prefix post_alpha="${Worte[$i]##*[[:alpha:]]}" # Postfix if [ ! "${Worte[$i]//[![:alpha:]]/}" = "" ]; then # Alpha-Zeichen vorhanden? sub_wort="${Worte[$i]:${#pre_alpha}:${#Worte[$i]}-${#pre_alpha}-${#post_alpha}}" buchstabe="${sub_wort:0:1}" Vorgabe+=($buchstabe) # "Vorgabe" (:="Lösungswort") if [ ! "$Substantiv" = "true" ] && [ "${buchstabe/[[:upper:]]/}" = "" ]; then # Bereits ein Substantiv gefunden? buchstabe="${rot[0]}${buchstabe}${rot[1]}" # 1. Buchstabe des Substantives formatieren; hier: nur rot sub_wort="${format_s[0]}${buchstabe}${sub_wort:1}${format_s[1]}" # Wort formatieren sub_wort="${sub_wort//ß/ss}" # Im Substantiv "ß" gegen "ss" tauschen Substantiv="true" else buchstabe="${format_b[0]}${buchstabe}${format_b[1]}" # 1. Buchstabe sonstiger Worte formatieren sub_wort="${buchstabe}${sub_wort:1}" fi Worte[$i]="$pre_alpha${sub_wort}$post_alpha" # formatiertes Wort mit Pre- und Postfix fi done # Einfache Fehlerauswertung #### [ ! "$Substantiv" = "true" ] && fehler[2]="Kein Substantiv vorhanden!" && fehler="${fehler[3-${#fehler[@]}]}" [ ! "${fehler}" = "" ] && (( [ "$1" = "" ] && zenity --error --text="${fehler}" --title="Fehlermeldung" ) || echo " Fehler: ${fehler}" ) && exit 1 # Aus Anfangsbuchstaben Wort bilden (zur Kontrolle) und in "Vorgabe" verarbeiten for (( i = ${#Vorgabe[@]} - 1; i >= 0; i=$i - 1 )); do v="$v${Vorgabe[$i]}" done Vorgabe="$(echo "${v}" |sed -r 's/(.*)/\L\1/')" && Vorgabe="${format_v[0]}${Vorgabe^}${format_v[1]} :arrow: " # Ergebnisprefix echo $Vorgabe # Ausgabe # Falls xsel installiert ist if [ "$xsel_installiert" = "0" ]; then echo "$Vorgabe${Worte[*]}${Kommentar}" | xsel -ib # Kopie in die Zwischenablage echo "$zwtext" exit 0 fi # Falls xsel und Zenity nicht installiert ist echo -e " ${zwtext}\n" echo "$Vorgabe${Worte[*]}${Kommentar}" # Falls xsel nicht installiert ist, aber Zenity ##### Noch ein Bug drin, ein "\" bei leerem Kommentar zu viel. [ "$1" = "" ] && zenity --info --text="${zwtext}\n\n\n$Vorgabe${Worte[*]}\\\\${Kommentar}" --title="Syntax für Forenspiel \"Satz aus Substantiv\"" exit 0 ### ### ### ### T O D O ### ### ### ### #02 geschlossene Klammer beim letzten Substantiv aus Formatierung entfernen #03 doppelten "fett" Syntax beim Substantiv für den 1. Buchstaben vermeiden #04 "ß" im letzten Substantiv durch "ss" ersetzen. #05 große deutsche Sonderzeichen in Kleinschrift konvertieren #06 Kommentarfunktion #07 unterschiedliche Sonderzeichen berücksichtigen #08 mehrer Sonderzeichen beachten #09 leeren Kommentar abfangen #10 Differenzierung zenity-Aufruf, je nach Ubuntuversion 11 Falls xsel nicht installiert ist, aber Zenity: Noch ein Bug drin, ein \ bei leerem Kommentar zu viel. 12 Fehlerauswertung ("Einfache Fehlerauswertung") überprüfen ### ### ### ### H I S T O R I E ### ### ### ### # Version="00.02.00 - 201202019" +#07 unterschiedliche Sonderzeichen berücksichtigen +#08 mehrer Sonderzeichen beachten + ToDo 11 + ToDo 12 # Version="00.01.04 - 201202017" + DistributionsVersionsPrüfung (wegen Zenity-Unterstützung Formulare) + Verwendung alter Zenity Texteingabe für Kommentare ermöglichen ~ kleine Anpassungen # Version="00.01.03 - 201202017" + Hilfetext (Option -h) + Fehlerroutinen überarbeitet ~ Code des Zwischenablagehinweistextes geändert ~ Kommentare überarbeitet # Version="00.01.02 - 20120208" +#09 leeren Kommentar abfangen ~ Variablennamen für Sonderzeichen geändert (klammer --> sonderz) ~ Kommentartext angepaßt # Version="00.01.01 - 20120124" + klein=("~-(" ")-~") # klein (für Kommentar) +#06 Kommentarfunktion # Version="00.00.10 - 20120123" + ToDo 05 + ToDo 06 +#05 große deutsche Sonderzeichen in Kleinschrift konvertieren. # Version="00.00.09 - 20120120" ~ Rechtschreibung korrigiert # Version="00.00.08 - 20120119" + ToDo 04 +#04 "ß" im letzten Substantiv durch "ss" ersetzen. # Version="00.00.07 - 20120117" + Option "-v" (Versionsausgabe) hinzugefügt # Version="00.00.06 - 20120116" ~ Formatierungskorrektur # Version="00.00.05 - 20120113" + allg. Formatierung: rot=("[color=red]" "[/color]") # rot + #03 doppelten "fett" Syntax beim Substantiv für den 1. Buchstaben vermeiden # Version="00.00.04 - 20120113" + ToDo 03 + grossfett=("~+('''" "''')+~") # gross und fett ~ Formatierung "fett" für Substantive aktiviert # Version="00.00.03 - 20120112" kleine kosmetische Änderungen Spezialfall #01 öffnende Klammer als Ausnahme beim ersten Buchstaben berücksichtigen # Version="00.00.03 - 20120112" Historie hinzugefügt ToDo hinzugefügt Patch: Erster Buchstabe im letzten Substantiv: Invertierung "fett" durch zusätliche "'''" # Version="00.00.02 - 20120110" 1. veröffentlichte Version