コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

017.【ID】別名同値のCMYKスウォッチを統合する

#targetengine "mergeSwatches"

var doc = app.activeDocument;
var docClrs = doc.colors;
var clrsProp = [];
var clrsNames = [];

var docClrsLen = docClrs.length;
var sameClrs = [];
var sameClrsArrs = [];
var cnt = 1

// デフォルトと無名以外のcolorの情報を取得
for (var i = 0; i < docClrsLen; i++) {
  if ((docClrs[i].name != "Black") && (docClrs[i].name != "Registration") && (docClrs[i].name != "Paper") && (docClrs[i].name != "") && (docClrs[i].name != "Cyan") && (docClrs[i].name != "Magenta") && (docClrs[i].name != "Yellow")) {
    clrsProp.push([docClrs[i].model + "/" + docClrs[i].space + "/" + docClrs[i].colorValue.join(), docClrs[i].name])
    clrsNames.push(docClrs[i].name)
  }
}
clrsProp.sort();
var clrsPropLen = clrsProp.length;
for (var j = 0; j < clrsPropLen; j = j + cnt) {
  cnt = 1
  sameClrs = [clrsProp[j][1]];
  for (var k = j + 1; k < clrsPropLen; k++) {
    if (clrsProp[j][0] != clrsProp[k][0]) {
      break;
    } else {
      cnt++
      sameClrs.push(clrsProp[k][1]);
    }
  }
  if (cnt > 0) {
    sameClrsArrs.push(sameClrs);
  }
}

// ウィンドウ作成
var w = new Window("window", "スウォッチ結合");
var txt1 = w.add("statictext", undefined, "結合先のスウォッチを選択してください");
var list1 = w.add("dropdownlist", undefined, clrsNames)
var txt2 = w.add("statictext", undefined, "結合するスウォッチを選択してください");
txt2.visible = false;
var start = w.add("button", undefined, "実行");
start.visible = false;

// 結合先のスウォッチが選択された時に実行するイベント
list1.onChange = function () {
  txt2.visible = true;
  var mySwatch = list1.selection.text;
  var mySwtchSameClrs = [];
  for (var i = 0; i < sameClrsArrs.length; i++) {
    var mySwatchIsExist = existInArr(sameClrsArrs[i], mySwatch);
    if (mySwatchIsExist !== false) {
      for (var j = 0; j < sameClrsArrs[i].length; j++) {
        if (j !== mySwatchIsExist) {
          mySwtchSameClrs.push(sameClrsArrs[i][j]);

        }
      }
    }
  }
  for (var k = 0; k < mySwtchSameClrs.length; k++) {
    w.add("checkbox", undefined, mySwtchSameClrs[k]); // ここが上手くいっていない?
  }

  start.visible = true;
  start.onClick = function () {
    // ここから未着手
      // 選択されているcheckboxの数だけ回す
      // dropboxのtext.merge(checkboxで選ばれてる文字列[i])
      // alert("やったぜ")
  }
}

w.show();


function existInArr(arr, tgt) {
  var arrLen = arr.length;
  for (var p = 0; p < arrLen; p++) {
    if (arr[p] === tgt) {
      return p;
    }
  }
  return false;
}

メモ

時間切れ。 onChangeの中でaddは使えないのか?

参考