/* Reduce one Textline at the best position... Version: 1.0 Gregor Fellenz http://www.indesignblog.com/ The idea is inspired from an Adobe Scripting Forum Discussion. Teus de Jong (http://www.teusdejong.nl) wrote a quite similar solution with tracking/kerning! */ if (app.selection[0] == undefined ) { alert ("Bitte einen Textramen auswählen...") ; exit(1); } var tf; try { tf = app.selection[0].parentTextFrames[0]; processTF(tf); exit (0); } catch(e) { $.writeln(e); } if (app.selection[0].constructor.name == "TextFrame") { processTF(app.selection[0]); exit (0); } alert ("Bitte den Cursor im zu bearbeitenden Textframe positionieren...") ; // Functions ... function processTF (tf) { var absatzArray = new Array(); for (var i = 0; i < tf.paragraphs.length; i++) { var absatz = new Absatz(tf.paragraphs[i]); if (absatz.usable) absatzArray.push (absatz) } absatzArray = absatzArray.sort (sortWordspacing) absatzArray[0].par.desiredWordSpacing = absatzArray[0].desiredWordSpacing; absatzArray[0].par.select (); } //Objekt Absatz function Absatz (par) { this.par = par; var lines = par.lines.length; var oldDesiredWordSpacing = par.desiredWordSpacing; var cDesiredWordSpacing = par.desiredWordSpacing; // WordSpacing solange verringern bis eine Zeile weniger while (par.lines.length == lines) { cDesiredWordSpacing--; par.desiredWordSpacing = cDesiredWordSpacing; if (par.desiredWordSpacing == par.minimumWordSpacing) { par.desiredWordSpacing = oldDesiredWordSpacing; this.usable = false; return; } } par.desiredWordSpacing = oldDesiredWordSpacing; this.desiredWordSpacing = cDesiredWordSpacing; this.usable = true; } // Array Sort Function ... function sortWordspacing(a, b){ //Compare "a" and "b" in some fashion, and return -1, 0, or 1 if (typeof parseInt(a.desiredWordSpacing,10) == 'number' && typeof parseInt(b.desiredWordSpacing,10) == 'number') { return parseInt(b.desiredWordSpacing,10)-parseInt(a.desiredWordSpacing,10); } } // This function is derive from a Script written by Teus de Jong. function zeichenAbstand(par) { var lines = par.lines.length; var org_track = app.selection[0].tracking; var track = app.selection[0].tracking; while (par.lines.length == lines) { track--; par.tracking = track; } // Falls der Wert 10 überschreitet wird vorsichtshabler nochmal nachgefragt ... if (org_track - track > 10) { if (confirm ("Laufweite war "+org_track+", ist jetzt "+track+"!\nRückgängig?") == true) par.tracking = org_track; } par.tracking = org_track; par.tracking = track; exit(0); }