La route sacrée du surlignage de styles
May 10, 2012 | StyLighter | fr | en
[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 ?
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 »
Comments
Great script!! Thanks for sharing
Excellent Marc.
Will it be a menu item, or do you leave this opportunity to Gabe ?
Je n'ose y croire ! Merci beaucoup pour tout ce travail d'excavation.
Encore bravo pour cette réalisation que je pensais pouvoir détourner aussitôt pour simuler le surlignement. Est-ce possible de rendre visible la prévisualisation dans un PDF ?
@ profeivan
Hi Iván. Glad to hear from you. Thanks for thanking ;-)
@ fr
> Will it be a menu item, or do you
> leave this opportunity to Gabe ?
Franck, je te sens d'humeur taquine sur ce coup-là…
@ -ep-
> Je n'ose y croire […]
Magie d'InDesign : on n'en a jamais fait le tour. (Ce que j'aime dans les gloses d'Indiscripts, c'est qu'on y lit sans éternuer le mot « excavation ».)
@ Laurent
> Est-ce possible de rendre visible la
> prévisualisation dans un PDF ?
À mon avis, même pas en rêve ! On est vraiment ici sur une modalité d'APERÇU qui ne concerne d'aucune façon le contenu effectif du document. D'ailleurs, c'est tout l'avantage de ce dispositif dans InDesign. On peut enfin contrôler visuellement la distribution des styles dans la composition sans les toucher physiquement. Exemples typiques : voir si on a laissé traîner du « [Paragraphe standard] », faire ressortir les appels de notes (s'ils sont stylés !), etc.
Concernant ta quête — rendre visible les surlignages dans un PDF de contrôle —, il me semble que cela vise une problématique toute différente. En général, l'objectif est alors pour le maquettiste d'attirer l'attention de son client sur tels et tels élements problématiques. Pour moi, cela correspond sémantiquement à un style dédié (que j'appelle le style « Stabilo ») basé sur un surlignage physique, bien qu'il soit détruit en fin de parcours. Le problème qui peut se poser pour le style Stabilo, c'est qu'il écrase d'autres styles de caractères. Un vieux débat entre nous, ça, Laurent… ;-)
@+
Marc
Très beau travail, très utile, comme souvent !
Merci beaucoup !
Thank you for that script, Marc!
One addition to that script could be an option where you can set back the previewColor of a paragraph style or a character style to "Nothing".
I realised that one could do that by applying a RGB triplet like that:
app.documents[0].paragraphStyles.itemByName("ParagraphStyleName").previewColor = [0,0,0];
Instead of applying the color "Black"(RGB = 0,0,0), like what I would think in the first place, the previewColor is set back to "Nothing". In fact you could try any triplet and you will get "Nothing" for the previewColor.
Another observation with that approach:
If you try to add an array of FOUR colors like [0,0,0,0] by mishap, InDesign will crash immediately…
@ Uwe
> One addition to that script could be an option where you can set back
> the previewColor of a paragraph style or a character style to "Nothing".
Good point. Technically, this is exactly what the script does when you select a style in the listbox and press the "Preview OFF" icon button. The previewColor is then set back to nothing, but the disabled color is saved in a label so that the user can easily reactivate that color. That's why I didn't implement a [None] swatch, but you're probably right that the user will expect such option.
> I realised that one could do that by applying a RGB triplet like that:
> [...] previewColor = [0,0,0];
> Instead of applying the color "Black" (RGB = 0,0,0), like what I would
> think in the first place, the previewColor is set back to "Nothing".
As I said in the article, assigning an RGB triplet to previewColor does not work at all, and IMHO we shouldn't make any assumption on how InDesign internally deals with such data type. The regular way to turn back the previewColor to nothing is:
myStyle.previewColor = NothingEnum.NOTHING;
@+
Marc
Et hop Marc a encore trouvé la solution qui nous manquait...!! Je me demandais la semaine passée s'il y avait un moyen d'identifier les modifs locales des styles... et puis, j'ai eu l'idée d'aller voir votre site, Marc... et j'en suis toujours aussi retourné...! ,-) Longue vie...
Nico
Awesome Marc. Thanks!
Thanks! I've been wishing for this functionality since at least CS2. I have been using this script on chapters in a book over the last few days and it has found a few improperly handled changes made by the editors. Changes that I probably would not have noticed otherwise.
I have a few questions. I am not a scripter, but I'm wondering if these are things that I could add or alter in the script without breaking it, or that could be options in future versions:
1. Is there a way to have "Activate the preview mode" checked by default the first time it is run in a given document? I'm only going to invoke the script if I want to see the overrides and styles.
2. Is there a way to tell it that a certain style should always be highlighted by default, in the current and any future document, instead of having to select it and choose a color every time I run the script in a new document? (For me this is the "Normal" paragraph style that is sometimes present after importing from Word, and any other styles that came in during import.)
3. On a related note, is there a way that it can tell which styles are imported (i.e., the ones that have the little floppy disk icon) and automatically highlight them anywhere they are used?
4. Finally, can the weight of the red line showing character style overrides be changed? I would like it to be much thicker so I can spot very small instances even if I'm zoomed out. It would also be cool to be able to assign it a different color if, for example, there is red text in the document.
Like I said: I love this script. I'm not a scripter, so I haven't opened it in an editor to see how it works, but I am tempted.
Tank you. Great script.
Thank you very much. I used to use an improvised paragraph rule to do this sort of thing sometimes, but not only is this much better, it also allows you to do it on the character level as well.
Very nice script! However, I noticed that if you create a Character Style or Paragraph Style that has a name that places it alphabetically before "<Style Overrides>" (such as "80% Text Size" or ".small") that this will bump <Style Overrides> out of its top spot on the list inside the dialog and <Style Overrides> will no longer have the lock icon next to it.
@ ashleymitchell
Thank you for 'highlighting' that bug!
Fixed in StyLighter 1.2b now available.
@+
Marc
Laurent Tournier — http://indigrep.com — me signale un biais inattendu de StyLighter quant au traitement des notes de bas de page :
« Comme tu peux le voir, précise Laurent, le style de paragraphe “note” prend la couleur du style de paragraphe “texte” [bien qu'ils n'aient pas de lien de parenté]. J'ai testé sur trois documents différents [InDesign CS4/Mac OS], même résultat. »
Le comportement du « Style Preview Mode » d'InDesign est tout à fait imprévisible dans certains cas, mais StyLighter n'y est pour rien ! Comme je le précise dans mon billet, si cette fonctionnalité n'a pas été « exposée » par les développeurs d'ID, c'est de toute évidence parce qu'elle n'était pas finalisée.
Le cas des notes de bas de page est symptomatique à cet égard. Affecter une couleur d'aperçu à un style de paragraphe appliqué aux notes conduit à des résultats volontiers surprenants. À première vue, les notes semblent « hériter » de la couleur d'aperçu du style de paragraphe parent (c.-à-d. le paragraphe qui contient l'appel de note) au mépris de la couleur d'aperçu spécifiquement dédié au style de note.
Mais j'ai observé lors de différents tests des choses plus amusantes. Sous certaines conditions — qui restent à élucider — InDesign peut aussi MIXER les couleurs d'aperçu du style appelant et du style de note. Par exemple, un vert pomme et un jaune vont donner une nuance chocolatée ! (Je n'ai pas pu identifier la loi qui régit exactement cette interpolation, mais je suspecte qu'elle est basée sur le système de coordonnées HSV…)
@+
Marc
Hello!
Thank you for this gem of a script! Just made my life 10 times easier.
One question:
Is there a way to disable the overriden highlight and enable just the custom styles highlight?
@ Vlad
Thanks for your support :)
> Is there a way to disable the overriden highlight and
> enable just the custom styles highlight?
Unfortunately, both features are inseparable as the "Style Preview Mode" automatically makes overrides visible.
@+
Marc
Petite note utile, je ne suis pas sûr qu'il soit fautif, mais j'avais placé le script dans le dossier startup script et il me réclamait d'ouvrir un document en boucle, au démarrage, paralysant inD…
@ Franck
StyLighter n'étant pas un script de démarrage, il est en effet mal avisé de l'installer comme tel ;-)
N. B. — N'oubliez pas que tout script déposé dans un dossier intitulé « startup scripts » — quel que soit au demeurant la position de ce dossier dans l'arborescence des scripts — sera automatiquement exécuté au démarrage d'InDesign. Ainsi, à moins que l'auteur vous y invite expressément, ne posez pas de scripts dans un lieu aussi virulent !
@+
Marc
Dear Marc,
I love working with Stylighter.
But in combination with the WorldReady Composer and bidirectional typesetting (e.g. english – hebrew) it sometimes (but not always) makes InDesign crash - in InDesign CS4 up to InDesign CS6.
Thank you
Martin
Does anyone know how to save settings of the stylighter?
Each time I open a new indd file (a lot of small files)to check it with the stylighter, I have to check the colours again which is teddious.
Some change in the code or usage?
TIA
@ Martin Fischer
Thanks for your feedback. Indeed, there are good reasons to conclude that the Style Preview Mode is not bidi-compliant!
@ Dane
> Each time I open a new indd file (a lot of small files)
> to check it with the stylighter, I have to check the
> colours again which is teddious.
The problem here is that Paragraph/Character Style names are document-dependent, so there is no obvious way to preset stylename-to-color relationships. Unless we implement a kind of database behind the scene…
@+
Marc
I am happy you answered that fast.
"The problem here is that Paragraph/Character Style names are document-dependent, so there is no obvious way to preset stylename-to-color relationships. Unless we implement a kind of database behind the scene…"
In my case or for my needs, the paragraph style names have always the same name, there never appear para stylenames that I do not have in my list. They are assigned to the text inhouse, but not always accuratelly (not all are always used in one file but that does not matter).
So to me that would be great if the name styles would always map to same colours.
Maybe a workaround would be if the script would paste at a defined place in the document a set of all styles (set of paraghaps) in a style list which would aways get the same colour? Afterwards delete all added paragraps...
Or a possibility to type in the code my style names and colours in the code?
Thanks again
I am missing this super script for CC. How to make it compatible?
Is there an update that works with Cloud? Crashes indd.
@ Camilo, Julie
Main CC issues should be solved in StyLighter 1.4 :)
@+
Marc
Je découvre, j'essaie, et effectivement quelques glissements de couleurs ont lieu : la première couleur verte apparait noire, le jaune apparait vert ;-)
Sinon, c'est super ! très utile !
bravo !!!
PS : un truc top serait qu'on puisse avoir encore la main sur le texte sans avoir à fermer et rouvrir le script pour voir nos corrections progresser
@ victor
> effectivement quelques glissements de couleurs ont lieu
Avez-vous essayé d'appliquer le patch (bouton « Corriger les couleurs… ») ?
@+
Marc