[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ic] Bug in "EITHER" coretag


We found what we believe to be a fault in the [either] coretag.

We used the following code on a page:
   [either][cgi idxnum][or]0[/either]
When the cgi value is absent this tag returns nothing -- a null string, rather than the desired '0' character.

The reason for this is that the either coretag splits its body on "[or]" and interpolates each chunk in turn, removes leading and trailing spaces from the result and returns the first "true" result. However in determining what to return, it uses the statement "return $result if $result;" Obviously when $result = '0', this fails to return anything. Further, it's not hard to picture a scenario where NOT trimming space characters would be desired.

We therefore propose, for your consideration, the following replacement to the tag, which adds a "notrim" option, and corrects the return problem as well. We have used this tag successfully in our IC 5.2 environment:

UserTag either              Order notrim
UserTag either              hasEndTag
UserTag either              PosNumber    0
UserTag either              Version      $Revision: 1.3.1 $
UserTag either              Routine      <<EOR
sub {
		my ($notrim, $body) = @_;
        my @ary = split /\[or\]/, $body;
        my $result;
        while(@ary) {
                $result = interpolate_html(shift @ary);
				unless ($notrim) {
	                $result =~ s/^\s+//;
    	            $result =~ s/\s+$//;
				}
                return $result if length($result);
        }
        return;
}
EOR

Usage Example:
[seti delimiter][either notrim=1][scratch user_delim][or] [/either][/seti]


Regards,

Carl Bailey
Triangle Research, Inc.

_______________________________________________
interchange-users mailing list
suppressed
http://www.icdevgroup.org/mailman/listinfo/interchange-users


Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.