mailcap, xinit
[dotfiles.git] / email / .local / bin / mutt.vcard.filter
diff --git a/email/.local/bin/mutt.vcard.filter b/email/.local/bin/mutt.vcard.filter
new file mode 100755 (executable)
index 0000000..7d11d7d
--- /dev/null
@@ -0,0 +1,152 @@
+#!/usr/bin/perl -Tw
+
+#     mutt.vcard.filter - vcard filter for use with the mutt autoview facility
+#     Copyright (C) 1997,1998,1999 David A Pearson
+#   
+#     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.
+#     
+#     This program is distributed in the hope that it will be useful,
+#     but WITHOUT ANY WARRANTY; without even the implied warranty of
+#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#     GNU General Public License for more details.
+#    
+#     You should have received a copy of the GNU General Public License
+#     along with this program; if not, write to the Free Software
+#     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# This little perl script is a simple filter for text/x-vcard
+# attachments. I'm pretty sure I've *not* included everything
+# possible in here, but it "works for me". Feel free to improve
+# in any way you see fit.
+#
+# Here is how I use it. In my ~/.mutt_mailcap (use your filename of
+# choice) I have the following entry:
+#
+# text/x-vcard; mutt.vcard.filter; copiousoutput
+#
+# All you then need to do is add a line like:
+#
+# auto_view text/x-vcard
+#
+# to your ~/.muttrc (use your filename of choice).
+#
+# All comments/flames/feedback can be directed to:
+#
+#               davep@hagbard.demon.co.uk
+#
+
+use strict;
+
+my $in_card    = 0;
+my @address    = ();
+my @contacts   = ();
+my @additional = ();
+my @notes      = ();
+my $name       = "";
+my $title      = "";
+my $org        = "";
+my $found_note = 0;
+my $len;
+my $i;
+my $addr_line;
+my $contact_line;
+
+while ( <> )
+{
+    if ( $in_card )
+    {
+        if ( /^fn:\s*(.*)$/i )
+        {
+            $name = $1;
+        }
+        elsif ( /^n:\s*(.*);\s*(.*)$/i )
+        {
+            @additional = ( "", "Additional information:", "" ) if $#additional == -1;
+
+            @additional = ( @additional, "Last Name:\t$1", "First Name:\t$2" );
+        }
+        elsif ( /^title:\s*(.*)$/i )
+        {
+            $title = $1;
+        }
+        elsif ( /^org:\s*(.*)$/i )
+        {
+            $org = $1;
+        }
+        elsif ( /^adr:\s*(.*)$/i )
+        {
+            my $addr = $1;
+            
+            $addr =~ s/;+/;/g;
+                
+            @address = split( /;/, $addr );
+        }
+        elsif ( /^email;\s*(.*?):\s*(.*)$/i || /^tel;\s*(.*?):\s*(.*)$/i )
+        {
+            my $type  = $1;
+            my $value = $2;
+
+            @contacts = ( @contacts, uc( substr( $type, 0, 1 ) ) .
+                         substr( $type, 1 ) . ": $value" );
+        }
+        elsif ( /^note:\s*(.*)$/i )
+        {
+            @notes = ( "" ) if $#notes == -1;
+            @notes = ( @notes, $1 );
+            
+            $found_note = 1;
+        }
+        elsif ( /^=.{2}=$/ && $found_note )
+        {
+            my $line = <>;
+
+            chomp( $line );
+            
+            @notes = ( "" ) if $#notes == -1;
+            @notes = ( @notes, $line );
+        }
+        elsif ( /^end:\s*vcard$/i )
+        {
+            $in_card = 0;
+        }
+    }
+    else
+    {
+        $in_card = /^begin:\s*vcard\s*$/i;
+    }
+}
+
+@address = ( $org,   @address ) if $org;
+@address = ( $title, @address ) if $title;
+@address = ( $name,  @address ) if $name;
+
+format STDOUT =
+@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$addr_line, $contact_line
+.
+
+$len = $#address > $#contacts ? $#address : $#contacts;
+
+print "" . ( "=" x 76 ) . "\n";
+
+for ( $i = 0; $i <= $len; $i++ )
+{
+    $addr_line    = $i <= $#address  ? $address[ $i ]  : "";
+    $contact_line = $i <= $#contacts ? $contacts[ $i ] : "";
+    write;
+}
+
+for ( $i = 0; $i <= $#notes; $i++ )
+{
+    print "$notes[ $i ]\n";
+}
+
+for ( $i = 0; $i <= $#additional; $i++ )
+{
+    print "$additional[ $i ]\n";
+}
+
+print "" . ( "=" x 76 ) . "\n";