More Related Content
Similar to The new Text::Hatena
Similar to The new Text::Hatena (18)
More from Yasuhiro Onishi
More from Yasuhiro Onishi (6)
The new Text::Hatena
- 2. 自己紹介
• id:onishi - 大西康裕
• 株式会社はてな (2001∼)
• チーフエンジニア
• はてなブログディレクター
• @yasuhiro_onishi
• PAUSE: ONISHI - Devel::KYTProf
- 7. たくさんのText::Hatena
• Text::Hatena ∼0.16 (jkondo)
• https://metacpan.org/release/JKONDO/Text-Hatena-0.16
• Text::Hatena 0.20 (jkondo)
• https://metacpan.org/module/Text::Hatena
• Text::Xatena (cho45)
• https://metacpan.org/module/Text::Xatena
• Text::HatenaLite (wakabatan)
• https://github.com/wakaba/perl-text-hatenalite
- 8. Text::Hatena # ∼0.16
use Text::Hatena; # 0.16
my $parser = Text::Hatena->new;
$parser->parse($text);
my $html = $parser->html;
- 19. 記法展開の難しさ(2)
3つのことを同時にやっている
• 記法の展開
• キーワードリンク
• XSS対策(ホワイトリストによるscript制限)
- 20. 記法展開の難しさ(2)
どうしてこうなった
• 記法とキーワードリンクが密結合している
• []キーワードリンクしない記法[]
• 記法展開すると意味を失う
- 25. メタデータによる疎結合化
}
• 記法パーサ
• data-unlink属性を付与 疎結合化
• キーワードリンカ
• data-unlink属性を見てリンクを判断
- 26. The new Text::Hatena
• Text::Xatena をベースに
(©cho45)
• カスタムデータ属性を使って記法展開とキー
ワードリンクを疎結合化
• 過去(や類似)のインターフェース互換
• 多くのはてな記法に対応
• 実際にはてなブログで利用している
- 27. インターフェース後方互換
use Text::Hatena;
my $parser = Text::Hatena->new;
my $html = $parser->parse($string);
# Text::Hatena 0.16 style
my $html = $parser->html;
# Text::Hatena 0.20 style
my $html = Text::Hatena->parse($string);
# Text::Xatena style
my $html = $parser->format($string);
- 29. Text::Hatena::Keyword
data-unlink 属性を考慮してキーワードリンク
my $parser = Text::Hatena::Keyword->new(
rules => [
qr/hoge|fuga/ => sub { sprintf '/keyword/%s', uri_escape($_) },
[qw/foo bar/] => sub { sprintf '/other/%s', uri_escape($_) },
],
);
my $words = $parser->extract($html); # 抽出
my $formatted_html = $parser->format($html); # リンク
- 30. Text::Hatena::Embed
URLを渡すといい感じにembed
my $embed = Text::Hatena::Embed->new;
my $html = $embed->render($url);
www.slideshare.net/onishi/oembed-texthatena
Editor's Notes
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n