なんかリンクされてるので、もう少し書いてみる。Text::Hatena::AutoLinkははてな記法にのみ対応してるわけだけれども、これをもっと一般化したものが欲しかった。でもじゃああわよくばText::Hatenaでも使おうと思ったら使えるフレームワークにしちゃえー、と思って書いたのがText::AutoLink。
use Text::AutoLink;
my $auto = Text::AutoLink->new;
my $ret = $auto->parse_string($string);
というだけでリンクを勝手に文字列に埋め込んでくれる。ここまではText::Hatena::AutoLinkと一緒。でもAutoLinkの動作を変えたい、しかもプラグインみたいな形にしたい、っていうのがあったので、これにさらにこんな感じでプラグイン使えるようにしてみた:
use Text::AutoLink;
my $auto = Text::AutoLink->new(
plugins => [ MyPlugin->new, MyPlugin2->new, ... ]
);
my $ret = $auto->parse_string($string);
pluginが指定された場合は指定されたプラグインのみが処理を行うのでこれだけで最初の例と全く動作が異なるAutoLinkができる。
リンクを動的に作成する時に気をつけないのは主に「すでにリンク化された文字列をリンク化プロセッサーに渡さない」ということだと思っているのだけれども、これをHTML::TreeBuilderでほげほげしてみている。その分処理は普通の正規表現で行う置換に比べて格段に遅いとは思う。
どうですかー、はてなで使いませんか(笑)