Hallo Markus Trusk,
[...]
Ich kann leider kein Beispiel zeigen, da das Forum-Script noch lange nicht fertig ist.
Du könntest aber ein Beispielskript online stellen, das nur diese Funktion zum Testen anbietet.
sub encodetext {
my $text = shift;
^....... hier speicherst Du den zu kodierenden Text in $text
while ($text =~ /[text][Textfarbe=(.*?),Stil=(.*?),Size=(.*?)](.+?)[/text]/sgi) {
my($stil,$farbe,$groesse,$text) = ('') x 4;
^....... hier speicherst Du den Elementinhalt in $text
($farbe,$stil,$groesse,$text) = ($1,$2,$3,$4);
$stil = 'text-decoration:normal;' if ($stil eq '' || $stil eq 'keine');
$farbe = 'color:#DFDFDF;' if ($farbe eq '' ||
$groesse = 'font-size:11px' if ($groesse eq '' || $groesse eq 'keine');
Ich würde an Deiner Stelle ein Hash mit den entsprechenden Werten in einer Konfigurationsdatei ablegen:
%config = (
'stil' => {
'unterstrichen' => 'text-decoration:underline;',
},
'textfarbe' => {
'rosa' => 'color:#FF80C0;',
},
'size' => {
'-2' => 'font-size:8px',
},
); # Du musst die übrigen Werte natürlich noch ergänzen. :)
$text =~ s/[text][Textfarbe=.*?,Stil=.*?,Size=.*?].+?[/text]/<span style="$farbe $stil $groesse">$text</span>/si;
}
Und hier möchtest Du Treffer in der Variablen $text (außerhalb der Schleife definiert) mit Werten der Variablen $text (innerhalb der Schleife definiert) ersetzen. Dreimal aber darfst Du raten, was in $text steht. ;)
BTW: Bei Verwendung des Konfigurationshash wie oben vorgeschlagen, kannst Du Dir die Ersetzung vereinfachen, von einer Reihenfolge der Attributwerte unabhängig machen und die while-Schleife sparen:
$text =~ s/[text]
[([^=]+?)=(.*?),
([^=]+?)=(.*?),
([^=]+?)=(.*?)
]
(.+?)
[/text]
/'<span style="'.
$config{lc($1)}->{$2}.
$config{lc($3)}->{$4}.
$config{lc($5)}->{$6}.
'">'.$7.'</span>'
/sexig;
Noch besser wäre imho, erst die tags mit den Pseudoattributen zu schreiben, und diese anschließend in einem zweiten Schritt global zu ersetzen. Dann müssten natürlich die Pseudoattribute überall die gleiche Bedeutung haben, bzw. eindeutig sein. Dafür wäre aber die Reihenfolge und das Vorhandensein bestimmter Attribute beliebig.
[...]
return ($text);
}
Das Kuriose ist aber, dass die selbe Sub in einem älteren Script funktioniert, aber in diesem Script nicht, obwohl ich keine Unterschied feststellen kann.
Es gibt sicherlich einen Unterschied. Vielleicht hattest Du die Variablen anders benannt.
Gruß Alex
>> Dass in eine if Schleife zu packen schafft mein 10 jähriges Patenkind. [...]
> Mhhh, wenn man if in Schleifen packt, muss man sich auch nicht wundern, wenn die Patenkinder verwöhnte Luder werden. [...]
[TomIRL und Tom in ?t=64084&m=364291]
ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}