From 7fe3133a5c2db8231147e5eab775a4213299397c Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Wed, 1 Jul 2009 12:05:25 +0200 Subject: [PATCH] =?utf8?q?Bugfixes=20f=C3=BCr=20und=20Erweiterung=20der=20?= =?utf8?q?Vergleichsm=C3=B6glichkeiten=20in=20<%if...%>.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 1. Bugfixes -- die vorherige Version war gar nicht getestet. 2. Erweiterung -- Mittels "=~" kann man nun auch reguläre Ausdrücke matchen lassen. --- SL/Template.pm | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/SL/Template.pm b/SL/Template.pm index 4a26b7b4c..c0f54cc29 100644 --- a/SL/Template.pm +++ b/SL/Template.pm @@ -336,20 +336,20 @@ sub parse_block { $new_contents .= $self->substitute_vars(substr($contents, 0, $pos_if), @indices); substr($contents, 0, $pos_if) = ""; - # if ($contents !~ m|^$self->{tag_start_qm}if\s*(not)?\s+(.*?)$self->{tag_end_qm}|) { - if ($contents !~ m/^$self->{tag_start_qm} + if ($contents !~ m/^$self->{tag_start_qm}if \s* - (not|\!)? # $1 -- Eventuelle Negierung - \s* - ([^\s]+) # $2 -- Name der zu überprüfenden Variablen + (not\b|\!)? # $1 -- Eventuelle Negierung + \s+ + (\b.+?\b) # $2 -- Name der zu überprüfenden Variablen ( # $3 -- Beginn des optionalen Vergleiches \s* - ([!=])= # $4 -- Art des Vergleiches speichern + ([!=]) # $4 -- Negierung des Vergleiches speichern + ([=~]) # $5 -- Art des Vergleiches speichern \s* - ( # $5 -- Gequoteter String oder Bareword - "(.*)(? - my $bareword = $7; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> + my $not = $1; + my $var = $2; + my $operator_neg = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt + my $operator_type = $5; # '=' oder '~' für Stringvergleich oder Regex + my $quoted_word = $7; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> + my $bareword = $8; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> - $not = !$not if ($operator && $operator eq '!'); + $not = !$not if ($operator_neg && $operator_neg eq '!'); substr($contents, 0, length($&)) = ""; @@ -380,12 +381,16 @@ sub parse_block { my $value = $self->_get_loop_variable($var, 0, @indices); my $hit = 0; - if ($operator) { - my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted; - $hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to)); + if ($operator_type) { + my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted_word; + if ($operator_type eq '=') { + $hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to)); + } else { + $hit = ($not && !($value =~ m/$compare_to/)) || (!$not && ($value =~ m/$compare_to/)); + } } else { - $hit = ($not && ! $value) || (!$not && $value); + $hit = ($not && ! $value) || (!$not && $value); } if ($hit) { -- 2.20.1