iso tank - blosxom 2008年

mark_oops(自作プラグイン)

以前はsnap_inプラグインというのを導入していたが、HTMLタグマークアップ系の統合的な(?)プラグインを作ってみたいなーとか? 単に作者である俺が楽して記事作りたいだけみたいな? wikipedia方式のマークアップ方法を採り入れてさー、なんかこうさー楽にさー。

/plugin/mark_oops.txt

とりあえず今はこんなんで。クオート三つで強調とかシャープ二個でAAスタイルとかブラケット二つでリンクとかはコメントのそれと同じ。あとブラケット二つに「画像:」って入れるとimgタグ作るようにしたり。おおっとこれはコメントの方には反映されてないのぜ。

あとはリスト・引用・文字サイズ変更・強制改行くらいは対応させておこうかなー。基本的においら基本的なタグしか使ってないからこんなもんで間に合うしなー。

ε========三ヾ( ∵)ノ ビューン

foreshortened改造 3かいめ

1/30追加

ちなみに昨日仕事中にゲームの遊び方について訊ねて来た隣の人は、昨日の午後、突然高熱を発してお倒れになられた。今日は休んだ。風邪である。

でPerlです。blosxomです。ようするに朝から今まで「データをバイト単位で区切る関数は存在する(substrなど)けど、文字単位で区切る関数は存在しない」ことに頭を悩ませていたのです。

どういうことかっていうと、Perlは文字列を扱うのがとても上手なくせに、文字の数を数えるのが苦手なのです。でもこれPerlのせいじゃないとおもうけどね。先述のsubstrという関数はデータをバイト単位で区切るもんだから、つまりマルチバイト文字の後ろのほうだけ削ってしまっても気づかないので、最後の文字がそのまま化けて表示されてしまう。

普通にHTMLで表示する分には「あー文字化けしてやんのあはは」で済むんだけどこれがRSSとかのいわゆるXMLで扱おうとするとだいぶうまくない。XML全体としてエラーを吐き出してしまうのでRSSとかがまったく機能しなくなる。

で、なにをしてるのかっていうと「ブログの記事の最初の方を抜き出して要約文として仕立て上げること」をやっているんですけどね。blosxomでいうところのforeshortenedってやつ。本文短縮化プラグインです。

英語の場合1バイト文字しかないからsubstrで問題ない。ひらがな・かたかなは2バイト、漢字にいたっては3バイトと、バイト数がばらばらなんでこれが非常にやっかい。考えた。拙者かなり考えた。むむむむむ、む。

そういや先日、PythonいじりまくってURLエンコード/デコードするCGI作ったじゃないですか。あれってどうやったっけ。あれ? あれって? んんん。おやおや?

日記を見返すと、URLエンコードするのに「UTF-8文字列→Unicodeにデコード→他の文字列にエンコード→URLエンコード」という方法をとっていた。そうそう、そうそうそう。

じゃあさ、文字を区切るのに「UTF-8文字列→内部文字列にデコード→文字列をチョン→UTF-8にエンコード」ってしたらどうなるよ? よ? よ。

ググった。PerlのモジュールのひとつにEncodeっていうのがある。確かよくJcodeとくらべられるやつだ。めんどくさいからそういうことしなけりゃいいじゃんってことでほっぽってたので忘れてた。

つまりこう。

$STR = encode('utf-8', substr(decode('utf-8', $STR), 0, $LENGTH));

結果は◎。大成功。やべ、俺神すぎ\(^o^)/なわけない。結局substrで文字単位で文字列を区切ることができたわけだ。気付け。調べろ。俺。ばかうんこ。

そんなわけでRSSのdescriptionタグにこれで短縮化した文字列をはめこむことができるー。ちなみにcontent:encodedはあまりにもデータ量が大きすぎるので削った。いいよね?

さーて次はmixipostを何とかしたいなぁ。仕事? やらん。

(1/28追記)foreshortened本体のソースはこんな感じになったコード的に間違ってないといいんだけど。