AddressBook
view release on metacpan or search on metacpan
lib/AddressBook/DB/BBDB.pm view on Meta::CPAN
if ($fields[$i] =~ $names[0]) {
$field_index{shift @names} = $i;
last unless @names;
}
}
}
_figure_out_indices();
########################################################################
sub un_escape {
my $s = shift;
$s =~ s/\\(.)/$1/g; # should just be " or \
return $s;
}
########################################################################
sub decode {
my ($self,$str) = @_;
my @fields = ();
lib/AddressBook/DB/BBDB.pm view on Meta::CPAN
foreach $i (@field_names) {
$fields[$field_index{$i}] = ''
if (!defined $fields[$field_index{$i}] or
$fields[$field_index{$i}] eq 'nil');
}
my @aka = split(/$quoted_string_pat/ox,$fields[$field_index{aka}]);
# print "AKA=\n<",join(">\n<",@aka),">\nEND AKA\n";
my $aka = [];
for ($i=0; $i < @aka - 1; $i+=2) {
push @$aka, un_escape($aka[$i+1]);
}
my @phone = split(/$single_phone_pat/ox,$fields[$field_index{phone}]);
# print "PHONE=\n<",join(">\n<",@phone),">\nEND PHONE\n";
my $phone = [];
for ($i=0; $i < @phone - 1; $i+=5) {
push @$phone,[
un_escape($phone[$i+1]),
un_escape(defined $phone[$i+3] ?
$phone[$i+3] : $phone[$i+4])
];
}
my @address = split(/$single_address_pat/ox,$fields[$field_index{address}]);
# print "ADDRESS=\n<",join(">\n<",@address),">\nEND ADDRESS\n";
my $address = [];
for ($i=0; $i < @address - 1; $i+=9) {
my $zip = $address[$i+7];
$zip =~ s/^\((.*)\)$/$1/; # remove ()
if (defined $address[$i+8]) { # we have quoted strings
my @zip = split(/$quoted_string_pat/ox,$zip);
# print "ZIP = \n<",join(">\n<",@zip),">\nEND ZIP\n";
$zip = join('',@zip);
}
push @$address,[
un_escape($address[$i+1]),
un_escape($address[$i+2]),
un_escape($address[$i+3]),
un_escape($address[$i+4]),
un_escape($address[$i+5]),
un_escape($address[$i+6]),
$zip
];
}
my @net = split(/$quoted_string_pat/ox,$fields[$field_index{net}]);
# print "NET=\n<",join(">\n<",@net),">\nEND NET\n";
my $net = [];
for ($i=0; $i < @net - 1; $i+=2) {
push @$net, un_escape($net[$i+1]);
}
my @notes = split(/$alist_pat/ox,$fields[$field_index{notes}]);
# print "NOTES=\n<",join(">\n<",@notes),">\nEND NOTES\n";
my $notes = [];
for ($i=0; $i < @notes - 1; $i+=4) {
push @$notes, [
$notes[$i+2],
un_escape($notes[$i+3])
]
}
$self->{'data'} = [
un_escape($fields[$field_index{first}]),
un_escape($fields[$field_index{last}]),
$aka,
un_escape($fields[$field_index{company}]),
$phone,
$address,
$net,
$notes
];
return 1;
}
########################################################################
sub quoted_stringify { # escape \ and " in a string
my $s = shift; # and return it surrounded by
$s =~ s/(\\|")/\\$1/g; # quotes
return "\"$s\"";
}
sub nil_or_string { # return nil if empty string
return 'nil' if $_[0] eq ''; # otherwise quote it
return quoted_stringify(@_);
}
( run in 0.412 second using v1.01-cache-2.11-cpan-c21f80fb71c )