]> diplodocus.org Git - nmh/blobdiff - docs/contrib/replyfilter
Put, rather than print, single characters.
[nmh] / docs / contrib / replyfilter
index 2e987946c745ce226d4938f54b44420673768758..78c5c4ac2c7774873ec8eec6f8aa87134c4fb1f8 100755 (executable)
 #
 # - Put the path to this program in your .mh_profile under formatproc:
 # 
-#   formatproc: replyfilter
+#      formatproc: replyfilter
 #
-# - Create a mhl reply filter that consists of the following line:
+#   or invoke repl with "-fmtproc replyfilter".
 #
-#   body:nocomponent,format,nowrap,formatarg="%(trim{content-type})%(putstr)",formatarg="%(trim{content-transfer-encoding})%(putstr)",formatarg=">"
+# - Create an mhl reply filter that consists of the following line:
+#
+#      body:nocomponent,format,nowrap,formatarg="%(trim{content-type})%(putstr)",formatarg="%(trim{content-transfer-encoding})%(putstr)",formatarg=">"
+#
+#   By default, repl will look for the mhl reply filter by the name
+#   "mhl.reply", but it will look elsewhere if the -filter switch is given.
 #
 #   To decode this a bit:
 #
@@ -23,8 +28,8 @@
 #                component prefix of ">" as a quote character, but we're
 #                going to have replyfilter do that).
 #   nowrap     - Don't wrap lines if they exceed the column width
-#   formatarg   - Arguments to fmtproc.  The first argument is the value of
-#                the Content-type header; the second is the value of the
+#   formatarg   - Arguments to formatproc.  The first argument is the value
+#                of the Content-type header; the second is the value of the
 #                Content-Transfer-Encoding header.  The last "formatarg"
 #                is used as your quoting prefix.  Replace it with whatever
 #                you want.
@@ -68,11 +73,11 @@ $outcharset = 'utf-8';
 $maxcolwidth = 78;
 
 #
-# Out HTML converter program & arguments
+# Out HTML converter program & arguments. charset will be appended
 #
 
 @htmlconv = ('w3m', '-dump', '-cols', $maxcolwidth - 2, '-T', 'text/html',
-            '-O', $outcharset);
+            '-O', $outcharset, '-I');
 
 
 die "Usage: $0 Content-type content-transfer-encoding quote-prefix\n"
@@ -158,7 +163,7 @@ exit 0;
 # or base64 to feed it into a formatting filter.
 #
 
-sub process_text (*$$;$)
+sub process_text
 {
        my ($input, $encoding, $charset, $boundary) = @_;
        my $text, $filterpid, $prefixpid, $finread, $finwrite;
@@ -193,7 +198,7 @@ sub process_text (*$$;$)
 
                binmode($input, ':encoding(us-ascii)');
 
-               $decoder = find_decoder($encoding);
+               $decoder = find_decoder(lc($encoding));
                if (! defined $decoder) {
                        return 'EOF';
                }
@@ -342,13 +347,13 @@ sub process_text (*$$;$)
 # Filter HTML through a converter program
 #
 
-sub process_html (*$$;$)
+sub process_html
 {
        my ($input, $encoding, $charset, $boundary) = @_;
        my $filterpid, $prefixpid, $finread, $finwrite;
        my $foutread, $foutwrite, $decoder, $ret;
 
-       if (! defined($decoder = find_decoder($encoding))) {
+       if (! defined($decoder = find_decoder(lc($encoding)))) {
                return 'EOF';
        }
 
@@ -400,8 +405,9 @@ sub process_html (*$$;$)
                # Exec our converter
                #
 
-               exec (@htmlconv) ||
-                               die "Unable to exec $filterprogram: $!\n";
+               my @conv = (@htmlconv, $charset);
+               exec (@conv) ||
+                               die "Unable to exec $htmlconv[0]: $!\n";
        } else {
                die "Fork for $htmlconv[0] failed: $!\n";
        }
@@ -456,7 +462,7 @@ sub process_html (*$$;$)
 # Decide what to do, based on what kind of content it is.
 #
 
-sub process_part (*$$$$;$)
+sub process_part
 {
        my ($input, $content_type, $encoding, $charset, $boundary, $name) = @_;
        my ($type, $subtype) = (split('/', $content_type, -1), '');
@@ -502,7 +508,7 @@ sub process_part (*$$$$;$)
 # the content of this part
 #
 
-sub process_multipart ($$$)
+sub process_multipart
 {
        my ($input, $subtype, $boundary) = @_;
        my $altout;
@@ -535,7 +541,7 @@ sub process_multipart ($$$)
                        $charset = 'us-ascii';
                }
 
-               $encoding = defined $cte ? $cte->param('_') : '7bit';
+               $encoding = defined $cte ? lc($cte->param('_')) : '7bit';
                $name = defined $cdispo ? $cdispo->param('filename') : undef;
 
                 #
@@ -601,7 +607,7 @@ sub process_multipart ($$$)
 # "Eat" a MIME part; consume content until we hit the boundary or EOF
 #
 
-sub eat_part ($$)
+sub eat_part
 {
        my ($input, $boundary) = @_;
        my $ret;
@@ -632,7 +638,7 @@ sub eat_part ($$)
 # Return the decoder subroutine to use
 #
 
-sub find_decoder ($)
+sub find_decoder
 {
        my ($encoding) = @_;
 
@@ -648,7 +654,7 @@ sub find_decoder ($)
        }
 }
 
-sub null_decoder ($)
+sub null_decoder
 {
        my ($input) = @_;
 
@@ -659,17 +665,17 @@ sub null_decoder ($)
 # Match a line against the boundary string
 #
 
-sub match_boundary($$)
+sub match_boundary
 {
-       my ($_, $boundary) = @_;
+       my ($line, $boundary) = @_;
 
        return if ! defined $boundary;
 
-       if (substr($_, 0, 2) eq '--') {
-               s/[ \t\r\n]+\Z//;
-               if ($_ eq "--$boundary") {
+       if (substr($line, 0, 2) eq '--') {
+               $line =~ s/[ \t\r\n]+\Z//;
+               if ($line eq "--$boundary") {
                        return 'EOP';
-               } elsif ($_ eq "--$boundary--") {
+               } elsif ($line eq "--$boundary--") {
                        return 'EOM';
                }
        }