Hallo Thomas,
hab Dank für die positive Rückmeldung.
Die »Kaffeekasse« findest Du hier: Spende/Mitgliedschaft.
Im Übrigen hat mir Dein Konzept grundsätzlich gefallen (deswegen habe ich mich gerne damit beschäftigt). Allerdings vermeide ich für solche Markierungszwecke Zeichenformate, die ich eher zur typographischen Auszeichnung verwende (Mehrfachzuweisungen sind nicht möglich).
Statt dessen missbrauche ich lieber Bedingungen (conditions), die zum Ein-/Ausblenden von Text konzipiert sind, aber mit ihrer ausblendbaren Färbung und optionaler Ausgabemöglichkeit (Drucken/Exportieren) eine optische Unterstützung bei der Markierung von Text fürs Register u.a. bieten.
Deswegen hier analog zu der Markierung von Registereinträgen auf Zeichenformatbasis eine auf Bedingungen hin umgearbeitete Variante: indexFromConditions.jsx
// indexFromConditions.jsx
var doc = app.activeDocument;
var i = 0;
var r = [];
var _error = [];
var register = (doc.indexes.item(0).isValid) ? doc.indexes.item(0) : doc.indexes.add();
var ct = null;
var ct_name_arr = [];
// Bedingungen über Dialog ermitteln
ct_name_arr = get_ct(doc.conditions.everyItem().name);
// per Schleife Registereinträge aus den ermittelten Bedingungen generieren
for (i = 0; i < ct_name_arr.length; i++)
{
ct = doc.conditions.itemByName(ct_name_arr);
r = generate_index_entries(doc, register, ct);
if (r.length > 0)
_error = _error.concat(r);
}
if (_error.length > 0)
alert('Achtung!\n' + _error.join('\n'));
function generate_index_entries(doc, register, ct)
{
var x = 0;
var err = [];
var str = '';
var result = [];
var main_topic = (register.topics.itemByName(ct.name).isValid) ? register.topics.itemByName(ct.name) : register.topics.add({name: ct.name});
var sup_topic = null;
app.findTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.appliedConditions = [ct];
result = doc.findText(true);
app.findTextPreferences = NothingEnum.NOTHING;
for (x = 0; x < result.length; x++)
{
str = result[x].contents;
sup_topic = (main_topic.topics.itemByName(str).isValid) ? main_topic.topics.itemByName(str) : main_topic.topics.add({name: str});
try
{
sup_topic.pageReferences.add(result[x], PageReferenceType.currentPage);
} catch (error)
{
err.push(str + ': ' + error);
}
}
return err;
}
function get_ct(arr)
{
var n = 0;
var cb = [];
var result_arr = [];
// DIALOG
// ======
var dialog = new Window("dialog");
dialog.text = "Registereinträge aus Bedingungen";
dialog.preferredSize.width = 250;
dialog.orientation = "column";
dialog.alignChildren = ["left", "top"];
dialog.spacing = 10;
dialog.margins = 16;
// SELECT
// ======
var select = dialog.add("group", undefined, {name: "select"});
select.preferredSize.width = 250;
select.orientation = "row";
select.alignChildren = ["left", "center"];
select.spacing = 20;
select.margins = 20;
// PANEL1
// ======
var panel = select.add("panel", undefined, undefined, {name: "panel"});
panel.text = "Bedingung";
panel.preferredSize.width = 250;
panel.orientation = "column";
panel.alignChildren = ["left", "top"];
panel.spacing = 5;
panel.spacing = 5;
panel.margins = 20;
// Checkboxen
for (n = 0; n < arr.length; n++)
{
cb[n] = panel.add("checkbox", undefined, undefined);
cb[n].text = arr[n];
cb[n].value = true;
}
// CONFIRM
// =======
var confirm = dialog.add("group", undefined, {name: "confirm"});
confirm.preferredSize.width = 250;
confirm.orientation = "row";
confirm.alignChildren = ["right", "top"];
confirm.spacing = 10;
confirm.margins = 0;
var cancel = confirm.add("button", undefined, undefined, {name: "cancel"});
cancel.text = "Cancel";
var ok = confirm.add("button", undefined, undefined, {name: "ok"});
ok.text = "OK";
if (dialog.show() == 1)
{
for (n = 0; n < cb.length; n++)
{
if (cb[n].value == true)
result_arr.push(cb[n].text);
}
}
dialog.close()
return result_arr;
}