属性の名前を変更するスクリプトは、これで良いのかな・・・?
/*
このスクリプトを利用して起こった不具合の責任は取れません。
ご了承下さい。
更新 2022/02/22
*/
// アプリ指定
#target "indesign";
// スクリプト名
var scriptName = "属性の名前を変更";
// スクリプトを実行
app.doScript(function(){
// 変更名
var changeName = prompt("選択された属性の名前を変更します。" + "\r"
+ "親要素が同名の属性を持つ場合は変更しません。" + "\r"
+ "名前を入力して下さい。", "", scriptName);
// キャンセルされた時の処理
if(changeName == null){
// スクリプトを終了
exit();
// 名前にXML文法の問題がないか
}else if(isXMLName(changeName) == false){
// 警告
alert("入力された属性名にXML文法の問題が有るようです。");
// スクリプトを終了
exit();
}
// 即時関数
var palette = (function(){
// パレットを作成
var myPalette = new Window("palette","進行状況");
// 間隔
myPalette.spacing = 5;
// 余白
myPalette.margins = 10;
// 文字
myPalette.add("statictext", [0, 0, 570, 15], "", {name: "statictext1"});
// 表示
myPalette.show();
// パレットオブジェクトを戻す
return myPalette;
}());
// 選択が属性の場合
if (app.activeDocument.selection[0].constructor.name == "XMLAttribute") {
// 選択数
var selectionNumber = app.activeDocument.selection.length;
// 選択の配列
var selectionArray = app.activeDocument.selection;
// 名前変更後の属性の配列
var afterChangeNameAttributeArray = [];
// 親要素
var parentElement;
// 結果数
var resultNumber = 0;
// 結果数2
var resultNumber2 = 0;
// 選択の数だけ後ろから繰り返す
for (var i = selectionNumber - 1; i >= 0; i--){
// 進行状況テキスト
palette.statictext1.text = (selectionNumber - i) + "/" + selectionNumber + ":" + selectionArray[i].name + "→" + changeName;
// 変更名と選択されている属性の名前が違う場合
if(selectionArray[i].name != changeName){
// 親要素に変更名の属性が存在しない場合
if(selectionArray[i].parent.xmlAttributes.itemByName(changeName).isValid == false){
// 属性の親要素を入れる
parentElement = selectionArray[i].parent;
// 名前変更
selectionArray[i].name = changeName;
// 名前変更後の属性の配列に追加
afterChangeNameAttributeArray.push(parentElement.xmlAttributes.itemByName(changeName));
// 結果数を追加
resultNumber++;
// 存在する場合
}else{
// 増やす
resultNumber2++;
}
// 名前が同じ場合
}else{
// 名前変更後の属性の配列に追加
afterChangeNameAttributeArray.push(selectionArray[i]);
}
}
// 選択を解除
app.activeDocument.selection = null;
// 名前変更後の属性の数だけ繰り返す
for(var i = 0; i < afterChangeNameAttributeArray.length; i++){
// 名前変更後の属性を選択
afterChangeNameAttributeArray[i].select(SelectionOptions.ADD_TO)
}
// 結果表示
alert("変更数 " + resultNumber + "\r" + "親要素が同名の属性を持っており変更出来なかった数 " + resultNumber2, scriptName);
// 以外の場合
}else{
// 警告
alert("属性以外が選択されているようです。", scriptName);
}
// 一つのアンドゥ履歴にする
}, ScriptLanguage.JAVASCRIPT, [], UndoModes.ENTIRE_SCRIPT, scriptName);