Revision 7fe3133a
Von Moritz Bunkus vor mehr als 15 Jahren hinzugefügt
SL/Template.pm | ||
---|---|---|
336 | 336 |
$new_contents .= $self->substitute_vars(substr($contents, 0, $pos_if), @indices); |
337 | 337 |
substr($contents, 0, $pos_if) = ""; |
338 | 338 |
|
339 |
# if ($contents !~ m|^$self->{tag_start_qm}if\s*(not)?\s+(.*?)$self->{tag_end_qm}|) { |
|
340 |
if ($contents !~ m/^$self->{tag_start_qm} |
|
339 |
if ($contents !~ m/^$self->{tag_start_qm}if |
|
341 | 340 |
\s* |
342 |
(not|\!)? # $1 -- Eventuelle Negierung
|
|
343 |
\s*
|
|
344 |
([^\s]+) # $2 -- Name der zu ?berpr?fenden Variablen
|
|
341 |
(not\b|\!)? # $1 -- Eventuelle Negierung
|
|
342 |
\s+
|
|
343 |
(\b.+?\b) # $2 -- Name der zu ?berpr?fenden Variablen
|
|
345 | 344 |
( # $3 -- Beginn des optionalen Vergleiches |
346 | 345 |
\s* |
347 |
([!=])= # $4 -- Art des Vergleiches speichern |
|
346 |
([!=]) # $4 -- Negierung des Vergleiches speichern |
|
347 |
([=~]) # $5 -- Art des Vergleiches speichern |
|
348 | 348 |
\s* |
349 |
( # $5 -- Gequoteter String oder Bareword
|
|
350 |
"(.*)(?<!\\)" # $6 -- Gequoteter String -- direkter Vergleich mit eq bzw. ne; Escapete Anf?hrungs als Teil des Strings belassen
|
|
349 |
( # $6 -- Gequoteter String oder Bareword
|
|
350 |
"(.*?)(?<!\\)" # $7 -- Gequoteter String -- direkter Vergleich mit eq bzw. ne oder Patternmatching; Escapete Anf?hrungs als Teil des Strings belassen
|
|
351 | 351 |
| |
352 |
([^\s]+) # $7 -- Bareword -- als Index f?r $form benutzen
|
|
352 |
(\b.+?\b) # $8 -- Bareword -- als Index f?r $form benutzen
|
|
353 | 353 |
) |
354 | 354 |
)? |
355 | 355 |
\s* |
... | ... | |
360 | 360 |
return undef; |
361 | 361 |
} |
362 | 362 |
|
363 |
my $not = $1; |
|
364 |
my $var = $2; |
|
365 |
my $operator = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt |
|
366 |
my $quoted = $5; # nur g?ltig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> |
|
367 |
my $bareword = $7; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> |
|
363 |
my $not = $1; |
|
364 |
my $var = $2; |
|
365 |
my $operator_neg = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt |
|
366 |
my $operator_type = $5; # '=' oder '~' f?r Stringvergleich oder Regex |
|
367 |
my $quoted_word = $7; # nur g?ltig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> |
|
368 |
my $bareword = $8; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> |
|
368 | 369 |
|
369 |
$not = !$not if ($operator && $operator eq '!');
|
|
370 |
$not = !$not if ($operator_neg && $operator_neg eq '!');
|
|
370 | 371 |
|
371 | 372 |
substr($contents, 0, length($&)) = ""; |
372 | 373 |
|
... | ... | |
380 | 381 |
my $value = $self->_get_loop_variable($var, 0, @indices); |
381 | 382 |
my $hit = 0; |
382 | 383 |
|
383 |
if ($operator) { |
|
384 |
my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted; |
|
385 |
$hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to)); |
|
384 |
if ($operator_type) { |
|
385 |
my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted_word; |
|
386 |
if ($operator_type eq '=') { |
|
387 |
$hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to)); |
|
388 |
} else { |
|
389 |
$hit = ($not && !($value =~ m/$compare_to/)) || (!$not && ($value =~ m/$compare_to/)); |
|
390 |
} |
|
386 | 391 |
|
387 | 392 |
} else { |
388 |
$hit = ($not && ! $value) || (!$not && $value); |
|
393 |
$hit = ($not && ! $value) || (!$not && $value);
|
|
389 | 394 |
} |
390 | 395 |
|
391 | 396 |
if ($hit) { |
Auch abrufbar als: Unified diff
Bugfixes für und Erweiterung der Vergleichsmöglichkeiten in <%if...%>.
1. Bugfixes -- die vorherige Version war gar nicht getestet.
2. Erweiterung -- Mittels "=~" kann man nun auch reguläre Ausdrücke matchen lassen.