"Fossies" - the Fresh Open Source Software Archive 
Member "tin-2.6.2/tools/opt-case.pl" (23 Aug 2021, 2791 Bytes) of package /linux/misc/tin-2.6.2.tar.xz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "opt-case.pl" see the
Fossies "Dox" file reference documentation and the last
Fossies "Diffs" side-by-side code changes report:
2.4.3_vs_2.4.4.
1 #! /usr/bin/perl -w
2 #
3 # reads a tin filter file with regexp filters on STDIN and turns all case
4 # insensitive regexp into case sensitive ones whenever possible, as case
5 # sensitive regexp are (a bit) faster.
6 #
7 # 2000-04-27 <urs@tin.org>
8 #
9 # NOTE: the case= line must come before any line with a regexp pattern,
10 # (that is the order tin saves the filter file, if you created the
11 # filter by hand and never let tin rewrite the file, you might want to
12 # check that first)
13 #
14 # NOTE: don't use opt-case.pl on wildmat filters, transform them into regexp
15 # filter via w2r.pl first
16
17 # version number
18 # $VERSION = "0.2.2";
19
20 # perl 5 is needed for lookahead assertions and perl < 5.004 is known to be
21 # buggy
22 require 5.004;
23
24 $mod=""; # (?i) modifier
25
26 while (defined($line = <>)) {
27 chomp $line;
28
29 # ignore comments
30 if ($line =~ m/^[#\s]/o) {
31 print "$line\n";
32 next;
33 }
34
35 # skip 'empty' patterns, they are nonsense
36 next if ($line =~ m/^[^=]+=$/o);
37
38 # new scope || case sensitive rule
39 if ($line =~ m/^group=/o || $line =~ m/^case=0/) {
40 $mod=""; # clean modifier
41 print "$line\n";
42 next;
43 }
44
45 # case insensitive rule
46 if ($line =~ m/^case=1/o) {
47 $mod="(?i)"; # set modifier
48 print "case=0\n"; # set case to sensitive
49 next;
50 }
51
52 # check if regexp-line needs (?i)-modifer
53 # [^\W\d_] is just a charset independent way to look for any
54 # upper/lowercase letters, this will miss a few possible
55 # optimizations (on lines with \s, \S, \d, \D as only 'letters') but
56 # that won't hurt, it just doesn't optimize'em
57 if ($line =~ m/^(subj|from|msgid(?:|_last|_only)|refs_only|xref)=(.*[^\W\d_].*)$/o) {
58 print "# rule rewritten, it might be possible that it can be further optimized\n";
59 print "# check lines with (?i) if they really need to be case insensitive and if\n";
60 print "# not remove leading (?i) manually\n";
61 print "$1=$mod$2\n";
62 next;
63 }
64
65 # other lines don't need to be translated
66 print "$line\n";
67 }
68
69 __END__
70
71 =head1 NAME
72
73 opt-case.pl - Optimize case insensitive regexp filters for tin
74
75 =head1 SYNOPSIS
76
77 B<opt-case.pl> E<lt> I<input> [E<gt> I<output>]
78
79 =head1 DESCRIPTION
80
81 B<opt-case.pl> reads a L<tin(1)> filter-file (L<tin(5)>) with regexp
82 filters on STDIN and turns all case insensitive regexp into case
83 sensitive ones whenever possible, as case sensitive regexp are (a
84 bit) faster.
85
86 =head1 NOTES
87
88 The case= line must come before any line with a regexp pattern, (that
89 is the order L<tin(1)> saves the filter file, if you created the
90 filter by hand and never let L<tin(1)> rewrite the file, you might
91 want to check that first).
92
93 Don't use B<opt-case.pl> on wildmat filters, transform them into
94 regexp filter via L<w2r.pl(1)> first.
95
96 =head1 AUTHOR
97
98 Urs Janssen E<lt>urs@tin.orgE<gt>
99
100 =head1 SEE ALSO
101
102 L<tin(1)>, L<tin(5)>, L<w2r.pl(1)>
103
104 =cut