Skip to content

Instantly share code, notes, and snippets.

@UskeS
Last active February 26, 2024 02:23
Show Gist options
  • Save UskeS/653c551fbd12b54f3fd2b79652e2f908 to your computer and use it in GitHub Desktop.
Save UskeS/653c551fbd12b54f3fd2b79652e2f908 to your computer and use it in GitHub Desktop.
[InDesign] ドキュメントにオーバーセットテキストがあるとき保存できないようにするイベントリスナー
/**
* @fileoverview ドキュメントにオーバーセットテキストがあるとき保存できないようにするイベントリスナー
* @author SAEGUSA Yusuke <https://twitter.com/Uske_S>
* @version v2.0.1
* @description InDesignのStartupScriptsフォルダに入れてからInDesignを起動するか、InDesign起動後、このスクリプトを実行してください。
*/
//@targetengine "noticeBefSave"
app.eventListeners.add("beforeSave", callback);
function callback(ev) {
var tgtDoc = ev.target;
try {
// テキストフレームと脚注のオーバーセット検知
var txf = tgtDoc.textFrames;
for (var i = 0; i < txf.length; i++) {
if (txf[i].overflows) {
selectAndAlert(ev, txf[i]);
exit();
}
var ftn = txf[i].footnotes;
for (var j = 0; j < ftn.length; j++) {
// 脚注の文字がオーバーセットしていると parentTextFrames[0] が undefined になる
if (ftn[j].characters[-1].parentTextFrames[0] === undefined) {
selectAndAlert(ev, txf[i]);
exit();
}
}
// 表組のオーバーセット検知
var tbl = txf[i].tables;
for (var j = 0; j < tbl.length; j++) {
var c = tbl[j].cells.everyItem();
for (var k = 0; k < tbl[j].cells.length; k++) {
if (c.overflows[k]) {
selectAndAlert(ev, c.getElements()[k]);
exit();
}
}
}
}
// ストーリー単位のオーバーセット検知
var pgi = tgtDoc.stories;
for (var i = 0; i < pgi.length; i++) {
if (!pgi[i].hasOwnProperty("overflows")) {
continue;
} else if (pgi[i].overflows) {
selectAndAlert(ev, pgi[i].texts[0].parentTextFrames[0]);
exit();
}
}
} catch (e) {
alert(e);
}
}
function selectAndAlert(ev, obj) {
app.select(obj);
alert("オーバーセットされたテキストがあるため保存できません");
ev.preventDefault();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment