1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232 | #!/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="<b>${zwtext}</b>\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
|