青空文庫をPSPで読む(その1)
著作権の切れた書籍をWebで公開している青空文庫というサービスがあります。これを無線LANとWebブラウザを内蔵しているPSPで見られたら、外出先でも電子ブックとして使えてどんなに便利だろうと思ってアクセスしてみました。ところがPSP内蔵のWebブラウザはXHTMLで導入されたルビタグ(<ruby>~</ruby>)をサポートしていないため、「蠍(さそり)」のように漢字の横に括弧でルビが表示され、これが非常に見にくいです。そこで青空文庫所蔵の文書からルビをすべて削除するフィルタリングサービスを作ってみました。→青空文庫ゲートウェイ (使い方)例えば宮沢賢治の銀河鉄道の夜を読みたい場合は、上記の青空文庫ゲートウェイにアクセスして、作者ID=81、文書ID=43737を入力すればフィルタリングした文書を読むことができます。実装はPHPで行いました。コードの核の部分だけ以下に示します。$fp = fopen($filename, "r");if ($fp == FALSE) { echo "文書が存在しません。"; exit();}mb_internal_encoding("Shift_JIS");while (!feof($fp)) { $pos1 = 0; $s = fgets($fp); $s = str_replace("../../default.css", "http://www.aozora.gr.jp/cards/default.css", $s); while (($pos1 = strpos($s, "<ruby>", $pos1))) { $pos1 += 6; // 6 for strlen("<ruby>") while (!($pos2 = strpos($s, "</ruby>", $pos1))) { $pos1 += strlen($s); $s .= fgets($fp); } print(preg_replace("/<ruby><rb>(.*)<\/rb>.*<\/ruby>/s", "\\1", substr($s, 0, $pos2 + 7))); $pos1 = 0; $s = substr($s, $pos2 + 7); } print($s);}fclose($fp);$filenameには、文書のURLを代入しています。ただこのスクリプトではすべてのルビタグが削除されず、残ってしまうものがあります。正規表現にマッチしない場合があるようですが原因は調査中です。今後もデバッグを続けていきます。