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

The new Text::Hatena

on

  • 1,292 views

 

Statistics

Views

Total Views
1,292
Views on SlideShare
1,290
Embed Views
2

Actions

Likes
6
Downloads
0
Comments
0

1 Embed 2

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

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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

The new Text::Hatena The new Text::Hatena Presentation Transcript

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