Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2009-06-16

[][][]行分かれしたくない単語を検索する

名前など、固有名詞が行分かれしては困る単語を探し出します。たとえば、「市川せうぞー」が行分かれしているのを部分を見つけてくれます。チェックしたい部分を選択して

f:id:seuzo:20090616030639p:image

スクリプトを動かすと... その箇所を選択して教えてくれます。

f:id:seuzo:20090616030741p:image

正規表現も使えるので、ある程度便利に使えるかもしれません。


//行分かれをチェックしたい単語のリスト
var my_list = [
"市川せうぞー",
"シンクス",
"御.",
];//

////////////////////////////////////////////エラー処理 
function myerror(mess) { 
  if (arguments.length > 0) { alert(mess); }
  exit();
}

////////////////////////////////////////////正規表現検索
//正規表現で検索して、ヒットオブジェクトを返すだけ
function my_regex(my_range_obj, my_find_str) {
        //検索の初期化
        app.findGrepPreferences = NothingEnum.nothing;
        app.changeGrepPreferences = NothingEnum.nothing;
        //検索オプション
        app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
        app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
        app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
        app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
        app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
        app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
        app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか

        app.findGrepPreferences.findWhat = my_find_str;//検索文字の設定
         return my_range_obj.findGrep();//検索の実行
}


/////実行
////////////////まずは選択しているもののチェック
if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
var mydocument = app.activeDocument;
if (mydocument.selection.length == 0) {myerror("テキストを選択してください")}
var myselection = mydocument.selection[0];
var myclass =myselection.reflect.name;
myclass = "Text, TextColumn, Story, Paragraph, Line, Word, Character, TextStyleRange".match(myclass);
if (myclass == null) {myerror("テキストを選択してください")}

var my_zoom = app.activeWindow.zoomPercentage;

for (var i = 0; i< my_list.length; i++) {
	var hit_obj = my_regex(myselection, my_list[i]);
	for (var ii = 0; ii< hit_obj.length; ii++) {
		if (hit_obj[ii].lines.length > 1) {
			hit_obj[ii].select();
			app.activeWindow.zoomPercentage = my_zoom; //選択位置をフォーカス
			alert (hit_obj[ii].contents + "が行分かれしています");
		}
	}
}