filter — apply one or multiple filters
| Attribute | Pos. | Req. | Default | Description |
|---|---|---|---|---|
| op | Yes | List of filters to apply. | ||
| interpolate | 0 | interpolate input? | ||
| reparse | 1 | interpolate output? | ||
| hide | 0 | Hide the tag return value? |
Interchange 5.7.0:
Source: code/SystemTag/filter.coretag
Lines: 14
# Copyright 2002-2007 Interchange Development Group and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. See the LICENSE file for details. # # $Id: filter.coretag,v 1.4 2007/03/30 23:40:49 pajamian Exp $ UserTag filter Order op UserTag filter hasEndTag UserTag filter PosNumber 1 UserTag filter Version $Revision: 1.4 $ UserTag filter MapRoutine Vend::Interpolate::filter_value
Source: lib/Vend/Interpolate.pm (rev. 2.308 from Mon Sep 22 00:01:19 2008)
Lines: 745
sub filter_value {
my($filter, $value, $tag, @passed_args) = @_;
#::logDebug("filter_value: filter='$filter' value='$value' tag='$tag'");
my @filters = Text::ParseWords::shellwords($filter);
my @args;
if(! $Vend::Filters_initted++ and my $ref = $Vend::Cfg->{CodeDef}{Filter}) {
while (my($k, $v) = each %{$ref->{Routine}}) {
$Filter{$k} = $v;
}
}
for (@filters) {
next unless length($_);
@args = @passed_args;
if(/^[^.]*%/) {
$value = sprintf($_, $value);
next;
}
if (/^(\d+)([\.\$]?)$/) {
my $len;
return $value unless ($len = length($value)) > $1;
my ($limit, $mod) = ($1, $2);
unless($mod) {
substr($value, $limit) = '';
}
elsif($mod eq '.') {
substr($value, $1) = '...';
}
elsif($mod eq '$') {
substr($value, 0, $len - $limit) = '...';
}
return $value;
next;
}
while( s/\.([^.]+)$//) {
unshift @args, $1;
}
if(/^\d+$/) {
substr($value , $_) = ''
if length($value) > $_;
next;
}
if ( /^words(\d+)(\.?)$/ ) {
my @str = (split /\s+/, $value);
if (scalar @str > $1) {
my $num = $1;
$value = join(' ', @str[0..--$num]);
$value .= $2 ? '...' : '';
}
next;
}
my $sub;
unless ($sub = $Filter{$_} || Vend::Util::codedef_routine('Filter', $_) ) {
logError ("Unknown filter '%s'", $_);
next;
}
unshift @args, $value, $tag;
$value = $sub->(@args);
}
#::logDebug("filter_value returns: value='$value'");
return $value;
}