Wort Ersetzer plugin

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
serels
Regular
Posts: 134
Joined: Wed Jan 07, 2009 11:13 am

Wort Ersetzer plugin

Post by serels »

Hi

Ich habe 2 Wortersetzer - Plugins eingerichtet, das erste nimmt eine Umformung eines acronyms in einen url vor und das zweite schreibt das acronym aus.

Jetzt ist mir ein Verhalten dieses Plugins aufgefallen, nämlich, wenn ich das acro als ERSTES oder als LETZTES "Wort" schreibe, wird es nicht umgewandelt also als krasses Beispiel sieht die Umwandlung l1l = LustaufLeben so aus:

Eingabe:
l1l
l1l
l1l
l1l
l1l
l1l
l1l
l1l
l1l

Ausgabe:
l1l
LustaufLeben
LustaufLeben
LustaufLeben
LustaufLeben
LustaufLeben
LustaufLeben
LustaufLeben
l1l

Bug oder Feature ?

lg serels
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Wort Ersetzer plugin

Post by garvinhicking »

Hi!

Das ist ein Feature; zur Wort-Isolation wird vorausgesetzt, dass davor oder danach schon Inhalt steht, da der reguläre Ausdruck etwas davor erwartet... Ansonsten würde nämlich z.b. bei der Umformung von "in" nicht nur " in " ersetzt sondern auch "Garvin"...

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
serels
Regular
Posts: 134
Joined: Wed Jan 07, 2009 11:13 am

Re: Wort Ersetzer plugin

Post by serels »

garvinhicking wrote:Hi!

Das ist ein Feature; zur Wort-Isolation wird vorausgesetzt, dass davor oder danach schon Inhalt steht, da der reguläre Ausdruck etwas davor erwartet... Ansonsten würde nämlich z.b. bei der Umformung von "in" nicht nur " in " ersetzt sondern auch "Garvin"...

Viele Grüße,
Garvin
Sorry, aber das verstehe ich nicht, dazu gibt es doch den "replacement - character".
Außerdem erklärt das nicht, warum das letzte Wort auch nicht umgewandelt wird - siehe mein Beispiel.

Wenn ich jetzt also ein acronym habe und einen Satz mit diesem beginnen will, muß ich jedesmal daran denken, dass das am Anfang und am Ende eines Eintrages nicht funktioniert ?
Und ein "Feature" das nur den Spezialfall "erste Zeichen eines Eintrages oder letzte Zeichen eines Eintrages" betrifft erscheint mir doch recht seltsam, oder ?

Denn ... vor dem letzten l1l in meinem Beitrag steht ja jede Menge Text ...

lg serels
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Wort Ersetzer plugin

Post by garvinhicking »

Hi!

Doch, denn wie gesagt der Reguläre Ausdruck erwartet mindestens ein Zeichen VOR oder NACH dem Wort. Beides trifft auf das erste und letzte Wort nicht zu.

Der eingesetzte Reguläre Ausdruck findest sich in der serendipity_event_contentrewrite.php Date in Zeile 277:

Code: Select all

$regex = '°([^\d\w])(' . preg_quote($v_from) . ')([^\d\w])°msU';
Wenn da jemand eine funktionierende Möglichkeit findet den RegExp umzuschreiben sodass er nach wie vor Wörter erfasst ohne ein Zwischenwort zu transferieren, dann nehme ich den Patch gerne auf.

Das Rewrite-Zeichen ist ja kein Pflichtzeichen, soweit ich mich erinnere.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
kleinerChemiker
Regular
Posts: 765
Joined: Tue Oct 17, 2006 2:36 pm
Location: Vienna/Austria
Contact:

Re: Wort Ersetzer plugin

Post by kleinerChemiker »

vermutlich kann man das einfacher auch "sagen", aber wie wärs damit?

Code: Select all

$regex = '°([^\d\w])(' . preg_quote($v_from) . ')([^\d\w])|^(' . preg_quote($v_from) . ')([^\d\w])|([^\d\w])(' . preg_quote($v_from) . ')$°msU';
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Wort Ersetzer plugin

Post by garvinhicking »

Hi!

Hm, sind diese drei "oder"-Strings nicht relativ teuer, weil jeder reguläre Ausdruck quasi dreimal gegen jedes Wort geprüft wird?

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
kleinerChemiker
Regular
Posts: 765
Joined: Tue Oct 17, 2006 2:36 pm
Location: Vienna/Austria
Contact:

Re: Wort Ersetzer plugin

Post by kleinerChemiker »

inwiefern das mehrarbeit bedeutet kann ich schlecht beurteilen. bin auch nicht so der regex-guru, aber ich bin überzeugt, daß man das noch einfacher machen kann. wird die regex bei jedem anzeigen des artikels oder nur beim speichern aufgerufen? wenns gleich beim speichern geändert wird, dann sollte der impact ja recht egal sein.

edit:
ich glaub, ich hätte eine lösung:

Code: Select all

    $regex = '°(\b(' . preg_quote($v_from) . ')\b°msU';
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Wort Ersetzer plugin

Post by garvinhicking »

Hi!

Die wird bei jeder Anzeige ausgeführt (es sei denn man nutzt das caching plugin).

Ich kam vorhin noch auf folgende Variante:

Code: Select all

$regex = '°([^\d\w]|^)(' . preg_quote($v_from) . ')([^\d\w]|$)°msU';
Evtl mal alle drei Varianten probieren?

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Wort Ersetzer plugin

Post by garvinhicking »

kleinerChemiker wrote:ist das gültige syntx?
Das weiß ich nich, aber könnte ja sein. *g*
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
kleinerChemiker
Regular
Posts: 765
Joined: Tue Oct 17, 2006 2:36 pm
Location: Vienna/Austria
Contact:

Re: Wort Ersetzer plugin

Post by kleinerChemiker »

garvinhicking wrote:
kleinerChemiker wrote:ist das gültige syntx?
Das weiß ich nich, aber könnte ja sein. *g*
das glaub ich nicht, tim :wink:

ich glaub nicht, daß oder auch bei modifikatoren anwendbar ist. \b steht für word-boundery, sollte also eigentlich funktionieren. ich hoffe zumindest, daß kein zeichen davor auch als boundery gilt *g*
Post Reply