2017-04-13 1 views
0

Je crée des scripts pour InDesign afin d'accélérer le processus.
J'ai créé un script où une certaine ligne, je pense, devrait fonctionner mais InDesign n'est pas d'accord.OU opérateur dans extendscript

Il échoue sur ("Geen"||"None"); dans ce qui suit
app.changeGrepPreferences.appliedCharacterStyle = myDoc.characterStyles.item("[Geen]"||"[None]");

Je pense à changer à un characterStyle [Geen] ou [None]. En fonction de ce qui est disponible dans les styles de caractères prédéfinis.

Qu'est-ce que je fais mal? Cela semble un peu basique.

Répondre

1

Malheureusement, ce n'est pas si simple. Si vous utilisez doc.characterStyles.item('foo') il vous donnera encore un [object CharacterStyle]. Même difficile, ça n'exsiste pas.

var doc = app.activeDocument; 
$.writeln(doc.characterStyles.item('foo')); 
// writes [object CharacterStyle] into the console 

Ce que vous pouvez faire est d'utiliser un bloc try{}catch(error){} et demander la propriété name de cet objet. Dans ce cas, InDesign va lancer une erreur que vous pouvez attraper. Ensuite, vous pouvez revenir à un style de caractères par défaut [Aucun]

var doc = app.activeDocument; 
try{ 
    $.writeln(doc.characterStyles.item('foo').name); 
}catch(e) { 
    $.writeln(e); 
    $.writeln(doc.characterStyles.item('[None]').name); 
} 

Edit: Comme mentionné par mdomino. Vous pouvez utiliser la propriété isValid.

var doc = app.activeDocument; 

if(doc.characterStyles.item('foo').isValid === true) { 
    $.writeln('doc.characterStyles.item(\'foo\') exists'); 
} else { 
    $.writeln('use doc.characterStyles.item(\'[None]\') because '); 
    var defaultStyle = doc.characterStyles.item('[None]'); 
    $.writeln(defaultStyle.name + ' is ' + defaultStyle.isValid); 
} 
+0

Nice a fonctionné parfaitement. Je vous remercie! – Interactive

+1

Ou, si vous voulez éviter un 'try catch', vous pouvez aussi vérifier la propriété' doc.characterStlyes.item ("[Geen]"). IsValid'. – mdomino