Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Marginalie (CS6, WIN)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Marginalie (CS6, WIN)

cwenet
Beiträge gesamt: 1139

12. Aug 2013, 21:28
Beitrag # 1 von 11
Bewertung:
(3940 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend,

hiermit möchte ich im Dokumet "marginalie_vorher.idml" den Zähler einer Überschrift
im Fliesstext ausschneiden und als verankerte Fläche vor die Überschrift einfügen:

Code
  
//clear the find/change text preferences
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;

//Set the find options.
app.findTextPreferences.appliedParagraphStyle = 'Überschrift 2';
app.findGrepPreferences.findWhat = '^\\d+?\\.\\d+? ';

var myFound = app.activeDocument.findGrep(true);

var myBounds = [ "0p", "0p", "13pt", "36mm"]; // Koordinaten des Marginalientextrahmens [y1, x1, y2, x2]
var myOStyle = app.activeDocument.objectStyles.item('Marginalie');

for( var n = myFound.length-1; n >= 0; n-- )
{
mySchleife();
}


function mySchleife()
{
var myIndex = myFound[n].insertionPoints[0].index; // der wievielte IP in der Story?
var myStory = myFound[n].parentStory; // in welcher Story?
app.select(myFound[n]);
app.cut();

var myFrame = myStory.insertionPoints[myIndex].textFrames.add(); // Einfügen eines Textrahmen am Einfügepunkt (Cursor)
myFrame.parent.parentTextFrames[0].characters.length;
myFrame.geometricBounds = myBounds; // Zuweisung der Koordinaten (Höhe und Breite)
myFrame.applyObjectStyle(myOStyle, true); // Zuweisung des Objektstils
app.select(myFrame.insertionPoints[0]); // Zuweisung des Inhalts
app.paste();
myFrame.paragraphs[0].appliedParagraphStyle = "U2_Ziffer";
}


So wie in Dokument "marginalie_soll.idml" soll es aussehen.
Das Script scheint die Anker aber irgendwie willkürlich zu setzen.
Bei vielen Überschriften läuft das Ganze dann komplett aus dem Ruder und die verankerte Fläche entfernt sich
immer weiter weg von der ursprünglichen Überschrift.

Hat jemand eine Idee?

Danke und Gruss
Christoph

(Dieser Beitrag wurde von cwenet am 12. Aug 2013, 21:30 geändert)

Anhang:
marginalie_vorher.idml (31.5 KB)   marginalie_soll.idml (38.7 KB)
X

Marginalie (CS6, WIN)

Hans Haesler
  
Beiträge gesamt: 5826

12. Aug 2013, 22:28
Beitrag # 2 von 11
Beitrag ID: #516220
Bewertung:
(3911 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend Christoph,

die Schleife vorwärts laufen lassen. Dann sollte es funktionieren wie gewünscht:

Code
// clear the find/change preferences 
app.findTextPreferences = app.changeTextPreferences = null;
app.findGrepPreferences = app.changeGrepPreferences = null;

// set the find options
app.findTextPreferences.appliedParagraphStyle = 'Überschrift 2';
app.findGrepPreferences.findWhat = '^\\d+?\\.\\d+? ';

var myFound = app.activeDocument.findGrep(true);

var myBounds = [ "0p", "0p", "13pt", "36mm"]; // Koordinaten des Marginalientextrahmens [y1, x1, y2, x2]
var myOStyle = app.activeDocument.objectStyles.item('Marginalie');

for (var n=0; n<myFound.length; n++) {
var myIndex = myFound[n].insertionPoints[0].index; // der wievielte IP in der Story?
var myStory = myFound[n].parentStory; // in welcher Story?
app.select(myFound[n]);
app.cut();

var myFrame = myStory.insertionPoints[myIndex].textFrames.add(); // Einfügen eines Textrahmens am Einfügepunkt (Cursor)
myFrame.parent.parentTextFrames[0].characters.length;
myFrame.geometricBounds = myBounds; // Zuweisung der Koordinaten (Höhe und Breite)
myFrame.applyObjectStyle(myOStyle, true); // Zuweisung des Objektstils
app.select(myFrame.insertionPoints[0]); // Zuweisung des Inhalts
app.paste();
myFrame.paragraphs[0].appliedParagraphStyle = "U2_Ziffer";
}

// clear the find/change preferences
app.findTextPreferences = app.changeTextPreferences = null;
app.findGrepPreferences = app.changeGrepPreferences = null;

Und auch die 'TextPreferences' löschen. Sowohl zu Beginn, als auch am Schluss.

Gruss, Hans


als Antwort auf: [#516217]

Marginalie (CS6, WIN)

cwenet
Beiträge gesamt: 1139

13. Aug 2013, 06:19
Beitrag # 3 von 11
Beitrag ID: #516221
Bewertung:
(3866 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Hans,

besten Dank. So funktioniert es prima.

Ich glaube, das habe ich immer noch nicht verstanden, wann man rückwärts und wann man vorwärts durch das Dokument marschieren muss.

Schönen Tag
Gruss
Christoph


als Antwort auf: [#516220]

Marginalie (CS6, WIN)

Hans Haesler
  
Beiträge gesamt: 5826

13. Aug 2013, 08:12
Beitrag # 4 von 11
Beitrag ID: #516222
Bewertung:
(3846 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

bitte sehr.

Dieser Alert eingefügt, zeigt den Inhalt der ersten Fundstelle:

Code
alert (myFound[0].contents); 

Und das ist nicht 1.1, sondern 1.9. Das heisst: Die Werte im Array sind in umgekehrter Reihenfolge.

Deshalb muss die Schleife vorwärts laufen. Die Fundstellen werden von unten nach oben besucht und es gibt keine Verschiebung.

Gruss, Hans


als Antwort auf: [#516221]

Marginalie (CS6, WIN)

WernerPerplies
Beiträge gesamt: 2760

13. Aug 2013, 08:30
Beitrag # 5 von 11
Beitrag ID: #516223
Bewertung:
(3839 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Christoph,

wäre es nicht einfacher, die Reihenfolge im Array umzudrehen?
-> array.reverse();


als Antwort auf: [#516222]

Marginalie (CS6, WIN)

Hans Haesler
  
Beiträge gesamt: 5826

13. Aug 2013, 08:38
Beitrag # 6 von 11
Beitrag ID: #516226
Bewertung:
(3826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

der Array wird von InDesign in umgekehrter Reihenfolge geliefert.
Deshalb kann man ihn – so wie er ist – von vorne nach hinten abarbeiten lassen.

Eine Umkehrung ist nicht notwendig.

Gruss, Hans


als Antwort auf: [#516223]

Marginalie (CS6, WIN)

Hans Haesler
  
Beiträge gesamt: 5826

13. Aug 2013, 08:42
Beitrag # 7 von 11
Beitrag ID: #516229
Bewertung:
(3822 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

noch etwas: Das Setzen des 'appliedParagraphStyle' muss auch mit 'findGrepPreferences' gemacht werden.
Sonst könnte es sein, dass eine Fundstelle im Text behandelt wird. Da habe ich gestern zu wenig genau hingeschaut.

Code
// clear the find/change preferences 
app.findGrepPreferences = app.changeGrepPreferences = null;

// set the find options
app.findGrepPreferences.appliedParagraphStyle = 'Überschrift 2';
app.findGrepPreferences.findWhat = '^\\d+?\\.\\d+? ';

var myFound = app.activeDocument.findGrep(true);

var myBounds = [ "0p", "0p", "13pt", "36mm"]; // Koordinaten des Marginalientextrahmens [y1, x1, y2, x2]
var myOStyle = app.activeDocument.objectStyles.item('Marginalie');

for (var n=0; n<myFound.length; n++) {
var myIndex = myFound[n].insertionPoints[0].index; // der wievielte IP in der Story?
var myStory = myFound[n].parentStory; // in welcher Story?
app.select(myFound[n]);
app.cut();

var myFrame = myStory.insertionPoints[myIndex].textFrames.add(); // Einfügen eines Textrahmens am Einfügepunkt (Cursor)
myFrame.parent.parentTextFrames[0].characters.length;
myFrame.geometricBounds = myBounds; // Zuweisung der Koordinaten (Höhe und Breite)
myFrame.applyObjectStyle(myOStyle, true); // Zuweisung des Objektstils
app.select(myFrame.insertionPoints[0]); // Zuweisung des Inhalts
app.paste();
myFrame.paragraphs[0].appliedParagraphStyle = "U2_Ziffer";
}

// clear the find/change preferences
app.findGrepPreferences = app.changeGrepPreferences = null;

Wenn man aber sicher ist, dass der Text nie mit der Kombination "Ziffer, Punkt, Ziffer" beginnt, dann muss das Absatzformat nicht gesetzt werden.

Gruss, Hans


als Antwort auf: [#516221]

Marginalie (CS6, WIN)

WernerPerplies
Beiträge gesamt: 2760

13. Aug 2013, 08:42
Beitrag # 8 von 11
Beitrag ID: #516230
Bewertung:
(3819 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

entschuldige, ich habe mich unklar ausgedrückt, deshalb nochmal und hoffentlich klarer:

Ist es nicht generell sinnvoller die Reihenfolge innerhalb eines Arrays zu ändern -> array.reverse(), als jeweils die Laufrichtung der Schleife zu ändern?

Ich hatte schon verstanden, dass das Array in diesem Fall schon die richtige Reihenfolge hatte.


als Antwort auf: [#516226]

Marginalie (CS6, WIN)

Hans Haesler
  
Beiträge gesamt: 5826

13. Aug 2013, 09:11
Beitrag # 9 von 11
Beitrag ID: #516232
Bewertung:
(3777 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mein lieber Werner,

Du hattest Dich klar ausgedrückt. Aber es macht es keinen Sinn, eine generelle Regel zu deklarieren.

Der Beweis: In diesem Fall ist es wirklich überflüssig, die Reihenfolge zu ändern.

Zudem ist es einfacher, diese Zeile zu tippen (und zu verstehen) ...

Code
for (var n=0; n<myFound.length; n++) { 

... als diese:

Code
for (var n=myFound.length-1; n>=0; n--) { 


Gruss, Hans


als Antwort auf: [#516230]

Marginalie (CS6, WIN)

WernerPerplies
Beiträge gesamt: 2760

13. Aug 2013, 09:19
Beitrag # 10 von 11
Beitrag ID: #516235
Bewertung:
(3774 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

wir reden wirklich aneinander vorbei:

Zitat Aber es macht es keinen Sinn, eine generelle Regel zu deklarieren.

Ich finde das schon, aber das ist meine Meinung.
Zitat Der Beweis: In diesem Fall ist es wirklich überflüssig, die Reihenfolge zu ändern.

Richtig, dehalb war mein Vorschlag mehr genereller Art.
Zitat Zudem ist es einfacher, diese Zeile zu tippen (und zu verstehen) ...
for (var n=0; n<myFound.length; n++) {

Genau meine Meinung!

Und deshalb finde ich:

Sollte es notwendig sein, ein Array rückwärts zu durchlaufen, ist m. E. sinnvoller, den Arryinhalt umzudrehen und dann Schleifen immer vorwärts zu durchlaufen.

Aber wie schon gesagt, das ist meine Meinung.


als Antwort auf: [#516232]
(Dieser Beitrag wurde von WernerPerplies am 13. Aug 2013, 09:24 geändert)

Marginalie (CS6, WIN)

cwenet
Beiträge gesamt: 1139

13. Aug 2013, 13:34
Beitrag # 11 von 11
Beitrag ID: #516264
Bewertung:
(3714 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für Eure weiteren Beiträge und Ideen, Hans und Werner.

Danke auch an Hans für den Tipp: findGrepPreferences

Es gab tatsächlich ein Vorkommen ausserhalb der Überschrift 2 und ich hatte mich schon gewundert.

Schönen Tag
Christoph


als Antwort auf: [#516229]
X