常用漢字以外が使われているか調べる (Photoshop CS/CS2/CS3/CS4編)

今回も常用漢字以外が使われているかどうか調べるスクリプトです。Photoshop CS以降で動作するようになっています。来年あたりに出ると思われるCS5でも多分、動くでしょう。
Photoshopの場合、イラストレータと違いスクリプトでは手軽に文字を処理できません。特に1文字ごと処理することが難しい(Scripting Listenerを使って記録すれば不可能ではない)ため、仕方なく常用漢字以外を■に置き換えるという方法を採っています。
まず、前回同様に以下のサイトから常用漢字のファイルをダウンロードしデスクトップなど分かりやすいところに保存してください。

●常用漢字データ
http://www.openspc2.org/projectX/data/jyouyoukanjidata.txt

最初のスクリプトは単純に常用漢字以外が使われているかどうかを調べるものです。常用漢字以外があれば、ダイアログを表示します。

function kanjiChecker(txt){
for (var i=0; i<32; i++){
k += String.fromCharCode(i);
}
k += kanjidata;
for(i=0; i<txt.length; i++){
var p = k.indexOf(txt.charAt(i));
if (p < 0){
alert((i+1)+"番目に常用漢字以外の漢字が含まれています。");
break; // 1文字でもあったら以後は処理しません
}
}
}
var kanjidata;
var filename = File.openDialog("常用漢字ファイルを指定してください");
if (filename){
var fileObj = new File(filename);
var flag = fileObj.open("r");
if (flag == true){
kanjidata = fileObj.read();
fileObj.close();
sel = app.activeDocument.activeLayer; // 最初に選択したテキストブロックのみ対象
kanjiChecker(sel.textItem.contents);
}else{
alert("ファイルが開けませんでした");
}
}

上記のスクリプトでは常用漢字以外が多数含まれている場合に不便なのと、どこが常用漢字なのかわかりません。
そこで、常用漢字以外であれば■に文字を置換することで分かりやすくしたものが以下のスクリプトです。
ただし、実行前に注意しておくことがあります。それは、文字の色などを1文字単位で設定していると文字属性が失われてしまうということです。このため、文字属性を個別に設定する前にスクリプトを実行するようにしてください。

function kanjiChecker(txt){
for (var i=0; i<32; i++){
k += String.fromCharCode(i);
}
k += kanjidata;
var result = "";
for(i=0; i<txt.length; i++){
var p = k.indexOf(txt.charAt(i));
if (p < 0){
result += "■";
}else{
result += txt.charAt(i);
}
}
return result;
}
var kanjidata;
var filename = File.openDialog("常用漢字ファイルを指定してください");
if (filename){
var fileObj = new File(filename);
var flag = fileObj.open("r");
if (flag == true){
kanjidata = fileObj.read();
fileObj.close();
sel = app.activeDocument.activeLayer.textItem; // 最初に選択したテキストブロックのみ対象
sel.contents = kanjiChecker(sel.contents);
}else{
alert("ファイルが開けませんでした");
}
}

[サンプルをダウンロード]