Hallo Wolfgang,
> So bin ich mir z.B. nicht sicher, wo ich das hier (...) einfügen soll.
Die genannten Zeilen ersetzen/erweitern folgende Zeilen aus Deiner Version:
Code app.changePreferences.appliedCharacterStyle = checkStyle( attributes[x] ); app.activeDocument.search( '', false, false, '' ); Die Funktion lautet dann vollständig:
Code function attr2style( attributes ) { for( var x = 0 ; x < attributes.length ; x++ ) { app.findPreferences = app.changePreferences = null; for( var y = 1 ; y < attributes[x].length ; y++ ) { eval( 'app.findPreferences.' + attributes[x][y] ); } app.findPreferences.appliedCharacterStyle = app.activeDocument.characterStyles[0]; // das übergebene Zeichenformat wird in der Variable theStyle zwischengespeichert, // da es später nochmal gebraucht wird var theStyle = checkStyle( attributes[x] ); app.changePreferences.appliedCharacterStyle = theStyle; app.activeDocument.search( '', false, false, '' ); // Feststellen, wie häufig das Zeichenformat vorkommt app.findPreferences = app.changePreferences = null; app.findPreferences.appliedCharacterStyle = theStyle; if (app.activeDocument.search().length == 0) theStyle.remove() } } Der zweite Block, in dem ggf. das Löschen des Zeichenformats erfolgt, wäre vielleicht besser in einer Unterfunktion untergebracht. Ich wollte hier in der Diskussion nicht zu sehr in den vorhandenen Code eingreifen.
Alternativ könnte man die Reduktion von überflüssig erzeugten Zeichenformat auch folgendermaßen lösen:
1. Wenn ein Zeichenformat neu erzeugt wird, dann bekommt es in der checkStyle()-Funktion ein flag (eine weitere boolsche Variable "theCharStyleCreated", die standardmäßig auf false initialisiert ist, wird auf true gesetzt);
2. aus "app.activeDocument.search( '', false, false, '' );" wird
Code var theResult = app.activeDocument.search( '', false, false, '' ); 3. dann kann über eine Abfrage "if (theCharStyleCreated && (theResult.length == 0))" entschieden werden, ob das neu erzeugte Zeichenformat, das nirgends zugewiesen worden ist, wieder gelöscht wird.
Über dieses Verfahren könnte man sich das im obigen Schnipsel eingebundene nochmalige Suchen nach dem Vorkommen des Absatzformats sparen und das Skript damit beschleunigen.
Darüberhinaus wäre sichergestellt, daß nur solche Zeichenformat gelöscht werden, die während der Ausführung des Skripts erzeugt und für unnötig befunden werden.
Andere, vor Start des Skripts existierende Zeichenformate, blieben unberührt. Auch wenn sie im Moment vom Dokument nicht gebraucht werden (also keinem Text zugewiesen sind).
Im Übrigen muß ich meine Aussage von oben widerrufen:
Zitat 1. Die Zeile app.activeDocument.search( '', false, false, '' ); kannst Du, da die Argumente vorher definiert worden sind, reduzieren auf app.activeDocument.search(); Die beiden Zeilen führen tatsächlich zu unterschiedlichen Ergebnissen.
Die Kurzfassung führt den eigentlichen Ersetzevorgang nämlich gar nicht aus.
Der Grund dafür fällt mir grad nicht ein, sind doch alle notwendigen Suche-/Ersetze-Parameter über die app.findPreferences und die app.changePreferences definiert.
Viele Grüße
Martin