Encore un nouveau script à base de Javascript et d’InDesign… mais non, je n’y suis pas accro ;)
Une grande partie de mon temps est occupé par la conversion des couleurs d’accompagnement d’un document InDesign et le nettoyage du document qui va avec: suppression de couleurs en double, et parce que je suis un peu maniaque sur la façon d’organiser son travail nommage des couleurs selon leur composition.
Pour le moment, j’avais 2 Applescripts qui faisaient bien leur boulot, mais qui dit 2 scripts, dit forcément 2 lancement! CQFD. Alors oui, il était possible de les fusionner, mais c’est tout de même plus polyvalent de revoir son pannel de scripts pour les rendre encore plus pratiques et multi-plateforme.
Le script se divise en plusieurs segments:
1e partie: le test de version d’application
#target indesign
var IDvers = parseInt(app.version); |
#target indesign
var IDvers = parseInt(app.version);
on ne récupére que la partie entière de la version de l’application
switch(IDvers) {
case 4 :
var mSwatches = app.activeDocument.colors;
for (x = 1; x <= 4; x++){updateColors(mSwatches);}
break;
case 5 :
var mSwatches = app.activeDocument.swatches;
updateColors(mSwatches);
break;
} |
switch(IDvers) {
case 4 :
var mSwatches = app.activeDocument.colors;
for (x = 1; x <= 4; x++){updateColors(mSwatches);}
break;
case 5 :
var mSwatches = app.activeDocument.swatches;
updateColors(mSwatches);
break;
}
Un petit switch permettant de s’occuper des méthodes selon la version.
A noter que pour une raison inconnue le script doit être éxécuter plusieurs fois sous InDesign CS2…
2e partie: le test des Pantone
if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") {
try { |
if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") {
try {
On évite de traiter les couleurs Pantone en éliminant ces nuances via leur noms. On lance ensuite un try / catch pour éviter les erreurs de traitement lorsqu’on arrive sur les couleurs protégées comme celle de repérage ou de [Papier].
3e partie: le changement de mode et nom
mSwatches[i].model = 1886548851; // = Process
mSwatches[i].space = 1129142603; // = CMJN
with (mSwatches[i]){
mC = Math.round(colorValue[0]);
mM = Math.round(colorValue[1]);
mY = Math.round(colorValue[2]);
mK = Math.round(colorValue[3]);
} |
mSwatches[i].model = 1886548851; // = Process
mSwatches[i].space = 1129142603; // = CMJN
with (mSwatches[i]){
mC = Math.round(colorValue[0]);
mM = Math.round(colorValue[1]);
mY = Math.round(colorValue[2]);
mK = Math.round(colorValue[3]);
}
on change le modèle de couleur, ainsi que l’espace colorimétrique, puis on récupérer la valeur entière de la composante pour préparer le renommage de la nuance.
4e partie: le renommage et la fusion
try {
mSwatches[i].name = myName; }
catch(err){
mSwatches.item(myName).merge(mSwatches[i]); }
} |
try {
mSwatches[i].name = myName; }
catch(err){
mSwatches.item(myName).merge(mSwatches[i]); }
}
dans une boucle try / catch, on tente de renommer la nuance, en cas d’erreur, la couleur existe, étant un doublon on la fusionne avec l’existante.
Conclusion: le script complet
#target indesign
var IDvers = parseInt(app.version); // version InDesign CSx
switch(IDvers) {
case 4 : // CS2
var mSwatches = app.activeDocument.colors;
// Hack pour passer plusieurs la méthode
for (x = 1; x <= 4; x++){updateColors(mSwatches);}
break;
default : // CS3
var mSwatches = app.activeDocument.swatches;
updateColors(mSwatches);
break;
/*default : // Ni CS2 ni CS3, avertissement
alert('Script testé uniquement avec CS2 & CS3');*/
}
alert('Fin du traitement');
function updateColors(mSwatches) {
for (i = mSwatches.length-1; i >= 0; i--){
// si la nuance se nomme "Pantone xxxx" on ne fait rien
if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") {
try {
mSwatches[i].model = 1886548851; // 1936748404 = SPOT | 1886548851 = Process | 1919248243 = repérage
mSwatches[i].space = 1129142603; // 1129142603 = CMJN | 1666336578 = RVB
with (mSwatches[i]){ // récupération des composantes CMJN
mC = Math.round(colorValue[0]);
mM = Math.round(colorValue[1]);
mY = Math.round(colorValue[2]);
mK = Math.round(colorValue[3]);
}
var myName = "C=" + mC + " M=" + mM + " J=" + mY + " N=" + mK;
try {
// renommage de la nuance selon sa composition
mSwatches[i].name = myName;
}
catch(err){
// fusion de la nuance en cours avec l'existante de même composition
mSwatches.item(myName).merge(mSwatches[i]);
}
}
catch (e) {}
}
}
} |
#target indesign
var IDvers = parseInt(app.version); // version InDesign CSx
switch(IDvers) {
case 4 : // CS2
var mSwatches = app.activeDocument.colors;
// Hack pour passer plusieurs la méthode
for (x = 1; x <= 4; x++){updateColors(mSwatches);}
break;
default : // CS3
var mSwatches = app.activeDocument.swatches;
updateColors(mSwatches);
break;
/*default : // Ni CS2 ni CS3, avertissement
alert('Script testé uniquement avec CS2 & CS3');*/
}
alert('Fin du traitement');
function updateColors(mSwatches) {
for (i = mSwatches.length-1; i >= 0; i--){
// si la nuance se nomme "Pantone xxxx" on ne fait rien
if (mSwatches[i].name.substr (0, 7).toUpperCase() != "PANTONE") {
try {
mSwatches[i].model = 1886548851; // 1936748404 = SPOT | 1886548851 = Process | 1919248243 = repérage
mSwatches[i].space = 1129142603; // 1129142603 = CMJN | 1666336578 = RVB
with (mSwatches[i]){ // récupération des composantes CMJN
mC = Math.round(colorValue[0]);
mM = Math.round(colorValue[1]);
mY = Math.round(colorValue[2]);
mK = Math.round(colorValue[3]);
}
var myName = "C=" + mC + " M=" + mM + " J=" + mY + " N=" + mK;
try {
// renommage de la nuance selon sa composition
mSwatches[i].name = myName;
}
catch(err){
// fusion de la nuance en cours avec l'existante de même composition
mSwatches.item(myName).merge(mSwatches[i]);
}
}
catch (e) {}
}
}
}