InDesign JavaScript 索引の参照の重複を解消

索引の参照の重複を解消するスクリプトは、これで良いのかな・・・？

~~~JavaScript
/*
このスクリプトを利用して起こった、どのような不具合にも責任は取れません。
ご了承下さい。

更新 2021/010/29
*/

// アプリ指定
#target "indesign";

// スクリプト名
var scriptName = "参照の重複を解消";

//スクリプトの動作指定（一つのアンドゥ履歴にする、及び、アンドゥ名）
app.doScript(function(){

    // ダイアログ
    var dialogueFlg = confirm("索引の目次の参照の索引マーカーの前後の索引マーカーを調べ" + "\r"
    + "同じ目次の場合に参照が重複していると判断し削除します。"
    ,"", scriptName);

    // Noの場合
    if(dialogueFlg == false){

        // 終了
        exit();
    }

    // 数
    var number = 0;

    // 検索の初期化
    app.findTextPreferences = NothingEnum.NOTHING;

    // 重複している参照を削除
    number = deleteOverlappingPageReferences(app.activeDocument.indexes.firstItem().topics,number);

    // 検索の初期化
    app.findTextPreferences = NothingEnum.NOTHING;

    // 結果
    alert("削除数 " + number);

//スクリプトの動作指定の続き
}, ScriptLanguage.JAVASCRIPT, [scriptName], UndoModes.ENTIRE_SCRIPT, scriptName);

// 重複している参照を削除
function deleteOverlappingPageReferences(targetTopics,number){

    // 対象のＩｎｄｅｘ
    var targetIndex;

    // 対象の文字
    var targetCharacter;

    // 目次の数だけ繰り返す
    for(var i = 0; i < targetTopics.count(); i++){

        // 参照の数引く１だけ後ろから繰り返す
        pageReferencesLabel:
        for(var ii = targetTopics.item(i).pageReferences.count() - 1; ii > 0; ii--){

            // 対象のＩｎｄｅｘ
            targetIndex = targetTopics.item(i).pageReferences.item(ii).sourceText.index;

            // 最初の挿入点では無い場合
            if(targetIndex != 0){

                // 前に調べていく
                while(targetIndex >= 0){

                    // 減らす
                    targetIndex--;

                    // 対象の文字
                    targetCharacter = targetTopics.item(i).pageReferences.item(ii).sourceText.parent.characters.item(targetIndex);

                    // 検索文字列
                    app.findTextPreferences.findWhat = "^I";

                    // 索引マーカーが検索された場合
                    if(targetCharacter.findText().length > 0){

                        // 現在の参照のひとつ前から前に繰り返す
                        for(var iii = ii - 1; iii >= 0; iii--){

                            // 対象の索引マーカーの参照点が目次の参照点と同じ場合
                            if(targetCharacter.insertionPoints.firstItem() == targetTopics.item(i).pageReferences.item(iii).sourceText){

                                // 参照を削除
                                targetTopics.item(i).pageReferences.item(ii).remove();

                                // 増やす
                                number++;

                                // ラベルの次の繰り返しへ
                                continue pageReferencesLabel;
                            }
                        }
                    }

                    // 検索文字列
                    app.findTextPreferences.findWhat = "^a";

                    // アンカー付きオブジェクトマーカーが検索された場合
                    if(targetCharacter.findText().length > 0){

                        // 次の繰り返しへ
                        continue;
                    }

                    // 抜ける
                    break;
                }
            }

            // 対象のＩｎｄｅｘ
            targetIndex = targetTopics.item(i).pageReferences.item(ii).sourceText.index;

            // 最後のひとつ前では無い場合
            if(targetIndex + 1 != targetTopics.item(i).pageReferences.item(ii).sourceText.parent.characters.lastItem().insertionPoints.lastItem().index){

                // 後ろに調べていく
                while(targetIndex < targetTopics.item(i).pageReferences.item(ii).sourceText.parent.characters.lastItem().insertionPoints.lastItem().index){

                    // 増やす
                    targetIndex++;

                    // 対象の文字
                    targetCharacter = targetTopics.item(i).pageReferences.item(ii).sourceText.parent.characters.item(targetIndex);

                    // 検索文字列
                    app.findTextPreferences.findWhat = "^I";

                    // 索引マーカーが検索された場合
                    if(targetCharacter.findText().length > 0){

                        // 現在の参照のひとつ前から前に繰り返す
                        for(var iii = ii - 1; iii >= 0; iii--){

                            // 対象の索引マーカーの参照点が目次の参照点と同じ場合
                            if(targetCharacter.insertionPoints.firstItem() == targetTopics.item(i).pageReferences.item(iii).sourceText){

                                // 参照を削除
                                targetTopics.item(i).pageReferences.item(ii).remove();

                                // 増やす
                                number++;

                                // ラベルの次の繰り返しへ
                                continue pageReferencesLabel;
                            }
                        }
                    }
                
                    // 検索文字列
                    app.findTextPreferences.findWhat = "^a";

                    // アンカー付きオブジェクトマーカーが検索された場合
                    if(targetCharacter.findText().length > 0){

                        // 次の繰り返しへ
                        continue;
                    }

                    // 抜ける
                    break;
                }
            }
        }

        // 一つ下の階層の目次がある場合
        if(targetTopics[i].topics.count() != 0){

            // 循環
            number = deleteOverlappingPageReferences(targetTopics[i].topics,number);
        }
    }

    // 数を返す
    return number;
}
~~~