DTPab

DTPにまつわるあれこれ

タブ/改行テキストの順序を入れ替える

今回はESTKを離れてclipMenuの話です。

ClipMenu.com: クリップボード管理ソフト - ClipMenu.com

長らく使っているこのclipMenuですが、今年に入ってやっとマクロを使い始めています。一度clipMenuのマクロに慣れてしまうともう戻れません。今回は僕がよく使うマクロの一つを紹介します(マクロの作り方・使い方は公式のヘルプをご参照ください)。
図のように、テキストの順序を入れ替えたいというときにつかうマクロです。

f:id:uske_S:20170605150411p:plain

左から下、右へ移って下へ、という流れ方をしているテキストですが、 これを左から右へ流れながら上から下へ、という流れ方に変えたい。

単純に正規表現だけで検索置換をすることもできるのですが、 (この例ならまだしも)項目数が多いとさすがに辛いです。

コードは記事の末尾にアップしますが、このマクロを使えば、
文字選択>コピー>clipMenu起動>マクロ実行>折り返し項目数入力>ペースト
で済みます。
実際の動作はこんな感じです。

f:id:uske_S:20170605151214g:plain

以下がコードです。

var input = prompt('折り返し項目数:');
var ary = clipText.split (/[ \r\n\t]/gm);
if (isNaN (input)) return "error"; //…A
input = parseInt(input,10);
for (var i=0; i<input; i++){
    eval ("var tempAry" + i + "=[];"); //…B
    }
for (var i=0; i<ary.length; i++){
    eval ("tempAry" + (i % input) + ".push(ary[i])"); //…C
    }
var res = "";
for (var i=0; i<input; i++){
    eval ("res += tempAry" + i + ".join('\\r')+'\\r';");
    }

return res;

clipTextオブジェクトはclipMenuが用意しているもので、クリップボード内の文字列です。これをsplitメソッドで配列に変換します。どの区切り文字をもってひとつの項目と定義するかはsplitメソッドの引数(/[ \r\n\t]/gm)で決めます。

仮にpromptで入力された文字列が半角数字でない場合は、クリップボードの中身が「error」となってマクロ自体は終了(A)します(clipMenuがクリップボードの内容を覚えているので書き換えてしまっています)。

あとは折り返すだけの配列を作り(B)、剰余演算子(%)を使ってループしながらtempAry0〜の配列に順番に放り込んでいく(C)感じです。

InDesign上での改行を想定しているため、区切り文字に「\r」を使っていますが、エディタによっては「\n(LF)」などにしてください。

例は手作業でやっても大した手間ではありませんが、このマクロはもっと大量の項目を入れ替える場合に重宝します。