選択されている複数のテキストフレームを連結します。

起動するとフローティングパレットが表示されますので、連結したいフレームを選択して「上優先」「下優先」「左優先」「右優先」というボタンを押して実行します。ウィンドウを閉じるとスクリプトが終了します。

 

<上優先・下優先実行時の留意点>

もし、フレームが優先方向に対して同じ値だった場合は、ドキュメントの組方向に従って次の優先順位が決まります。優先順位は「横組みなら左優先」「縦組みなら右優先」です。

なお、「右優先」「左優先」で連結する場合、次の優先順位は常に上が優先されます。

 

//選択されている複数のテキストフレームを連結する
//(c)2016 Nakatoji 1000p

#target indesign
#targetengine 'coupler'

//グローバル変数(組方向)
var g_dir; //H=true, v=false

//-------------------------------------------------------
// ソート用比較関数
//-------------------------------------------------------
//
//上優先
function T2B(a, b) {
    //y座標の比較
    if (a.visibleBounds[0]<b.visibleBounds[0]){return -1;}
    if (a.visibleBounds[0]>b.visibleBounds[0]){return 1;}
    //y座標がタイなのでx座標を比較(横組みなら左優先、縦組みなら右優先)
    return g_dir ? a.visibleBounds[1]-b.visibleBounds[1] : b.visibleBounds[3]-a.visibleBounds[3];
}
//下優先
function B2T(a, b) {
    //y座標の比較
    if (a.visibleBounds[2]>b.visibleBounds[2]){return -1;}
    if (a.visibleBounds[2]<b.visibleBounds[2]){return 1;}
    //y座標がタイなのでx座標を比較(横組みなら左優先、縦組みなら右優先)
    return g_dir ? a.visibleBounds[1]-b.visibleBounds[1] : b.visibleBounds[3]-a.visibleBounds[3];
}
//左優先
function L2R(a, b) {
    //x座標の比較
    if (a.visibleBounds[1]<b.visibleBounds[1]){return -1;}
    if (a.visibleBounds[1]>b.visibleBounds[1]){return 1;}
    //x座標がタイなのでy座標を比較(常に上優先)
    return a.visibleBounds[0]-b.visibleBounds[0];
}
//右優先
function R2L(a, b) {
    //y座標の比較
    if (a.visibleBounds[3]>b.visibleBounds[3]){return -1;}
    if (a.visibleBounds[3]<b.visibleBounds[3]){return 1;}
    //x座標がタイなのでy座標を比較(常に上優先)
    return a.visibleBounds[0]-b.visibleBounds[0];
}

//-------------------------------------------------------
// 実作業
//-------------------------------------------------------
function coupler( sortFunc ) {
    var targetObj=[]; //処理対象収納変数リセット
    selObj= app.activeDocument.selection; //選択されているオブジェクト
    //処理対象オブジェクトを抽出
    for (var i=0; i<selObj.length; i++) {
        if (selObj[i].constructor.name=='TextFrame') {
            //既存の連結を解除
            selObj[i].nextTextFrame= null;
            selObj[i].previousTextFrame= null;
            targetObj.push( selObj[i] ); //対象オブジェクトに追加
        }
    }
    if (targetObj.length<2) { return; } //対象オブジェクトが1つ以下
    //組方向をグローバル変数に設定(比較関数用)
    g_dir= app.activeDocument.documentPreferences.columnDirection
        ==HorizontalOrVertical.HORIZONTAL;
    targetObj.sort(sortFunc); //比較関数付きソート
    //連結作業
    for (var i=1; i<targetObj.length; i++) {
        targetObj[i].contents= '';
        targetObj[i-1].nextTextFrame= targetObj[i];
    }
}

//-------------------------------------------------------
// ウィンドウ作成関数
//-------------------------------------------------------
function constWindow() {
    var newWnd= new Window ('palette', 'coupler', undefined, {closeButton: true});
    newWnd.margins= 10;
    var btA= newWnd.add('button', {x:0, y:0, width:80, height:24}, '上優先');
    btA.onClick= function () { coupler(T2B); }
    var btB= newWnd.add('button', {x:0, y:0, width:80, height:24}, '下優先');
    btB.onClick= function () { coupler(B2T); }
    var btC= newWnd.add('button', {x:0, y:0, width:80, height:24}, '左優先');
    btC.onClick= function () { coupler(L2R); }
    var btD= newWnd.add('button', {x:0, y:0, width:80, height:24}, '右優先');
    btD.onClick= function () { coupler(R2L); }
    return newWnd;
}

//-------------------------------------------------------
// メイン
//-------------------------------------------------------

var wnd= constWindow();
wnd.show ();

 

 

Joomla templates by a4joomla