/usr/local/CPAN/Hatena-Formatter/Hatena/Formatter/AutoLinkHatenaID.pm


package Hatena::Formatter::AutoLinkHatenaID;
use base qw(Text::Hatena::AutoLink::Scheme);
use strict;
use warnings;

our $HREF = '/%s/';
my $pattern = qr/\[?(id:([A-Za-z][a-zA-Z0-9_\-]{2,14})(?::(detail|image))?)\]?/i;

__PACKAGE__->patterns([$pattern]);

sub parse {
    my($self, $text) = @_;

    $text =~ /$pattern/ or return;
    my ($content, $name, $type) = ($1, $2, $3 || '');
    my $href = sprintf($HREF, $name);
    if (lc $type eq 'image') {
        my $pre = substr($name, 0, 2);
        return sprintf('<a href="%s"%s><img src="http://www.hatena.ne.jp/users/%s/%s/profile.gif" width="60" height="60" alt="id:%s" class="hatena-id-image"></a>',
                       $href, $self->{a_target_string}, $pre, $name, $name);
    } elsif (lc $type eq 'detail') {
        my $pre = substr($name, 0, 2);
        return sprintf('<a href="%s"%s><img src="http://www.hatena.ne.jp/users/%s/%s/profile_s.gif" width="16" height="16" alt="id:%s" class="hatena-id-icon">id:%s</a>',
                       $href, $self->{a_target_string}, $pre, $name,
                       $name, $name);
    } else {
        return sprintf('<a href="%s"%s>%s</a>',
                       $href, $self->{a_target_string}, $content);
    }
}

1;