Hallo Klaus,
Martin hat da schon recht, dass es eigentlich ein gößeres Problemfeld ist, das für den Fall der Fälle gründlicher angegangen werden müsste.
Eine quick-and-dirty-Lösung kann ich Dir dann aber doch anbieten:
// IndexFromCharacterStyle_z_CS4.jsx
//
// ggf. mit Zoom auf fehlerhafte Fundstelle
//
var myErr = mySucc = 0;
var myList = "";
var doc = app.activeDocument
var properName = false;
var removePunctuation = false;
var myCharacterStyle = myDisplayDialog(doc);
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedCharacterStyle = myCharacterStyle;
var _index = (doc.indexes.length == 0)
? doc.indexes.add()
: doc.indexes.firstItem();
f = doc.findText()
for (oneEntry = f.length - 1; oneEntry > -1; oneEntry--) {
var formattedEntry = f[oneEntry].contents;
if (removePunctuation)
formattedEntry = formattedEntry.replace(/;/g, '').replace(/,/g, '').replace(/\./g, '');
if (properName) {
var parts = formattedEntry.split(" ");
var lastName = parts.pop();
if (parts.length)
formattedEntry = lastName + ", " + parts.join(" ");
else
formattedEntry = lastName;
}
var _topic = null;
try {
_topic = _index.topics.itemByName(formattedEntry);
if (_topic == null)
_topic = _index.topics.add(formattedEntry);
} catch (e) {
selectIt(f[oneEntry]);
}
try {
_topic.pageReferences.add(f[oneEntry], PageReferenceType.currentPage);
mySucc++;
} catch (e) {
myList += formattedEntry + "\r";
myErr++;
}
}
alert("Das Ergebnis:\r" + mySucc + " x erfolgreich\r" + myErr + " x versagt:\r-----------\r" + myList);
function myDisplayDialog(doc) {
var myFieldWidth = 120;
var myCharStyles = doc.characterStyles.everyItem().name;
var myDialog = app.dialogs.add({
name : "Index-Begriffe"
});
with (myDialog.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({
staticLabel : "Zeichenformat:",
minWidth : myFieldWidth
});
}
with (dialogColumns.add()) {
var mySourceDropdown = dropdowns.add({
stringList : myCharStyles,
selectedIndex : myCharStyles.length - 1
});
var checkBoxName = checkboxControls.add({
staticLabel : "Nameseintrag anlegen",
checkedState : false
});
var checkBoxPunctuation = checkboxControls.add({
staticLabel : "Satzzeichen entfernen",
checkedState : false
});
}
}
}
var myResult = myDialog.show();
if (myResult == true) {
var theCharStyle = myCharStyles[mySourceDropdown.selectedIndex];
properName = checkBoxName.checkedState;
removePunctuation = checkBoxPunctuation.checkedState;
myDialog.destroy();
} else {
myDialog.destroy()
exit();
}
return theCharStyle;
}
function selectIt(theObj) {
var myZoom = 400;
app.select(theObj, SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = myZoom;
// Option zum Abbruch, falls innerhalb einer Schleife aufgerufen
var myChoice = confirm('Fundstelle fehlerhaft!\rWeiter?');
if (myChoice == false)
exit();
return app.selection[0];
}
Folgende Einschränkungen:
1.
Alle Satzzeichen (Punkt, Komma, Semikolon) werden entfernt.
2.
Als Nachname zählt stur das Wort nach dem letzten Leerzeichen.
(InDesign ist selbst kaum intelligenter...)
3.
Die Aufzählungen sind so unglücklich, dass ich da heute auch nicht dran will. Die solltest Du vorab mit suchen und ersetzen aufräumen.
Viele Grüße
Jo