Für die kompaktere Darstellung von Text-Widgets habe ich einen Konverter erstellt.
Dieser ist noch im Beta-Stadium, über Rückmeldungen zu Fehlern wäre ich dankbar.
BetterText.py muss abgelegt werden unter /usr/lib/enigma2/python/Components/Converter.
Danach lässt sich der Konverter in Widgets einbinden, die ihren Text per source beziehen und direkt rendern (eLabel, VRunningtext).
Dazu zählen v.a. EPG-Ausgaben (Description) und Title-Widgets (z.B in Channelselection).
Hier die Konverterdatei: bettertext.zip
Folgende (optionale) Funktionen sind enthalten:
1. Textpassagen ersetzen/löschen
2. Texte abschneiden (bis/ab Suchposition, Positionsversatz +/-)
3. Konvertierung Groß-/Kleinschrift
4. Bedingungen (Bereich von/bis, x-te Position, x-Ersetzungen, Abfragetypen, Bedingungstext [vorhanden/nicht vorhanden])
5. Unterstützung von ConditionalShowHide
6. Entfernen von Leerzeilen (EPG)
7. Entfernen von Umbrüchen (EPG)
8. Entfernen führender <x>...</x> Bereiche (EPG)
Wird der Converter ohne Parameter eingebunden, werden die Optionen 6 und 8 voreingestellt.
Das Ersetzen von Texten kann entweder direkt per Skin-Parameter geregelt werden oder über Definitionen in der Datei /etc/enigma2/bettertext.cfg, die automatisch erzeugt wird und eine Syntaxbeschreibung enthält.
Textersetzungen werden nacheinander abgearbeitet (und sind somit kombinierbar)
Parameter (Bezeichner, altern. Kürzel ---> Funktion):
NoCfg ---> Konfigurationsdatei nicht einlesen
NoXTag, X ---> <x>...</x>-Abschnitt entfernen
NoEmptyLine, E ---> Leerzeilen entfernen
NoNewLine, N ---> Zeilenumbrüche entfernen
Indent=, I= ---> Einzugstext nach Umbrüchen (z.B. Leerzeichen)
Indent2=, I2= ---> Einzugstext nach Leerzeilen (z.B. Leerzeichen)
Type=, T= ---> Typenfestlegung zur bedingten Ersetzung
Replace=, R= ---> Textersetzung
Syntax für Replace:
Replace=[Searchstring];[Replacestring];[Options];[Conditions]
Options: to*[%] | from*[%] | delFrom[dif] | delTo[dif] | Upper | Lower | IgnoreCase | SearchFirst* | ReplaceCount*
(defaults: ignorecase=empty[==False], searchfirst=1, replacecount=9999)
Conditions: hasText=*| hasNotText=* | type=* | notType=* | longerThan=* | shorterThan=*
Bei der Erkennung von Parametern und Optionen wird nicht zwischen Groß- und Kleinschreibung unterschieden ("nonewline == NONEWLINE")
Wenn mehrere Optionen definiert werden, müssen diese durch Leerzeichen getrennt sein (z.B. to80% replaceCount1 IgnoreCase)
Wenn mehrere Conditions definiert werden, müssen sie durch "_|_" getrennt weden (z.B. has=.mp4_|_hasnot=Serien)
Wennn in der Datei bettertext.cfg eine Typenfestlegung erfolgt, z.B.
SchleFaZ;Schlechteste Filme aller Zeiten;;type=D
startet die Textersetzung nur dann, wenn dieser Typ auch im Skinaufruf besteht, z.B.
<convert type="BetterText">X,E,Type=D</convert>
So kann geregelt werden, dass Ersetzungen auf eine Widgetart begrenzt sind (z.B. Title, Description, Extendeddescription)
Beispiele:
Einbindung in Channelselection:
<widget position="x,y" render="Label" size="w,h" source="Title">
<convert type="BetterText">Replace=Kanalliste (TV) User - bouquets/;Senderliste: ;;
</convert> </widget>
-> Hierdurch wird aus Kanalliste (TV) User - bouquets/Dritte der Text Senderliste: Dritte
Alternative (Text kürzen bis zum Zeichen "/"):
<widget position="x,y" render="Label" size="w,h" source="Title">
<convert type="BetterText">Replace=/;;delTo</convert> </widget>
-> Hierdurch wird aus Kanalliste (TV) User - bouquets/Dritte der Text Dritte
Beispiel der EMC-Descripion für mp4-Dateien:
<convert type="BetterText">Replace=/media/hdd/movie;Home;;</convert>
-> Aus /media/hdd/movie/meinfilm.mp4 wird Home/meinfilm.mp4
Beispiel der EMC-Descripion für mp4-Dateien:
<convert type="BetterText">Replace=/;/\n;;has=.mp4</convert>
-> Hierdurch werden (nur) für mp4-Dateien die Pfade zeilenweise dargestellt
Der Converter ConditionalShowHide kann kombiniert werden, um Icons textabhängig einzublenden.
Der Zustand "show" wird auf die gesetzten Bedingungen angewandt (z.B. hasText= oder hasNotText=).
Werden diese nicht definiert, gilt die Bedingung, dass die Widgetdefinitionen zu Textänderungen führen.
Im Skinparameter kann für den Aufruf von ConditionalShowHide der Text "Replace=*;;;" ersetzt werden durch "Condition:"
Beispiel, um für die Favoritenliste "Dritte" ein Icon einzublenden:
<widget source="Title" alphatest="blend" pixmap="skin_default/icons/input_info.png" scale="1" position="50,30" render="Pixmap" size="20,20">
<convert type="BetterText">Condition:has=Dritte</convert>
<convert type="ConditionalShowHide"></convert>
</widget>
Grüße aus Oberhessen von Selbigem
Dieser ist noch im Beta-Stadium, über Rückmeldungen zu Fehlern wäre ich dankbar.
BetterText.py muss abgelegt werden unter /usr/lib/enigma2/python/Components/Converter.
Danach lässt sich der Konverter in Widgets einbinden, die ihren Text per source beziehen und direkt rendern (eLabel, VRunningtext).
Dazu zählen v.a. EPG-Ausgaben (Description) und Title-Widgets (z.B in Channelselection).
Hier die Konverterdatei: bettertext.zip
Folgende (optionale) Funktionen sind enthalten:
1. Textpassagen ersetzen/löschen
2. Texte abschneiden (bis/ab Suchposition, Positionsversatz +/-)
3. Konvertierung Groß-/Kleinschrift
4. Bedingungen (Bereich von/bis, x-te Position, x-Ersetzungen, Abfragetypen, Bedingungstext [vorhanden/nicht vorhanden])
5. Unterstützung von ConditionalShowHide
6. Entfernen von Leerzeilen (EPG)
7. Entfernen von Umbrüchen (EPG)
8. Entfernen führender <x>...</x> Bereiche (EPG)
Wird der Converter ohne Parameter eingebunden, werden die Optionen 6 und 8 voreingestellt.
Das Ersetzen von Texten kann entweder direkt per Skin-Parameter geregelt werden oder über Definitionen in der Datei /etc/enigma2/bettertext.cfg, die automatisch erzeugt wird und eine Syntaxbeschreibung enthält.
Textersetzungen werden nacheinander abgearbeitet (und sind somit kombinierbar)
Parameter (Bezeichner, altern. Kürzel ---> Funktion):
NoCfg ---> Konfigurationsdatei nicht einlesen
NoXTag, X ---> <x>...</x>-Abschnitt entfernen
NoEmptyLine, E ---> Leerzeilen entfernen
NoNewLine, N ---> Zeilenumbrüche entfernen
Indent=, I= ---> Einzugstext nach Umbrüchen (z.B. Leerzeichen)
Indent2=, I2= ---> Einzugstext nach Leerzeilen (z.B. Leerzeichen)
Type=, T= ---> Typenfestlegung zur bedingten Ersetzung
Replace=, R= ---> Textersetzung
Syntax für Replace:
Replace=[Searchstring];[Replacestring];[Options];[Conditions]
Options: to*[%] | from*[%] | delFrom[dif] | delTo[dif] | Upper | Lower | IgnoreCase | SearchFirst* | ReplaceCount*
(defaults: ignorecase=empty[==False], searchfirst=1, replacecount=9999)
Conditions: hasText=*| hasNotText=* | type=* | notType=* | longerThan=* | shorterThan=*
Bei der Erkennung von Parametern und Optionen wird nicht zwischen Groß- und Kleinschreibung unterschieden ("nonewline == NONEWLINE")
Wenn mehrere Optionen definiert werden, müssen diese durch Leerzeichen getrennt sein (z.B. to80% replaceCount1 IgnoreCase)
Wenn mehrere Conditions definiert werden, müssen sie durch "_|_" getrennt weden (z.B. has=.mp4_|_hasnot=Serien)
Wennn in der Datei bettertext.cfg eine Typenfestlegung erfolgt, z.B.
SchleFaZ;Schlechteste Filme aller Zeiten;;type=D
startet die Textersetzung nur dann, wenn dieser Typ auch im Skinaufruf besteht, z.B.
<convert type="BetterText">X,E,Type=D</convert>
So kann geregelt werden, dass Ersetzungen auf eine Widgetart begrenzt sind (z.B. Title, Description, Extendeddescription)
Beispiele:
Einbindung in Channelselection:
<widget position="x,y" render="Label" size="w,h" source="Title">
<convert type="BetterText">Replace=Kanalliste (TV) User - bouquets/;Senderliste: ;;
</convert> </widget>
-> Hierdurch wird aus Kanalliste (TV) User - bouquets/Dritte der Text Senderliste: Dritte
Alternative (Text kürzen bis zum Zeichen "/"):
<widget position="x,y" render="Label" size="w,h" source="Title">
<convert type="BetterText">Replace=/;;delTo</convert> </widget>
-> Hierdurch wird aus Kanalliste (TV) User - bouquets/Dritte der Text Dritte
Beispiel der EMC-Descripion für mp4-Dateien:
<convert type="BetterText">Replace=/media/hdd/movie;Home;;</convert>
-> Aus /media/hdd/movie/meinfilm.mp4 wird Home/meinfilm.mp4
Beispiel der EMC-Descripion für mp4-Dateien:
<convert type="BetterText">Replace=/;/\n;;has=.mp4</convert>
-> Hierdurch werden (nur) für mp4-Dateien die Pfade zeilenweise dargestellt
Der Converter ConditionalShowHide kann kombiniert werden, um Icons textabhängig einzublenden.
Der Zustand "show" wird auf die gesetzten Bedingungen angewandt (z.B. hasText= oder hasNotText=).
Werden diese nicht definiert, gilt die Bedingung, dass die Widgetdefinitionen zu Textänderungen führen.
Im Skinparameter kann für den Aufruf von ConditionalShowHide der Text "Replace=*;;;" ersetzt werden durch "Condition:"
Beispiel, um für die Favoritenliste "Dritte" ein Icon einzublenden:
<widget source="Title" alphatest="blend" pixmap="skin_default/icons/input_info.png" scale="1" position="50,30" render="Pixmap" size="20,20">
<convert type="BetterText">Condition:has=Dritte</convert>
<convert type="ConditionalShowHide"></convert>
</widget>
Grüße aus Oberhessen von Selbigem