選択文字をドキュメント中から正規表現で検索して置換
今回の作品集のお仕事。
読めない名前の出現率が高くて困ったちゃん。
作品にフルネームのキャプションを入れてかなければいけないんだけど、
なぜか手がかりになるのが苗字しかない。
そこで、
例えば「山田.{2,3}」と入力すれば、
「山田花子」だったり「山田太郎」だったり「山田一二三」を
ページの最後にある作者一覧から取得できれば楽じゃないのという、
なまけもの根性から生まれたスクリプト。
汎用性があるかどうか?
どうだろう?
//ドキュメント中に存在するテキストを正規表現で検索して置換。複数ある場合は手で修正。 //2009-09-17 とりあえず (function(){ #include 'c.js'; function myerror (message){alert(message)}; if(app.activeDocument.selection == 0)return myerror('検索する文字列を選択してください。'); // var SELECTION = app.activeDocument.selection[0]; // if(!SELECTION.constructor.name.match('Word|TextStyleRange|Text|Paragraph|Character'))return myerror('検索する文字列を選択してください。'); //検索の初期化 app.findGrepPreferences = 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 = SELECTION.contents; // var HIT_WORD = []; // c(app.activeDocument.findGrep(true)).each(function(){SELECTION.contents !== this.contents && HIT_WORD.push(this.contents);}); //重複の削除 HIT_WORD = uniq(HIT_WORD); if(HIT_WORD.length == 0)return myerror(SELECTION.contents +'にヒットする文字列が見つかりませんでした。') SELECTION.contents = HIT_WORD.length > 1 ? "["+HIT_WORD.join (',') +"]" : HIT_WORD[0]; alert('検索が終わりました。'); return; //UNIQ function uniq(arr){ for (var i=0,l=arr.length; i<l; i++) { for (var j=0; j<i; j++) { if (arr[i] === arr[j]) { arr.splice(i--, l-- && 1); } } } return arr; } })();
作者一覧、こればっかりはスクリプトでは
どうしようもないので我慢して打ち込みました。