# mod_ext_filter.pl # Module for defining filters that are external commands sub mod_ext_filter_directives { local $rv; $rv = [ [ 'ExtFilterDefine', 1, 18, 'global', 2.0 ] ]; return &make_directives($rv, $_[0], "mod_ext_filter"); } sub mod_ext_filter_filters { local($d, @rv); foreach $d (&find_all_directives($_[0], "ExtFilterDefine")) { push(@rv, $d->{'words'}->[0]); } return @rv; } sub edit_ExtFilterDefine { local ($inrv, $outrv); $outrv = $inrv = "\n". "\n". "\n". "\n". "\n". "\n"; local ($e, $i = 0); foreach $e (@{$_[0]}, { 'value' => 'mode=output' }, { 'value' => 'mode=input' }) { local (%p, $str = $e->{'value'}); while($str =~ /^\s*([^=\s]+)="([^"]*)"(.*)$/ || $str =~ /^\s*([^=\s]+)=([^=\s]+)(.*)$/ || $str =~ /^\s*([^=\s]+)()(.*)$/) { $p{lc($1)} = $2; $str = $3; } local $l = "\n"; local $m = $p{'mode'} ? $p{'mode'} : "output"; $l .= "\n"; $l .= "\n"; $l .= "\n"; $l .= "\n"; $l .= "\n"; $l .= "\n"; $l .= "\n"; if ($p{'mode'} eq 'input') { $inrv .= $l; } else { $outrv .= $l; } $i++; } $inrv .= "
$text{'filter_name'}$text{'filter_cmd'}$text{'filter_intype'}$text{'filter_outtype'}$text{'filter_preserve'}
[0]'> $text{'yes'}
\n"; $outrv .= "\n"; return (3, undef, "$text{'filter_in'}
".$inrv."

\n". "$text{'filter_out'}
".$outrv); } sub save_ExtFilterDefine { local (@rv, $i); for($i=0; defined($in{"ExtFilterDefine_n_$i"}); $i++) { next if (!$in{"ExtFilterDefine_n_$i"}); $in{"ExtFilterDefine_n_$i"} =~ /^\S+$/ || &error(&text('filter_ename', $in{"ExtFilterDefine_n_$i"})); $in{"ExtFilterDefine_c_$i"} || &error(&text('filter_ecmd', $in{"ExtFilterDefine_n_$i"})); local $l = $in{"ExtFilterDefine_n_$i"}." mode=". $in{"ExtFilterDefine_m_$i"}." cmd=\"". $in{"ExtFilterDefine_c_$i"}."\""; if ($in{"ExtFilterDefine_i_$i"}) { $l .= " intype=".$in{"ExtFilterDefine_i_$i"}; } if ($in{"ExtFilterDefine_o_$i"}) { $l .= " outtype=".$in{"ExtFilterDefine_o_$i"}; } if ($in{"ExtFilterDefine_p_$i"}) { $l .= " PreservesContentLength"; } push(@rv, $l); } return ( \@rv ); }