記事本文中で見出し要素を使えないという悩みを解決してくれるプラグインConvertHnLvの存在を教えてもらった。このサイトでは見出し要素に加え、div要素で
<div class="section1">
<h1></h1>
<div class="section2>
<h2></h2>
</div>
</div>
こんな感じにグループ化を行っているので、これに対応させるべくちょっと改造して使うことにした。
package MT::Plugin::ConvertHnLv;
use strict;
use MT::Template::Context;
MT::Template::Context->add_global_filter(convert_hn_lv => \&_convert_hn_lv);
sub _convert_hn_lv {
my ($text, $arg, $ctx) = @_;
if ( $arg =~ /-?\d+/ ) {
$arg = int $arg;
$text =~ s!<h([1-6])(.*?>.*?)</h([1-6])>!&_convert_hn_lv_inline($1, $2, $3, $arg)!ge;
$text =~ s!<div(.*?)class="section([1-6])"(.*?)>!&_convert_div_lv_inline($1, $2, $3, $arg)!ge;
}
$text;
}
sub _convert_hn_lv_inline {
my ( $level, $content, $level2, $arg ) = @_;
if ( $level != $level2 ) {
return '<h' . $level . $content . '</h' . $level2 . '>';
} else {
$level += $arg;
$level = 6 if $level > 6;
$level = 1 if $level < 1;
return '<h' . $level . $content . '</h' . $level . '>';
}
}
sub _convert_div_lv_inline {
my ( $content, $level, $content2, $arg) = @_;
$level += $arg;
$level = 6 if $level > 6;
$level = 1 if $level < 1;
return '<div' . $content . 'class="section' . $level . '"' . $content2 . '>';
}
1;
なんちゃってプログラミングだが、動いているのでよしとする。
2008年5月19日
広告
広告