文字列を一定幅にトリムするmt-trimj2

MTタグのtrim_toオプションは(英語圏ソフトの常で)1バイト文字しか想定してない→2バイト文字が混じった文章をtrim_toで切ると末尾が化けちゃう→これ非常に格好悪いので、ココではContext.pmにパッチして末尾化けを回避してました。

が、この手はEUC-JP限定→他文字コードのヒトだと困っちゃうので当然対策が→UTF-8やSJISな環境にも対応した日本語対応トリミングフィルタってのが出てたのは知ってたんすけども、さらにその改造版を発見しました。

re-in-car-na-tion: トリミングプラグインを改造してみる

日本語対応トリミングフィルタは便利なんだけど、プロポーショナルフォントだと幅=文字数ではないのでTrimする幅を決めにくかったりする。 そこで文字種から大雑把な幅を算出して一定の幅でTrimするように書き直してみた。

どういうことかというと、

  • 全角文字の幅を2
  • カナやアルファベット大文字の幅を1.8
  • 半角数字の幅を1

    等と計算し、「文字数」じゃなくて「文字が表示される幅」を基準としてトリミングするというもの。

    考えてみればトリミングフィルタの使い道というのは大抵「文字数を区切って同じような幅に揃えたい」だと思われ、そういう意味でこのフィルタは非常に合理的かも。

    使い方は

    • 上記ページで公開されているソースをmt-trimj2.plとして保存し、/mt/pluginsに投入
    • 等幅で区切りたい要素に trimj2_to="20"のように追記する

    ↑こんだけ(^_^;)

    特に、サイドバーでトラックバックやコメントに関する情報を表示してて折り返しが頻繁に発生してる場合とかに便利かと思われ。

    <$MTEntryTitle trimj2_to="20"$>

    短くしたい要素を↑こんな感じにしておけば、一定幅で区切って表示出来ます。

    tDiary風コメント表示も、たぶんこちらで区切ってた方がバランスが良くなります。「コメントのアタマがurl等の半角文字なときに表示幅が詰まっちゃう」症状が軽減されるかと。