home ホームDATA/HTMLに役立つヒントAppleScript for OSX >Mozilla_Correct

Mozilla_Correct

あなたはここへ来た、15964番目の人です。(2005/4/28から)

Mozilla/Nvu のEdit Page ▲ページトップ

 MozillaやNvuは無料で使えて、Edit Page機能(WYSIWYGタイプHTMLエディタ)が使えるという大変ありがたーいものです。特にOS Xでは手頃な価格でWYSIWYGタイプのHTMLエディタがないため、非常に嬉しいです。

 が、実はこの二つには共通した欠点があります。文章が長くなると、ソースレベルで勝手に改行を入れてしまうんですね。試してみたところ、72文字(144バイト)で強制的に改行が入っちゃうみたいです。

 これ、何が問題かというと、単語の間だろうがなんだろうがおかまいなしに改行されてしまうことなんです。例えば「単語」の間に改行が入ると、ブラウザによっては次のように奇妙な半角スペースが空いてしまいます。

「単 語」←「単」と「語」の間に変なスペースが入って表示される。

 文章の途中にある妙なスペースは美しくないし、ブラウザの検索機能で「単語」と検索をかけても、上のように分割されたところにはヒットしません。これは困ります。googleなどの検索エンジンにクロールされた場合はどうなるのかまでは検証していないので不明です。

 最初、Jchecker 3.0(シェアウェア)で整形すればいいやと思ったんですが、現行バージョン(rev.3.05)では、英単語がくっつくのを防ぐために改行を取るときにわざと半角スペースが入る仕様になっているそうです。問い合わせをしたときには「前後が日本語である場合に限り、スペースなしでつなぐ仕様に変更するかもしれない。検討します」とのことでした。

 で、仕方なくAppleScriptとPerlで不要な改行を取り去るドロップレットを自作しました。それが「Mozilla_Correct」です。

Mozilla_Correct の使い方 ▲ページトップ

 Mozilla、Nvuで作成したHTMLファイル、またはそれが入っているフォルダをMozilla_Correctにドラッグアンドドロップしてください。フォルダをドロップした場合、その下のサブフォルダの中も処理します。いわゆる再起処理というヤツです。

 処理対象のファイルは、拡張子が「.html」「.htm」「.shtml」「.shtm」のファイルだけです。「.cgi」「.txt」などは処理しません。

 うちの環境(PowerBook G4 1GHz)では、80ファイルの処理に3秒程度です。

大事な注意事項

●拡張子に注意

 拡張子で処理対象ファイルを見分けていますので、バイナリファイルであっても拡張子が「.html」「.htm」「.shtml」「.shtm」に該当すると処理しようとします。たぶんバイナリの場合は文字コードの判定でエラーが出るので実質的には大丈夫と思いますが、注意してください。

●対応している文字コード

 対応している文字コードは、JIS/SJIS/EUC/UTF8/Unicode(UTF-16)です。これ以外の文字コードの場合、処理対象から外されます。

●タグの階層処理はしない。

 タグにインデントをつけるななど、階層処理はしません。てーか、文中の改行を取る以外はほとんど何もしません。あくまで目的は文章途中の改行を取ることなので。必要であればJcheckerなどで整形してください。

<pre>タグに注意。

 最大の欠点は、<pre>〜</pre>タグの間であろうと、改行を取ってしまうケースがあること。

 ver.0.2b 以降、「英文以外の文字 + 改行 + 英文以外の文字」というパターンに当てはまった場合、改行を取るようになっています。つまり、<pre>タグの中で「日本語+ 改行 + 日本語」となっている箇所があると、その改行が削除されてしまいます。

 この問題は、日本語の後にわざと半角スペースを入れることで回避できます。たとえば「日本語+ 半角スペース + 改行 + 日本語」としたり「日本語 + 改行 + 半角スペース + 日本語」のようにします。半角スペースの代わりにタブでもかまいません。

ver0.21bまでの大バグ ▲ページトップ

 ※この項で触れている問題はver0.22bで解決しました。メモがわりに残してあります。

 うーん、やばい。ver.0.21bでとんでもないことが発覚。ファイル操作の基本を忘れてました。このスクリプト、HTMLファイルがEUCで書かれている場合は正常に動作しますが、jisやsjis、unicodeで書かれている場合はきちんと動作しません。ファイルの文字コードがこれらの場合はパターンマッチに失敗します。

 回避するには、ファイルの文字コードを判定し、それをいったんEUCに変換してから処理を施し、元の文字コードに変換し直してからファイルに書き戻す、という手順を踏む必要があります。

 OS X 10.3xにはPerl 5.8xがインストールされていますから、文字関係はEncode.pmを使えば何とかなるはずなんですけど、Encode.pmでファイルの文字コードを判定する方法がまだわかりません。これがわかればいいんですけど。知ってる方、教えてください。

 次善の策として、jcode.plも同梱してみました。ところが、うまくいかないんですよ。「255エラーがおきました」という謎のエラーがでます。どう見てもPerlが出しているエラーじゃないです。今のところ原因不明。

