The new Text::Hatena
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

The new Text::Hatena

  • 1,381 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,381
On Slideshare
1,379
From Embeds
2
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
6

Embeds 2

http://b.hatena.ne.jp 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \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

Transcript

  • 1. この夏の最新Text::Hatenaをお届けします!! 2012/08/18 大西康裕 (id:onishi) はてな
  • 2. 自己紹介• id:onishi - 大西康裕• 株式会社はてな (2001∼) • チーフエンジニア • はてなブログディレクター• @yasuhiro_onishi• PAUSE: ONISHI - Devel::KYTProf
  • 3. Text::Hatena とははてな記法をHTMLに変換するモジュール
  • 4. はてな記法とは• はてなブログやはてなダイアリーやはてなグ ループで使える書式• かんたんな記述でHTML文書構造や自動リン クが書ける• hatenadiary.g.hatena.ne.jp/keyword/ はてな記法一覧
  • 5. 入力支援(ブロック記法)
  • 6. 自動リンク(インライン記法)
  • 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.16use Text::Hatena; # 0.16my $parser = Text::Hatena->new; $parser->parse($text);my $html = $parser->html;
  • 9. Text::Hatena # 0.20use Text::Hatena; # 0.20my $html = Text::Hatena->parse($text);
  • 10. Text::Xatenause Text::Xatena;my $thx = Text::Xatena->new; $thx->format($string);
  • 11. Text::HatenaLiteuse Text::HatenaLite::Parser;my $html = Text::HatenaLite::Parser->parse_string($string);
  • 12. もっとたくさんの…• Hatena::Diary::HTMLParserBody• Hatena2::Group::HTMLParserBody• Hatena::Bookmark::TextFormat• Hatena::Haiku::Body
  • 13. Hatena::Diary::HTMLParserBody• 最初のはてな記法 Parser• 2008年までテストなかった• 1200行のメソッド• まだ使われています…
  • 14. H::D::HTMLParserBody#makelink
  • 15. 記法展開の難しさ(1) テキストをHTMLにするものだけど HTML::Parserベース• はてな記法はHTMLタグが使える• コメント記法• スーパーPRE記法
  • 16. 記法展開の難しさ(1)<script>ここは記法展開しないよ</script><!--ここは消えるよ-->>||記法展開しないでPREになるよ||<
  • 17. 記法展開の難しさ(1)<script>>||ここはどうなる?||<</script>>||<!--ここはどうなる?-->||<
  • 18. 記法展開の難しさ(1)記法とHTMLを同時に解釈しなければいけない
  • 19. 記法展開の難しさ(2) 3つのことを同時にやっている• 記法の展開• キーワードリンク• XSS対策(ホワイトリストによるscript制限)
  • 20. 記法展開の難しさ(2) どうしてこうなった• 記法とキーワードリンクが密結合している • []キーワードリンクしない記法[] • 記法展開すると意味を失う
  • 21. 記法展開の難しさ(2)記法展開とキーワードリンクを同時に行わなければならない
  • 22. このため記法展開とキーワードリンクが密結合であるため、Text::Hatena などの記法展開だけのモジュールを作っても、実際のプロダクト(はてなダイアリー)で利用できなかった
  • 23. どうしよう
  • 24. メタデータによる疎結合化記法展開時に「これ以上リンクしない」というカスタムデータ属性を付与<span data-unlink> ここはこれ以上リンクしない</span>
  • 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 stylemy $html = $parser->html;# Text::Hatena 0.20 stylemy $html = Text::Hatena->parse($string);# Text::Xatena stylemy $html = $parser->format($string);
  • 28. 単体でも使える便利モジュール•Text::Hatena::Keyword • キーワードリンカ•Text::Hatena::Embed • URL埋め込み支援([http:embed]記法)
  • 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
  • 31. github.com/onishi/Text-Hatena 本日公開しました!! どうぞご利用ください!! pull request ください!!
  • 32. はてなブログ27週連続新機能リリース中日本一開発がホットなブログ hatenablog.com
  • 33. 人材募集• 株式会社はてなではエンジニアその他 全職種を募集しています• 一緒にブログを作りましょう!www.hatena.ne.jp/company/staff
  • 34. ご清聴ありがとうございました