[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Kurze Textzeilen finden (CS6, Win7)

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

Kurze Textzeilen finden (CS6, Win7)

cwenet
Beiträge gesamt: 1139

23. Okt 2013, 19:06
Beitrag # 1 von 8
Bewertung:
(2071 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

hiermit versuche ich gerade in ausgewählter Story kurze Textzeilen aufzuspüren und anzuspringen:

Code
#targetengine "session";  

var win = new Window("palette", 'Kurze Zeilen finden', [0,0,155,132]);
var weiter = win.add( "button", [5,105,75,127], 'Weiter' );

win.center();


weiter.onClick = function()
{
var curSel = app.selection;
var curStory = curSel[0].parent;
var allLines = curStory.lines;

for (var p=0; p<allLines.length; p++) {

if (allLines[p].length < 5) {
allLines[p].select();
}
}

}

var result = win.show();


Wie kann ich nun auch alle nachfolgende kurze Zeilen finden?
Also nach jedem Buttonklick soll die nächste kurze Zeile angesprungen werden.
Im Moment wird nur die erste Stelle angesprungen.

Bitte um Hilfe.
Kleines Demodok anbei.

Gruss
Christoph

Anhang:
zeilenweise.idml (27.6 KB)
X

Kurze Textzeilen finden (CS6, Win7)

Hans Haesler
  
Beiträge gesamt: 5826

23. Okt 2013, 21:50
Beitrag # 2 von 8
Beitrag ID: #518868
Bewertung:
(2033 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend Christoph,

mit Deinem Code wird nach jedem Klick auf "Weiter" erneut der ganze Inhalt des Rahmens von Anfang an abgecheckt und jedes Mal wird das erste Vorkommen ausgewählt.

Eine mögliche Lösung: Die Schleife nicht jedes Mal mit p=0 starten, sondern nur zu Beginn mit p=oldCtr und dann mit dem aktuellen Wert von p plus 1:

Code
#targetengine "session"; 

var win = new Window("palette", "Kurze Zeilen finden", [0,0,155,132]);
win.center();
var weiter = win.add("button", [5,105,75,127], "Weiter");

var curSel = app.selection;
var curStory = curSel[0].parent;
var allLines = curStory.lines;
var oldCtr = 0;

weiter.onClick = function() {
for (var p=oldCtr; p<allLines.length; p++) {
if (allLines[p].length < 5) {
allLines[p].select();
oldCtr = p+1;
break;

}
}
}

var result = win.show();

Hier funktioniert es. Und bei Dir?

Gruss, Hans


als Antwort auf: [#518864]
(Dieser Beitrag wurde von Hans Haesler am 23. Okt 2013, 21:51 geändert)

Kurze Textzeilen finden (CS6, Win7)

cwenet
Beiträge gesamt: 1139

24. Okt 2013, 07:04
Beitrag # 3 von 8
Beitrag ID: #518873
Bewertung:
(1985 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Hans,

vielen Dank für die Scriptanpassung und auch die erklärenden Worte.
Es funktioniert, wie gewünscht.

Die If-Abfrage habe ich noch geändert, da sonst auch Leerzeilen angesprungen werden.

Code
if ((allLines[p].length > 1) && (allLines[p].length < 5)){ 


Schöne Grüße
Christoph


als Antwort auf: [#518868]

Kurze Textzeilen finden (CS6, Win7)

WernerPerplies
Beiträge gesamt: 2762

24. Okt 2013, 07:55
Beitrag # 4 von 8
Beitrag ID: #518874
Bewertung:
(1977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Chrstoph,

Ursache ist, wie von Hans erwähnt, der falsche Platz der Zählerdefinition.
Bei meinem Alternativorschlag löse ich dieses Problem, in dem ich die Zählervariable außerhalb der onClick-Methode definiere.

Ich würde die Sache insgesamt so angehen:
Code
#targetengine "session";   
#target indesign
main();

/*void*/function main()
{
try
{
var win = new Window("palette", 'Kurze Zeilen finden', [0,0,155,132]);
var weiter = win.add( "button", [5,105,75,127], 'Weiter' );
win.center();
// außerhalb onClick definieren, damit die Definition nicht mit jedem Klick wiederholt wird.
// ggf. für einen Neustart einen eigenen Button definieren -> neue Story wählen
var allLines = app.selection[0].parentStory.lines;
// Zähler außerhalb von onCLick definieren
var p = 0;
// auf die erste Fundstelle springen
next();
weiter.onClick = function()
{
next();
}
function next()
{
// Startvaiable nicht neu definieren
for (; p<allLines.length; p++)
{
if (allLines[p].length < 30)
{
// Zeile gefunden
allLines[p++].select();
if (p>=allLines.length)
p=0; // zurück auf Los!
// Schleife bis zum nächsten Klick verlassen
return;
}
}
return;
}
// welche Rückgabe erwartest Du hier?
// Palette ist ein nicht modales Fenster!
// var result = win.show();
win.show();
}
catch (error)
{
alert(error.message + "\ninSteile: " + error.line);
}
return;
}

Vielleicht wäre es auch noch gut, wenn Du ein Cancel-Button stiften würdest.


als Antwort auf: [#518864]

Kurze Textzeilen finden (CS6, Win7)

Martin Fischer
  
Beiträge gesamt: 12783

24. Okt 2013, 09:09
Beitrag # 5 von 8
Beitrag ID: #518877
Bewertung:
(1954 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans und Christoph,

ein kleiner Tipp noch.

Mit der folgenden Zeile, einzufügen unter allLines[p].select(); wird die jeweils gefundene Stelle herangezoomt.

Code
app.activeWindow.zoomPercentage = app.activeWindow.zoomPercentage; 

Das ist vor allem dann hilfreich, wenn sich die gefundene Stelle nicht auf der aktiven Seite befindet.


als Antwort auf: [#518873]
(Dieser Beitrag wurde von Martin Fischer am 24. Okt 2013, 09:26 geändert)

Kurze Textzeilen finden (CS6, Win7)

cwenet
Beiträge gesamt: 1139

24. Okt 2013, 09:53
Beitrag # 6 von 8
Beitrag ID: #518880
Bewertung:
(1928 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner, Martin und Hans,

vielen Dank für die tollen Ergänzungen.
In der Tat, habe ich übersehen, dass select() nicht alleine reicht,
um auf nächste Seiten zu springen.
So ist es jetzt prima.

Hintergrund für das Script war:
Eine Art Endkontrolle für unschöne, kurze Absatzauslaufzeilen (sagt man so?).
Deshalb auch das nicht-modale Fenster um direkt nach Fund einzugreifen und
dort weiter zu suchen.

Danke und einen schönen Tag
Christoph


als Antwort auf: [#518877]
(Dieser Beitrag wurde von cwenet am 24. Okt 2013, 09:59 geändert)

Kurze Textzeilen finden (CS6, Win7)

WernerPerplies
Beiträge gesamt: 2762

24. Okt 2013, 10:02
Beitrag # 7 von 8
Beitrag ID: #518883
Bewertung:
(1915 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Zitat Deshalb auch das nicht-modale Fenster um direkt nach Fund einzugreifen und
dort weiter zu suchen.

Das war schon klar, ich wollte nur darauf hinweisen, das win.show() bei nicht modalen Fenstern keinen oder keinen vernünftigen Rückgabewert hat, deshalb ist
var result = win.show();
sinnlos.


als Antwort auf: [#518880]

Kurze Textzeilen finden (CS6, Win7)

cwenet
Beiträge gesamt: 1139

24. Okt 2013, 10:10
Beitrag # 8 von 8
Beitrag ID: #518886
Bewertung:
(1906 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

achso. Vielen Dank für den Hinweis.

Schönen Tag
Christoph


als Antwort auf: [#518883]
X