●jcode.plのバンドル方法 その1(バンドルそのものに失敗します)場所は「Contents/Resources/bandle.pl」と同じ階層。

require 'jcode.pl';

 これが当たり前のやり方な訳ですけど、Perlがjcode.plを認識できず、エラーがでます。どうも.appフォルダ(システム側にはアプリケーションとして認識される)の中にあるせいのようです。

●特殊変数$0を使った方式

$scriptpath = $0 ; # $0には実行中のスクリプト(bandle.pl)のパスが入る
$scriptpath =~ s/bandleエ.pl/jcodeエ.pl/ig ; # bandle.plをjcode.plにすり替える
require "$scriptpath" ; # やっとjcode.plをリクワイア

 このやり方でrequireは成功します。ところが、その後jcode.plのルーチンを呼び出すと、その時点で「255エラーがおきました」という謎のエラーがでてしまいます。このエラーの出方、どう見てもPerlの出しているエラーじゃない。てーことはAppleScriptの出しているエラーなのかというと、なぜAppleScriptに制御を戻していない時点のエラーがAppleScriptエラーとして表示されるのか、という疑問がでてきて、どーもわからん。

 こんな感じで、今のところファイルの漢字コードを調べることができてないです。ふぅ(ver.0.22bで対処済み)。

動作環境など ▲ページトップ

●動作環境

 開発環境はMacintosh OSX 10.3.9です。10.3.x以降ならperl 5.8なので動くとは思いますが、AppleScriptに微妙に変更があったみたいなので保証はできません。

●フリーウェアです

 フリーウェアです。改造して使うことも、それを再配布することもご自由にどうぞ。あ、雑誌等で紹介する場合は送ってくれると嬉しいな。

 特に改造については、僕の使いやすいようにタグの整形を行っていますので、それでは足りない/やりすぎだという人も多いでしょう。改造にはPerlの知識が必要になりますが、見よう見まねでけっこう何とかなるんじゃないでしょうか。存分に改造して使ってください。

 また、「AppleScript for OS X」で解説しているAppleScriptとPerlの組み合わせのひな形としてお使いいただいても結構です。例えば、最後に表示される「○○個のファイルを処理しました。」といった表示は、Perl側で文字を生成してAppleScriptに渡しています。実はこんなことをする必要はなく、Perlは単純に個数だけをAppleScript側に渡し、文字列の生成はAppleScript側でやらせた方が簡単です。EUCで動作しているPerlスクリプトから、文字化けなしでどうやってAppleScript側に日本語を渡すか、という実例というか教材というか、そんな風に見ることもできます。

●補償はありません

 このスクリプトを使って被ったいかなる被害も補償はありません。オウンリスクでお使いください。

 最初はHTMLファイルのバックアップを取っておいて、必ずテストして納得がいってからお使いください。まだβですし。

ワンポイント改造(オプション) ▲ページトップ

●処理したファイルのリストをファイルに書き出す。

 デフォルトでは「処理を終えました。○○個のファイルを処理しました。」としか表示しません。どのファイルを処理したのか確認したいよーという人は、次の手順で、改造しちまってください。処理したファイルのリストを、デスクトップに「Mozilla_Correct.log」という名前で作るようになります。

1.Mozilla_Correctを「コントロール+クリック」して「パッケージの内容を表示する」を選択します。

2.「Contents/Resources/bandle.pl」をJeditやmiなど文字コード/改行コードをコントロールできるテキストエディタで開き、次の部分を変更します。

●オリジナル(青い部分を変更します)
# ===================================================
# 変数の設定
# ===================================================
# デスクトップに処理ファイルを出力する場合は1、しなければ0
$log_print = "0";

# ↑上を1にした場合は、あなたのアカウント名(ユーザー名)を記入。
$account = "name" ;

●変更後
# ===================================================
# 変数の設定
# ===================================================
# デスクトップに処理ファイルを出力する場合は1、しなければ0

$log_print = "1";

# ↑上を1にした場合は、あなたのアカウント名(ユーザー名)を記入。
$account = "mizusawa" ;

※アカウントというのは、「システム環境設定」の「アカウント」で設定したあなたの「ユーザ名」(英文の名前)のことです。

●連続した半角スペースを一つにまとめる。

 以前は連続した半角スペースを一つにまとめてしましたが、ver0.21β以降は連続した半角スペースがあってもそのままにします。preタグなどで連続した半角スペースで頭揃えをするケースがあるためです。昔のように連続した半角スペースを一つにまとめたい場合は次の改造を施します。

 上の「処理したファイルのリストをファイルに書き出す」と同様、「Contents/Resources/bandle.pl」をJeditやmiなど漢字コード/改行コードをコントロールできるテキストエディタで開きます。次の部分を変更します。

