ちょくちょく見に行くInDesign USフォーラムで見かけた有益情報を共有しようかなと思って記事にしてみました。好評なら定期的にやろうかな…。 キュレーション自体はかなり自分基準です😅
- 長いドキュメントで
findGrep()
メソッドを実行すると待機時間が長すぎるためユーザーに処理中であることを伝えたいが、1行のメソッドなのでScriptUIのprogressBar
が使えない。どうしたらいい?*1
手法としてはpalette
を使って対応してはどうか、というアイディア。確かにそれはアリだな〜と思ったので試してみました。
palette
を指定したScriptUIのウィンドウはモーダレスダイアログ(ウィンドウを出したままアプリを操作できる)になるのですが、スクリプト自体はfindGrep()
メソッドの処理中なのでInDesignを操作することはできない、という挙動になりました。
これは悪くないアイディアだな〜と思って数回試したんですが、ある時はメインウィンドウの裏側に隠れてしまったり、ある時はダイアログが表示されなかったり(別のアプリをアクティベートしてからInDesignに戻ると表示されたりする)、少なくとも自分の環境では安定して動作させることができませんでした。
- 正規表現検索置換で、ある単語があるストーリーの末尾に文字を挿入したい*2。
質問では「Baseball」という単語があったら、そのストーリーの最後にアスタリスク「*」を挿入したいという内容です。
正解として提示された正規表現は(?s)Baseball.*\K$
でした。
(?s)
でシングルラインモード*3にし、「Baseball」が見つかったら、末尾を示す$
までマッチさせて直前の挿入点を\K
でマッチさせるというアイディア。
ちなみにストーリーの最後を示す\Z
という正規表現もあるのですが、\K
の良さはその直後の文字のみをマッチさせるというところ。\Z
を使って(?s)Baseball.*\Z$
などとしても、結局Baseballからストーリーの最後の文字まではマッチしてしまうので*4うまくありません。ストーリーの最後に1文字挿入するために(?s)(Baseball.*)\Z$
で検索して$1★
で置換するとか無理やり処理することもできますが、検索置換で文字列が置き換わるためルビが消えるとかオーバーライドが解除されるとかいろんな弊害が考えられます。
\K
を使うことでそうしたリスクも回避できているので、おそらくこの正規表現が最適解なのでは、と思いました。
\K
や$
については過去に仕様が変わっている*5ので、古いですが当時の記事も念のため紹介しておきます。
というわけで久しぶりのブログ記事でした。
*1:参照元:Solved: Re: InDesign script executing after dialog.show() - Adobe Support Community - 13847029
*2:参照元:Solved: Grep Question: Command to find word then go to end... - Adobe Support Community - 13859615
*3:改行文字も含んですべてのテキストが1行に繋がったように検索できる検索オプション
*4:肯定後読みに文字数が不定長になるような正規表現が使えない
*5:\KはCS6から使えるようになった