d916e88315d50072907561bea665c0d5a80e452a
[PerlMail.git] / contacts-n9k2mutt
1 #! /usr/bin/perl
2
3 #       $Id$
4 # Copyright (C) 2002-2003 Jan Kratochvil <project-PerlMail@jankratochvil.net>
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20
21 use vars qw($VERSION);
22 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
23 use strict;
24 use warnings;
25
26 require Getopt::Long;
27 require Mail::Address;
28
29
30 Getopt::Long::Configure(
31                 "no_ignorecase",
32                 "bundling",
33                 );
34 my $opt_9000;
35 die if !Getopt::Long::GetOptions(
36                 "9000"=>\$opt_9000,
37                 );
38
39 my $type="9210";
40 $type="9000" if $opt_9000;
41 my $class="PerlMail::Contacts::$type";
42 eval "require $class;1;" or die "Cannot load loader $class: $!";
43
44 undef $/;
45 while (<>) {
46         my @data=map({
47                         my @record=@$_;
48                         my %record;
49                         map({
50                                         my %item=%$_;
51                                         $record{$item{"FIELD"}}=$item{"FIELD-DATA"};
52                                         ($item{"FIELD"} ne "Mail" || !$item{"FIELD-DATA"} ? () : ({
53                                                         "name"=>$record{"Name"},
54                                                         "mail"=>$item{"FIELD-DATA"},
55                                                         "attr"=>$item{"FIELD-NAME"},
56                                                         "iscompany"=>($record{"Name"} && $record{"Company"} && $record{"Name"} eq $record{"Company"}),
57                                                         }));
58                                         } @record);
59                         } $class->in($_));
60         my @nicked=map({
61                         my $data=$_;
62                         my($name,$mail,$attr,$iscompany)=map(($data->{$_}),qw(name mail attr iscompany));
63                         $name=~s/,.*$//s;
64                         my @nicks=();
65                         my $name_force;
66                         while ($name=~s/"([^"]*)"([!])?//s) {
67                                 push @nicks,$1;
68                                 $name_force=$1 if $2;
69                                 }
70                         $name=~s/\s*$//s;
71                         $name=~s/^(\w+)\s+(\w+)$/$2 $1/s if !$iscompany;
72                         push @nicks,$name if !$name_force;
73                         for (@nicks) {
74                                 $_.=".$attr" if $attr;
75                                 s/\s+/./gs;
76                                 }
77                         map({
78                                         "nick"=>$_,
79                                         "obj"=>Mail::Address->new(($name_force || $name),$mail),
80                                         },@nicks);
81                         } @data);
82         for (@nicked) {
83                 print "alias ".$_->{"nick"}." ".$_->{"obj"}->format()."\n";
84                 }
85         }