Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2010-08-19 03:16:58

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,469

[de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

Ich habe die aktuelle Datei, auf welcher Textile basiert, classTextile.php (Revision 3359, kann Definitionslisten erzeugen) um kleine Änderungen erweitert, wie sie in diesem Forumsbeitrag beschrieben sind und als Datei textile_html5.patch herunter geladen werden können.

Eine Änderung von <acronym> auf <abbr> ist in der Zeile 1065 der erwähnten classTextile.php-Datei einfach zu realisieren:

'<acronym title="$2">$1</acronym>', // 3+ uppercase acronym wird zu '<abbr title="$2">$1</abbr>', // 3+ uppercase abbreviation umgeschrieben.

In der nächsten Zeile 1066 wird definiert, dass drei oder mehr nebeneinander stehende Grossbuchstaben mit einer Klasse “caps” und zwischen “span” ausgegeben werden, z. B. so: <span class="caps">AGB</span>.

Eigentlich hätte ich diese Zeile gerne in '<abbr>$1</abbr>', // 3+ uppercase geändert, so dass z. B. AGB automatisch als <abbr>AGB</abbr> ausgegeben würde. Gebe ich aber im Feld für den Haupttext AGB(Allgemeine Geschäftsbedingungen) ein, dann wird wegen dieser Änderung verständlicherweise <abbr title="Allgemeine Geschäftsbedingungen"><abbr>AGB</abbr></abbr> ausgegeben.

Für meine Zwecke ist das standardmässige Gebilde <span class="caps">AGB</span> überflüssig. Ich hätte eigentlich gerne die Wahl zwischen per AGB bewusst definiertem <abbr title="Allgemeine Geschäftsbedingungen">AGB</abbr> oder automatisch ausgegebenen <abbr>AGB</abbr>.

Hat jemand eine Idee, wie das im Bereich der Zeilen 1045-1046 und 1065-1066 in der Datei classTextile.php (Revision 3359) realisiert werden könnte?

Offline

#2 2010-08-30 16:06:37

lythande
Member
Registered: 2009-09-08
Posts: 199
Website

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

Hallo GugUser,

auch ich habe den Wechsel von acronym zu abbr vollzogen ;-)
Also was die zweite Zeile von //3+uppercase angeht, vermute ich, dass du da was falsch verstanden haben könntest. Diese ist ursprünglich dazu gedacht, dass ein acronym auch per CSS mit Großschreibung definiert und in Großschreibung herausgegeben wird.

Hier nochmal zum Verständis der Funktionsweise des Originalen Codes:

Der Original-Code gibt nur dann ein Abbr/Acronym heraus (1. Zeile des Codes), wenn die Abkürzung nur aus Großbuchstaben besteht und dann auch nur, wenn die Zeichenkette aus mind. 3 Zeichen besteht (2. Zeile). Die 2. Zeile des Codes nutzt die Beschränkung “aus mind. 3 Zeichen” und setzt diese innerhalb eines Spans ein und weist ihr eine Class zu, um die Großschreibung in jedem Fall zu gewährleisten.

Ich selbst habe den html-Code der zweiten Zeile komplett weggelassen und nur ‘$1$2’ gelassen. Auswirkungen hat es nur darin, dass geprüft wird, ob es mind. 3 Zeichen sind.

Wenn du also neben der Langschreibung ABC auch die Kurzschreibung möchtest (wie schreibst du das in Textile?), müsstest du also eine komplett neue Zeile schreiben und zwar sowohl in glyph_replace als auch im zuvor zu findenden glyph_search.

Wenn ich noch dazu erwähnen darf:
Wenn man im Original-Code einen kleinen Buchstaben innerhalb der Abkürzung hat, versteht Textile nicht, dass es sich um ein abbr handelt und gibt den Text ganz normal heraus AbC(Abkürzung), als sei es kein abbr.
Das kann zu einem Problem werden, wenn man Abkürzungen hat, die Kleinbuchstaben enthalten. So habe ich meinen Code in der abbr-zeile in glyph_search so geändert, dass in Textile neben der Großschreibung auch Kleinschreibung akzeptiert wird und auch dann ein abbr herausgegeben wird. Das habe ich heute erst umgesetzt, der Wunsch war aber schon länger da.

