Ich habe hier einen Kunden welcher sich für seine Projekte immer an der ganzen Schriftfamilie der Myriad bedient.
Da die Änderungen in den Absatzformaten aber gelöscht werden müssen, habe ich das "CharStyleOfPeterKahrel.js" genommen und es um alle Schriftschnitte der Myriad erweitert.
Natürlich wird nicht nur die Myriad berücksichtigt, sondern auch alle Schriften welche den selben Namen im Schriftschnitt haben (Regular, Bold, …).
Nun, wer es noch ausser mir brauchen kann, dem wünsche ich viel Spass damit!
erstmal danke für das tolle Script. Ich habe bei mir noch etwas angehängt für den Fall, dass ein Wort/Zeichen 2 Attribute hat, z.B. „hochgestellt“ und „kursiv“.
Das geht sicher wesentlich eleganter, aber immerhin funktioniert es. :)
Ich hatte immer ein bißchen Unbehagen wegen kombinierten Attributen. Das kommt bei mir zwar selten vor. Aber ab und an findet sich doch mal eine kursive Tiefstellung.
Mit Deiner Erweiterung sind diese von jetzt an gerettet. Danke.
So, ich habe jetzt noch weiter am Script herumgepfriemelt, weil mir die Lösung mit den hinzugefügten Funktionen nicht gefiel.
Deshalb habe ich versucht, die ganze Sache zu verallgemeinern. Herausgekommen ist das hier:
EDIT: Variable i in x und Variable j in y umbenannt wg. Darstellungsproblemen der Forensoftware.
Es werden jetzt nur noch 3 Funktionen verwendet und die Anzahl der Suchparameter ist beliebig.
Ich frage mich übrigens, ob es möglich ist, die Zeichenformate nur dann zu erzeugen, wenn wirklich etwas entsprechendes gefunden wurde. Z.Z. erhält man ja eine gigantische Liste aus der evtl. nur 4 oder 5 Formate verwendet werden.
Interessant wäre dann noch, wo ich eine Objekt-Referenz zu ID finden kann. Ich würde z.B. gerne die Möglichkeit einbauen, nach Farben zu suchen oder nach dem Attribut "kein Umbruch".
Und noch ein HINWEIS: Ich bin ein absoluter Anfänger, JavaScript betreffend. Ich habe zwar ein paar Tests gemacht, würde aber trotzdem empfehlen, das Ding erstmal auf Testdaten loszulassen.
Grüße Wolfgang Giersberg
(Dieser Beitrag wurde von Wolfgang Giersberg am 21. Dez 2006, 18:54 geändert)
Dein Skript sieht richtig stark und effizient aus und dürfte auch dem Entwickler des Ausgangsskripts, Peter Kahrel, dem "Kompressor", gefallen.
Hier noch ein paar Anmerkungen:
1. Die Zeile
kannst Du, da die Argumente vorher definiert worden sind, reduzieren auf
2. Es ist wohl einfacher, ein unnötig erzeugtes Zeichenformat hinterher zu löschen. Das ginge, indem Du später die Häufigkeit der Vorkommen des Zeichenformats überprüfst:
Theoretisch könntest Du die Häufigkeit der Zuweisung auch bei der Zuweisung der Zeichenformate überprüfen. Aber möglicherweise ist das Zeichenformat vor Ausführung des Skripts bereits anderen Textelementen zugewiesen worden. In diesem Fall würde bei 0 neuen Zuweisungen das Zeichenformat gelöscht, obwohl es für die alte Zuweisung noch gebraucht würde.
3.
Die Scripting Reference findest Du als PDF auf einer der Installations-CDs. Sie wird standardmäßig nicht installiert. Am gleichen Ort ist ein Scripting Guide zu finden. Darüber hinaus kannst Du Dir die Eigenschaften im Datenbrowser des ExtendScript Toolkit ansehen (ggf. eine Haltemarke setzen, um die Inhalte von Variablen vor Beendigung des Skripts zu beschauen). Und dann gibt es noch das Script Dictionary von Peter Kahrel: http://www.kahrel.plus.com/indesignscripts.html
4.
Oh, ein Skriptmeister, der vom Himmel gefallen ist. Wenn das schon so anfängt, dann können wir uns noch auf 'was gefaßt machen. ;-) Klasse Leistung! Und schau mal ins Adobe InDesign Scripting Forum. Dort kann man so jemanden wie Dich gut gebrauchen. Und dort gibt es auch noch einiges von den Skripting-Akrobaten zu lernen.
Um unnötige Suchläufe nach Schriftschnitten zu verhindern, die im Dokument gar nicht vorhanden sind, könntest Du auch noch eine Abfrage nach den im Dokument verwendeten Schriftschnitten einbinden und diese mit den anderen Stilkombinationen (unterstrichen, durchgestrichen, Kapitälchen, hoch-/tiefgestellt ...) verwursteln.
Und noch eins: Manchmal wäre es auch notwendig, Schriften, die von der Basisschrift (Standardschrift im Basis-Absatzformat; ggf. per DropDown-Auswahlmenü zu bestimmen) abweichen, in einem Zeichenformat einzufrieren. Z.B. Symbolschriften oder Fremdalphabete (Arabisch, Griechisch, Hebräisch, Koptisch, Syrisch ...). Und das in verschiedenen Schnitten ...
Man könnte dieses Skript zu einer eierlegenden Wollmilchsau für das Einfrieren von besonderen Zeichenformatierungen aufblähen.
Danke für die Blumen. :) Und für die sehr interessanten Anregungen. Aber zum Meister reicht es dann doch noch nicht. Da muss ich mich erst noch wesentlich tiefer in die Sprache, die ID-Objekte und die Objektorientierung im allgemeinen einlesen (ansonsten skripte ich seit etwa einem Jahr sporadisch mit PHP ohne OOP).
So bin ich mir z.B. nicht sicher, wo ich das hier einfügen soll. Hättest Du da einen kleinen Hinweis für mich. Hier zeigt sich die mangelnde Kenntnis der Sprache. Ich verstehe zwar die Logik der Aufbereitung (wäre in PHP ungefähr identisch), aber woher die Daten kommen und wohin sie zum Schluss gehen erschließt sich derzeit nur in Bruchstücken.
Werde mich jetzt mal auf die Suche nach meinen CDs machen und die Referenz und den Guide durchlesen.
> 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:
Die Funktion lautet dann vollständig:
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
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:
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.
Nun hat's mir doch selber in den Fingern gejuckt und ich habe mir unter Einbezug von Wolfgangs komfortablen Funktionen ein Skript zusammengebastelt, das alle im Dokument verwendeten Schriften mit ihren Schnitten in Zeichenformate einfriert.
- Für die Grundschrift selbst, die aus einem Basisabsatzformat ermittelt wird, wird kein Zeichenformat erstellt. - Für die anderen Schnitte der Grundschrift werden Zeichenformate mit den Namen des Schnitts erstellt. - Für alle anderen Schriften werden Zeichenformate mit den Namen der Fonts und dem Namen des Schnitts erstellt.
Beispiel: Grundschrift = Times New Roman - Regular. Für diese Grundschrift wird keine Zeichenformat erstellt. Für den Kursivschnitt der Grundschrift wird (wenn im Dokument vorhanden) ein Zeichenformat "Italic" erstellt. Dasselbe gilt für den fetten Schnitt und für Bold-Italic.
Nehmen wir an, es werden im Dokument auch die Myriad Pro - Regular und Italic verwendet. Dann werden die Zeichenformate "Myriad Pro-Regular" und "Myriad Pro-Italic" erstellt und zugewiesen.
Ein Problem mit nicht aktiven Schriften konnte ich nicht lösen: Wird im Dokument eine Schrift verwendet, die nicht aktiv/vorhanden ist, kann diese (anders als im Suchen-Dialog der graphischen Benutzeroberfläche) über die Suchfunktion im Skript nicht gesucht werden. Diese Schriften, die damit also nicht in ein Zeichenformat eingefroren werden können, werden ggf. am Ende des Skripts in einem Dialogfenster angezeigt.
Eine kleine Überraschung: Das o.g. Problem gibt es nicht, wenn eine aktive Schrift mit einem inaktiven Schnitt verwendet worden ist. Da wird ein Zeichenformat angelegt und zugewiesen.
Andere Zeichenattribute (unterstrichen, hoch-/tiefgestellt, Kapitälchen ...) bleiben von diesem Skript unberücksichtigt. Sie können aus dem Baukasten von Wolfgang leicht nachträglich nach eigenem Bedarf zusammengestellt und eingefügt werden.
Beispiel:
Dieser Block wäre direkt vor oder nach der folgenden Zeile einzufügen:
Viele Grüße Martin
(Dieser Beitrag wurde von Martin Fischer am 9. Mär 2007, 23:36 geändert)
Das Ding hat jetzt erst eine Abfrage nach dem Basisformat und zeigt im nächsten Schritt einen Dialog an, in dem man die Abweichungen auswählen kann, die man einfrieren will.
"Hochgestellt" u.ä. bzw. Farben werden bisher noch nicht berücksichtigt.
Mein Code erscheint mir ziemlich umständlich. Wenn also jemand Verbesserungsvorschläge hat - immer her damit.
Hätte das Script lieber als .zip angehängt. Gibt es auf dieser Welt eigentlich irgendwas, was kein Geld kostet ... ?
Edit: Da fällt mir noch ein: Das Kommando /r scheint in Dialogfeldern nichts zu bewirken. Also etwas wie "Schriftformate:/rFormat/rFormat/rFormat" steht im Dialogfeld in einer Zeile. /n geht auch nicht. Weiß da jemand genaueres?
(Dieser Beitrag wurde von Martin Fischer am 16. Jan 2007, 22:51 geändert)
Da ich keine Ahnung von Skripts habe wäre ich frohn wenn mir jemande von Euch helfen könnte.
Übrigens, bei dem Skript von Wolfgang erhalte ich keine solche Meldung, dafür bin ich dort überfordert wenn ich aufgefordert werde das Basisabsatzformat zu wählen.
Ihr seht ich habe echt keine Ahnung. Wäre froh wenn ich hier Hilfe finden würde.
Du verwendest eine InDesign-Version größer 4 (bzw. größer CS2), nämlich InDesign 6 (CS4). Die von Dir zitierten Zeilen stammen aus einem Skript für CS2.
Vielen lieben Dank für deine rasche Hilfe. Super! Das hat soweit funktioniert.
Nun habe ich allerdings noch das Problem, dass ich einige Wörter komplett in GROSSBUCHSTABEN geschrieben habe. Dieses Format wird aber leider nicht exportiert.
Ist dies überhaupt möglich oder müsste ich dafür ebenfalls einen CharacterStyle haben?
habs nun herausgefunden, warum beim export in epub die wörter welche ich komplett mit GROSSBUCHSTABEN geschrieben habe, im EBook klein dargestellt werden.
Die Wörter wurden im InDesign nicht effektiv GROSS geschrieben sonder über Format GROSS gemacht.
Komme also wohl nicht drum herum die Wörter nochmals zu schreiben.