Détecter les enrichissements ponctuels sous ID CS4/CS5
May 10, 2010 | Snippets | fr | en
Le Document Object Model d'InDesign CS4 a introduit une très obscure propriété, TextPreference.enableStylePreviewMode
, qui déclenche le signalement circonstancié de tous les « remplacements de styles » (de paragraphe et de caractères) sous la forme de biffures ou de barres verticales rouges (voir capture ci-dessus). Pourtant, après des heures d'investigation, je n'ai pas réussi à accéder à cette option d'affichage depuis l'interface d'InDesign CS4. Peut-être bien que je me trompe, mais jusqu'à plus ample informé cette fonctionnalité semble uniquement accessible par les voies du scripting. (Si je suis passé à côté d'une évidence, dépêchez-vous de poster un commentaire pour me ridiculiser !)
Quoi qu'il en soit, je trouve cette option fabuleuse. D'ordinaire, on détecte les formatages locaux en sélectionnant un bout de texte et en regardant dans la palette Styles de paragraphe (ou Styles de caractère) si le nom du style est suivi d'un signe +. Si c'est le cas, on en déduit que la mise en forme du texte contrevient localement aux règles enregistrées dans le style correspondant. (Pour plus de précisions sur ces questions, consultez la rubrique « Remplacement de styles de caractère et de paragraphe » dans l'aide en ligne d'InDesign CS4.) Reste que cette approche est impraticable quand on souhaite dresser un bilan général des écarts de style, notamment à la suite d'une importation depuis Word ou d'une opération similaire.
À noter qu'il est possible d'inclure la détection des remplacements de style dans un profil de contrôle en amont, mais cela me paraît bien lourd pour un usage quotidien.
Le script
ShowHideLocalFormatting.js est le script le plus court que j'aie jamais écrit. Il se contente de basculer entre le mode d'affichage habituel et notre option enrichie en marqueurs rouges :
if ( app.documents.length && app.activeDocument.textPreferences.enableStylePreviewMode^= 1 && app.layoutWindows.length && app.activeWindow.constructor==LayoutWindow ) { app.activeWindow.screenMode = ScreenModeOptions.previewOff; // MAJ 25/05/10 - Merci ptruskier app.activeWindow.overprintPreview = false; }
Le code ci-dessus contient quelques instructions d'appoint qui ne doivent pas vous aveugler. En fait, la seule ligne digne d'intérêt est ici :
app.activeDocument.textPreferences.enableStylePreviewMode^= 1;
Elle commute la valeur de enableStylePreviewMode
, ce qui fait que le script fonctionne comme un interrupteur on/off.
Voici le genre de résultat que nous obtenons :
S'il se confirme que cette option d'affichage est inatteignable depuis l'interface d'InDesign CS4, je vous encourage à créer un raccourci privilégié pour lancer ce script. Il pourrait vous rendre d'appréciables services.
• Voir aussi : « The Hidden Way to Highlight Styles »
Comments
Bonjour Marc,
Il est "marrant" ce script ! En tout cas, je le vois déjà parmi mes scripts utilisés au quotidien.
Bref "Un petit script pour Marc, un grand pas pour les indesigners" !
Merci
Merci Laurent.
Le plus étonnant de l'histoire, c'est qu'apparemment on ne trouve pas ce truc directement dans ID ! (Mais j'attends les autres commentaires pour confirmer.) La seule chose dont je sois sûr, c'est que l'attribut utilisé dans mon script n'existait pas avant CS4.
@+
Marc
Pas mal du tout !!!!!
Ben alors, mes commentaires se barrent maintenant ! J'ai pas dû appuyer sur envoyer :-\
Bref, je disais bravo pour le script, son utilité, la concision de l'écriture et la belle exploration du DOM.
Je te questionnais aussi sur la signification du ^= .
A+ Loic
Merci à tous deux.
@Loic
Le ^ (accent circonflexe) correspond à l'opérateur XOR. Quand tu fais un "XOR 1" sur un booléen, en JavaScript, cela commute la valeur. Plus exactement, JS transtype TRUE en 1 (ou FALSE en 0) et fait l'opération, c-à-d que l'on a respectivement :
TRUE ^ 1 === 0
FALSE ^ 1 === 1
Ensuite, l'écriture ^= est un code condensé qui fonctionne de la même façon que +=. Autrement dit, une instruction de la forme :
X ^= Y;
signifie:
X = X ^ Y;
Par conséquent, si B est un booléen, le code :
B ^= 1;
revient à affecter à B son complémentaire logique exprimé sous la forme 0 ou 1.
Par chance, la propriété "enableStylePreviewMode" que j'ai besoin de switcher accepte de recevoir 0 ou 1 (en lieu de FALSE ou TRUE), donc l'opération :
(...).enableStylePreviewMode ^= 1;
inverse effectivement la valeur de la propriété.
Pourquoi un détour si compliqué ? Pour éviter d'écrire :
(...).enableStylePreviewMode = !(...).enableStylePreviewMode;
ce qui solliciterait deux fois le DOM en parcourant à deux reprises la chaîne prototypée app.activeDocument.textPreferences.enableStylePreviewMode.
Il faut garder à l'esprit que chaque fois qu'on navigue dans le proto d'un objet, on perd du temps. Accessoirement, l'écriture obtenue est beaucoup plus compacte, sans réclamer l'introduction d'une variable.
@+
Marc
what a lovely Script Marc!
I have just tested it in CS5 as well, and it seems to work OK in that version too.
I've added a blog-post to my website about your script. Thank you so much for another great script!
Je te remercie Marc pour l'explication.
Mes collègues ingénieurs m'ont expliqué cela aussi :-)
Deux fois, Marc, pas deux foix :-)
C'est la seule chose que je pige dans tes explications… cela ne va pas loin, je te le concède :-)
@ Cari
Thanks a lot, this is good news for CS5 users. The link: http://carijansen.com/2010/05/10/st...
@ Jean-Christophe
> C'est la seule chose que je pige dans tes explications [...]
Ouix! Maix qu'est-ce que je feraix sans ton oeil de lynx? (Coquille corrigée, merci.)
Très pratique au quotidien.
Merci pour ce script.
Marc,
Nice discovery. It's not unusual for script methods or properties not to have a UI equivalent. There are even keyboard shortcuts that don't have menu entries: recompose all stories (Ctrl+Alt+/) close all documents (Shift+Ctrl+Alt+W), save all documents (Shift+Ctrl+Alt+S), and probably some more.
Thanks also for the ^ exposé -- didn't know about that one and it looks very useful.
Peter
Wow! Awesome script. Just what I need! Thank you so much!
Thanks all.
@Peter
Wow, cool shortcuts! I never knew you could close all documents with the keyboard.
> It's not unusual for script methods or properties
> not to have a UI equivalent.
Yes. In this chapter we also could mention the “InDesign script for Balance Ragged Lines” by Keith Gilbert: http://bit.ly/6TwhKE
I would like to make a compilation of these "under the hood" features...
And all the right-to-left stuff of course.
>I would like to make a compilation of these "under the hood" features...
Don't let anybody stop you ;)
@Marc: very cool!
One additional feature "under the hood": different column gap widths on one single page by manipulating the marginPreferences.columnsPositions-array.
Thanks! This is a terrific finding. I only wish it also worked in CS3. Note that in addition to turning preview mode off, you must also ensure that Overprint Preview is turned off.
Hi Mark how are you doing?
It is a very useful script thanks a lot.
I'll mention it in my blog, if you don't mind?
@ ptruskier
> you must also ensure that Overprint Preview
> is turned off.
You are perfectly right! I've updated the code. Thanks for your comment.
@ Mohammed
> I'll mention it in my blog...
Thank you too ;-)
Direct link to the thread: http://indesignyat.webatu.com/?p=20...
very cool finding!
maybe there is no ui equivalent because of some bugs in the feature? probably only adobe knows.
anyway my first testing worked perfect.
Marc,
Here is another unknown feature: watermarks:
http://www.indesign-faq.de/de/wasse...
Peter
Salut Marc
très pratique en effet,
Peux-tu dire si il est possible de changer la couleur de biffure que ton script active ? ou est-ce encore un mystère des ingénieur d'Adobe ?
++
Pas possible à ma connaissance. Les voies de l'ingénieur (Adobe) sont impénétrables ;-)
Thank you so much.
it´s just the one I was looking for.
works perfect in CS5
Wow. Great. Love it. Cheers! :)
Hi Marc! You saved me! I frequently do large InDesign reports where the text comes from Word that has been edited by many authors. After I've placed and cleaned the Word text, *some* overrides always get through. Today, spot-checking a 150-page document took me 10 minutes! THANK YOU!!! =)
thanks, mate.
saved my work-days-to-come.
=)
@ all
Thanks for your feedback!
@ Marisa
You're welcome. (My greetings to McKinsey's team.)
I just came across this while searching for something else - this is going to be SO useful for a massive book project I'm working on, with many many different authors working in Word. Just had to add my thanks!
Thanks for your thanks ;-)
@+
Marc
Dear Marc,
Great script.
If I want to view only the local formatting on character styles; is it possible? please give your advise
regards
Hi pals,
> If I want to view only the local formatting on
> character styles; is it possible?
Sorry, I really don't know. As the Style Preview Mode sounds like an hidden gem, I've no idea on how we could tweak that feature.
@+
Marc
Merci.
Trés bon pour assurer avant d'exporter pour ePub!
Super !
En même temps je passe mon temps à adapter ma mise en forme locale afin de faire correspondre le texte à ma maquette. Par contre les styles d'objets sont moins amenés à subir des modifications.
Peut-on imaginer une petite variante pour les styles d'objets ?
@victor
> En même temps je passe mon temps à adapter ma mise en forme
> locale afin de faire correspondre le texte à ma maquette (...)
À mon humble avis, lorsque des interventions locales « homogènes » deviennent récurrentes, c'est exactement le moment de leur associer un style de caractères ad hoc. Par exemple, si vous appliquez régulièrement l'italique au fil de la composition, il est préférable de créer le style correspondant. Idem pour l'application locale d'une nuance. L'idée, c'est que toute intervention considérée comme NORMALE sur les attributs du texte corresponde à un style.
Inversement, un ajustement « clinique » — par exemple l'étroitisation infime du caractère pour gagner une ligne en justification — mérite selon moi de rester détectable. La fonction du script est précisément de rendre visible ce type d'ajustement, en particulier lorsque vous avez besoin de les neutraliser pour certains types d'export, etc.
> Peut-on imaginer une petite variante pour les styles d'objets ?
Ce serait appréciable, mais comme je l'ai précisé le script repose sur une fonction cachée qui n'est aucunement malléable. Je vois aucun moyen de l'extrapoler aux styles d'objets, hélas !
Merci pour votre réponse.
Evidemment que j'utilise des styles de caractères...
Je comprends qu'il puisse être intéressant de savoir ce qui normale ou non, mais cela peut être intéressant aussi d'indiquer lorsque le style repose sur aucun style ou sur un style non désiré ([Paragraphe standard] par exemple).
Je vous dit cela parce que j'ai bien une police par défaut en général, des textes importés dont l'apparence peut ressembler à celui de mes styles, des travaux que je reprends etc.
Cela permettrait de savoir cette fois où nous en sommes dans notre travail d'application de styles de texte sur les pages.
Pour les styles d'objets, tant pis... A ce propos, je me posais une question : y' a t'il une possibilité, comme on le fait avec le texte, de rechercher/supprimer des objets ?
Thanks a lot!
Your script does exactly what I hoped it to do.
Perfect job.
Hi Guys,
I saw this script and realised it was very close to what I was working on. I have written an InDesign CS5 Mac plugin to do just this, and little bit more.
If there is enough interest I could make this work in CS3.
Best.
Hi Rich,
Your StyleOverridesID plugin sounds to feature interesting enhancements, thanks!
I think a CS3 version would be appreciated —since my ShowHideLocalFormatting script does not support CS3.
Direct link to StyleOverridesID product for Mac:
http://www.kerntiff.co.uk/products/...
@+
Marc
This does exactly what I was looking for, but is there a way to print or PDF the result? I ned to be able to show these overrides to the designer who is sending me the files.
When I print or PDF from this, the red lines disappear.
Hi Gavin,
> is there a way to print or PDF the result?
I don't think it's possible, but indeed I'd love to have that feature too.
@+
Marc
Great to see this script also works in InDesign CS5.5 Marc! I'm going to use it tonight at InDesign User Group meeting in Perth ;-) teaching people all about paragraph/character styles ;-)
Hi Cari,
> Great to see this script also works in InDesign CS5.5.
I had no doubt on this ;-)
What is strange is the fact that Adobe engineers didn't make this feature available yet from the user interface!
@+
Marc
ha, yeah, I was talking about that last night at the IDUG when I showed people how the script worked... I was thinking this on/off feature must be in the application somewhere... but maybe not yet fully developed ;) and only a smart scripter discovered it and opened it up to the world with his script :)
Hi Marc,
thanks a lot for the wonderful script.
Do you know any possibility how a script can "see" the red marked paragraphs or characters?
All the best
J.