ubuntuusers.de

🚧 Am Sonntag, 5. Mai, werden ab 16 Uhr die Server aktualisiert und eine neue Inyoka-Version veröffentlicht. Das Portal wird mehrmals nicht verfügbar sein.

Skript für Forenspiel: "Satz aus ..."

Autor:
TausB
Datum:
20. Februar 2012 12:54
Code:
  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