今回はESTKを離れてclipMenuの話です。
ClipMenu.com: クリップボード管理ソフト - ClipMenu.com
長らく使っているこのclipMenuですが、今年に入ってやっとマクロを使い始めています。一度clipMenuのマクロに慣れてしまうともう戻れません。今回は僕がよく使うマクロの一つを紹介します(マクロの作り方・使い方は公式のヘルプをご参照ください)。
図のように、テキストの順序を入れ替えたいというときにつかうマクロです。
左から下、右へ移って下へ、という流れ方をしているテキストですが、 これを左から右へ流れながら上から下へ、という流れ方に変えたい。
単純に正規表現だけで検索置換をすることもできるのですが、 (この例ならまだしも)項目数が多いとさすがに辛いです。
コードは記事の末尾にアップしますが、このマクロを使えば、
文字選択>コピー>clipMenu起動>マクロ実行>折り返し項目数入力>ペースト
で済みます。
実際の動作はこんな感じです。
以下がコードです。
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)」などにしてください。
例は手作業でやっても大した手間ではありませんが、このマクロはもっと大量の項目を入れ替える場合に重宝します。