InDesign : ドキュメントの重複スウォッチを結合するやつ

// InDesign : ドキュメントの重複スウォッチを結合するやつ by チャピ
if (app.documents.length === 0) {
alert("ドキュメントを開いてから実行してください。");
return;
}
var doc = app.activeDocument;
var colors = doc.colors;
var merged = 0;
var skipped = 0;
var mergeLog = [];
var errors = [];
function sameColor(a, b) {
try {
if (a.model !== b.model) return false;
if (a.space !== b.space) return false;
var av = a.colorValue;
var bv = b.colorValue;
if (av.length !== bv.length) return false;
for (var i = 0; i < av.length; i++) {
if (Math.abs(av[i] - bv[i]) > 0.0001) {
return false;
}
}
return true;
} catch (e) {
return false;
}
}
function getBaseName(name) {
var match = name.match(/^(.*?) ([2-9][0-9]*)$/);
return match ? match[1] : null;
}
function findBaseColor(name) {
var base = colors.itemByName(name);
if (!base.isValid) return null;
return base;
}
// 削除によるインデックス変化を避けるため後ろから走査
for (var i = colors.length - 1; i >= 0; i--) {
var duplicate = null;
try {
duplicate = colors[i];
var duplicateName = duplicate.name;
var baseName = getBaseName(duplicateName);
if (baseName === null) continue;
var base = findBaseColor(baseName);
if (base === null) continue;
if (!sameColor(duplicate, base)) continue;
var fromName = duplicate.name;
var toName = base.name;
duplicate.remove(base);
merged++;
mergeLog.push(fromName + " → " + toName);
} catch (e) {
skipped++;
errors.push(
(duplicate ? duplicate.name : "不明") +
" : " + e
);
}
}
var message =
"スウォッチの統合が終了しました。\n\n" +
"統合数:" + merged + "\n" +
"エラー数:" + skipped;
if (mergeLog.length > 0) {
message += "\n\n【統合内容】\n" + mergeLog.join("\n");
} else {
message += "\n\n統合対象はありませんでした。";
}
if (errors.length > 0) {
message += "\n\n【エラー(最大10件)】\n";
for (var j = 0; j < Math.min(errors.length, 10); j++) {
message += errors[j] + "\n";
}
}
alert(message);
添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论