Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Scriptanpassung - Formate umbenennen und in neue Formatgruppe verschieben

Scriptanpassung - Formate umbenennen und in neue Formatgruppe verschieben

hebbert
Beiträge gesamt: 5

24. Nov 2015, 17:02
Bewertung:

gelesen: 3267

Beitrag als Lesezeichen
Hallo liebe Mitstreiter,

ich hatte mir vor einiger Zeit dieses Script besorgt. Funktioniert super und hat mir schon viel Zeit erspart. Es ändert von Absatzformaten die Namen von "xx" zu "yy".
Jetzt bräuchte ich eine Anpassung so dass ich das bestehende Absatzformat umbenennen (Name_neu) und zeitgleich eine Formatgruppe (Gruppe_neu) erzeugen kann. Mir würde es auch schon helfen wenn ich das neu benannte Format in eine bestehende Formatgruppe schieben könnte, wäre vielleicht auch besser da ich mehrere Formate in eine neue Gruppe schieben müsste.

Code
var doc=app.activeDocument;  
var myPstyles=doc.allParagraphStyles, l=myPstyles.length;
while (l--){
try{
alert(myPstyles[l].name);
myPstyles[l].name=myPstyles[l].name.replace("02_Dachzeile","02_1_Dachzeile"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("02_Ueberschrift_gross","02_2_Ueberschrift_gross"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("02_Ueberschrift_mittel","02_3_Ueberschrift_mittel"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("02_Ueberschrift_klein","02_4_Ueberschrift_klein"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("04_Text_ohne_Einzug","04_1_Text_ohne_Einzug"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("04_Text","04_2_Text"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("04_Text_Initial_2zeilig","04_3_Text_Initial_2zeilig"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("04_Text_Initial_3zeilig","04_3_Text_Initial_3zeilig"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("06_Interview_Ueberschrift","06_1_Interview_Ueberschrift"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("06_Interview_Vorspann","06_2_Interview_Vorspann"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("06_Interview_Frage","06_3_Interview_Frage"); //replace the space character with a underscore
myPstyles[l].name=myPstyles[l].name.replace("06_Interview_Antwort","06_4_Interview_Antwort"); //replace the space character with a underscore


}catch(e){}

}
alert ("Done!\nYou can go outside an play now");


Falls ihr hierfür eine Idee hättet, oder ich beim Durchstöbern einen ähnlichen Beitrag übersehen habe, bin ich über jede Rückmeldung dankbar.

Schöne Grüße aus Donauwörth!
Hubert

Scriptanpassung - Formate umbenennen und in neue Formatgruppe verschieben

Martin Fischer
  
Beiträge gesamt: 12783

25. Nov 2015, 07:11
Bewertung:

gelesen: 3206

Beitrag als Lesezeichen
Halo Hubert,

Absatzformate kennen den move()-Befehl.

Damit könntest Du ein Absatzformat an eine bestimmte Position (BEFORE, AFTER, AT_END, AT_BEGINNING) einer bekannten Formatgruppe verschieben.

Viele Grüße
Martin


Scriptanpassung - Formate umbenennen und in neue Formatgruppe verschieben

Hans Haesler
  
Beiträge gesamt: 5826

26. Nov 2015, 19:59
Bewertung:

gelesen: 3126

Beitrag als Lesezeichen
Hallo Hubert,

ich wurde von Kai Rübsamen auf dieses Thema hingewiesen. Von ihm stammen einige Code-Zeilen (das Erzeugen des Ordners, das Verschieben der Formate und – im zweiten Script – ein Ansatz der Liste der Formatnamen) sowie der Kritikpunkt, dass zuviele Replace-Befehle unnötig ausgeführt werden.

Bei Deinem Script sollte anstelle von allParagraphStyles eher die paragraphStyles gespeichert werden.
Sonst werden Formate, welche sich schon in Gruppen befinden, ebenfalls behandelt.

Als Name für die Zählervariable ist das kleine "L" ungeeignet, weil es leicht mit der Ziffer "1" verwechselt wird.

Die Kommentare am Ende der Zeilen sollten entfernt werden (die genannte Ersetzen-Aktion – Leerschlag zu Underscore – ist durch andere Inhalte ersetzt worden).

Zum Verschieben in eine Formatgruppe reicht es, diese zu Beginn zu erzeugen und in der while-Schleife genügt eine einzige Zeile:

Code
var doc=app.activeDocument; 

if (!doc.paragraphStyleGroups.itemByName("Hubert").isValid) {
var paraStyleGroup = doc.paragraphStyleGroups.add({name: "Hubert"});
}
else {
var paraStyleGroup = doc.paragraphStyleGroups.itemByName("Hubert");
}
var allStyles=doc.paragraphStyles;
var n=allStyles.length;
while (n--){
try{
allStyles[n].name=allStyles[n].name.replace("02_Dachzeile","02_1_Dachzeile");
allStyles[n].name=allStyles[n].name.replace("02_Ueberschrift_gross","02_2_Ueberschrift_gross");
allStyles[n].name=allStyles[n].name.replace("02_Ueberschrift_mittel","02_3_Ueberschrift_mittel");
allStyles[n].name=allStyles[n].name.replace("02_Ueberschrift_klein","02_4_Ueberschrift_klein");
allStyles[n].name=allStyles[n].name.replace("04_Text_ohne_Einzug","04_1_Text_ohne_Einzug");
allStyles[n].name=allStyles[n].name.replace("04_Text","04_2_Text");
allStyles[n].name=allStyles[n].name.replace("04_Text_Initial_2zeilig","04_3_Text_Initial_2zeilig");
allStyles[n].name=allStyles[n].name.replace("04_Text_Initial_3zeilig","04_3_Text_Initial_3zeilig");
allStyles[n].name=allStyles[n].name.replace("06_Interview_Ueberschrift","06_1_Interview_Ueberschrift");
allStyles[n].name=allStyles[n].name.replace("06_Interview_Vorspann","06_2_Interview_Vorspann");
allStyles[n].name=allStyles[n].name.replace("06_Interview_Frage","06_3_Interview_Frage");
allStyles[n].name=allStyles[n].name.replace("06_Interview_Antwort","06_4_Interview_Antwort");
allStyles[n].move(LocationOptions.AT_END, paraStyleGroup);
}
catch (e) {
}
}
alert ("Done!\nYou can go outside an play now");

Ohne das ständige Anzeigen des aktuellen Formatnamens wird das zackig ausgeführt.

Aber: Es gibt zwei Probleme.
Erstens: Bei jedem der zwölf Durchgänge wird jeder der zwölf Replace-Befehle ausgeführt. Davon immer elf Mal umsonst.
Zweitens: Das erste Format ist nicht zuoberst, sondern ganz zuletzt eingereiht.

Als Lösung des ersten Problems bietet sich an, die Formate direkt anzusprechen.
Das könnten zwölf Befehlszeilen sein. Oder eine Liste mit den Namenspaaren, welche mit einer Schleife abgearbeitet wird.

Zum zweiten Problem habe ich folgendes versucht: Im Formatordner wird zuerst ein temporäres Format angelegt, welches am Schluss wieder entfernt wird.

Code
var curDoc  = app.documents[0]; 
var grpName = "hebbert";

if (!curDoc.paragraphStyleGroups.itemByName(grpName).isValid) {
var paraStyleGroup = curDoc.paragraphStyleGroups.add({name:grpName});
}
else {
var paraStyleGroup = curDoc.paragraphStyleGroups.itemByName(grpName);
}

var dummy = paraStyleGroup.paragraphStyles.add();
dummy.name = "dummy";

var repList = [
["02_Dachzeile", "02_1_Dachzeile"],
["02_Ueberschrift_gross", "02_2_Ueberschrift_gross"],
["02_Ueberschrift_mittel", "02_3_Ueberschrift_mittel"],
["02_Ueberschrift_klein", "02_4_Ueberschrift_klein"],
["04_Text_ohne_Einzug","04_1_Text_ohne_Einzug"],
["04_Text","04_2_Text"],
["04_Text_Initial_2zeilig","04_3_Text_Initial_2zeilig"],
["04_Text_Initial_3zeilig","04_3_Text_Initial_3zeilig"],
["06_Interview_Ueberschrift","06_1_Interview_Ueberschrift"],
["06_Interview_Vorspann","06_2_Interview_Vorspann"],
["06_Interview_Frage","06_3_Interview_Frage"],
["06_Interview_Antwort","06_4_Interview_Antwort"]
];

for (var p=0; p<repList.length; p++) {
try {
curDoc.paragraphStyles.itemByName(repList[p][0]).name = repList[p][1];
curDoc.paragraphStyles.itemByName(repList[p][1]).move(LocationOptions.AT_END, paraStyleGroup);
}
catch (e) {
}
}

paraStyleGroup.paragraphStyles.itemByName("dummy").remove();

var dlog = new Window("palette");
dlog.size = [320,100];
dlog.add("statictext", [80, 100, 320, 116], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(999);
// das Fenster schliessen
dlog.close();

Gruss, Hans

Scriptanpassung - Formate umbenennen und in neue Formatgruppe verschieben

hebbert
Beiträge gesamt: 5

30. Nov 2015, 08:26
Bewertung:

gelesen: 2984

Beitrag als Lesezeichen
Hallo Hans,

vielen herzlichen Dank für deine Antwort und Mühe.
Das Script läuft nun viel sauberer und schneller durch als vorher. Zudem werden die Formate schön in Gruppen verschoben. Leider stehe ich noch ganz am Anfang der Skriptbearbeitung, habe aber einen Kollegen der mit Javascript vertraut ist. Mit ihm werde ich das mal analysieren und ggfs erweitern.
Das bringt mich aber schon ein Stück weiter.

Vielen Dank und Grüße
hebbert