Convierta comillas tipográficas (rizadas) en comillas tontas (rectas) en InDesign usando JavaScript

Estoy tratando de escribir un script para convertir automáticamente todas las comillas dobles ( “”) en un cuadro de texto en comillas dobles rectas ( "). Aquí está todo lo que he intentado hasta ahora y ninguno de ellos parece estar funcionando:

  1. imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, '"');

  2. imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, "\u0022");

  3. imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, '\^"');

  4. imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, '^\"');

  5. imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, '\^\"');

La opción Buscar/Cambiar en el menú Editar funciona perfectamente bien y es exactamente la funcionalidad que estoy tratando de replicar usando mi secuencia de comandos. Así es como se ve mi cuadro de diálogo Buscar/Cambiar:

ingrese la descripción de la imagen aquí

¿Que me estoy perdiendo aqui?

Respuestas (1)

El problema es que en tus preferencias de InDesign has habilitado "Usar comillas del tipógrafo". Cada vez que escribe texto sin formato en un marco de texto, ID comprueba si es simple 'o doble "; y si es así, lo cambia inmediatamente al equivalente rizado apropiado. Puede ver que si ejecuta su secuencia de comandos en un cuadro de texto que contiene comillas simples y dobles; no solo dejará sin cambios las comillas dobles existentes, sino que además todas las comillas simples y dobles rectas se curvarán mágicamente.

Puede arreglar esto para su secuencia de comandos actual cambiando la configuración global de esta preferencia a false, cambiando el texto y luego restableciéndolo a su valor original (como en "Sea amable con sus usuarios"):

oldPref = app.activeDocument.textPreferences.typographersQuotes;
app.activeDocument.textPreferences.typographersQuotes = false;
imgtext = app.selection[0];
imgtext.contents = imgtext.contents.replace(/[\u201C\u201D]/g, '"');
app.activeDocument.textPreferences.typographersQuotes = oldPref;

Sin embargo, cuando probé encontré muchas más pequeñas cosas que también cambiaron. Esto se debe a que, al cambiar el contenido textual de un marco de esta manera , se elimina todo el texto y luego se vuelve a insertar . Eso significa que todos y cada uno de los formatos 'locales' desaparecerán, y todo el texto en el cuadro obtendrá el formato del primer carácter.

Una mejor manera es no interactuar con el texto sin formato a través de Javascript, sino cambiar el texto en su marco con el de InDesign changeText, que hace exactamente lo mismo que en la interfaz cuando se usa el cuadro de diálogo Buscar/Cambiar.

En Javascript, esto sería:

imgtext = app.selection[0];
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = '"';
app.changeTextPreferences.changeTo = '^"';
imgtext.changeText();

pero para mi sorpresa, 'veo' los cambios uno por uno. Así que esto puede ser algún tipo de 'hackeo' por parte de los programadores de Adobe. Si deshabilita las comillas tipográficas y simplemente las reemplaza "por ", no verá esos extraños artefactos de redibujado:

oldPref = app.activeDocument.textPreferences.typographersQuotes;
app.activeDocument.textPreferences.typographersQuotes = false;
imgtext = app.selection[0];
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = '"';
app.changeTextPreferences.changeTo = '"';
imgtext.changeText();
app.activeDocument.textPreferences.typographersQuotes = oldPref;

Tenga en cuenta que, aparte de Javascript replace, no tiene que especificar nada especial para captar todo tipo de comillas rizadas. Cuando se le da un texto con "cualquier lugar, InDesign encontrará automáticamente tanto eso como todas sus variantes rizadas.

(En caso de que lo necesite en algún momento: para encontrar solo recto ", de hecho lo prefijará con un ^en el cuadro de diálogo Buscar. Para encontrar solo rizado “”, debe copiarlos en el cuadro de diálogo Buscar o usar los accesos directos ^{y ^}).