[Additif, 04/06/2012] — Je me dois de créditer Jongware pour sa découverte antérieure de previewColor (la colonne vertébrale de StyLighter). Il se trouve en effet que mon irremplaçable confrère avait déjà signalé et discuté en février cette propriété cachée dans le Forum InDesign Scripting. Lisez également cette contribution éclairante d'Ashley Mitchell, membre de l'équipe de développement d'InDesign CS4 à l'époque où la fonctionnalité en question fut implémentée.


Il y a deux ans de cela, nous révélions une trappe secrète d'InDesign menant tout droit à l'aperçu des enrichissements locaux (subis par les styles de paragraphe et de caractère). Le script résultant a connu un franc succès auprès des concepteurs d'ePUB et, plus généralement, des utilisateurs d'InDesign soucieux de contrôler ou de rationaliser la mise en style de leur composition. Pour autant, nous n'étions pas au bout de notre démonstration !

En essence et pour faire bref, InDesign CS4 et ultérieur embarque à notre insu un mode d'aperçu spécialement dédié aux styles (Style Preview mode). Cette modalité d'affichage n'est accessible et activable que sur une instruction scriptée : TextPreference.enableStylePreviewMode = true. J'ignore pourquoi les développeurs d'InDesign ont choisi de masquer cette fonctionnalité (demeurant invisible sous CS6 et CC) mais tout porte à croire que son implémentation n'a été boulonnée qu'à moitié, sinon abandonnée. En creusant la question, j'ai mis le doigt sur un autre paramètre obscur dont vous n'aviez probablement jamais eu vent jusqu'à cet instant : previewColor. Cette propriété est exclusivement exposée par les entités ParagraphStyle (style de paragraphe) et CharacterStyle (style de caractère). Née sous CS4, elle prend pour valeur un élément de la classe UIColors (ou bien, en théorie, un triplet RVB) mais la manœuvre n'a aucun effet perceptible… à moins que le mode Style Preview soit activé !

Vous devinez la suite ?

Styles de paragraphe et de caractère automatiquement surlignés dans le mode d'aperçu spécial. (Aucun attribut de soulignement n'est utilisé.)

Bingo ! La capture ci-dessus ne repose sur aucun badigeonnage par soulignement (astuce ordinairement utilisée pour produire cet effet). Au lieu de cela, nous affectons à la propriété previewColor une valeur spécifique pour chaque style que nous souhaitons faire ressortir (et cela n'a aucune incidence sur les couleurs effectivement mises en jeu dans le document). Notez la persistance des biffures et des barres rouges (respectivement pour les styles de caractère et de paragraphe) qui signalent les reformatages locaux. En somme, nous voyons maintenant la fonction d'aperçu des styles dans toute son amplitude.

Le script StyLighter

Fort de cette heureuse découverte, je n'avais plus qu'à ourdir une interface dialoguée livrant à l'utilisateur d'InDesign ces trésors cachés. Il s'agissait avant tout d'offrir un contrôle fin sur le choix des couleurs d'aperçu et la possibilité de les appliquer sélectivement sur tel ou tel style, tout en mémorisant les derniers paramètres utilisés.

À ma grande déconvenue, j'ai alors constaté que certaines couleurs d'aperçu étaient parfois incorrectement assignées, ou purement et simplement ignorées par InDesign. Une investigation plus poussée m'a conduit à deux enseignements frustrants : primo, la propriété previewColor ne supporte que le jeu restreint de valeurs puisées dans UIColors — contrairement à ce qu'indique le modèle objet, les triplets [R,G,B] arbitraires ne sont pas implémentés ! Secundo, l'assignement des couleurs via UIColors est désynchronisé depuis CS5 ! Par exemple, la valeur UIColors.CYAN produit à l'affichage UIColors.VIOLET sous InDesign CS5, CS5.5 et CS6. D'après mes tests, il semble qu'un décalage erroné de 8 unités soit systématiquement introduit, bien que sous certaines circonstances, telles que l'export / ré-import via IDML, l'écart puisse se réduire à 2 ! On comprendra qu'un bug aussi sérieux ait entravé mon ivresse…

Par tous les moyens j'ai tenté de contourner ces fâcheuses complications, mais le script qui en découle est placé sous le couperet des incertitudes que je viens d'exposer. StyLighter a été sommairement testé sous InDesign CS4, CS5+, CS6 (Mac et Windows). À vous de l'expérimenter ! Merci d'avance de tout feedback.

• Voir aussi : « Détecter les enrichissements ponctuels sous InDesign »