Skripterstellung für 1-zeilige vs. 2-zeilige Textfelder

Ich werde versuchen, diese Frage so gut ich kann zu stellen, aber das Problem ist eine Herausforderung.

Ich habe ein Textfeld, in dem ein Teil meines Skripts den Text ändert. Ich möchte eine boolesche Variable codieren, um zu überprüfen, ob dieser Text in eine Zeile passt oder nicht.

Ex.

 ___________________
|This returns true  |
|                   |
|___________________|

Aber

 ___________________
|This longer version|
|returns false      |
|___________________|

Die Zeichenanzahl funktioniert nicht, da ich keine Monospaced-Schriftart verwende. Irgendwelche Ideen?

Antworten (1)

Das Beste was mir einfiel war folgendes:

Nachdem der neue Text angewendet wurde...

  1. Schichthöhe prüfen
  2. „Keine Pause“ einschalten
  3. Entfernen Sie alle "\r"
  4. Überprüfen Sie die Schichthöhe erneut
    • Wenn die Schichthöhe jetzt kleiner ist als vorher = mehrzeilig
    • Denn wenn der Text bereits einzeilig ist, würden Schritt 2. und Schritt 3. die Höhe nicht beeinflussen.
  5. Setzen Sie den Verlaufsstatus bei Bedarf zurück.

var doc = app.activeDocument;
var layer = doc.activeLayer;

var historyRollback = doc.activeHistoryState;
var rulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.POINTS;

var height1 = size( layer )[1];
layer.textItem.noBreak = true;
layer.textItem.contents = layer.textItem.contents.replace(/\r/g,'');
var height2 = size( layer )[1];

var singleline = height1 > height2 ? false : true;

app.preferences.rulerUnits = rulerUnits;
doc.activeHistoryState = historyRollback;
doc.activeLayer = layer;

alert( singleline )

function size( layer ) {

    var bounds = layer.boundsNoEffects;
    var top = bounds[1].value;
    var right = bounds[2].value;
    var bottom = bounds[3].value;
    var left = bounds[0].value;
    var width = right - left;
    var height = bottom - top;

    return [ width, height ];

}
Ich denke also, dass dies für das, was ich zu erreichen versuche, fehlschlagen könnte. In dem Beispiel, das ich gegeben habe, würde die längere Version beispielsweise keine Höhenänderung zurückgeben, nachdem alle Leerzeichen entfernt wurden, da das Photoshop-Textfeld einfach zusätzliche Zeichen in die nächste Zeile umbrechen würde. Es wird auch keine Größenänderung für Zeichenfolgen bemerken, die bereits aus einer Zeile bestehen. Beide Beispiele würden in Ihrem Code singleline = true zurückgeben.
@RyanWalker, es ist möglich, dass ich etwas übersehen habe, aber ich konnte diese Probleme nicht reproduzieren. Es sollten keine zusätzlichen Zeichen umbrochen werden, wenn "kein Umbruch" angewendet wird ... Vielleicht ist dies aus irgendeinem Grund in Ihrer Datei fehlgeschlagen? Ich verstehe Ihren Standpunkt nicht, dass Sie Änderungen für Stiche bemerken, die bereits eine Zeile sind. Ich habe eine Testdatei und einen Testcode erstellt, der alle Ebenen durchläuft und Ergebnisse in der Javascript-Konsole ausgibt, wenn Sie ihn über die ESTK-Anwendung ausführen. Der Code ist hier und der Link zur Testdatei befindet sich in Zeile 3.
Ich weiß nicht, was ich in meinem Test anders gemacht habe (PEBKAC sicher), aber das funktioniert jetzt. ¯_(ツ)_/¯ Danke für die Bereitstellung des Testdokuments!
@RyanWalker, wenn Sie immer noch auf dieses Problem stoßen, sollten Sie wahrscheinlich jeden "Schritt" separat überprüfen, um zu sehen, wo es schief geht. Überprüfen Sie, ob Höhe 1 und Höhe 2 Ihren Erwartungen entsprechen. Überprüfen Sie, ob "Kein Umbruch" angewendet wurde, überprüfen Sie, ob Zeilenumbrüche entfernt wurden. Vielleicht möchten Sie sogar überprüfen, ob der eingegebene Text so ist, wie er sein sollte. Es ist immer noch sehr gut möglich, dass es ein Szenario gibt, das den falschen Wert zurückgibt, und ich habe einfach nicht daran gedacht.