_render_doc(\@vcards)
_render_card(Text::vCard)
_render_fn(Text::vCard)
_render_n(Text::vCard)
_render_nickname(Text::vCard)
_render_photo(Text::vCard)
_render_bday(Text::vCard)
_render_adrs(Text::vCard)
_render_labels(Text::vCard)
_render_tels(Text::vCard)
_render_emails(Text::vCard)
_render_instantmessaging(Text::vCard)
_render_mailer(Text::vCard)
_render_tz(Text::vCard)
_render_geo(Text::vCard)
_render_org(Text::vCard)
_render_title(Text::vCard)
_render_role(Text::vCard)
_render_logo(Text::vCard)
_render_categories(Text::vCard)
_render_note(Text::vCard)
_render_sound(Text::vCard)
_render_url(Text::vCard)
_render_key(Text::vCard)
_render_custom(Text::vCard)
_im_services()
_namespaces()
XML::Generator::vCard - generate SAX2 events for vCard 3.0
use XML::SAX::Writer; use XML::Generator::vCard;
my $writer = XML::SAX::Writer->new(); my $driver = XML::Generator::vCard->new(Handler=>$writer);
$driver->parse_files("test.vcf");
Generate SAX2 events for vCard 3.0.
This package supersedes XML::SAXDriver::vCard.
SAX2 events map to the vCard 3.0 XML DTD draft:
http://xml.coverpages.org/draft-dawson-vcard-xml-dtd-00.txt
The draft itself has since expired but it still seems like a perfectly good place to start from.
new(%args)
This method inherits from XML::SAX::Base.
Returns a XML::Generator::vCard object.
parse_files(@files)
Generate SAX2 events for one, or more, vCard files.
Returns true or false.
Private methods are documented below in case you need to subclass this package to tweak its output.
_render_doc(\@vcards)
_render_card(Text::vCard)
_render_fn(Text::vCard)
_render_n(Text::vCard)
_render_nickname(Text::vCard)
_render_photo(Text::vCard)
_render_bday(Text::vCard)
_render_adrs(Text::vCard)
_render_labels(Text::vCard)
_render_tels(Text::vCard)
_render_emails(Text::vCard)
_render_instantmessaging(Text::vCard)
_render_mailer(Text::vCard)
_render_tz(Text::vCard)
_render_geo(Text::vCard)
_render_org(Text::vCard)
_render_title(Text::vCard)
_render_role(Text::vCard)
_render_logo(Text::vCard)
_render_categories(Text::vCard)
_render_note(Text::vCard)
_render_sound(Text::vCard)
_render_url(Text::vCard)
_render_key(Text::vCard)
_render_custom(Text::vCard)
By default this method does nothing. It is here to be subclassed.
_im_services()
Returns a hash ref mapping an instant messaging service type to an XML element. Default is :
{"aim" => "foaf:aimChatID", "yahoo" => "foaf:yahooChatID", "msn" => "foaf:msnChatID", "jabber" => "foaf:JabberID", "icq" => "foaf:icqChatId"}
This is called by the _render_instantmessaging method.
_namespaces()
Returns a hash reference of prefix - URI pairs.
This package generates SAX events using the following XML namespaces :
x-urn:cpan:ascope:xml-generator-vcard#
http://xmlns.com/foaf/0.1/
package MyGenerator; use base qw (XML::Generator::vCard);
sub _render_card { my $self = shift; my $card = shift;
my $cats = $vcard->get({"node_type" => 'categories'}) || $vcard->get({"node_type" => 'category'});
if (! $cats) { return 1; } if (! grep { $_->value() eq "foo" } split(",",$cats->[0])) { return 1; }
return $self->SUPER::_render_card($vcard); }
package main;
my $writer = XML::SAX::Writer->new(); my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);
package MyGenerator; use base qw (XML::Generator::vCard);
sub _render_custom { my $self = shift; my $vcard = shift;
my $custom = $vcard->get({"node_type" => "x-foobar"}); if (! $addresses) { next; }
foreach my $foo (@$custom) { my $types = join(";",$foo->types());
$self->_pcdata({Name => "foo:bar", Value => $foo->value(), Attributes => {"{}type"=> {Name => "type", Value => $types}} }); }
return 1; } package main;
my $writer = XML::SAX::Writer->new(); my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);
package MyGenerator; use base qw (XML::Generator::vCard);
sub _namespaces { my $self = shift; my $ns = $self->SUPER::_namespaces(); $ns->{ "foo" } = "x-urn:foo:bar#";
return $ns; }
package main;
my $writer = XML::SAX::Writer->new(); my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);
1.2
$Date: 2004/11/16 17:02:42 $
Aaron Straup Cope <ascope@cpan.org>
http://www.ietf.org/rfc/rfc2426.txt
http://www.ietf.org/rfc/rfc2425.txt
vCards containg binary PHOTO images may cause Perl to segfault on Mac OSX and come flavours of Linux (but not FreeBSD.) The source of this problem has been traced, I think, to a regular expression issue in the Perl Text::ParseWords library. A bug report has been filed.
Please report all other bugs via http://rt.cpan.org
Copyright (c) 2004, Aaron Straup Cope. All Rights Reserved.
This is free software, you may use it and distribute it under the same terms as Perl itself.