Creación de secuencias de comandos de cuadros de texto de 1 línea frente a 2 líneas

Trataré de hacer esta pregunta lo mejor que pueda, pero el problema es desafiante.

Tengo un cuadro de texto en el que una parte de mi secuencia de comandos cambiará el texto. Quiero codificar una variable booleana para verificar si ese texto cabe en una línea o no.

Ex.

 ___________________
|This returns true  |
|                   |
|___________________|

pero

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

El conteo de caracteres no funcionará ya que no estoy usando una fuente monoespaciada. ¿Algunas ideas?

Respuestas (1)

Lo mejor que se me ocurrió fue esto:

Después de aplicar el nuevo texto...

  1. Comprobar la altura de la capa
  2. Activar "Sin descanso"
  3. Eliminar todos los "\r"
  4. Verifique la altura de la capa nuevamente
    • Si la altura de la capa ahora es menor que antes = multilínea
    • Porque si el texto ya está en una sola línea, el paso 2 y el paso 3 no afectarían la altura.
  5. Revertir el estado del historial si es necesario.

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 ];

}
Así que creo que esto podría fallar por lo que estoy tratando de lograr. En el ejemplo que di, por ejemplo, la versión más larga no devolvería un cambio en la altura después de eliminar todos los espacios, ya que el cuadro de texto de Photoshop simplemente ajustaría los caracteres adicionales a la siguiente línea. Tampoco notará un cambio en el tamaño de las cadenas que ya tienen una línea. Ambos ejemplos devolverían singleline = true en su código.
@RyanWalker, es posible que haya pasado por alto algo, pero no pude reproducir estos problemas. No debería haber ningún ajuste de caracteres adicionales si se aplica "sin interrupción" ... Entonces, ¿quizás por alguna razón no pudo hacerlo en su archivo? No entiendo su punto acerca de notar cambios en las picaduras que ya son una línea. Hice un archivo de prueba y un código de prueba, que pasa por todas las capas y genera resultados en la consola de Javascript cuando lo ejecuta a través de la aplicación ESTK. El código está aquí y el enlace del archivo de prueba está en la línea 3.
No sé qué hice diferente en mi prueba (PEBKAC seguro), pero esto funciona ahora. ¯_(ツ)_/¯ ¡Gracias por proporcionar el documento de prueba!
@RyanWalker, si aún encuentra este problema, probablemente querrá verificar cada "paso" por separado para ver dónde falla. Compruebe si height1 y height 2 son lo que espera. Verifique si se aplicó "Sin interrupción", verifique si se eliminaron los saltos de línea. Incluso es posible que desee verificar si el texto de entrada es como debería ser. Todavía es muy posible que haya algún escenario que devuelva el valor incorrecto y simplemente no lo pensé.