InDesign:テキストを属性ごと入れ替えるやつ

あのほら、記号や接続詞の前後の語句を入れ替える指示ってあるじゃんすか。
こういうやつ。

これ、前後の文字列で属性が違った場合、コピペで直すとテキストフレームかフレームグリッドかでペースト方式に気をつけないといけないし、ドラッグ&ドロップを利用しても2手かかる。めんどう。

なのでスクリプト書きました。

exchangeString_a_and_b.jsx
対応バージョンはCS4以降かなと想像。
ダウンロード後は “a_ 〜_b.jsx” 以外のところはわかりやすい名前に変えて大丈夫です。
22.07.6 ver_b:正規表現に対応してしまいました

えー使いかた。
前に、スクリプトのファイル名でパラメータを指定するやつってのを書いたんですが、
今回もそれです。
a__b の間の文字列がキーになります。
なので、必要に応じてファイルを複製して、中身いじらず、ファイル名だけ変えて使います。

はいテスト。「罪」と「罰」を入れ替えたい。

テキストを選択して、スクリプトをカチカチ。今回のキー文字列は「と」。

はいできた。属性もキープしてる。
やったーやったー。

もう一回テスト。

やったーやったー。

どうぞどうぞ。


……で、自信で使い勝手に疑問が湧いたのと、コメント欄にあったリクエスト分も納得なので改善してみました。

まずリクエスト分。入れ替えのきっかけ文字列が2組以上ある場合、両端を有効としてその外側で入れ替えるよう変更。
これを機に作例の誤字も直したw あとは選択範囲だけ気をつけていれば以前と同じ使用感のはずです。
これにより、きっかけ文字列が2組以上存在する時のエラー終了はなくなりました。

もうひとつ。以前は正規表現のメタ文字が使われているとエラーを吐いてました。
気づきませんでした…。
なので、せっかくなので正規表現対応としました。

入れ替えきっかけ文字列が正規表現メタ文字(. + – * / ^ | $ ! ? [ ] など)を含む場合、
“+” なら “\+”、”!?” なら “\!\?” という感じでエスケープするか、
“\Q” と “\E” で括ってください。”a_\Q+\E_b”、”a_\Q!?\E_b” って感じです。

ついでにもうひとつ。これだいじ。
入れ替えきっかけ文字列をなしにして “a__b” としておくと、実行時に入力を求めるようにしました。
これでワンタイムの面倒がなくなったね!

ver_b の変更点、以上です。どうぞどうぞ。

4 thoughts on “InDesign:テキストを属性ごと入れ替えるやつ

  1. ありそうでなかった発想がすばらしいです。これで地味な手作業から解放されます。
    Mac InDesign 2020、2021で動作確認いたしました。バッチリ問題なしです。

    隣接する語句が対象となっていますが、離れた語句への対応は難しいでしょうか。
    (例) 地震・雷・火事・親父 → 親父・地震・雷・火事・地震
    選択した文字列の両端を入れ替え、途中はそのままにする感じです。
    身の程知らずな提案ですが、実務ではこういうケースもあると思いますのでいかがでしょうか。

    • どうもどうも。
      入れ替えというからには、
      地震・雷・火事・親父 → 親父・雷・火事・地震
      ですかね(結果のほう地震が2こありまして)。
      現状の仕様ではファイル名を「〜a_・雷・火事・_b.jsx」で実現できるんですが、
      複数ある中黒をキーにして、選択テキストの最初と最後のグループを入れ替えるという意図ですよねたぶん。
      需要はありそうですねー。
      firstMatchとlastMatchをつかまえれば現状のコードから応用ききそうですね。
      ええとヒマになったらやりますw 年明けかなー…

      • AJABON GRINSMITH さん
        はい、私の意図することはそのとおりです。

        地震・雷・火事・親父 → 親父・雷・火事・地震  で間違いありません。

        私の例が誤っていました。ちゃんと見たのになあ。
        説明用に記載したのに、逆にわかりにくくなってしまいました。すみません。

        本スクリプトは現在の仕様でもたいへん便利だと思いますので使わせていただきます。
        本文がフレームグリッドで設計されている業務が、秋頃からスタートする予定ですので大活躍の予感がしています。

        • ただいま本業が立て込んでおり、別件でおかねもらえる案件も立て込んでおり、
          別件でモンハンが発売してしまったので、しばらくお待ちください…

コメントを残す

メールアドレスが公開されることはありません。

*