日本語トリミングフィルタ(Encodeモジュール版)

以前は Jcode モジュールを利用してましたが、Encode モジュールに書き換えてみました。MT も 3.2-ja では確か Encode モジュールを利用するようになったらしいし。Perl 5.8 以降だったらこちらで。

そういえば確かめてないけれど、3.2-ja では trim_to もちゃんと 2 バイト文字に対応しているのだろうか。もし対応していたら、あまり意味がなくなっちゃうかも。

でもひょっとして全角も 1 文字換算で数える仕様とかだとイヤーンな感じだし、末尾に「…」を付けるのがイイという人もいるだろうから、まあ一応念のため公開しておきたいと思います。使い方は、以前とまったく一緒です。

ちなみにあまりテストしてませんのでうまく動かない場合はご一報を。

※注)このスクリプトはmuraさんの記事(M’s folder: MT 長いタイトルをトリミングする)で公開されているものをEUC以外の文字コードに対応するように改変したものです。


package MT::Plugin::Trimj;

use MT::Template::Context;
use MT::ConfigMgr;
use Encode qw/ from_to /;

MT::Template::Context->add_global_filter(trimj_to => sub {

  my($str, $nstr, $ctx) = @_;
  my $sippo = '...';

  my $tmpstr = $str;

  my $c = MT::ConfigMgr->instance->PublishCharset;
  my $conv_in;
  if (lc $c eq lc 'Shift_JIS') {
    $conv_in = 'shiftjis';
  } elsif (lc $c eq lc 'ISO-2022-JP') {
    $conv_in = 'iso-2022-jp';
  } elsif (lc $c eq lc 'UTF-8') {
    $conv_in = 'utf8';
  } elsif (lc $c eq lc 'EUC-JP') {
    $conv_in = 'euc-jp';
  }
  if ($conv_in ne 'euc-jp') {
    from_to($str, $conv_in, 'euc-jp');
  }

  # 比較
  my $lenstr = length($str);
  if($lenstr <= $nstr) {
    return $tmpstr;
  }

  my $out = substr($str,0,$nstr);

  if ($out =~ /x8F$/ or $out =~ tr/x8ExA1-xFE// % 2) {
    chop $out;
    if($out =~ /x8F$/){
      chop $out;
    }
  }
  $out .= $sippo; # 尻尾を付けたくない場合は、コメントアウトのこと。

  if ($conv_in ne 'euc-jp') {
    from_to($out, 'euc-jp', $conv_in);
  }

  return $out;
});

1;

Similar Posts:

8 Responses to “日本語トリミングフィルタ(Encodeモジュール版)”

  1. M E T A B O L I S M Says:

    [sz] “Recent Comments & Trackback”部分改造。

     またかよ>俺  しばらくの間はMTカスタマイズが趣味化しそうな雰囲気(何故かr…

  2. kj-takのいろいろ言ってみます Says:

    タイトルをトリミングするplugin

    最近、タイトルが長いエントリーが目立ったのでpluginを入れました。 →人生迷…

  3. 'ohana Says:

    [o.]最近のコメント部分のカスタマイズ

    頂いた最近のコメントの投稿者名にマウスを合わせるとコメントを 表示するようにしま…

  4. Neuro-nex.net blog Says:

    text truncation

    Blog のお手入れ. 非常に子細な変更をしました. 長いテキストの trimm…

  5. アファメーションで独立・起業・夢実現。「いきなり!社長宣言!!」-“夢は口に出すことで実現する!”というアファメーション Says:

    ビズショップのトップページのフォーマット変えました。

    もっと見やすく。 公開していきなりですが、情報の見やすさを追求して、情報商材の比…

  6. MovableType備忘録 Says:

    Movable Type 4 で使用できるプラグイン

    Movable Type 4 からたくさんのタグが追加されてます。 テンプレートタグリファレンス グローバル・モディファイアリファレンス 今まででは、ちょ…

  7. ゴリ丸 Says:

    MTOS4.1にて使用させて頂こうとしたのですが、
    プラグイン一覧の画面で「読み込みに失敗しました」というエラーが表示されました。

    ログを確認したところ、以下のメッセージが出力されていたのですが、
    原因は何なのでしょうか?

    —————————————–
    プラグインでエラーが発生しました: /var/www/mt/plugins/mt-trimj.pl Undefined subroutine &MT::add_global_filter called at /var/www/mt/plugins/mt-trimj.pl line 44. Compilation failed in require at lib/MT.pm line 1110. (IP: 192.168.1.10)
    —————————————–

  8. ヴァリウム男爵 Says:

    ゴリ丸さんはじめまして。

    このプラグインは3.1系でしかテストしていなかったと思います。プラグインの実装方法は少し変わったみたいなので、MTOS(多分MT4でも?)ではどうやら利用できないみたいですね。最近はWordPressに乗り換えてしまったこともあり、MTのプラグインに関しては情報収集もあまりしておらず、放置状態でした。

    更に、いつのバージョンからかは良くわかりませんが、少なくともMTOS4.1で確認したところでは日本語でtrim_toを利用しても末尾が化けなくなっていました。なのであまりこのプラグインの必要性は薄いのではないかと思います。

    もし「いや、俺はトリムされたときに尻尾(…)がつけたいだけなんだ!」というのであれば、試しに作ってみたこちらを使ってみてください。(やはりテストは殆どしていませんが…)

    ただし以前とは異なり、EncodeモジュールではなくMT::I18Nを使うように変更しましたので、全角も1文字と数えます。「あいうえお」と言う文字に対してtrimj_to=”3″とした場合、「あいう…」となります。その点ご了承ください。

    しかしこのページ、レイアウトが崩れまくりですね。すみません。m(_,_)m

Leave a Reply