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); |
评论
?
参与讨论