package Kwiki::Formatter::Hatena;
use Spoon::Formatter -Base;
use mixin 'Kwiki::Installer';
use utf8;
use Kwiki::Formatter;
our $VERSION = '0.05';
const config_class => 'Kwiki::Config';
const class_id => 'formatter';
const class_title => 'Hatena Formatter';
const top_class => 'Kwiki::Formatter::Hatena::Top';
const class_prefix => 'Kwiki::Formatter::';
const all_blocks => [];
const all_phrases => [];
sub init {
eval{ $self->hub->config->add_file('hatenaformatter.yaml'); };
}
sub formatter_classes {
qw(
Spoon::Formatter::WaflPhrase
Spoon::Formatter::WaflBlock
Line Heading Preformatted Comment
Ulist Olist Item Table TableRow TableCell
Strong Emphasize Underline Delete Inline MDash NDash Asis
ForcedLink HyperLink TitledHyperLink TitledMailLink MailLink
TitledWikiLink WikiLink
);
}
package Kwiki::Formatter::Hatena::Top;
use base 'Spoon::Formatter::Container';
use Cache::File;
use Hatena::Formatter;
use URI::Escape qw(uri_escape_utf8);
const formatter_id => 'top';
sub html {
my $html = $self->SUPER::html;
$html = $self->html_unescape($html);
my $keyword_enable = $self->hub->config->hatenaformatter_keyword_enable;
my $cache;
if ($keyword_enable && $self->hub->config->hatenaformatter_keyword_cache_root) {
$cache = Cache::File->new(
cache_root => $self->hub->config->hatenaformatter_keyword_cache_root,
default_expires => $self->hub->config->hatenaformatter_keyword_cache_expires,
);
}
my %hatena_config = (
text_config => {
permalink => $self->hub->config->script_name . '?' . $self->hub->cgi->page_name,
hatenaid_href => 'http://www.hatena.ne.jp/user?userid=%s',
}
);
$hatena_config{keyword_config} = { cache => $cache, score => $self->hub->config->hatenaformatter_keyword_score }
if $keyword_enable;
my $formatter = Hatena::Formatter->new(%hatena_config);
$formatter->register( hook => 'text_finalize', callback => sub {
my($context, $option) = @_;
my $html = $context->html;
# add wikilink, copy from Kwiki::EscapeURI
$html =~ s{\[([^\x01-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+)\]}{
my $target = $1;
my $page_uri = $target;
$page_uri =~ s/([^\x20-\x7e]+)/uri_escape_utf8($1)/eg;
$target = $self->escape_html($target);
qq($target);
}gsme;
$context->html($html);
});
$formatter->process($html);
$formatter->html;
}
package Kwiki::Formatter::Hatena;
1;
__DATA__
=head1 NAME
Kwiki::Formatter::Hatena - Kwiki Formatter with Haten Style
=head1 SYNOPSIS
In C:
formatter_class: Kwiki::Formatter::Hatena
hatenaformatter_keyword_cache_root: /tmp/hatenakeyword_cache_dir
hatenaformatter_keyword_cache_expires: 1 day
hatenaformatter_keyword_score: 20
hatenaformatter_keyword_enable: 1
=head1 DESCRIPTION
The Kwiki format is invalidated and the Hatena format is made effective.
The Hatena format is offered by L.
=head1 AUTHOR
Kazuhiro Osawa Eko@yappo.ne.jpE
=head1 THANKS TO
TransFreeBSD, Naoya Ito, otsune, tokuhirom
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
L, L, L
=cut
__config/hatenaformatter.yaml__
hatenaformatter_keyword_cache_root: /tmp/hatenaformatter_cache_root
hatenaformatter_keyword_cache_expires: 1 day
hatenaformatter_keyword_score: 20
hatenaformatter_keyword_enable: 1