コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

073.【Id】[基本段落]があたっている段落を[段落スタイルなし]にする

挙動

  1. inddを開いた状態で実行する
  2. 「(^.+$|\r)」で正規表現検索を行う
  3. 2.で取得した段落のうち、[基本段落]があたっているものに対し[段落スタイルなし]をあてがう(あたっている段落スタイルは変えるが、現状の体裁を保持する)

InDesignの検索置換を利用しているため、ロックされたレイヤーにあるテキストフレーム・ロックされたテキストフレームは対象としない。

コード

var main = function () {
  app.scriptPreferences.enableRedraw = false;
  var doc = app.activeDocument;
  var tgts = myFindGrep("(^.+$|\r)");
  for (var i = 0; i < tgts.length; i++) {
    if (tgts[i].appliedParagraphStyle.name === "[基本段落]") {
      tgts[i].applyParagraphStyle(doc.paragraphStyles.item("[段落スタイルなし]"), false);
    }
  }
  function myFindGrep(rgx) {
    app.findGrepPreferences = NothingEnum.NOTHING;
    app.findGrepPreferences.findWhat = rgx;
    var result = app.findGrep();
    app.findGrepPreferences = NothingEnum.NOTHING;
    return result;
  }
};
app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.FAST_ENTIRE_SCRIPT, File.decode($.fileName.replace(/^.+\//, "")));

メモ

段落スタイルの変更について

appliedParagraphStyleプロパティを変更するやり方ではオーバーライドを保持できない。
一方 applyParagraphStyle(using, [clearingOverrides]) メソッドは第二引数 [clearingOverrides] で既存の属性を消去するかどうか指定できる。
- true:既存の属性を消去する(規定値)
- false:既存の属性を消去しない

積み残し

  • テキスト終端文字(#のような制御文字で示されるあれ)だけの行が[基本段落]のままになってしまう。
    検索でテキスト終端文字がとれないようなので、地道に全テキストフレーム・表を再起処理で探っていって、linesひとつひとつのapplyParagraphStyleを見ていくのが正解?
    (テキスト終端文字だけの行はparagraphsではなくlines扱い)
  • 段落スタイルのなかで、基準スタイルが [基本段落] になっているものを [段落スタイルなし] にする。