Hier meine Erweiterung:

$glyph_search = array(
...
'/\b([A-Za-z][A-Za-z0-9]{2,})\b(?:[(]([^)]*)[)])/',            //  3+ uppercase acronym #geändert 30.08.2010, nun auch mit Kleinschreibung, original:'/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/', welches nur Großsschreibung erlaubt   //  3+ uppercase acronym

$glyph_replace = array(
'<abbr title="$2"><span class="abbr" title="$2">$1</span></abbr>',  //  3+ uppercase acronym  #geaendert von acronym zu abbr 26.10.09 <acronym title="$2">$1</acronym>
                        '$1$2',	 //  3+ uppercase #geaendert, original:'<span class="caps">$1</span>$2' --> html-code geloescht am 26.10.09

Zur Erklärung, warum ich innerhalb von abbr (1. Zeile) noch ein span mit abbr in Verwendung habe: der IE 6 versteht <abbr> nicht. Wie es sich mit IE7 und aufwärts verhält, habe ich leider nicht herausfinden können.

Offline

#3 2010-08-30 19:45:28

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,469

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

Hallo lythande

Danke für deine Antwort. Hatte ich doch schon gedacht, das Thema beschäftige sonst niemanden.

Zum Teil argumentieren wir aber nicht über dasselbe. Ich versuche einerseits auf deine Vorschläge zu antworten und anderseits neu zu erklären, um was es mir geht.

Der Original-Code gibt nur dann ein Abbr/Acronym heraus (1. Zeile des Codes), wenn die Abkürzung nur aus Großbuchstaben besteht und dann auch nur, wenn die Zeichenkette aus mind. 3 Zeichen besteht.

Dazu ergänze ich: Und nur, wenn die Abkürzung so eingegeben wird AGB(). Die Klammern bewirken ein title="". Wird innerhalb der Klammern keine Abkürzungserklärung gegeben, dann bleibt title="" leer. Das ist insofern ungünstig, wenn per CSS mit dem Selektor abbr[title] z. B. abbr[title] { border-bottom: 1px dotted #c3c1bd; cursor: help; } definiert wird, was nur gelten soll, wenn ein title vorhanden ist. Das ist aber sinnlos, wenn title leer ist.

Deine Erweiterung bewirkt nur, dass auch Abkürzungen aus kleinen Buchstaben dieses title zugefügt werden kann. Ohne die zusätzlichen Klammern wird auch so kein <abbr> ausgegeben. Das ist in jener Zeile nicht vorgesehen.

Das wäre nun die Aufgabe für die zweite Code-Zeile '<span class="caps">$1</span>$2',, welche ich ebenso wie du mit '$1', ersetzt habe.

Und dies ist, was ich anders definieren möchte. In der ursprünglichen Version (schon mit <abbr>) wird bei einer Kombination von AGB(Allgemeine Geschäftsbedingungen) <abbr title="Allgemeine Geschäftsbedingungen"><span class="caps">AGB</span></abbr> ausgegeben. Diese class="caps" ist aber überflüssig, da per CSS schon das Aussehen für <abbr> definiert werden kann. Beide Fälle einzeln vorzusehen ist ungünstig, z. B. dann, wenn ich per em die Schrift leicht verkleinern will.

Aus diesem Grund hätte ich gerne ein Entweder-Oder. Gebe ich beim Editieren des Textes AGB(Allgemeine Geschäftsbedingungen) ein, dann soll <abbr title="Allgemeine Geschäftsbedingungen">AGB</abbr> ausgegeben werden. Nach der ersten Definition ist es für die weiteren Male nicht mehr nötig, AGB zu definieren. Somit wäre es wünschenswert, wenn die Eingabe AGB statt automatisch als <span class="caps">AGB</span> als <abbr>AGB</abbr> ausgegeben würde, ohne title="", wie das passieren würde, wenn ich das von Hand mit AGB() eingeben müsste.

Das liesse sich realisieren, so wie in meinem ersten Beitrag erwähnt. Unschön wird es nach einer solchen Code-Änderung aber, wenn von Hand AGB(Allgemeine Geschäftsbedingungen) eingegeben wird und Textile dann noch ein weiteres <abbr> hinein setzt.

Ist das nun verständlicher?

Das der IE 6 kein <abbr> versteht, wird durch <span class="caps"> nicht besser. Ab IE 7 geht’s dann besser und auch CSS per Selektor abbr[title] funktioniert. Ich denke, gewisse Abstriche dürfen wir uns unterdessen beim IE 6 erlauben.

Offline

#4 2010-08-31 13:34:27

lythande
Member
Registered: 2009-09-08
Posts: 199
Website

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

GugUser schrieb:

Hallo lythande

Danke für deine Antwort. Hatte ich doch schon gedacht, das Thema beschäftige sonst niemanden.

Dazu ergänze ich: Und nur, wenn die Abkürzung so eingegeben wird AGB(). Die Klammern bewirken ein title="". Wird innerhalb der Klammern keine Abkürzungserklärung gegeben, dann bleibt title="" leer. Das ist insofern ungünstig, wenn per CSS mit dem Selektor abbr[title] z. B. abbr[title] { border-bottom: 1px dotted #c3c1bd; cursor: help; } definiert wird, was nur gelten soll, wenn ein title vorhanden ist. Das ist aber sinnlos, wenn title leer ist.

Deine Erweiterung bewirkt nur, dass auch Abkürzungen aus kleinen Buchstaben dieses title zugefügt werden kann. Ohne die zusätzlichen Klammern wird auch so kein <abbr> ausgegeben. Das ist in jener Zeile nicht vorgesehen.

Ebenfalls ist allerdings auch nicht vorgesehen, dass es Abkürzungen mit Kleinbuchstaben gibt, in diesem Fall wird im ursprünglichen Code auch kein <abbr> ausgegeben, selbst wenn die Abkürzung Klammern enthält, also AbC().

Das wäre nun die Aufgabe für die zweite Code-Zeile '<span class="caps">$1</span>$2',, welche ich ebenso wie du mit '$1', ersetzt habe.

nein, ich habe es im unterschied zu dir mit ‘$1$2’ ersetzt. Die zweite Zeile hängt mit der ersten zusammen und wird immer innerhalb der ersten Zeile eingefügt. Da müssten wir woanders schauen, wie man das zusammenfügen ausschalten kann.
Ich habe (weiter unten) etwas mit dem Code experimentiert und statt das Zusammenfügen auszuschalten, habe ich schlichtweg eine weitere Code-Zeile an erster Stelle eingefügt, die genau das macht, was du willst.

Ich habe schon verstanden, worum es dir geht. Du möchtest gern eine zusätzliche Zeile definieren, welche nur <abbr>ABC</abbr> ausgibt, ohne einen Title. Das erreichst du aber nicht, wenn du die zweite Zeile änderst, weil wie schon geschrieben der Code der zweiten Zeile immer innerhalb des Code der ersten Zeile eingefügt wird.

Aus diesem Grund hätte ich gerne ein Entweder-Oder. Gebe ich beim Editieren des Textes AGB(Allgemeine Geschäftsbedingungen) ein, dann soll <abbr title="Allgemeine Geschäftsbedingungen">AGB</abbr> ausgegeben werden. Nach der ersten Definition ist es für die weiteren Male nicht mehr nötig, AGB zu definieren. Somit wäre es wünschenswert, wenn die Eingabe AGB statt automatisch als <span class="caps">AGB</span> als <abbr>AGB</abbr> ausgegeben würde, ohne title="", wie das passieren würde, wenn ich das von Hand mit AGB() eingeben müsste.

aha, jetzt verstehe ich, warum du gerne ein <abbr>AGB</abbr> haben möchtest. Das macht Sinn!

Das der IE 6 kein <abbr> versteht, wird durch <span class="caps"> nicht besser.

Hier muss ich dich verbessern: In meinem Code gibt es keine zweite Zeile, welche ein <span class=“caps”> enthält. Der Code für den IE 6 ist innerhalb der ersten Zeile definiert und wird somit immer mit herausgegeben, enthält aber auch kein class="caps" sondern ein class="abbr". Schau dir den Code bitte genauer an ;-)

IE 6 versteht zwar kein <abbr>, wohl aber <span>, so erreiche ich über den zusätzlichen Code dennoch IE 6, definiere den <span class="abbr" title="title"> im CSS, so dass es auch IE 6 ausschaut wie im FF, mit leicht gepunkteter unterlinie und der Title wird im IE 6 in dem Fall auch angezeigt, weil der Title innerhalb des Span auch nochmal vorkommt. Somit umgehe ich hier das Problem von IE 6, <abbr> nicht zu verstehen und habe dennoch genau das, nämlich eine Erklärung und Ausschreibweise für die Abkürzung.

Ab IE 7 geht’s dann besser und auch CSS per Selektor abbr[title] funktioniert. Ich denke, gewisse Abstriche dürfen wir uns unterdessen beim IE 6 erlauben.

Klar, man kann ruhig IE 6 ignorieren, weitere CSS-Anpassungen mache ich da sowieso kaum noch. Die Span für IE 6 ist hier nur eine Ausnahme.

Für folgenden Code habe ich einen Hinweis von Bloke bekommen:
http://forum.textpattern.com/viewtopic.php?pid=233842#p233842
Wer also Zeit hat und die Änderung nicht sofort benötigt, sollte besser bis zum nächsten ofiziellen Update von classTextile.php warten, weil bei Erscheinen von Textpattern 4.3.0 in dieser Datei weitreichende Änderungen geben wird.

Ich habe nun etwas ausprobiert und es funktioniert genau so, wie du es haben möchtest:
(der folgende Code ist ohne den für dich lästigen <span>)

in $glyph_search = array( kommt folgende Zeile hinzu:

'/\b([A-Za-z][A-Za-z0-9]{2,})\b(?:[(]()[)])/',            //  3+ uppercase acronym #neu 31.08.2010, mit Kleinschreibung, für <abbr>ABC</abbr> ohne title
'/\b([A-Za-z][A-Za-z0-9]{2,})\b(?:[(]([^)]*)[)])/',            //  3+ uppercase acronym #geändert 30.08.2010, nun auch mit Kleinschreibung, fuer abbr mit title, original:'/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/', welches nur Großsschreibung erlaubt   //  3+ uppercase acronym
'/(?<=\s|^|[>(;-])([A-Z]{3,})([a-z]*)(?=\s|'.$pnc.'|<|$)/',  //  3+ uppercase

in $glyph_replace = array( kommt folgende Zeile:

'<abbr>$1</abbr>',  //  3+ uppercase #neu 31.8.2010, fuer abbr ohne title
'<abbr title="$2">$1</abbr>',  //  3+ uppercase acronym  #geaendert von acronym zu abbr 26.10.09 <acronym title="$2">$1</acronym> fuer abbr mit title
'$1$2',	 //  3+ uppercase #geaendert, <span class="caps">$1</span>$2 --> code geloescht am 26.10.09

Dein gewünschter <abbr>ABC</abbr>-Code muss in der ersten Zeile stehen, da array erst abfragt, ob im Textile innerhalb der () ein Text steht. Wenn kein Text, dann kommt die erste Codezeile zum Einsatz, ansonsten wird auf die zweite Zeile zugegriffen, wo auch der Title herausgegeben wird.
Für dich habe ich meinen Span in der zweiten Zeile herausgenommen.

Wen es die Unterstützung für IE6 interessiert, kann folgenden Code nutzen:

in $glyph_search = array( kommt folgende Zeile hinzu:

'/\b([A-Za-z][A-Za-z0-9]{2,})\b(?:[(]()[)])/',            //  3+ uppercase acronym #geändert 31.08.2010, nun auch mit Kleinschreibung, für <abbr>ABC</abbr> ohne title
'/\b([A-Za-z][A-Za-z0-9]{2,})\b(?:[(]([^)]*)[)])/',            //  3+ uppercase acronym #geändert 30.08.2010, nun auch mit Kleinschreibung, original:'/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/', welches nur Großsschreibung erlaubt   //  3+ uppercase acronym
'/(?<=\s|^|[>(;-])([A-Z]{3,})([a-z]*)(?=\s|'.$pnc.'|<|$)/',  //  3+ uppercase

in $glyph_replace = array( kommt folgende Zeile:

'<abbr><span class="abbr">$1</span></abbr>',  //  3+ uppercase #neu 31.8.2010
'<abbr title="$2"><span class="abbr" title="$2">$1</span></abbr>',  //  3+ uppercase acronym  #geaendert von acronym zu abbr 26.10.09 <acronym title="$2">$1</acronym>
'$1$2',	 //  3+ uppercase #geaendert, <span class="caps">$1</span>$2 --> code geloescht am 26.10.09

Last edited by lythande (2010-08-31 17:13:18)

Offline

#5 2010-08-31 13:42:33

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,469

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

Hallo lythande

Danke für deine ausführliche Antwort. Ich werde mich dem wahrscheinlich erst morgen widmen können.

Gruss GugUser

Offline

#6 2010-08-31 17:54:06

GugUser
Member
From: Quito (Ecuador)
Registered: 2007-12-16
Posts: 1,469

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

Und nun komme ich doch schon dazu:

Hallo lythade

Das mit den beiden zusätzlichen Code-Zeilen ist eine elegante Lösung, auf die ich nicht kam. So einfach und doch so fern … war sie.

Mir dient das vorläufig, und ob ich zusätzlich irgendwann doch noch eine automatisierte Lösung brauchen könnte, weiss ich gegenwärtig noch nicht.

Was die unterschiedlichen title=“caps” und title=“abbr” angeht, so muss ich hinzufügen, dass ich anfangs mit der von dir auf deiner Website zur Verfügung gestellten Datei classTextile.php arbeitete, dann aber dasselbe neu mit Revision 3359 machte – in der die Definitionslisten-Geschichte universeller gelöst ist – und mich vom anfangs erwähnten textile_html5.patch beeinflussen liess und selbst auch wieder Änderungen anbrachte.

Unterdessen habe ich mehrere Änderungen im aktuell verwendeten classTextile.php, was wohl bis zum nächsten Gesamt-Update dienen wird.

Offline

#7 2010-08-31 23:43:46

lythande
Member
Registered: 2009-09-08
Posts: 199
Website

Re: [de-de] Textile von <acronyme> zu <abbr> - was ist mit class="caps"?

GugUser schrieb:

Das mit den beiden zusätzlichen Code-Zeilen ist eine elegante Lösung, auf die ich nicht kam. So einfach und doch so fern … war sie.

Vielen Dank für das Kompliment. :-)

Was die unterschiedlichen title=“caps” und title=“abbr” angeht, so muss ich hinzufügen, dass ich anfangs mit der von dir auf deiner Website zur Verfügung gestellten Datei classTextile.php arbeitete, …

Vielen Dank und hier möchte ich hinzufügen, dass ich soeben das “Update mit der neuen dl-Geschichte hochgeladen habe” Neu: den neuen Artikel Das <abbr/> – Eine classTextile.php-Erweiterung hochgeladen mit der jetzigen <abbr>-Geschichte und neu: mit einer Kleinschreibungsmöglichkeit in ABC. (Hui, meine Lösung für eine Abkürzung ohne Inhalt in den Klammern funktioniert auch hier im Forum! :-) )
(Als das Update von Bloke im Textile-Forum, Definition lists in Textile gepostet wurde, kam ich wegen Urlaub nicht mehr dazu, meine Dateien zu aktualisieren.)

Edit: Inzwischen habe ich nun einen neuen Anleitungs-Artikel geschrieben, wie man sich die von mir angebotene Erweiterung für classTextile.php einbauen kann. Der obige Link hat sich also geändert und leitet nun auf den neuen Artikel. Die Ergänzungen funktionieren hoffentlich auch für die nächsten TXP-Versionen.

Last edited by lythande (2011-06-26 09:56:02)

Offline

Board footer

Powered by FluxBB