見出しレベルを調整するプラグイン「ConvertHnLv」(改)

記事本文中で見出し要素を使えないという悩みを解決してくれるプラグイン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;

なんちゃってプログラミングだが、動いているのでよしとする。

転載元リソース情報

URI
http://elastic965.80code.com/blog/2006/12/converthnlv
作成日
2006年12月07日

2008年5月19日

案内

広告

広告

このページについてつぶやく コメント一覧