●オリジナル(青い部分を変更します)
# ===================================================
# 変数の設定
# ===================================================
# デスクトップに処理ファイルを出力する場合は1、しなければ0
$log_print = "0";

# ↑上を1にした場合は、あなたのアカウント名(ユーザー名)を記入。
$account = "name" ;

# 連続した半角スペースを1つにまとめるなら1、そのままなら0
$mono_space = "0";

●変更後
# ===================================================
# 変数の設定
# ===================================================
# デスクトップに処理ファイルを出力する場合は1、しなければ0
$log_print = "0";

# ↑上を1にした場合は、あなたのアカウント名(ユーザー名)を記入。
$account = "name" ;

# 連続した半角スペースを1つにまとめるなら1、そのままなら0
$mono_space = "1";

これで連続したスペースを一つにまとめるようになります。

ダウンロード/バージョン履歴 ▲ページトップ

●ダウンロードは「DATA/Mozilla_Correct」ページからお願いします。

ver.0.26β 2005/12/29

 ・英記号のリストに「/」が入っていなかった点を修正。

ver.0.25β 2005/12/27

 ・修正のなかったファイルは保存し直さなくなった。

 ・英記号(改行)英文字、英記号(改行)英記号の場合、改行を取らなくなった。

ver.0.24β 2005/7/25

 ・「1,000(改行)2,000」などの位取りが「1 000 2 000」のように削除されてしまうバグを修正(その他の部分も同様の正規表現の間違いを修正)。

ver.0.23β 2005/5/7

 ・処理対象ファイルの誤判定バグを修正。
 ・文字コードが判定できない場合、レポートは出すものの、処理は続行するようにした。
 ・文字コードが判定できない場合、文字コードが処理対象外の場合、logに出力するようにした(log出力の設定になっていた場合)。

 やーっとまともに動くようになってきた。てぇか、このくらいまで来てからβリリースしろよ。

ver.0.22β 2005/5/6

・0.21bで発覚した「EUC以外のファイルでは正しく動作しない」問題に対処。ファイルがjis/sjis/euc/utf8/unicodeで書かれている場合は正常に動作するようになった。これ以外の文字コードの場合は対象外として処理を中止する。
・処理ルールをちょっとまとめておく。以下、「日本語」となっているのは実際には英字+記号以外という指定になっている。
  日本語+改行+日本語の場合=>改行を取る
  英字+改行+英字の場合=>英字+半角スペース+英字
  英字+改行+日本語の場合=>改行を取る
  日本語+改行+英字の場合=>改行を取る
・<>の間の連続したスペースはできるだけ一つにまとめるようにした。完全ではない。
・Nvuでは段落を作ろうとすると「<br><br>」としてしまうようなので、これを「<p>」に変換するようにした。よけいなお世話?

ver.0.21β 2005/5/2

 連続した半角スペースを一つにまとめていたが、これをオプションとした。<pre>タグでわざと連続スペースを使うケースがあるため。

ver.0.2r2β 2005/4/29

 ドジった。0.2βのバグフィックス版。「タグ + 改行 + タグ」というパターンで改行を取っていた。アホか、俺は。

ver.0.2β 2005/4/28

 アルゴリズムを変更。JavaScriptの構文を壊すことはなくなった。ただし、<pre>タグの場合、まだ改行を間違って削除する可能性がある。「Mozilla_Correct の使い方」を参照のこと。

ver.0.1β 2005/4/28

 最初のバージョン。preタグの中も改行を取ってしまう、 JavaScriptの構文を壊してしまうという欠点を持つ。

 正直、僕は限られたタグしか使わないので、あんまりαでは問題点がでてこないんじゃなかろーか。ってことで、βとしてリリースします。不具合とか希望とかありましたらお知らせください。基本的にご自由に改造してお使いいただくことを前提にしていますので、ご希望を全部かなえるかどうかは微妙です(^_^; このままβで終わる可能性も大きいです(^_^;;;;

 ご連絡は「MAC OS X Darwin Tips掲示板」までお願いします。タイトルまたは記事中に「Mozilla_Correct」のことだとはっきりわかるように書いてください。
 掲示板で「Mozilla Correct」を検索。

関連リンク ▲ページトップ

■Nvu関係

Nvu(エヌビュー)を使ってみよう Nvuの日本語コミュニティを目指している模様。

Nvu用試製JLP - あ Nvuのメニューなどを日本語化してくれるJLPを配付している。

Nvu User Guide 日本語訳 について Nvu User Guideの日本語訳。

Nvuの使い方 初歩的な使い方の解説ページ。あたしゃこのページを見るまでテーブル操作の方法を知らなかったっす。Macには右クリックの文化がないですからねぇ(^^;;;

■Mozilla関係

Home of the Mozilla Project 現在のMozilla総本山。

Mozilla Japan 上の日本語版ページ。

Mozilla Corporation Mozilla系の配布ページ。

もじら組 Mozilla系アプリケーションの日本語コミュニティサイト。