¿Cómo subrayar caracteres en InDesign con JavaScript?
Empecé a escribir este código para InDesign para subrayar todas las letras excepto la que tiene descendientes, y agregué una ventana de diálogo para elegir el trazo y la compensación de la línea.
Ahora tengo dos problemas:
- el programa subraya todas las letras
- el trazo y offset no cambian
Soy principiante en Javascript y es la primera vez programando para InDesign. ¿Alguien tiene alguna idea? ¡Gracias!
// SUBRAYAR TODO MENOS NO DESCENDIENTES
// Asegúrese de que la interacción del usuario (visualización de diálogos, etc.) esté activada.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
if (app.documents.length != 0){
try {
// Ejecutar secuencia de comandos con una sola reversión si es compatible.
if (parseFloat(app.version) < 6) {
main();
} else {
app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, “Expandir abreviaturas del estado”);
}
// Informe global de errores
} catch ( error ) {
alert( error + ” (Línea ” + error.line + ” en archivo ” + error.fileName + “)”);
}
}else{
alert(“Abra un documento antes de ejecutar este script.”);
}
// FUNCIÓN PRINCIPAL
function main(){
if(app.selection.length != 0){
myDisplayDialog();
}
}
// INTERFAZ
function myDisplayDialog(){
// Declarar variables
// general
var myDoc = app.activeDocument;
var mS = myDoc.selection;
// diálogo
var myDialog = app.dialogs.add({name:”Subrayador”});
var myLabelWidth = 70;
with(myDialog.dialogColumns.add()){
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:”Trama:”, minWidth:myLabelWidth});
staticTexts.add({staticLabel:”Compensación:”, minWidth:myLabelWidth});
}
}
with(dialogRows.add()){
staticTexts.add({staticLabel:””});
var myStroke = measurementEditboxes.add({editValue:1, editUnits:MeasurementUnits.points});
var myOffset = measurementEditboxes.add({editValue: 15, editUnits:MeasurementUnits.points});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var myStroke = myStroke.editValue;
var myOffset = myOffset.editValue;
myDialog.destroy();
underline(mS,myStroke,myOffset);
}
else{
myDialog.destroy();
alert("Rango de página no válido.");
}
}
// FUNCIÓN REAL
function underline(charList,stroke, offset){
var len = charList.length;
const doNotUnderline = [‘g’,’j’,’p’,’q’,’y’];
for (var i=0; i<len; i++){=”” try{=”” var=”” mychar=”charList[i];” console.log(typeof=”” mytext);=”” if=”” (includes(mychar,=”” donotunderline)=”=” false)=”” {=”” mychar.underline=”true;” mychar.underlineweight=”=” stroke;=”” mychar.underlineoffset=”=” offset;=”” }=”” else=”” {=”” mychar.underline=”false;” }=”” }catch(r){=”” alert(r.description);=”” break;=”” }=”” }=”” }=”” función=”” para=”” saber=”” si=”” el=”” carácter=”” está=”” en=”” la=”” matriz=”” function=”” includes(element,array)=”” {=”” var=”” len=”array.length;” for(var=”” i=”0;”></len;><len; i++)
{
if(array[i]==element){return true;}
}
return false;
} i++)=”” {=”” if(array[i]=”=element){return” true;}=”” }=”” return=”” false;=””></len; i++)
{
if(array[i]==element){return true;}
}
return false;
}>
davy.ai
Problema con la subrayado de código en InDesign
El código proporcionado tiene la intención de subrayar todas las letras excepto aquellas con descendencia, e incluye una ventana de diálogo para elegir el trazo y la distancia de la línea. Sin embargo, el usuario se encuentra con dos problemas:
El usuario es principiante en JavaScript y agradecería cualquier ayuda para resolver estos problemas. El código incluye varias funciones y una función principal, que llama a la función
myDisplayDialog
cuando se selecciona un objeto en el documento de InDesign. La funciónmyDisplayDialog
muestra una caja de diálogo para que el usuario seleccione el trazo y la distancia.La función
underline
tiene la intención de recorrer cada carácter en el objeto seleccionado y subrayarlo si no contiene ninguna de las letras con descendencia. Sin embargo, la función actualmente está subrayando todos los caracteres, independientemente de su apariencia.La función
includes
se utiliza para verificar si un carácter está incluido en una matriz de letras con descendencia.