2 # Module for defining filters that are external commands
4 sub mod_ext_filter_directives
7 $rv = [ [ 'ExtFilterDefine', 1, 18, 'global', 2.0 ] ];
8 return &make_directives($rv, $_[0], "mod_ext_filter");
11 sub mod_ext_filter_filters
14 print STDERR "looking for ExtFilterDefine\n";
15 foreach $d (&find_all_directives($_[0], "ExtFilterDefine")) {
16 push(@rv, $d->{'words'}->[0]);
21 sub edit_ExtFilterDefine
23 local ($inrv, $outrv);
24 $outrv = $inrv = "<table border>\n".
25 "<tr $tb> <td><b>$text{'filter_name'}</b></td>\n".
26 "<td><b>$text{'filter_cmd'}</b></td>\n".
27 "<td><b>$text{'filter_intype'}</b></td>\n".
28 "<td><b>$text{'filter_outtype'}</b></td>\n".
29 "<td><b>$text{'filter_preserve'}</b></td> </tr>\n";
31 foreach $e (@{$_[0]}, { 'value' => 'mode=output' },
32 { 'value' => 'mode=input' }) {
33 local (%p, $str = $e->{'value'});
34 while($str =~ /^\s*([^=\s]+)="([^"]*)"(.*)$/ ||
35 $str =~ /^\s*([^=\s]+)=([^=\s]+)(.*)$/ ||
36 $str =~ /^\s*([^=\s]+)()(.*)$/) {
40 local $l = "<tr $cb>\n";
41 local $m = $p{'mode'} ? $p{'mode'} : "output";
42 $l .= "<input name=ExtFilterDefine_m_$i type=hidden value='$m'>\n";
43 $l .= "<td><input name=ExtFilterDefine_n_$i size=10 value='$e->{'words'}->[0]'></td>\n";
44 $l .= "<td><input name=ExtFilterDefine_c_$i size=30 value='$p{'cmd'}'></td>\n";
45 $l .= "<td><input name=ExtFilterDefine_i_$i size=12 value='$p{'intype'}'></td>\n";
46 $l .= "<td><input name=ExtFilterDefine_o_$i size=12 value='$p{'outtype'}'></td>\n";
47 $l .= "<td><input type=checkbox name=ExtFilterDefine_p_$i value=1 ".
48 (defined($p{'preservescontentlength'}) ? "checked" : "").
49 "> $text{'yes'}</td>\n";
51 if ($p{'mode'} eq 'input') { $inrv .= $l; }
52 else { $outrv .= $l; }
55 $inrv .= "</table>\n";
56 $outrv .= "</table>\n";
57 return (3, undef, "<b>$text{'filter_in'}</b><br>".$inrv."<p>\n".
58 "<b>$text{'filter_out'}</b><br>".$outrv);
60 sub save_ExtFilterDefine
63 for($i=0; defined($in{"ExtFilterDefine_n_$i"}); $i++) {
64 next if (!$in{"ExtFilterDefine_n_$i"});
65 $in{"ExtFilterDefine_n_$i"} =~ /^\S+$/ ||
66 &error(&text('filter_ename', $in{"ExtFilterDefine_n_$i"}));
67 $in{"ExtFilterDefine_c_$i"} ||
68 &error(&text('filter_ecmd', $in{"ExtFilterDefine_n_$i"}));
69 local $l = $in{"ExtFilterDefine_n_$i"}." mode=".
70 $in{"ExtFilterDefine_m_$i"}." cmd=\"".
71 $in{"ExtFilterDefine_c_$i"}."\"";
72 if ($in{"ExtFilterDefine_i_$i"}) {
73 $l .= " intype=".$in{"ExtFilterDefine_i_$i"};
75 if ($in{"ExtFilterDefine_o_$i"}) {
76 $l .= " outtype=".$in{"ExtFilterDefine_o_$i"};
78 if ($in{"ExtFilterDefine_p_$i"}) {
79 $l .= " PreservesContentLength";