Support 9210 CSV contacts format.
[PerlMail.git] / contacts-n9k2mutt
index 8063692..bba3b46 100755 (executable)
@@ -1,6 +1,22 @@
 #! /usr/bin/perl
-#
-# $Id$
+# 
+#      $Id$
+# Copyright (C) 2002-2003 Jan Kratochvil <project-PerlMail@jankratochvil.net>
+# 
+# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
 
 use vars qw($VERSION);
 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
@@ -8,7 +24,7 @@ use strict;
 use warnings;
 
 require Getopt::Long;
-require PrecislovaniLace::Contacts;
+require PerlMail::Contacts::9000;
 require Mail::Address;
 
 
@@ -16,9 +32,16 @@ Getopt::Long::Configure(
                "no_ignorecase",
                "bundling",
                );
+my $opt_9000;
 die if !Getopt::Long::GetOptions(
+               "9000"=>\$opt_9000,
                );
 
+my $type="9210";
+$type="9000" if $opt_9000;
+my $class="PerlMail::Contacts::$type";
+eval "require $class;1;" or die "Cannot load loader $class: $!";
+
 undef $/;
 while (<>) {
        my @data=map({
@@ -34,23 +57,27 @@ while (<>) {
                                                        "iscompany"=>($record{"Name"} && $record{"Company"} && $record{"Name"} eq $record{"Company"}),
                                                        }));
                                        } @record);
-                       } PrecislovaniLace::Contacts->import($_));
+                       } $class->in($_));
        my @nicked=map({
                        my $data=$_;
                        my($name,$mail,$attr,$iscompany)=map(($data->{$_}),qw(name mail attr iscompany));
                        $name=~s/,.*$//s;
                        my @nicks=();
-                       push @nicks,$1 while $name=~s/"([^"]*)"//s;
+                       my $name_force;
+                       while ($name=~s/"([^"]*)"([!])?//s) {
+                               push @nicks,$1;
+                               $name_force=$1 if $2;
+                               }
                        $name=~s/\s*$//s;
                        $name=~s/^(\w+)\s+(\w+)$/$2 $1/s if !$iscompany;
-                       push @nicks,$name;
+                       push @nicks,$name if !$name_force;
                        for (@nicks) {
                                $_.=".$attr" if $attr;
                                s/\s+/./gs;
                                }
                        map({
                                        "nick"=>$_,
-                                       "obj"=>Mail::Address->new($name,$mail),
+                                       "obj"=>Mail::Address->new(($name_force || $name),$mail),
                                        },@nicks);
                        } @data);
        for (@nicked) {