Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du...

113
ADOBE ® INCOPY ® CS6 GUIDE DES SCRIPTS D’ADOBE INCOPY CS6 : APPLESCRIPT

Transcript of Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du...

Page 1: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

ADOBE® INCOPY® CS6

GUIDE DES SCRIPTS D’ADOBE INCOPY CS6 :

APPLESCRIPT

Page 2: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

© 2012 Adobe Systems Incorporated. Tous droits réservés.

Guide des scripts d’Adobe® InCopy® CS6 : AppleScript

Si ce guide est distribué avec un logiciel comprenant un accord avec l’utilisateur final, ce guide, ainsi que le logiciel qu’il décrit, sont fournis sous licence et ne peuvent être utilisés ou copiés qu’en accord avec les termes de cette licence. Sauf autorisation spécifiée dans la licence, aucune partie de ce guide ne peut être reproduite, enregistrée ou transmise sous quelque forme que ce soit, par quelque moyen que ce soit, électronique, mécanique ou autre, sans l’autorisation écrite préalable d’Adobe Systems Incorporated. Veuillez noter que le contenu de ce guide est protégé par des droits d’auteur, même s’il n’est pas distribué avec un logiciel accompagné d’un contrat de licence pour l’utilisateur final.

Les informations contenues dans ce document sont données à titre purement indicatif. Elles peuvent être modifiées sans préavis et ne constituent pas un engagement de la part d’Adobe Systems Incorporated. Adobe Systems Incorporated ne peut être tenu pour responsable des erreurs ou des inexactitudes apparaissant dans les informations fournies par ce guide.

Nous attirons votre attention sur le fait que les illustrations ou images que vous pouvez être amené à incorporer à vos projets peuvent être protégées par des droits d’auteur, auquel cas leur exploitation sans l’autorisation de l’auteur constituerait une violation de ces droits. Veillez à obtenir toutes les autorisations requises de la part des auteurs.

Toutes les références à des noms de société dans les modèles cités en exemple sont indiquées uniquement à des fins de démonstration et ne se réfèrent à aucune organisation existante.

Adobe, le logo Adobe, Creative Suite, InCopy, InDesign, Illustrator et Photoshop sont des marques ou des marques déposées d’Adobe Systems Incorporated aux Etats-Unis et/ou dans d’autres pays. Microsoft et Windows sont des marques ou des marques déposées de Microsoft Corporation aux Etats-Unis et dans d’autres pays. Apple et Mac OS sont des marques d’Apple Computer, Incorporated, déposées aux Etats-Unis et dans d’autres pays. Toutes les autres marques citées sont la propriété de leurs détenteurs respectifs.

Adobe Systems Incorporated, 345 Park Avenue, San Jose, Californie 95110, Etats-Unis. Avertissement à l’attention des utilisateurs finaux du gouvernement des Etats-Unis. Le logiciel et la documentation sont des articles commerciaux, (« Commercial Items »), selon la définition de ce terme dans l’article 48 C.F.R. §2.101, composés d’un logiciel commercial (« Commercial Computer Software ») et d’une documentation commerciale relative au logiciel (« Commercial Computer Software Documentation ») selon la définition de ces termes dans l’article 48 C.F.R. §12.212 ou 48 C.F.R. §227.7202, selon le cas. Conformément aux articles 48 C.F.R. §12.212 ou 48 C.F.R. §§227.7202-1 à 227.7202-4, selon le cas, le logiciel commercial et la documentation commerciale relative au logiciel sont cédés sous licence aux utilisateurs du gouvernement des Etats-Unis (a) en tant qu’articles commerciaux uniquement et (b) avec les seuls droits conférés à tout autre utilisateur final tenu par les termes et conditions stipulés ici. Droits non publiés réservés en vertu de la législation américaine sur les droits d’auteurs. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, Etats-Unis. Pour les utilisateurs finaux du gouvernement des Etats-Unis, Adobe s’engage à respecter toutes les lois sur l’égalité des chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance à la réhabilitation des vétérans du Vietnam (the Vietnam Era Veterans Readjustment Assistance Act) de 1974 (38 USC 4212) et la section 503 de l’Acte de réhabilitation (Rehabilitation Act) de 1973, tel qu’amendé, ainsi que les règlements de l’article 41 C.F.R., sections 60-1 à 60-60, 60-250 et 60-741. Les règlements et la clause d’action affirmative contenus dans la phrase précédente doivent être inclus comme référence.

Statut de mise à jour du document(pour l’intégralité du document ; voir chaque chapitre pour obtenir individuellement le statut de mise à jour de chaque chapitre)

CS6 Mis à jour Dans tout le document, CS5 est remplacé par CS6 et version 7.0 par version 8.0.

Page 3: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Sommaire

1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Utilisation des scripts de ce document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

A propos de la structure des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Pour plus de détails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

A propos d’InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Relations entre les fichiers InCopy et InDesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Articles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Géométrie de la page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Métadonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Modèle de document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Différences au niveau de l’interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Conception et architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Prise en main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Installation des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Exécution de scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Utilisation du panneau Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Informations relatives au langage AppleScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Utilisation des scripts de ce document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Votre premier script InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Analyse du script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Terminologie des scripts et modèle d’objet InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Terminologie des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Présentation du modèle d’objet InDesign et InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Mesures et positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Ajout de caractéristiques à « Hello World » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Fonctions de scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Préférences des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Obtention du script en cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Versionnage des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Ciblage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Interprétation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Utilisation de la méthode do script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Envoi de paramètres à l’objet do script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Renvoi des valeurs de l’objet do script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Exécution des scripts au lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3

Page 4: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Sommaire 4

4 Texte et saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Saisie et importation de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Articles et blocs de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Ajout d’un texte à un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Remplacement de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Insertion de caractères spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Importation de texte et définition des préférences d’importation de texte . . . . . . . . . . . . . . . . . . . . 32

Exportation de texte et définition des préférences d’exportation de texte . . . . . . . . . . . . . . . . . . . . . 35

Objets texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Sélections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Déplacement et copie de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Objets texte et itération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Mise en forme du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Définition des valeurs par défaut du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Application d’une police . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Modification des propriétés d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Modification de la couleur du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Création et application des styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Suppression d’un style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Importation de styles de paragraphe et de caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Recherche et modification de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Préférences de recherche/modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Recherche de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Recherche et remplacement d’une mise en forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Utilisation de l’outil Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Recherche de glyphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Correction automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Notes de bas de page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5 Interfaces utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Présentation des boîtes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Votre première boîte de dialogue InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Ajout d’une interface utilisateur à « Hello World » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Création d’une interface utilisateur plus complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Utilisation de ScriptUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Création d’une barre de progression avec ScriptUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Création d’un panneau avec barre de boutons au moyen de ScriptUI . . . . . . . . . . . . . . . . . 68

Page 5: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Sommaire 5

6 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Présentation du modèle de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Localisation et noms de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Exécution d’une action de menu à partir d’un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Ajout de menus et d’éléments de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Menus et événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Utilisation des objets d’action de menu de script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

7 Evénements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Présentation du modèle de scripts d’événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

A propos des propriétés des événements et de la propagation des événements . . . . . . 82

Utilisation des objets eventListeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Exemple d’objet eventListener « afterNew » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

8 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Saisie et importation d’une note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Ajout d’une note à un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Remplacement du texte d’une note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Conversion de notes et de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Conversion d’une note en texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Conversion d’un texte en note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Développement et réduction de notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Réduction d’une note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Développement d’une note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Suppression d’une note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Navigation entre les notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Accès à la première note d’un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Accès à la note suivante d’un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Accès à la note précédente d’un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Accès à la dernière note d’un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

9 Suivi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Suivi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Navigation entre les modifications suivies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Acceptation et rejet des modifications suivies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Informations sur les modifications faisant l’objet d’un suivi . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Préférences en matière de suivi des modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Page 6: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Sommaire 6

10 Affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Objet affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Ouverture des fichiers d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Itérations dans les propriétés d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Assemblages d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Article d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Objet article affecté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Itérations dans les propriétés de l’article affecté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

11 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Meilleure méthode appliquée aux scripts XML dans InCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Codage des éléments XML à l’aide des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Configuration des préférences XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Configuration des préférences d’importation du format XML . . . . . . . . . . . . . . . . . . . . . . . . 101Importation du format XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Création d’une balise XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Chargement des balises XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Enregistrement des balises XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Création d’un élément XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Déplacement d’un élément XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Suppression d’un élément XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Duplication d’un élément XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Retrait d’éléments de la structure XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Création d’un commentaire XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Création d’une instruction de traitement XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105Utilisation des attributs XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105Utilisation des articles XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Exportation du format XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Ajout d’éléments XML à un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Association d’éléments XML à du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Application des styles aux éléments XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Utilisation des tableaux XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Page 7: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

1

Introduction

Ce document décrit les opérations suivantes :

Utilisation de l’environnement de création de scripts Adobe® InCopy®

Utilisation des fonctions avancées de création de scripts

Utilisation et saisie de texte dans un document InCopy, notamment recherche et modification de texte

Création de boîtes de dialogue et autres éléments d’interface utilisateur

Personnalisation et ajout de menus et création d’actions de menu

Réponse aux événements de l’interface utilisateur

Utilisation du langage XML, de la création d’éléments XML et l’importation de données XML à l’ajout d’éléments XML à une mise en page

Utilisation des scripts de ce documentLa plupart des scripts présentés dans ce document sont seulement des extraits de script, pas des scripts entiers. Ils ont pour unique vocation d’illustrer la partie spécifique d’un script correspondant au thème abordé dans le texte. Vous pouvez copier les lignes de script présentées dans ce document et les coller dans votre éditeur de scripts ; vous devez toutefois être bien conscient que certains ajustements seront nécessaires pour que le script puisse fonctionner. En outre, sachez que les scripts copiés à partir de ce document peuvent contenir des sauts de ligne et autres caractères (provenant de la mise en page du document) susceptibles d’entraîner des erreurs dans vos scripts.

Tous les scripts présentés dans ce document sont regroupés dans une archive zip, accessible depuis la page d’accueil des scripts InCopy, à l’adresse suivante : http://www.adobe.com/products/InCopy/scripting/index.html. Après avoir téléchargé et décompressé l’archive, déplacez les dossiers correspondant au(x) langage(s) de script de votre choix dans le dossier Scripts Panel du dossier Scripts, situé dans le dossier de l’application InCopy. Vous pouvez alors exécuter les scripts à partir du panneau Scripts de votre application InCopy.

A propos de la structure des scripts

Les exemples de script sont tous écrits à l’aide d’un modèle commun incluant les gestionnaires « main », « mySetup », « mySnippet » et « myTeardown ». Nous avons choisi de procéder ainsi afin de simplifier les tests automatisés et la publication ; cette méthode n’est pas justifiée pour la construction de vos scripts. En général, la partie du script qui vous intéressera se trouvera dans le gestionnaire « mySnippet ».

Statut de mise à jour du chapitre

CS6 Inchangé

7

Page 8: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

CHAPITRE 1: Introduction Pour plus de détails 8

Pour plus de détailsVous trouverez plus de détails sur la création de scripts InCopy sur le forum des utilisateurs consacré aux scripts InCopy (en anglais), à l’adresse suivante : http://www.adobeforums.com. Dans ce forum, les créateurs de scripts peuvent poser des questions, envoyer des réponses et partager leurs dernières compositions. Le forum contient plusieurs centaines d’exemples de scripts.

A propos d’InCopyInCopy est une application d’édition de texte collaborative développée pour une utilisation conjointe avec Adobe InDesign®. InCopy vous permet d’effectuer le suivi des modifications, d’ajouter des notes d’édition et d’adapter le texte à l’espace qui lui est réservé. InCopy utilise le même moteur de composition du texte qu’InDesign, c’est pourquoi ces deux applications ajustent la copie dans une page avec une composition identique.

InCopy est destinée à l’environnement d’édition. Cette application permet aux divers participants du flux de travail éditorial de collaborer à la création de magazines, journaux et publications d’entreprises, en favorisant l’édition simultanée du texte et de la mise en page. Elle est principalement utilisée par les éditeurs, rédacteurs, correcteurs, réviseurs et autres intervenants.

InCopy partage de nombreux panneaux et palettes avec InDesign, mais propose également ses propres éléments d’interface utilisateur.

Relations entre les fichiers InCopy et InDesignLes relations entre les fichiers InDesign et InCopy sont importantes en raison de la répartition du travail au sein du flux de travail de publication qui se produit lorsque les mêmes éléments sont ouverts et modifiés dans les deux applications.

Il existe deux scénarios courants d’exportation à partir d’InCopy :

Vous pouvez exporter un fichier ICML (basé sur IDML).

Vous pouvez exporter un fichier INCX (basé sur INX).

Il existe deux scénarios courants d’exportation à partir d’InDesign qui font appel à InCopy :

Les articles exportés à partir d’InDesign en tant que fichiers InCopy sont des fichiers ou des flux XML ; les modules externes InCopyExport et InCopyWorkflow chargés dans InDesign proposent cette fonction. Cette approche comporte certaines implications d’ordre pratique : les fichiers InCopy sont beaucoup plus petits, ils transitent plus rapidement sur les réseaux, ils ne contiennent pas de géométrie de page, et les données des fichiers/flux XML peuvent être utilisées sans InDesign/InCopy (pour les moteurs de recherche, outils de base de données, etc.).

Les groupes à l’intérieur d’un article (titre, auteur, copie, graphiques ou légendes) peuvent également être exportés. InDesign et Incopy prennent en charge la création de groupes avec les fichiers d’affectation, qui permettent de gérer les fichiers en ajoutant un fichier supplémentaire utilisé pour le suivi des autres fichiers. Une affectation regroupe plusieurs fichiers dont les contenus sont attribués à une seule personne en vue d’une tâche précise : copie, édition, mise en page et/ou rédaction, par exemple. Les articles figurant dans une affectation sont exportés sous la forme de fichiers InCopy. Les informations relatives à la géométrie et les relations entre les fichiers sont incluses dans le fichier d’affectation. InDesign permet à l’utilisateur d’exporter un ensemble d’articles spécifique à l’aide d’une affectation. InCopy ouvre tous les articles situés dans une affectation (sous la forme d’une seule unité). Pour plus de détails, voir le Chapitre 10, « Affectations ».

Page 9: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

CHAPITRE 1: Introduction Relations entre les fichiers InCopy et InDesign 9

ArticlesChaque fichier InCopy constitue un article. Un document InDesign contient plusieurs articles modulables en fonction du nombre de documents InCopy, via le processus d’exportation. Ces articles InDesign exportés contiennent un lien accessible dans le panneau Liens (InDesign) ou dans le panneau Affectations en tant que fichiers d’affectation (InCopy).

InCopy ne conserve pas le lien au document InDesign auquel il est associé (s’il en existe un). InDesign conserve les liens avec les fichiers InCopy en tant que liens bidirectionnels.

Les articles peuvent être structurés en langage XML. Ceci signifie que des données XML peuvent contenir d’autres données XML. Cette fonction peut servir à concevoir une structure de données dans laquelle le texte brut d’un article est englobé dans une structure externe contenant des données spécifiques à InCopy (les styles, par exemple).

Dans InCopy, vous pouvez enregistrer le contenu au format ICML/INCX ou, si l’article possède une structure, la structure logique peut être exportée au format XML.

Un fichier ICML ou INCX peut contenir à la fois des données et du texte balisé InCopy. Si le fichier est exporté sous forme de données XML, les données spécifiques à InCopy sont supprimées. Il ne reste alors que le contenu balisé moins les informations relatives au style.

Géométrie de la page

Les fichiers InCopy ne contiennent pas de géométrie de page. Si la géométrie est requise, elle doit être obtenue à partir du document InDesign. InCopy peut ouvrir des documents InDesign et extraire les informations de conception et les liens vers les articles exportés. Lorsque la géométrie de page est souhaitée dans InCopy, les fichiers d’affectation peuvent également être fournis.

Métadonnées

La plate-forme XMP (Extensible Metadata Platform) d’Adobe propose une méthode pratique pour créer, échanger et gérer les métadonnées. Les fichiers InCopy prennent en charge XMP.

Tout comme InDesign propose la commande Fichier > Informations pour afficher les données XMP, InCopy propose la commande Fichier > Informations sur le fichier. Les intégrateurs de systèmes peuvent conserver ces données ou les éliminer lors de l’exportation.

Les métadonnées ajoutées aux articles par les développeurs de logiciels tiers sont conservées lorsqu’elles sont intégrées à des documents InDesign. Vous pouvez visualiser les métadonnées ajoutées dans InDesign (panneau Liens, boîte de dialogue Informations) ou InCopy. Par ailleurs, les développeurs de logiciels tiers peuvent ajouter des fonctionnalités à InDesign de manière à afficher ces métadonnées dans une interface utilisateur personnalisée.

Un point d’extension permet aux prestataires de services d’ajouter du contenu de métadonnées aux fichiers InCopy. Pour plus de détails, voir le Chapitre 11, « XML ».

Page 10: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

CHAPITRE 1: Introduction Conception et architecture 10

Modèle de document

Les documents InDesign sont à la base de tout le contenu InDesign. InCopy aussi utilise les documents InDesign, mais il ne s’agit pas du type par défaut.

Dans InDesign et InCopy, le document de base est toujours une base de données. Toutefois, dans InCopy ce document peut être incomplet. Dans InDesign, le document principal type est un fichier InDesign ouvert, mais il peut également s’agir d’un fichier INX ou IDML ouvert, qui se révèle généralement être un document InDesign non enregistré.

InCopy possède d’autres permutations. Il existe le fichier InDesign de base, ainsi qu’un nouveau document comportant un article InCopy (ou du texte brut ou RTF) importé. De même, il existe les fichiers d’affectation IDML et INX qui possèdent une partie d’un fichier InDesign stockée dans un fichier XML. Le modèle de document InDesign/InCopy correspond à l’ensemble de modules externes du modèle de base requis, dont la version évolue en fonction des modifications dans le temps. Il est important que tous les scripts IDML/INX fonctionnent à la fois dans InDesign et InCopy afin que les documents puissent être déplacés d’une application à l’autre tout en étant fidèlement restitués.

Différences au niveau de l’interface utilisateur

InDesign et InCopy ont de nombreux panneaux en commun, mais InCopy dispose d’un affichage plus petit et possède plusieurs barres d’outils supplémentaires le long des bordures supérieure, inférieure et gauche. Vous pouvez ancrer la plupart des panneaux InCopy sur ces barres pour les rendre visibles en toutes circonstances, mais avec une taille plus petite.

InCopy dispose d’une fenêtre personnalisée à plusieurs vues, dans une fenêtre principale ayant trois onglets : Mode Epreuve en placard, Mode Article et Mode Mise en page. Le Mode Mise en page est le mode d’affichage principal d’InDesign. Les modes Epreuve en placard et Article font partie du mode éditeur, avec et sans fins de lignes exactes, respectivement.

Conception et architecture

Relation article/fichier

Le format ICML est la représentation IDML d’un article InCopy. Il représente la future direction d’InDesign/InCopy et constitue un choix judicieux si vous devez modifier un fichier en dehors d’InDesign.

Format ICML

Chaque fichier ou flux InCopy utilise le langage XML. Ceci permet de facilement analyser les fichiers InCopy et de les ouvrir dans n’importe quel éditeur de texte.

Format INCX

Le format INCX est la représentation INX d’un article InCopy. Ce format n’est pas aussi convivial que le format ICML, mais il prend en charge les flux de travail INCX.

Page 11: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

CHAPITRE 1: Introduction Conception et architecture 11

Opérations sur un document

InCopy fournit des implémentations par défaut des opérations exécutées sur les documents (actions sur les fichiers), comme Nouveau, Enregistrer, Enregistrer sous, Enregistrer une copie, Ouvrir, Fermer, Version précédente et Mettre à jour la maquette. Toutes ces actions exécutables sur les fichiers InCopy sont situées dans un seul module externe (InCopyFileActions) sous la forme d’un code source. Les développeurs de logiciels ou les intégrateurs de systèmes sont supposés le remplacer par leurs propres implémentations afin de personnaliser l’interaction pour leur système de flux de travail.

Utilisation des métadonnées XMP

Les utilisateurs peuvent saisir ou modifier des métadonnées en sélectionnant Fichier > Informations sur le fichier. Ces métadonnées sont enregistrées dans le fichier InCopy. Les développeurs de logiciels et les intégrateurs de systèmes peuvent créer et stocker leurs propres métadonnées à l’aide du SDK XMP.

Page 12: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

2

Prise en main

Les scripts représentent la fonction la plus puissante d’Adobe® InCopy®. Aucune autre fonction (outil, panneau ou boîte de dialogue visible sur l’interface utilisateur du programme) n’est aussi rapide, facile et économique que le script.

Le présent document s’adresse à tous les utilisateurs d’InCopy. Si vous n’avez jamais créé de script, ce document vous aidera à commencer. Si vous avez déjà créé des scripts pour d’autres applications, vous apprendrez à appliquer vos connaissances aux scripts InCopy. Ce document traite également de l’installation et de l’exécution d’un script InCopy, ainsi que des capacités et limites des scripts InCopy. Vous y trouverez aussi des indications sur les logiciels dont vous avez besoin pour commencer à écrire vos propres scripts.

A l’aide des scripts, vous pouvez reproduire la plupart des opérations que vous exécutez dans l’interface utilisateur InCopy. Vous pouvez entrer du texte et le mettre en forme, rechercher et modifier du texte, ajouter des notes et imprimer ou exporter les pages du document. Toute opération apportant une modification au document ou à son contenu peut être réalisée à l’aide d’un script. Les scripts vous permettent même d’exécuter certaines opérations qui ne sont pas réalisables avec l’interface utilisateur.

Les scripts permettent de créer des menus, d’ajouter des éléments de menu, de créer et d’afficher des boîtes de dialogue et des panneaux, mais également de répondre aux sélections de l’interface utilisateur. Ils peuvent lire et écrire des fichiers texte, analyser des données XML et communiquer avec d’autres applications. Les scripts permettent d’effectuer toutes sortes de tâches, des plus simples (telles que la définition d’un taquet de tabulation à l’emplacement du pointeur de texte) aux plus complexes, comme la définition d’un ensemble complet de fonctions. Vous pouvez commencer avec des scripts simples qui n’exécutent qu’une action, puis passer aux scripts qui automatisent le flux de travail de publication tout entier.

Les tâches que vous ne pouvez pas exécuter à l’aide de scripts, telles que la définition d’un espace de travail ou d’un ensemble de raccourcis clavier, sont associées à l’interface utilisateur. En outre, les scripts ne permettent pas d’ajouter de nouveaux types d’objets à un document InCopy ni d’ajouter une nouvelle fonctionnalité de base au programme, telle qu’un moteur de composition de texte. Pour ce type d’extension, vous devez avoir recours au kit SDK (Software Developer’s Kit) d’InCopy, qui vous indique comment écrire des modules externes compilés à l’aide du langage C++.

Ce document traite d’Adobe InDesign® et d’InCopy, car InCopy est quasiment toujours utilisé en association avec des documents InDesign. En outre, la création de scripts InDesign est très proche de celle de scripts InCopy. Vous trouverez de plus amples détails sur la création de scripts InDesign dans le Didacticiel de scripts Adobe InDesign et le Guide des scripts d’Adobe InDesign.

Installation des scriptsPour installer un script InCopy, il vous suffit de placer le fichier de script dans le dossier Scripts Panel du dossier Scripts, situé dans le dossier de l’application InCopy.

Vous pouvez également placer le script dans le dossier Scripts Panel de votre dossier de préférences utilisateur. Vous trouverez le dossier de vos préférences utilisateur à l’emplacement suivant, où <username> correspond à votre nom d’utilisateur et le symbole ~ (tilde) représente le volume système :

Mac OS® : /Users/<username>/Library/Preferences/Adobe InCopy/ Version 8.0/<locale>/Scripts

Statut de mise à jour du chapitre

CS6 Mis à jour Références à CS5 supprimées ou modifiées.

12

Page 13: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Exécution de scripts 13

Une fois dans le dossier, le script s’affiche dans le panneau Scripts de l’application InCopy (choisissez la commande Fenêtre > Scripts pour afficher ce panneau).

Vous pouvez également placer des alias ou des raccourcis de scripts (ou de dossiers contenant des scripts) dans le dossier Scripts Panel. Ils s’afficheront dans le panneau Scripts.

Exécution de scriptsPour exécuter un script, vous devez afficher le panneau Scripts (choisissez la commande Fenêtre > Scripts), puis cliquer deux fois sur le nom du script dans le panneau Scripts. De nombreux scripts affichent des éléments d’interface utilisateur (boîtes de dialogue ou panneaux, par exemple), ainsi que des messages d’alerte, si nécessaire.

Utilisation du panneau ScriptsLe panneau Scripts peut exécuter des AppleScripts (fichiers avec l’extension .spt, .as ou .applescript) compilés ou non, des JavaScripts (fichiers avec l’extension .js ou .jsx), des VBScripts (fichiers avec l’extension .vbs) ou des programmes exécutables à partir de ce panneau.

Pour modifier un script affiché dans le panneau Scripts, cliquez deux fois sur le nom du script tout en maintenant la touche Option (Mac OS) ou Alt (Windows) enfoncée. Le script s’ouvre dans l’éditeur défini pour son type de fichier.

Pour ouvrir le dossier contenant un script affiché dans le panneau Scripts, cliquez deux fois sur le nom du script tout en maintenant la touche Commande (Mac OS) ou les touches Ctrl+Maj (Windows) enfoncées. Vous pouvez également choisir la commande Faire apparaître dans le Finder (Mac OS) ou Faire apparaître dans l’Explorateur (Windows), dans le menu du panneau Scripts. Le dossier contenant le script s’ouvre dans le Finder (Mac OS) ou l’Explorateur (Windows).

Les scripts s’exécutent sous la forme d’une série d’opérations (actions), ce qui signifie que vous pouvez annuler les modifications apportées au document par le script en choisissant la commande Annuler dans le menu Edition. Vous pouvez ainsi dépanner un script, en revenant aux étapes précédentes pour chaque modification.

Pour ajouter un raccourci clavier à un script, choisissez la commande Edition > Raccourcis clavier, sélectionnez un ensemble de raccourcis modifiable dans le menu Ensemble, puis sélectionnez l’option Scripts dans le menu Zone du produit. Une liste de scripts apparaît dans le panneau Scripts. Sélectionnez un script, puis affectez-lui un raccourci clavier comme vous le feriez pour n’importe quelle autre fonction d’InCopy.

Informations relatives au langage AppleScriptPour écrire des AppleScripts, vous devez posséder AppleScript version 1.6 ou supérieure, ainsi qu’un éditeur de scripts AppleScript. AppleScript est fourni avec tous les systèmes Apple® et peut être téléchargé gratuitement à partir du site Web d’Apple. L’éditeur de scripts Apple est fourni avec Mac OS ; vous pouvez y accéder depuis les menus :

Mac OSX 10.5 Applications > AppleScript > Script Editor

Mac OSX 10.6 Applications > Utilities > AppleScript Editor

Des éditeurs de script tiers, tels que Script Debugger (de Late Night Software, http://www.latenightsw.com), sont également disponibles.

Page 14: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Utilisation des scripts de ce document 14

Utilisation des scripts de ce documentPour utiliser n’importe quel script de ce document, ouvrez le fichier de script d’apprentissage (le nom de fichier figure devant chaque script) ou copiez le code indiqué dans ce chapitre.

Les fichiers de script sont stockés dans une archive zip : InCopyCS6ScriptingGuideScripts.zip. Au moment de décompresser l’archive, vous pouvez déplacer le dossier contenant les scripts créés dans le langage de script que vous avez choisi d’utiliser (AppleScript, JavaScript ou VBScript) dans le dossier Scripts Panel. Il est beaucoup plus aisé d’utiliser des fichiers de script que de saisir manuellement les scripts ou de les copier-coller depuis ce document.

Si vous n’avez pas accès à l’archive des scripts, vous pouvez saisir le code de script indiqué dans ce chapitre. Pour ce faire :

1. Copiez le script à partir de ce document Adobe PDF et collez-le dans l’Editeur Apple Script.

2. Enregistrez le script dans un fichier de texte brut dans le dossier Scripts Panel (voir la section « Installation des scripts » à la page 12) avec l’extension appropriée : .applescript.

3. Choisissez la commande Fenêtre > Scripts pour afficher le panneau Scripts.

4. Pour exécuter le script, cliquez deux fois sur son nom dans le panneau Scripts.

La saisie manuelle de scripts ne fonctionne que pour les scripts présentés dans ce chapitre. Les scripts présentés dans les autres chapitres sont seulement des extraits de script, pas des scripts entiers. Pour les exécuter, vous devez utiliser les scripts contenus dans l’archive de scripts.

REMARQUE : si vous copiez et collez des scripts de ce document, soyez conscient que les sauts de ligne provenant de la mise en page du document peuvent entraîner des erreurs dans vos scripts. Ces erreurs pouvant être difficiles à repérer, il est recommandé d’utiliser les scripts dans l’archive zip.

Votre premier script InCopyNous allons maintenant créer un script InCopy pour générer un document, ajouter un bloc de texte et entrer du texte dans ce bloc. Malgré son apparence simple, ce script permet d’effectuer les opérations suivantes :

Etablissement de la communication avec InCopy

Création d’un document

Ajout de texte à un article

Lancez l’éditeur de scripts (vous le trouverez dans le dossier Applications, à l’intérieur du dossier AppleScript). Saisissez le script suivant (ou ouvrez le script d’apprentissage HelloWorld.applescript) :

tell application "Adobe InCopy CS6" set myDocument to make document set myStory to story 1 of myDocument tell myStory

set contents to "Hello World!" end tell

end tell

Enregistrez le script dans un fichier texte avec l’extension .applescript dans le dossier Scripts Panel (voir la section « Installation des scripts » à la page 12). Pour exécuter le script, cliquez deux fois sur son nom dans le panneau Scripts ou cliquez sur le bouton Exécuter dans la fenêtre de l’éditeur de scripts.

Page 15: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 15

Analyse du script

Cette section présente une analyse détaillée du script Hello World.

1. Etablissement de la communication avec l’objet d’application InCopy

tell application "Adobe InCopy CS6"

2. Création d’un document et d’une référence au document

Set myDocument to make document

3. Obtention d’une référence au premier article du document (un document autonome contient toujours un article)

set myStory to story 1 of myDocument tell myStory

4. Ajout de texte à l’article en définissant la propriété de contenu sur une chaîne

set contents of myStory to "Hello World!"

Terminologie des scripts et modèle d’objet InCopyMaintenant que vous avez créé votre premier script InCopy, le moment est venu de vous familiariser avec la terminologie des langages de script en général, et d’InCopy en particulier.

Terminologie des scripts

Passons tout d’abord en revue quelques termes et concepts utilisés couramment dans la création de scripts.

Commentaires

Les commentaires permettent d’ajouter un descriptif à un script. Les commentaires sont ignorés pendant l’exécution d’un script (ils ne génèrent donc aucune erreur). Ils permettent de documenter les opérations d’un script (pour mémoire ou pour un autre développeur). Dans ce document, nous utilisons des commentaires pour les scripts d’apprentissage.

Pour inclure un commentaire dans un script AppleScript, insérez -- (deux tirets) à gauche du commentaire ou placez le commentaire entre (* et *). Par exemple :

--this is a comment (* and so is this *)

Page 16: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 16

Valeurs

Le corps d’un caractère de texte, le contenu d’une remarque et le nom de fichier d’un document sont autant d’exemple de valeurs utilisées pour la création de scripts InCopy. Les valeurs sont des données utilisées par un script pendant son exécution.

Le type d’une valeur définit quelle sorte de donnée elle contient. Le type de valeur du contenu d’un mot, par exemple, est une chaîne de texte. De même, le type de valeur de l’interligne d’un paragraphe est un nombre. En général, les valeurs utilisées dans un script sont des nombres ou du texte. Le tableau ci-dessous répertorie les types de valeurs les plus couramment utilisées pour la création de scripts InCopy.

Conversion de valeurs d’un type à un autre

Le langage AppleScript permet de convertir des valeurs variables d’un type à un autre. Parmi les conversions les plus courantes, citons la conversion de nombres en chaînes de texte (ce qui permet d’entrer des nombres comme texte ou de les afficher dans des boîtes de dialogue) ou la conversion de chaînes de texte en nombres (ce qui permet de définir un corps ou une position de page).

--To convert from a number to a string: set myNumber to 2 set myString to (myNumber as string) --To convert from a string to a number: set myString to "2" set myNumber to (myString as integer) --if your string contains a decimal value, use "as real" rather than "as integer"

Variables

Une variable est le conteneur d’une valeur. Les variables sont ainsi nommées car les valeurs qu’elles contiennent peuvent changer. Une variable peut contenir un nombre, une chaîne de texte ou une référence à un objet InCopy. Les variables portent un nom. Vous ferez donc référence à une variable par son nom. Pour placer une valeur dans une variable, vous devez l’assigner à cette variable.

Dans tous les exemples de scripts et les scripts d’apprentissage accompagnant InCopy, les variables commencent par my. Vous pouvez ainsi différencier facilement les variables créées dans un script des termes du langage de script.

Type de valeur Nature Exemple

Boolean True ou False logique. True

Integer Nombres entiers (sans virgule). Les entiers peuvent être positifs ou négatifs.

14

Fixed or real Nombre très précis pouvant être décimal.

13.9972

String Série de caractères de texte. Les chaînes de texte sont présentées entre guillemets anglais.

"I am a string"

List Liste de valeurs (ces valeurs pouvant être de tout type).

{"0p0", "0p0", "16p4", "20p6"}

Page 17: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 17

Affectation d’une valeur à une variable

L’affectation de valeurs ou de chaînes de texte à des variables est très simple, comme l’illustrent les exemples suivants :

set myNumber to 10 set myString to "Hello, World!" set myTextFrame to make text frame at page 1 of myDocument

Dans la mesure du possible, utilisez des noms évocateurs pour les variables, tels que firstPage ou corporateLogo plutôt que x ou c, par exemple. Votre script sera beaucoup plus lisible. L’utilisation de noms longs n’affecte en rien la vitesse d’exécution du script.

Les noms de variables doivent être composés d’un seul mot, mais vous pouvez utiliser les majuscules (pour écrire myFirstPage, par exemple) ou les traits de soulignement (my_first_page) afin de les rendre plus lisibles. Les noms de variables ne peuvent pas commencer par un chiffre, ni contenir des signes de ponctuation ou des guillemets de citation anglais.

Variables de tableau de données

Dans AppleScript, un tableau de données est appelé liste. Une liste est un conteneur d’une série de valeurs :

set myArray to {1, 2, 3, 4}

Pour faire référence à un élément d’un tableau de données, vous devez utiliser son numéro dans le tableau. En AppleScript, le premier élément d’un tableau est l’élément 1 :

set myFirstArrayItem to item 1 of myArray

Un tableau de données peut en contenir un autre, comme dans les exemples ci-dessous :

set myArray to {{0, 0}, {72, 72}}

Détermination du type de valeur d’une variable

Parfois, un script doit prendre des décisions en fonction du type de valeur d’un objet. Si vous travaillez sur un script opérant sur une sélection de texte, par exemple, vous devrez peut-être définir l’arrêt du script si aucune sélection n’est effectuée.

-- Given a variable of unknown type, "myMysteryVariable"... set myType to class of myMysteryVariable --myType will be an AppleScript type (e.g., rectangle)

Opérateurs

Les opérateurs utilisent des variables ou des valeurs pour exécuter des calculs (addition, soustraction, multiplication et division) et renvoyer une valeur. Par exemple :

MyWidth/2

renvoie une valeur égale à la moitié du contenu de la variable myWidth.

Vous pouvez également utiliser des opérateurs pour effectuer des comparaisons (est égal à (=), est différent de (<>), est supérieur à (>) ou est inférieur à (<)). Par exemple :

MyWidth > myHeight

renvoie la valeur « true » (ou 1) si myWidth est supérieur à myHeight, ou « false » (0) si ce n’est pas le cas.

Page 18: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 18

En AppleScript, utilisez l’opérateur & pour concaténer (ou joindre) deux chaînes. Par exemple :

"Pride " & "and Prejudice"

renvoie la chaîne de texte :

"Pride and Prejudice"

Instructions conditionnelles« Si la taille du texte sélectionné est de 12 points, définissez le corps sur 10 points ». Il s’agit d’un exemple d’instruction conditionnelle. Les instructions conditionnelles permettent au script d’évaluer des conditions (telles que la couleur du texte sélectionné, le nombre de pages du document ou la date) et d’agir en fonction du résultat. La plupart des instructions conditionnelles commencent par if.

Structures de contrôleSi vous pouviez parler à InCopy, vous pourriez lui dire notamment « Répète vingt fois la procédure suivante. ». En terminologie des scripts, cette instruction est appelée structure de contrôle. Les structures de contrôle gèrent les processus répétitifs ou boucles. Une boucle répète une action continuellement, avec ou sans changement entre les instances (ou itérations) de la boucle, jusqu’à ce qu’une condition spécifique soit remplie. Les structures de contrôle commencent généralement par repeat.

GestionnairesLes gestionnaires sont des modules auxquels vous pouvez faire référence dans un script. Généralement, vous envoyez une valeur ou une série de valeurs à un gestionnaire et obtenez une ou plusieurs autres valeurs. Rien de particulier à mentionner sur le code utilisé dans les gestionnaires (ils ont été créés pour vous éviter de saisir les mêmes lignes de code de façon répétée dans un script). Les gestionnaires commencent par on.

Présentation du modèle d’objet InDesign et InCopyLorsque vous pensez aux documents InCopy et InDesign, vous organisez certainement les programmes et leurs composants dans votre esprit. Vous savez que les paragraphes sont contenus dans des blocs de texte qui à leur tour apparaissent sur une page, qu’une page fait partie d’une planche, et que plusieurs planches composent un document. Les documents contiennent des couleurs, des styles, des calques et des planches types. Lorsque vous considérez les objets dans les documents que vous créez, vous pensez intuitivement à leur ordre.

InDesign et InCopy « appréhendent » le contenu d’un document de la même manière. Un document contient des pages, qui à leur tour contiennent des éléments de page (blocs de texte, rectangles, ellipses, et ainsi de suite). Les blocs de texte contiennent des caractères, des mots, des paragraphes et des blocs ancrés ; les blocs graphiques contiennent des images, des fichiers EPS ou des fichiers PDF ; les groupes contiennent d’autres éléments de page. Tous ces éléments sont les objets qui composent une publication InDesign, et qui sont utilisés pour écrire les scripts InDesign et InCopy.

Les objets de votre publication sont organisés dans un ordre spécifique : les paragraphes figurent à l’intérieur d’un article, qui lui-même figure dans un document, qui à son tour figure à l’intérieur de l’objet d’application InCopy. Les termes modèle d’objet et hiérarchie font référence à cette structure. Il est impératif de posséder une bonne compréhension du modèle d’objet pour bien identifier l’objet que vous souhaitez utiliser. Votre meilleur guide pour créer des scripts dans InCopy est votre connaissance de l’application elle-même.

Les objets possèdent des propriétés (attributs). Par exemple, les propriétés d’un objet texte incluent la police utilisée pour la mise en forme du texte, le corps et l’interligne appliqués au texte.

Page 19: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 19

Les propriétés possèdent des valeurs. Ainsi, le corps des caractères du texte peut être représenté par un nombre (en points) ou par la chaîne « Auto » pour l’interligne automatique. La propriété de couleur de fond du texte peut être définie sur une couleur, un dégradé, une encre mélangée ou une nuance.

Les propriétés peuvent être en lecture/écriture ou en lecture seule. Vous pouvez définir les propriétés en lecture/écriture sur d’autres valeurs, mais pas les propriétés en lecture seule.

Les objets possèdent également des méthodes. Les méthodes correspondent à des verbes de création de scripts, aux actions qu’un objet peut effectuer. Par exemple, l’objet de document contient des méthodes d’impression, d’exportation et d’enregistrement.

Les méthodes possèdent des paramètres ou des valeurs définissant l’effet de la méthode. La méthode open, par exemple, possède un paramètre qui définit le fichier à ouvrir.

L’illustration suivante est une vue d’ensemble du modèle d’objet InCopy. Ce diagramme ne représente pas la liste complète des objets disponibles dans les scripts InCopy. Il s’agit simplement d’une structure conceptuelle permettant de comprendre la relation entre les types d’objets.

documents

libraries

application defaults

application

books

application preferences

application events

application menus

application methods

application properties

a document

document defaults

document preferences

document events

document methods

document properties

pages or spreads

page

page itemsstories

text objects

document elements

Page 20: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 20

Les objets figurant dans le diagramme sont expliqués dans le tableau suivant :

Terme Signification

Application InCopy

Application defaults

Les paramètres par défaut de l’application, tels que les couleurs, les styles de paragraphe et les styles d’objet. Les valeurs par défaut de l’application concernent tous les nouveaux documents.

Application events

Les événements qui se produisent à mesure qu’un utilisateur travaille dans l’application ou qu’un script s’exécute. Les événements sont générés par l’ouverture, la fermeture ou l’enregistrement d’un document ou par la sélection d’une commande de menu. Les événements peuvent déclencher des scripts.

Application menus

Les menus, sous-menus et menus contextuels qui s’affichent dans l’interface utilisateur d’InCopy. Vous pouvez attacher des scripts aux menus pour exécuter des commandes.

Application methods

Les opérations que l’application peut effectuer, notamment rechercher et remplacer du texte, copier la sélection, créer des documents ou ouvrir des bibliothèques.

Application preferences

Par exemple, les préférences de texte, les préférences d’exportation PDF et les préférences de document. De nombreux objets de préférences existent également au niveau du document. Tout comme dans l’interface utilisateur, les préférences d’application s’appliquent aux nouveaux documents ; les préférences de document modifient les paramètres d’un document spécifique.

Application properties

Les propriétés de l’application, notamment le chemin complet de l’application, ses paramètres régionaux et le nom d’utilisateur.

Books Une collection de livres ouverts.

Document Un document InCopy.

Document defaults

Les paramètres par défaut du document, tels que les couleurs, les styles de paragraphe et les paramètres par défaut de mise en forme de texte.

Document elements

Par exemple, les articles, les graphiques importés et les pages d’un document. L’illustration ci-dessus indique des pages et des articles, car ces objets sont d’importants conteneurs d’autres objets. Toutefois, les éléments de document incluent également des rectangles, des ovales (ellipses), des groupes, des éléments XML, ainsi que tout autre type d’objet que vous pouvez importer ou créer.

Document events

Les événements qui se produisent au niveau du document, par exemple, l’importation de texte (voir Application events plus haut dans le tableau).

Document methods

Les opérations que le document peut effectuer, notamment fermer, imprimer ou exporter un document.

Document preferences

Les préférences d’un document, telles que les préférences de repères, d’affichage ou de document.

Document properties

Par exemple, le nom de fichier du document, le nombre de pages ou l’emplacement de l’origine (point zéro).

Documents Une collection de documents ouverts.

Libraries Une collection de bibliothèques ouvertes.

Page Une page dans un document InCopy.

Page 21: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 21

Consultation du modèle d’objet InCopy

Vous pouvez afficher le modèle d’objet InCopy à l’intérieur de votre application d’édition de scripts. Toutes les informations de référence sur les objets et leurs propriétés et méthodes sont stockées dans le modèle et peuvent être affichées.

Pour afficher le dictionnaire AppleScript d’InCopy :

1. Lancez InCopy.

2. Lancez l’éditeur de scripts Apple.

3. Dans l’éditeur de scripts, choisissez la commande Fichier > Ouvrir un dictionnaire. L’éditeur de scripts affiche une liste des applications prenant en charge les scripts.

Page item Tout objet que vous pouvez créer ou placer sur une page. Il existe de nombreux types d’éléments de page, tels que des blocs de texte, des rectangles, des lignes graphiques et des groupes.

Pages or spreads

Les pages ou les planches dans un document InCopy.

Stories Le texte dans un document InCopy.

Text objects Les caractères, mots, lignes, paragraphes et colonnes de texte sont des exemples d’objets texte dans un article InCopy.

Terme Signification

Page 22: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Terminologie des scripts et modèle d’objet InCopy 22

4. Sélectionnez votre copie d’InCopy et cliquez sur OK. L’éditeur de scripts affiche la liste des suites (collections d’objets associés) d’InCopy :

5. Sélectionnez une suite pour consulter les objets et méthodes (commandes) qu’elle contient, puis sélectionnez un objet pour connaître les propriétés qui lui sont associées.

Mesures et positionnement

Dans InCopy, tous les éléments et objets sont placés sur une page en fonction des mesures que vous spécifiez. Il est donc très utile de connaître le fonctionnement du système de coordonnées d’InCopy et les unités de mesure qu’il utilise.

Coordonnées

Comme tout autre programme de mise en page et de dessin, InCopy utilise une géométrie bidimensionnelle simple pour définir la position des objets sur une page ou une planche. La composante horizontale d’une paire de coordonnées est appelée x et sa composante verticale, y. Vous pouvez voir ces coordonnées dans le panneau Transformation ou Contrôle lorsqu’un objet est sélectionné avec l’outil Sélection. Comme dans l’interface utilisateur d’InCopy, les coordonnées sont mesurées par rapport à l’emplacement actuel de l’origine (point zéro) de la règle.

Il existe une différence entre les coordonnées utilisées dans InCopy et le système de coordonnées géométrique traditionnel. Sur l’axe vertical (ou y) d’InCopy, les coordonnées au-dessous de l’origine sont des nombres positifs, et celles situées au-dessus, des nombres négatifs.

Page 23: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Ajout de caractéristiques à « Hello World » 23

Unités de mesure

Pour envoyer des valeurs de mesure à InCopy, vous pouvez utiliser soit des nombres (14.65, par exemple), soit des chaînes de mesure (« 1p7.1 », par exemple). Si vous envoyez des nombres, InCopy utilise les unités de mesure actives de la composition ; si vous envoyez des chaînes de mesure (voir le tableau ci-dessous), InCopy utilise les unités de mesure spécifiées dans chaque chaîne.

InCopy renvoie les coordonnées et autres valeurs de mesure en utilisant les unités de mesure actives de la composition. Dans certains cas, ces unités ne sont pas représentées sous la même forme que les valeurs de mesure figurant dans le panneau Transformation d’InCopy. Si le système de mesure actif utilise les picas, par exemple, InCopy renvoie des valeurs fractionnaires sous forme de nombres décimaux, au lieu d’utiliser les conventions « picas et points » du panneau Transformation. Ainsi, « 1p6 » est renvoyé sous la forme « 1.5 ». InCopy procède de cette manière, car le système de scripts ne peut pas exécuter d’opération arithmétique avec des chaînes de mesure. Par exemple, si vous additionnez « 0p3.5 » et « 13p4 », vous allez obtenir une erreur de script ; en revanche, si vous additionnez 0,2916 et 13,333 (les mêmes mesures après leur conversion), le résultat sera correct.

Si votre script dépend de l’addition, la soustraction, la multiplication ou la division de valeurs de mesure spécifiques, il est préférable de définir les unités de mesure correspondantes au début du script. A la fin du script, vous pouvez rétablir les unités de mesure initialement utilisées avant l’exécution du script. Vous pouvez également utiliser des remplacements d’unités de mesures, comme dans beaucoup de nos exemples de scripts. Un remplacement d’unité de mesure est une chaîne contenant un caractère spécial, comme dans les exemples ci-dessous.

Ajout de caractéristiques à « Hello World »Nous allons maintenant créer un script qui modifie la composition « Hello World » créée avec notre premier script. Ce second script illustre les opérations suivantes :

Obtention du document actif

Changement de la mise en forme du texte dans son bloc

Ajout d’une note

Ouvrez le script d’apprentissage ImprovedHelloWorld ou procédez comme suit pour créer le script :

1. Vérifiez que le document que vous avez créé précédemment est ouvert. Si vous avez fermé le document sans l’enregistrer, il suffit de réexécuter le script HelloWorld.applescript pour créer un nouveau document.

2. Dans l’éditeur de script, choisissez la commande Fichier > Nouveau pour créer un script.

Remplacement Signification Exemple

c cicéros (le c peut être suivi de didots, si nécessaire) 1.4c

cm centimètres .635cm

i (or in) pouces .25i

mm millimètres 6.35mm

p picas (le p peut être suivi de points, si nécessaire) 1p6

pt points 18pt

Page 24: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Prise en main Ajout de caractéristiques à « Hello World » 24

3. Entrez le code ci-dessous.

tell application "Adobe InCopy CS6" --Get a reference to a font. try

--Enter the name of a font on your system, if necessary. set myFont to font "Arial"

end try --Get the active document and assign the result to the variable "myDocument" set myDocument to document 1 tell story 1 of myDocument

--Change the font, size, and paragraph alignment. try

set applied font to myFont end try set point size to 72 set justification to center align --Enter the note at the last insertion point of the story. tell insertion point -1

set myNote to make note set contents of text 1 of myNote to "This is a note."

end tell end tell

end tell

4. Enregistrez le script.

Pour exécuter le nouveau script, cliquez deux fois sur son nom dans le panneau Scripts.

Page 25: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

3

Fonctions de scripts

Ce chapitre décrit les techniques de scripts en relation avec l’environnement de script InCopy. La quasi-totalité des autres objets du modèle de scripts InCopy possèdent une fonction qui permet de modifier les valeurs par défaut d’un document ou de l’application. En revanche, les fonctions décrites dans ce chapitre commandent le fonctionnement des scripts.

Ce document aborde les thèmes suivants :

Objet script preferences et ses propriétés

Référence au script d’exécution

Exécution des scripts dans les versions antérieures du modèle d’objet de script

Méthode do script pour exécuter des scripts

Exécution des scripts au lancement d’InCopy

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter les scripts InCopy dans le langage de votre choix.

Préférences des scriptsL’objet script preferences fournit les objets et les propriétés liés au mode d’exécution des scripts InCopy. Le tableau suivant décrit plus en détail chaque propriété de l’objet script preferences :

Statut de mise à jour du chapitre

CS6 Modifié « Versionnage des scripts » à la page 26 et ses trois sous-sections ont été mises à jour, corrigées et clarifiées.

Propriété Description

enable redraw Active ou désactive la réactualisation de l’écran pendant l’exécution d’un script dans le panneau Scripts.

scripts folder Chemin d’accès au dossier des scripts.

scripts list Liste des scripts disponibles. Cette propriété représente un ensemble d’éléments (tableau de données) sous la forme suivante :

[[fileName, filePath], …]

fileName correspond au nom du fichier de script et filePath au chemin d’accès complet au script. Vous pouvez utiliser cette fonction pour vérifier la présence d’un script dans l’ensemble des scripts installés.

25

Page 26: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Fonctions de scripts Obtention du script en cours 26

Obtention du script en coursVous pouvez obtenir une référence au script en cours à l’aide de la propriété active script de l’objet d’application. Vous pouvez utiliser cette propriété pour rechercher les fichiers et les dossiers relatifs au script, comme l’illustre l’exemple suivant (dans le script d’apprentissage ActiveScript) :

tell application "Adobe InCopy CS6" set myScript to active script display dialog ("The current script is: " & myScript) tell application "Finder"

set myFile to file myScript set myParentFolder to container of myFile

end tell display dialog ("The folder containing the active script is: " & myParentFolder)

end tell

Lorsque vous déboguez des scripts à l’aide de l’éditeur de scripts, la propriété active script renvoie une erreur. Seuls les scripts exécutés depuis la panneau Scripts figurent dans la propriété active script.

Versionnage des scriptsInCopy peut exécuter des scripts utilisant des versions antérieures du modèle d’objet de script InCopy. Pour exécuter un ancien script dans une version plus récente d’InCopy, vous devez prendre en compte les points suivants :

Ciblage : les scripts doivent cibler la version d’InCopy dans laquelle ils sont exécutés (c’est-à-dire, la version en cours). La méthode de ciblage dépend du langage, comme indiqué dans la section « Ciblage » à la page 27.

Compilation : cette opération implique la mise en correspondance des noms dans le script avec les ID de script sous-jacents qui sont interprétés par InCopy. La méthode de compilation dépend du langage, comme indiqué dans la section « Compilation » à la page 27.

user interaction level Cette propriété contrôle les alertes et les boîtes de dialogue d’InCopy présentées à l’utilisateur. Lorsque vous paramétrez cette propriété sur never interact, InCopy n’affiche pas d’alertes, ni de boîtes de dialogue ; définissez-la sur interact with alerts pour activer les alertes mais désactiver les boîtes de dialogue, et sur interact with all pour rétablir l’affichage normal des alertes et des boîtes de dialogue. La possibilité de désactiver l’affichage des alertes est pratique lorsque vous ouvrez des documents à l’aide d’un script ; souvent, InCopy affiche une alerte correspondant à des polices ou des fichiers graphiques liés qui sont manquants. Pour éviter cette alerte, définissez le niveau d’interaction utilisateur sur never interact avant d’ouvrir le document, puis rétablissez l’interaction utilisateur (en définissant la propriété sur interact with all) avant d’exécuter le script.

version Version de l’environnement de création de scripts en cours d’utilisation (pour plus de détails, voir la section « Versionnage des scripts » à la page 26). Notez que cette propriété diffère de la version de l’application.

Propriété Description

Page 27: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Fonctions de scripts Versionnage des scripts 27

Interprétation : cette opération implique la mise en correspondance des ID avec le gestionnaire de demande approprié dans InCopy. Ainsi, InCopy interprète correctement un script créé pour une version antérieure du modèle d’objet de script. Pour cela, paramétrez explicitement les préférences de script de l’application sur l’ancien modèle d’objet dans le script (comme indiqué dans la section « Interprétation » à la page 28) ou exécutez le script à partir d’un dossier du dossier du panneau Scripts comme suit :

CiblageUn script doit toujours cibler la version d’InCopy dans laquelle il est exécuté (c’est-à-dire, la version en cours), que ce soit de manière implicite ou explicite. Le ciblage est implicite lorsque le script est lancé depuis le panneau Scripts.

Sinon, le ciblage explicite des scripts AppleScript est effectué à l’aide de l’instruction tell :

--Target InCopy CS6 tell application "Adobe InCopy CS6"

Compilation

Généralement, les scripts AppleScript sont compilés à l’aide du dictionnaire de la version ciblée. Ce comportement peut être redéfini à l’aide de l’instruction using terms from qui remplace le dictionnaire par celui d’une autre version d’InCopy à des fins de compilation. Par exemple, pour utiliser un script CS5 (version 7.0) dans CS6 (version 8.0) :

tell application "Adobe InCopy CS6" --target CS6 using terms from application "InCopy CS6" --compile using CS6

--InCopy CS6 version script goes here. end using terms from end tell

Pour que cela fonctionne, vous devez générer une version antérieure du dictionnaire AppleScript à l’aide de la commande publish terminology, qui est appliquée à l’objet d’application. Le dictionnaire est généré dans un dossier (nommé avec la version du DOM) qui se trouve dans le dossier Scripting Support du dossier de préférences d’InCopy. Par exemple, pour générer le dictionnaire CS5 dans le dossier /Utilisateurs/<nom d’utilisateur>/Bibliothèque/Préférences/Adobe InCopy/Version 8.0/<langue>/Scripting Support/7.0 :

tell application "Adobe InCopy CS6" --publish the InCopy CS6 dictionary (version 8.0 DOM) publish terminology version 8.0 end tell

Dossier Version des scripts pour InCopy

Version 8.0 Scripts CS6

Version 7.0 Scripts CS5 et CS5.5

Version 6.0 Scripts CS4

Version 5.0 Scripts CS3

Version 2.0 Scripts CS2

Page 28: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Fonctions de scripts Utilisation de la méthode do script 28

Interprétation

L’objet d’application InCopy comprend un objet script preferences, permettant à un script d’obtenir ou de définir la version du modèle d’objet de script à utiliser pour l’interprétation de scripts. La version par défaut est la version actuelle de lapplication et persiste.

Par exemple, pour modifier la version du modèle d’objet de script en CS5 :

--Set to 7.0 scripting object model set version of script preferences to 7.0

Utilisation de la méthode do scriptLa méthode do script permet au script d’exécuter un autre script. Le script peut se présenter sous la forme d’une chaîne de codes valides ou d’un fichier sur disque. Le script peut adopter le même langage de script que le script courant ou un autre langage de script. Les langages disponibles varient d’une plate-forme à une autre : sous Mac OS, vous pouvez exécuter un script AppleScript ou JavaScript ; sous Windows, vous pouvez exécuter un script VBScript ou JavaScript.

La méthode do script présente plusieurs utilisations possibles :

Exécution d’un script dans un autre langage qui fournit une fonction manquante dans votre langage de script principal. Par exemple, VBScript n’offre pas la possibilité d’afficher un explorateur de fichiers ou de dossiers, contrairement à JavaScript. AppleScript peut être très lent à calculer les fonctions trigonométriques (sinus et cosinus), mais JavaScript effectue ces calculs rapidement. JavaScript ne permet pas d’interroger Microsoft® Excel sur le contenu d’une cellule de feuille de calcul donnée, mais AppleScript et VBScript proposent cette fonctionnalité. Dans tous ces exemples, la méthode do script peut exécuter un extrait de code de script dans un autre langage, pour contourner la limitation du langage utilisé pour le corps du script.

Création d’un script « à la volée ». Votre script peut créer un script (sous la forme d’une chaîne) pendant son exécution, qu’il peut ensuite exécuter à l’aide de la méthode do script. C’est une méthode idéale pour créer une boîte de dialogue ou un panneau personnalisé en fonction du contenu de la sélection ou des attributs des objets que le script crée.

Incorporation des scripts dans les objets. Les scripts peuvent utiliser la méthode do script pour exécuter des scripts qui ont été enregistrés sous la forme de chaînes dans la propriété label des objets. Cette technique permet à un objet de contenir un script qui contrôle ses propriétés de mise en page ou qui met à jour son contenu en fonction de certains paramètres. Les scripts peuvent également être incorporés dans des éléments XML sous la forme d’un attribut de l’élément ou du contenu d’un élément (voir la section « Exécution des scripts au lancement » à la page 29).

Envoi de paramètres à l’objet do script

Pour envoyer un paramètre à un script exécuté par l’objet do script, utilisez la forme suivante (dans le script d’apprentissage DoScriptParameters) :

tell application "Adobe InCopy CS6" --Create a list of parameters. set myParameters to {"Hello from do script", "Your message here."} --Create a JavaScript as a string. set myJavaScript to "alert(\"First argument: \" + arguments[0] + \"\\rSecond

argument: \" + arguments[1])" --Run the JavaScript using the do script command.

Page 29: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Fonctions de scripts Exécution des scripts au lancement 29

do script myJavaScript language javascript with arguments myParameters --Create an AppleScript as a string. set myAppleScript to "tell application \"Adobe InCopy CS6\"" & return set myAppleScript to myAppleScript & "display dialog (\"First argument: \" & item 1

of arguments & return & \"Second argument: \" & item 2 of arguments)" & return set myAppleScript to myAppleScript & "end tell" --Run the AppleScript using the do script command. do script myAppleScript language applescript language with arguments myParameters

end tell

Renvoi des valeurs de l’objet do scriptPour renvoyer une valeur à partir d’un script exécuté par l’objet do script, vous pouvez utiliser l’objet script args (abréviation de « script arguments ») de l’application. L’extrait de script suivant explique comment procéder (pour consulter le script complet, voir le script d’apprentissage DoScriptReturnValue) :

tell application "Adobe InCopy CS6" --Create a string to be run as an AppleScript. set myAppleScript to "tell application \"Adobe InCopy CS6\"" & return set myAppleScript to myAppleScript & "tell script args" & return set myAppleScript to myAppleScript & "set value name \"ScriptArgumentA\" value

\"This is the first AppleScript script argument value.\"" & return set myAppleScript to myAppleScript & "set value name \"ScriptArgumentB\" value

\"This is the second AppleScript script argument value.\"" & return set myAppleScript to myAppleScript & "end tell" & return set myAppleScript to myAppleScript & "end tell" --Run the AppleScript string. do script myAppleScript language applescript language --Retrieve the script argument values set by the script. tell script args

set myScriptArgumentA to get value name "ScriptArgumentA" set myScriptArgumentB to get value name "ScriptArgumentB"

end tell --Display the script argument values in a dialog box. display dialog "ScriptArgumentA: " & myScriptArgumentA & return & "ScriptArgumentB:

" & myScriptArgumentB --Create a string to be run as a JavaScript. set myJavaScript to "app.scriptArgs.setValue(\"ScriptArgumentA\", \"This is the

first JavaScript script argument value.\");" & return set myJavaScript to myJavaScript & "app.scriptArgs.setValue(\"ScriptArgumentB\",

\"This is the second JavaScript script argument value.\");" & return --Run the JavaScript string. do script myJavaScript language javascript --Retrieve the script argument values set by the script. tell script args

set myScriptArgumentA to get value name "ScriptArgumentA" set myScriptArgumentB to get value name "ScriptArgumentB"

end tell --Display the script argument values in a dialog box. display dialog "ScriptArgumentA: " & myScriptArgumentA & return & "ScriptArgumentB:

" & myScriptArgumentB end tell

Exécution des scripts au lancementPour exécuter un script au lancement d’InCopy, placez le script dans le dossier Startup Scripts du dossier Scripts (pour plus de détails, voir la section « Installation des scripts » à la page 12).

Page 30: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

4

Texte et saisie

La saisie, l’édition et la mise en forme d’un texte représentent la majeure partie du temps consacré à la plupart des documents InCopy. Ainsi, l’automatisation des opérations sur le texte, notamment la saisie, peut représenter des gains de productivité importants.

Ce didacticiel décrit comment automatiser avec des scripts les opérations les plus courantes appliquées au texte et à la saisie. Les exemples de scripts de ce chapitre sont présentés par ordre de complexité, en commençant par des scripts très simples et en progressant vers des opérations plus complexes.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script. Vous devez également savoir manipuler le texte dans InCopy et connaître la terminologie de base du domaine de la composition.

Saisie et importation de texteCette section décrit le processus d’insertion d’un texte dans les documents InCopy. Tout comme vous pouvez saisir du texte dans des blocs de texte et importer des fichiers texte au moyen de l’interface utilisateur InCopy, vous pouvez créer des blocs de texte, insérer du texte dans un article ou importer des fichiers texte à l’aide de scripts.

Articles et blocs de texteTout le texte d’une mise en page InCopy fait partie d’un article, et chaque article peut contenir un ou plusieurs blocs de texte. Si vous utilisez un document InCopy autonome, celui-ci contient un article, et InCopy ajoute des blocs de texte uniquement si cela se révèle nécessaire pour afficher le texte de l’article. Cela est valable également pour les articles exportés d’InDesign sous la forme d’articles InCopy (fichiers .icml).

Lorsque vous utilisez un article InCopy dans un document InDesign, le document peut contenir un nombre quelconque d’articles, et les blocs de texte s’affichent comme s’ils avaient été créés dans la mise en page InDesign. Contrairement à InDesign, InCopy ne peut pas ajouter de nouveaux blocs de texte à l’aide des scripts.

Pour plus de détails sur les relations entre les objets texte dans un document InCopy, voir la section « Objets texte » à la page 39.

Statut de mise à jour du chapitre

CS6 Inchangé

30

Page 31: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Saisie et importation de texte 31

Ajout d’un texte à un articlePour ajouter du texte à un article, utilisez la propriété contents. L’exemple de script suivant utilise cette technique pour ajouter du texte à la fin d’un article (pour consulter le script complet, voir AddText) :

--Adds text to the default story. tell application "Adobe InCopy CS6"

set myDocument to make document tell story 1 of myDocument

set contents to "This is the first paragraph of example text." --To add more text to the story, we'll use the last insertion point --in the story. ("return" is a return character in AppleScript.) set the contents of insertion point -1 to return & "This is the second

paragraph." end tell

end tell

Remplacement de texte

Le script suivant remplace un mot par un groupe de mots, en changeant le contenu de l’objet approprié (pour consulter le script complet, voir ReplaceWord) :

--Enters text in the default story and then replaces --a word in the story with a different phrase. tell application "Adobe InCopy CS6"

set myDocument to make document tell story 1 of myDocument

set contents to "This is some example text." --To add more text to the story, we'll use the last insertion point --in the story. ("return" is a return character in AppleScript.) set the contents of word 3 to "a little bit of"

end tell end tell

Le script suivant remplace du texte dans un paragraphe (pour consulter le script complet, voir ReplaceText) :

--Enters text in the default story and then replaces --the text in the second paragraph. tell application "Adobe InCopy CS6"

set myDocument to make document tell story 1 of myDocument

set contents to "Paragraph 1." & return & "Paragraph 2." & return & "Paragraph 3." & return --Replace the text in the second paragraph without replacing --the return character at the end of the paragraph. set myText to object reference of text from character 1 to character -2 of paragraph 2 set contents of myText to "This text replaces the text in paragraph 2."

end tell end tell

Dans le script ci-dessus, nous avons exclu le caractère du retour chariot dans le second paragraphe, car si nous le supprimons, le style de paragraphe appliqué s’en trouve modifié. Pour ce faire, nous avons spécifié comme paramètres deux caractères : le premier caractère du paragraphe et le dernier caractère précédant le caractère du retour chariot qui termine le paragraphe.

Page 32: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Importation de texte et définition des préférences d’importation de texte 32

Insertion de caractères spéciauxComme l’éditeur de scripts prend en charge Unicode, vous pouvez simplement entrer des caractères Unicode dans des chaînes de caractères exportées dans InCopy. Vous pouvez également utiliser un raccourci clavier InCopy pour entrer directement des caractères Unicode par ID de glyphe : <nnnn> (nnnn étant le code Unicode du caractère). Le script suivant illustre plusieurs méthodes de saisie des caractères spéciaux (pour consulter le script complet, voir SpecialCharacters) :

--Shows how to enter special characters in text. tell application "Adobe InCopy CS6"

set myDocument to make document set myStory to story 1 of myDocument --Entering special characters directly: set contents of myStory to "Registered trademark: ̈ " & return & "Copyright: ©" &

return & "Trademark: ª" & return --Entering special characters by their Unicode glyph ID value: set contents of insertion point -1 of myStory to "Not equal to: <2260>" & return set contents of insertion point -1 of myStory to "Square root: <221A>" & return set contents of insertion point -1 of myStory to "Square root: <00B6>" & return --Entering InCopy special characters by their enumerations: set contents of insertion point -1 of myStory to "Automatic page number marker: " set contents of insertion point -1 of myStory to auto page number set contents of insertion point -1 of myStory to return & "Section symbol: " set contents of insertion point -1 of myStory to section symbol set contents of insertion point -1 of myStory to return & "En dash: " set contents of insertion point -1 of myStory to En dash set contents of insertion point -1 of myStory to return

end tell

Le meilleur moyen pour rechercher l’ID Unicode d’un caractère est d’utiliser le panneau Glyphes dans InCopy (choisissez la commande Texte > Glyphes pour afficher le panneau) ; il vous suffit de placer le curseur sur un caractère dans le panneau pour qu’InCopy affiche sa valeur Unicode. Vous trouverez de plus amples informations sur Unicode sur le site http://www.unicode.org.

Importation de texte et définition des préférences d’importation de texte

Vous pouvez non seulement saisir des chaînes de caractères mais également importer des fichiers texte créés dans des programmes de traitement de texte et des éditeurs de texte. Le script suivant indique comment importer un fichier texte dans l’article par défaut d’un nouveau document (pour consulter le script complet, voir PlaceTextFile) :

tell application "Adobe InCopy CS6" set myDocument to make document tell insertion point -1 of story 1

place "yukino:test.txt" end tell

end tell

Pour définir les options d’importation du type de fichier texte à importer, utilisez l’objet de préférences d’importation correspondant. Le script suivant montre comment définir les préférences d’importation de texte (pour consulter le script complet, voir TextImportPreferences). Les commentaires du script expliquent les différentes valeurs possibles pour chaque propriété.

Page 33: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Importation de texte et définition des préférences d’importation de texte 33

tell application "Adobe InCopy CS6" tell text import preferences

--Options for character set: --ansi --chineseBig5 --gb18030 --gb2312 --ksc5601 --macintoshCE --macintoshCyrillic --macintoshGreek --macintoshTurkish --recommendShiftJIS83pv --shiftJIS90ms --shiftJIS90pv --UTF8 --UTF16 --windowsBaltic --windowsCE --windowsCyrillic --windowsEE --windowsGreek --windowsTurkish set character set to UTF16 set convert spaces into tabs to true set spaces into tabs count to 3 --The dictionary property can take any of the following --language names (as strings): --Bulgarian --Catalan --Croatian --Czech --Danish --Dutch --English: Canadian --English: UK --English: USA --English: USA Legal --English: USA Medical --Estonian --Finnish --French --French: Canadian --German: Reformed --German: Swiss --German: Traditional --Greek --Hungarian --Italian --Latvian --Lithuanian --Neutral --Norwegian: Bokmal --Norwegian: Nynorsk --Polish --Portuguese --Portuguese: Brazilian --Romanian --Russian --Slovak --Slovenian --Spanish: Castilian --Swedish

Page 34: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Importation de texte et définition des préférences d’importation de texte 34

--Turkish set dictionary to "English: USA" --platform options: --macintosh --pc set platform to macintosh set strip returns between lines to true set strip returns between paragraphs to true set use typographers quotes to true

end tell end tell

Le script suivant montre comment définir les préférences d’importation de texte référencé (pour consulter le script complet, voir TaggedTextImportPreferences) :

tell application "Adobe InCopy CS6" tell tagged text import preferences

set remove text formatting to false --style conflict property can be: --publication definition --tag file definition set style conflict to publication definition set use typographers quotes to true

end tell end tell

Le script suivant montre comment définir les préférences d’importation au format Word et RTF (pour consulter le script complet, voir WordRTFImportPreferences) :

tell application "Adobe InCopy CS6" tell word RTF import preferences

--convert page breaks property can be: --column break --none --page break set convert page breaks to none --convert tables to property can be: --unformatted tabbed text --unformatted table set convert tables to to Unformatted Table set import endnotes to true set import footnotes to true set import index to true set import TOC to true set import unused styles to false set preserve graphics to false set preserve local overrides to false set preserve track changes to false set remove formatting to false --resolve character style clash and --resolve paragraph style clash properties can be: --resolve clash auto rename --resolve clash use existing --resolve clash use new set resolve character style clash to resolve clash use existing set resolve paragraph style clash to resolve clash use existing set use typographers quotes to true

end tell end tell

Page 35: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Exportation de texte et définition des préférences d’exportation de texte 35

Le script suivant montre comment définir les préférences d’importation au format Excel (pour consulter le script complet, voir ExcelImportPreferences) :

tell application "Adobe InCopy CS6" tell excel import preferences

--alignment Style property can be: --center align --left align --right align --spreadsheet set alignment style to spreadsheet set decimal places to 4 set preserve graphics to false --Enter the range you want to import as "start cell:end cell". set range name to "A1:B16" set sheet index to 1 set sheet name to "pathpoints" set show hidden cells to false --table formatting property can be: --excel formatted table --excel unformatted tabbed text --excel unformatted table set table formatting to excel formatted table set use typographers quotes to true set view name to ""

end tell end tell

Exportation de texte et définition des préférences d’exportation de texte

Le script suivant indique comment exporter du texte à partir d’un document InCopy. Vous devez utiliser des objets texte ou article pour exporter un contenu dans des formats de fichier texte ; vous ne pouvez pas exporter tout le texte d’un document en une seule opération. (Pour consulter le script complet, voir ExportTextFile.)

tell application "Adobe InCopy CS6" set myDocument to make document set myStory to story 1 of myDocument --Fill the story with placeholder text. set myTextFrame to item 1 of text containers of myStory set contents of myTextFrame to placeholder text --Text export method parameters: --format as enumeration --to alias as string --showing options boolean --version comments string --force save boolean --Format parameter can be: --InCopy CS Document --InCopy Document --rtf --tagged text --text type --Export the story as text. You'll have to

Page 36: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Exportation de texte et définition des préférences d’exportation de texte 36

--fill in a valid file path on your system. tell myStory

export to "yukino:test.txt" format text type end tell

end tell

L’exemple suivant indique comment exporter une plage de texte spécifique. (Nous avons omis la fonction myGetBounds dans cette liste ; voir le script d’apprentissage ExportTextRange.)

tell application "Adobe InCopy CS6" set myDocument to make document set myStory to story 1 of myDocument --Fill the story with placeholder text. set myTextFrame to item 1 of text containers of myStory set contents of myTextFrame to placeholder text set myStartCharacter to index of character 1 of paragraph 1 of myStory set myEndCharacter to the index of last character of paragraph 1 of myStory set myText to object reference of text from character myStartCharacter to character myEndCharacter of myStory --Export the text range. You'll have to fill in a valid --file path on your system. tell myText to export to "yukino:test.txt" format text type

end tell

Pour définir les options d’exportation du type de fichier texte à exporter, utilisez l’objet de préférences d’exportation correspondant. Le script suivant permet de définir les préférences d’exportation d’un texte (pour consulter le script complet, voir TextExportPreferences) :

tell application "Adobe InCopy CS6" tell text export preferences

--Options for character set: --UTF8 --UTF16 --default platform set character set to UTF16 --platform options: --macintosh --pc set platform to macintosh

end tell end tell

Le script suivant permet de définir les préférences d’exportation d’un texte référencé (pour consulter le script complet, voir TaggedTextExportPreferences) :

tell application "Adobe InCopy CS6" tell tagged text export preferences

--Options for character set: --ansi --ascii --gb18030 --ksc5601 --shiftJIS --UTF8 --UTF16 set character set to UTF16 --tag form options: --abbreviated --verbose set tag form to verbose

end tell end tell

Page 37: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Exportation de texte et définition des préférences d’exportation de texte 37

Sachez que l’exportation de texte n’est pas limitée aux filtres d’exportation existants. Etant donné qu’AppleScript peut enregistrer des fichiers texte sur disque, vous pouvez créer un script qui analyse le texte d’un document et l’exporte dans l’ordre de votre choix, à l’aide d’un modèle de balisage de texte qui vous convient. Voici un exemple très simple qui montre comment exporter du texte InCopy au format HTML (pour consulter le script complet, voir ExportHTML) :

on mySnippet() tell application "Adobe InCopy CS6"

--Use the myStyleToTagMapping array to set up your --paragraph style to tag mapping. set myStyleToTagMapping to {} --For each style to tag mapping, add a new item to the array. copy {"body_text", "p"} to end of myStyleToTagMapping copy {"heading1", "h1"} to end of myStyleToTagMapping copy {"heading2", "h3"} to end of myStyleToTagMapping copy {"heading3", "h3"} to end of myStyleToTagMapping --End of style to tag mapping. if (count documents) is not equal to 0 then

set myDocument to document 1 if (count stories of myDocument) is not equal to 0 then

--Open a new text file. set myTextFile to choose file name with prompt "Save HTML As" --Iterate through the stories. repeat with myCounter from 1 to (count stories of myDocument)

set myStory to story myCounter of myDocument repeat with myParagraphCounter from 1 to (count paragraphs of myStory)

set myParagraph to object reference of paragraph myParagraphCounter of myStory if (count tables of myParagraph) is 0 then

--If the paragraph is a simple paragraph--no tables, --no local formatting--then simply export the text of the --pararaph with the appropriate tag. if (count text style ranges of myParagraph) is 1 then

set myTag to my myFindTag(name of applied paragraph style of myParagraph, myStyleToTagMapping) --If the tag comes back empty, map it to the --basic paragraph tag. if myTag = "" then

set myTag to "p" end if set myStartTag to "<" & myTag & ">" set myEndTag to "</" & myTag & ">" --If the paragraph is not the last paragraph --in the story,omit the return character. if the contents of character -1 of myParagraph is return then

set myText to object reference of text from character 1 to character -2 of myParagraph set myString to contents of myText

else set myString to contents of myParagraph

end if --Write the text of the paragraph to the text file. if myParagraphCounter = 1 then

set myAppendData to false else

set myAppendData to true end if

Page 38: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Exportation de texte et définition des préférences d’exportation de texte 38

my myWriteToFile(myStartTag & myString & myEndTag & return, myTextFile, myAppendData)

else --Handle text style range export by iterating through --the text style ranges in the paragraph.. repeat with myRangeCounter from 1 to (count text style ranges of myParagraph)

set myTextStyleRange to object reference of text style range myRangeCounter of myParagraph if character -1 of myTextStyleRange is return then

set myText to object reference of text from character 1 to character -2 of myTextStyleRange set myString to contents of myText

else set myString to contents of myText

end if if font style of myTextStyleRange is "Bold" then

set myString to "<b>" & myString & "</b>" else if font style of myTextStyleRange is "Italic" then

set myString to "<i>" & myString & "</i>" end if my myWriteToFile(myString, myTextFile, true)

end repeat my myWriteToFile(return, myTextFile, true)

end if else

--Handle table export (assumes that there is only one --table per paragraph,and that the table is in the --paragraph by itself). set myTable to table 1 of myParagraph my myWriteToFile("<table border = 1>", myTextFile, true) repeat with myRowCounter from 1 to (count rows of myTable)

my myWriteToFile("<tr>", myTextFile, true) repeat with myColumnCounter from 1 to (count columns of myTable)

if myRowCounter = 0 then set myString to "<th>" set myString to myString & text of cell myColumnCounter of row myRowCounter of myTable set myString to myString & "</th>"

else set myString to "<td>" set myString to myString & text of cell myColumnCounter of row myRowCounter of myTable set myString to myString & "</td>"

end if my myWriteToFile(myString, myTextFile, true)

end repeat my myWriteToFile("</tr>" & return, myTextFile, true)

end repeat my myWriteToFile("</table>" & return, myTextFile, true)

end if end repeat

end repeat end if

end if end tell

end mySnippet

Page 39: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Objets texte 39

on myFindTag(myStyleName, myStyleToTagMapping) local myTag, myDone, myStyleName set myTag to "" set myDone to false repeat with myStyleToTagMap in myStyleToTagMapping

if item 1 of myStyleToTagMap = myStyleName then set myTag to item 2 of myStyleToTagMap exit repeat

end if end repeat return myTag

end myFindTag on myWriteToFile(myString, myFileName, myAppendData)

set myTextFile to open for access myFileName with write permission if myAppendData is false then

set eof of myTextFile to 0 end if write myString to myTextFile starting at eof close access myTextFile

end myWriteToFile

Objets texteLe diagramme suivant illustre une vue du modèle d’objet texte InCopy. Il existe deux types d’objet texte principaux : les objets layout (blocs de texte) et les objets text-stream (articles, points d’insertion, caractères et mots, par exemple). Le diagramme utilise les termes en langage naturel pour les objets ; lorsque vous créez des scripts, vous utilisez les termes correspondants de votre langage de script :

Pour tout objet text-stream, le parent de l’objet est l’article contenant l’objet. Pour obtenir une référence au bloc de texte (ou aux blocs de texte) contenant un objet texte donné, utilisez la propriété parent text frames.

story

insertion points

characters

words

lines

paragraphs

text columns

text style ranges

texts

text frame

insertion points

characters

words

lines

paragraphs

text columns

text style ranges

texts

text containers

document

spread, page, layer

notes

notes

Page 40: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Objets texte 40

Pour un bloc de texte, le parent du bloc de texte est généralement la page ou la planche contenant le bloc de texte. Si le bloc de texte se trouve à l’intérieur d’un groupe ou a été collé à l’intérieur d’un autre élément de page, le parent du bloc de texte est l’élément de page qui le contient. Si le bloc de texte a été converti en bloc ancré, le parent du bloc de texte est le caractère contenant le bloc ancré.

Sélections

Généralement, les scripts InCopy agissent sur une sélection de texte. Le script suivant permet de déterminer le type de la sélection en cours. Contrairement à de nombreux autres exemples de scripts, ce script n’effectue aucune opération en particulier ; il présente simplement une routine de filtrage de la sélection que vous pouvez utiliser dans vos propres scripts. (Pour consulter le script complet, voir TextSelection.)

tell application "Adobe InCopy CS6" if (count documents) is not equal to 0 then

--If the selection contains more than one item, the selection --is not text selected with the Type tool. set mySelection to selection if (count mySelection) is not equal to 0 then

--Evaluate the selection based on its type. set myTextClasses to {insertion point, word, text style range, line, paragraph, text column, text, story} if class of item 1 of selection is in myTextClasses then

--The object is a text object; display the text object type. --A practical script would do something with the selection, --or pass the selection on to a function. display dialog ("Selection is a text object.") --If the selection is inside a note, the parent of the selection --will be a note object. if class of parent of item 1 of selection is note then

display dialog ("Selection is inside a note.") end if

end if else

display dialog ("Please select some text and try again.") end if

else display dialog ("No documents are open.")

end if end tell

Déplacement et copie de texte

Pour déplacer un objet texte dans le texte, utilisez la méthode move. Pour copier le texte, utilisez la méthode duplicate (qui possède exactement les mêmes paramètres que la méthode move). L’extrait de script suivant illustre son mode d’utilisation (pour consulter le script complet, voir MoveText) :

tell application "Adobe InCopy CS6" set myDocument to make document --Create a series of paragraphs in the default story. set myStory to story 1 of myDocument set contents of myStory to "WordA" & return & "WordB" & return & "WordC" & return & "WordD" tell myStory

--Move WordC before WordA. move paragraph 3 to before paragraph 1

Page 41: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Objets texte 41

--Move WordB after WordD (into the same paragraph). move paragraph 3 to after word 1 of paragraph -1 --Note that moving text removes it from its original location.

end tell end tell

Vous pouvez également utiliser la méthode move pour transférer un texte mis en forme entre deux documents. Le recours à la méthode move ou duplicate est préférable à l’utilisation de la méthode copier-coller pour laquelle vous devez rendre le document visible et sélectionner le texte à copier. Les méthodes move et duplicate sont plus rapides et plus performantes. Le script suivant permet de déplacer du texte d’un document à l’autre à l’aide des méthodes move et duplicate (pour consulter le script complet, voir MoveTextBetweenDocuments) :

tell application "Adobe InCopy CS6" set mySourceDocument to make document --Add text to the default story. set mySourceStory to story 1 of mySourceDocument set contents of mySourceStory to "This is the source text." & return & "This text is not the source text." set point size of paragraph 1 of mySourceStory to 24 --Create a new document to move the text to. set myTargetDocument to make document set myTargetStory to story 1 of myTargetDocument set contents of myTargetStory to "This is the target text. Insert the source text after this paragraph." & return duplicate paragraph 1 of mySourceStory to after insertion point -1 of myTargetStory

end tell

Pour copier du texte sans mise en forme entre deux objets texte, vous pouvez également utiliser la propriété contents d’un objet texte et définir la propriété contents d’un autre objet texte à l’aide de cette chaîne. Le script suivant illustre la façon de procéder (pour consulter le script complet, voir CopyUnformattedText) :

tell application "Adobe InCopy CS6" set myDocument to make document set myStory to story 1 of myDocument set myString to "This is a formatted string." & return set myString to myString & "Text pasted after this text will retain its formatting." & return set myString to myString & "Text moved to the following line will take on the formatting of the insertion point." & return set myString to myString & "Italic: " & return set contents of myStory to myString --Apply formatting to the first paragraph. set font style of paragraph 1 of myStory to "Bold" --Apply formatting to the last paragraph. set font style of paragraph -1 of myStory to "Italic" --Copy from one frame to another using a simple copy. select word 1 of paragraph 1 of myStory copy select insertion point -1 of paragraph 2 of myStory paste --Copy the unformatted string from the first word to the end of the story --by getting and setting the contents of text objects. Note that this --doesn't really copy the text it replicates the text string from one text --location to another. set contents of insertion point -1 of myStory to contents of word 1 of paragraph 1 of myStory

end tell

Page 42: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Objets texte 42

Objets texte et itération

Lorsque votre script déplace, supprime ou ajoute du texte pendant une itération dans une série d’objets texte, vous pouvez facilement vous retrouver avec des références de texte incorrectes. Le script suivant illustre ce problème (pour consulter le script complet, voir TextIterationWrong) :

--Shows how *not* to iterate through text. tell application "Adobe InCopy CS6"

set myDocument to make document set myString to "Paragraph 1.

Delete this paragraph. Paragraph 2. Paragraph 3. Paragraph 4. Paragraph 5. Delete this paragraph. Paragraph 6. "

set myStory to story 1 of myDocument set contents of myStory to myString --The following for loop will fail to format all of the paragraphs --and then generate an error. repeat with myParagraphCounter from 1 to (count paragraphs of myStory)

if contents of word 1 of paragraph myParagraphCounter of myStory is "Delete" then

tell paragraph myParagraphCounter of myStory to delete else

set point size of paragraph myParagraphCounter of myStory to 24 end if

end repeat end tell

Dans l’exemple précédent, certains paragraphes ne sont pas mis en forme. Pourquoi ? La boucle du script balaye les paragraphes à partir du premier paragraphe de l’article jusqu’au dernier. Pendant cette opération, les paragraphes commençant par « Delete » sont supprimés. Lorsque le script supprime le deuxième paragraphe, le troisième paragraphe remonte dans la liste et prend sa place. Lorsque le compteur affiche 3, le script traite le paragraphe qui correspondait au quatrième paragraphe dans l’article ; le troisième paragraphe d’origine devient le deuxième paragraphe et est ignoré.

Pour éviter ce problème, effectuez une itération inverse dans les objets texte, comme l’illustre le script suivant (dans le script d’apprentissage TextIterationRight) :

--Shows the correct way to iterate through text. tell application "Adobe InCopy CS6"

set myDocument to make document set myString to "Paragraph 1.

Delete this paragraph. Paragraph 2. Paragraph 3. Paragraph 4. Paragraph 5. Delete this paragraph. Paragraph 6. "

set myStory to story 1 of myDocument set contents of myStory to myString --The following for loop will format all of the paragraphs by iterating --backwards through the paragraphs in the story. repeat with myParagraphCounter from (count paragraphs of myStory) to 1 by -1

Page 43: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 43

if contents of word 1 of paragraph myParagraphCounter of myStory is "Delete" then

tell paragraph myParagraphCounter of myStory to delete else

set point size of paragraph myParagraphCounter of myStory to 24 end if

end repeat end tell

Mise en forme du texteDans les sections précédentes de ce chapitre, nous avons ajouté du texte à un document et utilisé des articles et des objets texte. Dans cette section, nous allons appliquer une mise en forme au texte. Toutes les fonctions de composition InCopy sont prises en charge par les scripts.

Définition des valeurs par défaut du texteVous pouvez définir des valeurs de texte par défaut à la fois pour l’application et chaque document. Les valeurs de texte par défaut pour l’application déterminent celles de tous les nouveaux documents. Les valeurs de texte par défaut d’un document définissent la mise en forme de tous les nouveaux objets texte de ce document. (Pour consulter le script complet, voir TextDefaults.)

tell application "Adobe InCopy CS6" set horizontal measurement units of view preferences to points set vertical measurement units of view preferences to points --To set the text formatting defaults for a document, replace "app" --in the following lines with a reference to a document. tell text defaults

set alignToBaseline to true --Because the font might not be available, it's usually best --to apply the font within a try...catch structure. Fill in the --name of a font on your system. try

set appliedFont to font "Minion Pro" end try --Because the font style might not be available, it's usually best --to apply the font style within a try...catch structure. try

set font style to "Regular" end try --Because the language might not be available, it's usually best --to apply the language within a try...catch structure. try

set applied language to "English: USA" end try set autoLeading to 100 set balsanceRaggedLines to false set baselineShift to 0 set capitalization to normal set composer to "Adobe Paragraph Composer" set desiredGlyphScaling to 100 set desiredLetterSpacing to 0 set desiredWordSpacing to 100 set drop cap characters to 0 if drop cap characters is not equal to 0 then

dropCapLines to 3 --Assumes that the application has a default character style named

"myDropCap"

Page 44: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 44

set drop cap style to character style "myDropCap" end if set fill color to "Black" set fill tint to 100 set first line indent to 14 set grid align first line only to false set horizontal scale to 100 set hyphenate after first to 3 set hyphenate before last to 4 set hyphenate capitalized words to false set hyphenate ladder limit to 1 set hyphenate words longer than to 5 set hyphenation to true set hyphenation zone to 36 set hyphen weight to 9 set justification to left align set keep all lines together to false set keep lines together to true set keep first lines to 2 set keep last lines to 2 set keep with next to 0 set kerning method to "Optical" set leading to 14 set left indent to 0 set ligatures to true set maximum glyph scaling to 100 set maximum letter spacing to 0 set maximum word spacing to 160 set minimum glyph scaling to 100 set minimum letter spacing to 0 set minimum word spacing to 80 set no break to false set OTF contextual alternate to true set OTF discretionary ligature to false set OTF figure style to proportional oldstyle set OTF fraction to true set OTF historical to false set OTF ordinal to false set OTF slashed zero to false set OTF swash to false set OTF titling to false set overprint fill to false set overprint stroke to false set pointSize to 11 set position to normal set right indent to 0 set rule above to false if rule above = true then

set rule above color to color "Black" set rule above gap color to swatch "None" set rule above gap overprint to false set rule above gap tint to 100 set rule above left indent to 0 set rule above line weight to 0.25 set rule above offset to 14 set rule above overprint to false set rule above right indent to 0 set rule above tint to 100 set rule above type to stroke style "Solid" set rule above width to column width

Page 45: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 45

end if set rule below to false if rule below = true then

set rule below color to color "Black" set rule below gap color to swatch "None" set rule below gap overprint to false set rule below gap tint to 100 set rule below left indent to 0 set rule below line weight to 0.25 set rule below offset to 14 set rule below overprint to false set rule below right indent to 0 set rule below tint to 100 set rule below type to stroke style "Solid" set rule below width to column width

end if set single word justification to left align set skew to 0 set space after to 0 set space before to 0 set start paragraph to anywhere set strike thru to false if strike thru = true then

set strike through color to color "Black" set strike through gap color to swatch "None" set strike through gap overprint to false set strike through gap tint to 100 set strike through offset to 3 set strike through overprint to false set strike through tint to 100 set strike through type to stroke style "Solid" set strike through weight to 0.25

end if set stroke color to "None" set stroke tint to 100 set stroke weight to 0 set tracking to 0 set underline to false if underline = true then

set underline color to color "Black" set underline gap color to swatch "None" set underline gap overprint to false set underline gap tint to 100 set underline offset to 3 set underline overprint to false set underline tint to 100 set underline type to stroke style "Solid" set underline weight to 0.25

end if set vertical scale to 100

end tell end tell

Page 46: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 46

Polices

La collection des polices d’un objet d’application InCopy contient toutes les polices accessibles à InCopy. En revanche, la collection des polices d’un document ne contient que les polices utilisées dans le document. La collection des polices d’un document contient également les polices manquantes (polices utilisées dans le document qui ne sont pas accessibles à InCopy). Le script suivant illustre la différence entre les polices de l’application et celles du document (pour consulter le script complet, voir FontCollections) :

tell application "Adobe InCopy CS6" set myApplicationFonts to the name of every font set myDocument to make document tell myDocument

set myStory to story 1 of myDocument set myDocumentFonts to name of every font if (count of fonts) > 0 then

set myDocumentFonts to name of every font end if

end tell set myString to "Document Fonts:" & return repeat with myCounter from 1 to (count myDocumentFonts)

set myString to myString & (item myCounter) of myDocumentFonts & return end repeat set myString to myString & return & "Application Fonts:" & return repeat with myCounter from 1 to (count myApplicationFonts)

set myString to myString & (item myCounter) of myApplicationFonts & return

end repeat set contents of myStory to myStringend tell

REMARQUE : généralement, le nom des polices se présente sous la forme familyName<tab>fontStyle, où familyName désigne le nom de la famille de polices, <tab> un caractère de tabulation et fontStyle le nom du style de la police. Par exemple : "Adobe Caslon Pro<tab>Semibold Italic"

Application d’une police

Pour appliquer un changement de police local à une plage de texte, utilisez la propriété appliedFont, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ApplyFont) :

--Given a font name "myFontName" and a text object "myText".. set applied font of myText to myFontName

Vous pouvez également appliquer une police en indiquant le nom de la famille de polices et du style de police, comme l’illustre l’extrait de script suivant :

set applied font of myText to "Adobe Caslon Pro" set font style of myText to "Semibold Italic"

Page 47: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 47

Modification des propriétés d’un texte

Les objets texte dans InCopy possèdent des dizaines de propriétés correspondant à leurs attributs de mise en forme. Même un point d’insertion unique est associé à des propriétés qui interviennent sur la mise en forme du texte, y compris les propriétés du paragraphe contenant le point d’insertion. Le script d’apprentissage SetTextProperties permet de définir chaque propriété d’un objet texte. Extrait du script :

--Shows how to set all read/write properties of a text object. tell application "Adobe InCopy CS6"

set myDocument to make document set myStory to story 1 of myDocument set contents of myStory to "x" tell character 1 of myStory

set align to baseline to false set applied character style to character style "[None]" of myDocument set applied font to "Minion ProRegular" set applied language to "English: USA" set applied numbering list to "[Default]" set applied paragraph style to paragraph style "[No Paragraph Style]" of myDocument set auto leading to 120 set balance ragged lines to no balancing set baseline shift to 0 set bullets alignment to left align set bullets and numbering list type to no list set bullets character style to character style "[None]" of myDocument set bullets text after to "^t" set capitalization to normal set composer to "Adobe Paragraph Composer" set desired glyph scaling to 100 set desired letter spacing to 0 set desired word spacing to 100 set drop cap characters to 0 set drop cap lines to 0 set drop cap style to character style "[None]" of myDocument set dropcap detail to 0 --More text properties in the tutorial script.

end tell end tell

Modification de la couleur du texte

Vous pouvez appliquer des couleurs de fond et de contour aux caractères d’un texte, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage TextColors) :

my main() on main()

my mySetup() my mySnippet()

end main on mySetup()

tell application "Adobe InCopy CS6" --Create an example document. set myDocument to make document --Create a color. try

set myColorA to color "DGC1_664a" of myDocument on error

Page 48: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 48

set myColorA to make color with properties {name:"DGC1_664a", model:process, color value:{90, 100, 70, 0}}

end try --Create another color. try

set myColorB to color "DGC1_664b" of myDocument on error

set myColorB to make color with properties {name:"DGC1_664b", model:process, color value:{70, 0, 30, 50}}

end try set myStory to story 1 of myDocument --Enter text in the text frame. set contents of myStory to "Text" & return & "Color"

end tell end mySetup on mySnippet()

tell application "Adobe InCopy CS6" set myDocument to document 1 set myStory to story 1 of myDocument set myColorA to color "DGC1_664a" of myDocument set myColorB to color "DGC1_664b" of myDocument tell paragraph 1 of myStory

set point size to 72 set justification to center align --Apply a color to the fill of the text. set fill color to myColorA set stroke color to myColorB

end tell tell paragraph 2 of myStory

set stroke weight to 3 set point size to 144 set justification to center align set fill color to myColorB set stroke color to myColorA set stroke weight to 3

end tell end tell

end mySnippet

Création et application des styles

Même si vous pouvez utiliser des scripts pour appliquer une mise en forme locale, comme dans certains exemples décrits précédemment dans ce chapitre, il est probablement préférable d’utiliser des styles de caractère et de paragraphe pour mettre en forme le texte. Les styles permettent de créer un lien entre le texte mis en forme et le style, ce qui facilite la redéfinition du style, la collecte du texte mis en forme avec un style donné ou la recherche et/ou la modification d’un texte. Les styles de paragraphe et de caractère sont essentiels à la productivité liée à la mise en forme d’un texte et doivent être un élément central pour n’importe quel script appliquant une mise en forme au texte.

L’extrait de script suivant montre comment créer et appliquer des styles de paragraphe et de caractère (pour consulter le script complet, voir CreateStyles) :

tell application "Adobe InCopy CS6" --Create an example document. set myDocument to make document tell myDocument

--Create a color for use by one of the paragraph styles we'll create. try

Page 49: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 49

set myColor to color "Red" on error

--The color did not exist, so create it. set myColor to make color with properties {name:"Red", model:process, color value:{0, 100, 100, 0}}

end try set myStory to story 1 set contents of myStory to "Normal text. Text with a character style applied to it. More normal text." --Create a character style named "myCharacterStyle" if --no style by that name already exists. try

set myCharacterStyle to character style "myCharacterStyle" on error

--The style did not exist, so create it. set myCharacterStyle to make character style with properties {name:"myCharacterStyle"}

end try --At this point, the variable myCharacterStyle contains --a reference to a character --style object, which you can now use to specify formatting. set fill color of myCharacterStyle to myColor --Create a paragraph style named "myParagraphStyle" if --no style by that name already exists. try

set myParagraphStyle to paragraph style "myParagraphStyle" on error

--The paragraph style did not exist, so create it. set myParagraphStyle to make paragraph style with properties {name:"myParagraphStyle"}

end try --At this point, the variable myParagraphStyle contains --a reference to a paragraph style object, which you can now use to --specify formatting. (Note that the story object does not have the apply --paragraph style method.) tell text 1 of story 1

apply paragraph style using myParagraphStyle tell text from character 13 to character 54

apply character style using myCharacterStyle end tell

end tell end tell

end tell

Pourquoi utiliser la méthode apply paragraph style au lieu de définir la propriété applied paragraph style de l’objet texte ? La méthode offre la possibilité de redéfinir la mise en forme actuelle, tandis que la définition de la propriété sur un style permet de conserver la mise en forme locale.

Pourquoi vérifier l’existence d’un style lorsque vous créez un document ? Il peut s’agir d’un style par défaut dans l’application. Si tel est le cas, la création d’un style portant le même nom produit une erreur.

Les styles imbriqués appliquent une mise en forme de style de caractère à un paragraphe selon un modèle. L’extrait de script suivant permet de créer et d’appliquer un style de paragraphe contenant des styles imbriqués (pour consulter le script complet, voir NestedStyles) :

Page 50: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Mise en forme du texte 50

tell application "Adobe InCopy CS6" --Create an example document. set myDocument to make document tell myDocument

--Create a color for use by one of the paragraph styles we'll create. try

set myColor to color "Red" on error

--The color did not exist, so create it. set myColor to make color with properties {name:"Red", model:process, color value:{0, 100, 100, 0}}

end try --Create a character style named "myCharacterStyle" if --no style by that name already exists. try

set myCharacterStyle to character style "myCharacterStyle" on error

--The style did not exist, so create it. set myCharacterStyle to make character style with properties {name:"myCharacterStyle"}

end try --At this point, the variable myCharacterStyle contains a --reference to a character style object, which you can now use to specify --formatting. set fill color of myCharacterStyle to myColor --Create a paragraph style named "myParagraphStyle" if --no style by that name already exists. try

set myParagraphStyle to paragraph style "myParagraphStyle" on error

--The paragraph style did not exist, so create it. set myParagraphStyle to make paragraph style with properties {name:"myParagraphStyle"}

end try --At this point, the variable myParagraphStyle contains a reference --to a paragraph style object. Next, add a nested style to the paragraph --style. tell myParagraphStyle

set myNestedStyle to make nested style with properties {applied character style:myCharacterStyle, delimiter:".", inclusive:true, repetition:1}

end tell --Apply the paragraph style to the story so that we can see the --effect of the nested style we created. --(Note that the story object does not have the applyStyle method.) tell story 1

set myTextFrame to item 1 of text containers set contents of myTextFrame to placeholder text tell text 1

apply paragraph style using myParagraphStyle end tell

end tell end tell

end tell

Page 51: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 51

Suppression d’un style

Lorsque vous supprimez un style à l’aide de l’interface utilisateur, vous pouvez choisir la manière de mettre en forme un texte référencé par ce style. Les scripts InCopy fonctionnent de la même manière, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage RemoveStyle) :

tell myDocument set myParagraphStyleA to paragraph style "myParagraphStyleA" set myParagraphStyleB to paragraph style "myParagraphStyleB" --Remove the paragraph style myParagraphStyleA and replace with --myParagraphStyleB. delete myParagraphStyleA replacing with myParagraphStyleB

end tell

Importation de styles de paragraphe et de caractère

Vous pouvez importer des styles de paragraphe et de caractère à partir d’autres documents InCopy. L’extrait de script suivant montre comment procéder (pour consulter le script complet, voir ImportTextStyles) :

tell myDocument --Import the styles from the saved document. --importStyles parameters: --Format options for text styles are: -- paragraph styles format -- character styles format -- text styles format --From as file or string --Global Strategy options are: -- do not load the style -- load all with overwrite -- load all with rename import styles format text styles format from myFilePath global strategy load all with overwrite

end tell

Recherche et modification de texteLa fonction de recherche/modification est l’un des outils InCopy les plus performants pour la manipulation du texte. Elle est entièrement prise en charge par les scripts qui peuvent y recourir pour exécuter des opérations qui dépassent le cadre d’utilisation de l’interface utilisateur InCopy. Il existe dans InCopy trois méthodes de recherche de texte :

Vous pouvez rechercher un texte et des attributs de mise en forme et les redéfinir. Ce type d’opération de recherche et de modification utilise les objets find text preferences et change text preferences pour définir les paramètres des méthodes find text et change text.

Vous pouvez effectuer une recherche à partir d’expressions régulières ou utiliser la commande « grep ». Ce type d’opération de recherche et de modification utilise les objets find grep preferences et change grep preferences pour définir les paramètres des méthodes find grep et change grep.

Vous pouvez rechercher des glyphes spécifiques (et leur mise en forme) et les remplacer par d’autres glyphes et attributs de mise en forme. Ce type d’opération de recherche et de modification utilise les objets find glyph preferences et change glyph preferences pour définir les paramètres des méthodes find glyph et change glyph.

Page 52: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 52

Toutes les méthodes de recherche et de modification adoptent un seul paramètre facultatif, reverse order, qui définit l’ordre dans lequel les résultats de la recherche sont renvoyés. Si vous utilisez les résultats d’une opération de recherche ou de modification pour ajouter du texte à un article ou en retirer, vous pouvez rencontrer un problème de références de texte incorrectes, comme décrit à la section « Objets texte et itération » à la page 42. Dans ce cas, vous pouvez soit définir les boucles en mode inverse dans la collection d’objets texte renvoyés, soit faire en sorte que l’opération de recherche renvoie les résultats dans l’ordre inverse, puis effectuer normalement une itération dans la collection.

Préférences de recherche/modification

Avant d’effectuer une recherche, il est recommandé d’effacer les préférences de recherche et de modification, pour s’assurer que les paramètres de recherche précédents n’ont aucun effet sur votre recherche. Vous devez également définir quelques préférences de recherche et de modification pour indiquer le texte, la mise en forme, l’expression régulière ou le glyphe à rechercher et/ou modifier. Une opération de recherche/modification courante comprend les étapes suivantes :

1. Effacer les préférences de recherche/modification. Selon le type d’opération de recherche/modification, le processus peut prendre l’une des trois formes suivantes :

--find/change text preferences tell application "Adobe InCopy CS6" set find text preferences to nothing set change text preferences to nothing end tell --find/change grep preferences tell application "Adobe InCopy CS6" set find grep preferences to nothing set change grep preferences to nothing end tell --find/change glyph preferences tell application "Adobe InCopy CS6" set find glyph preferences to nothing set change glpyh preferences to nothing end tell

2. Définir les paramètres de recherche/modification.

3. Exécuter l’opération de recherche/modification.

4. Effacer de nouveau les préférences de recherche/modification.

Recherche de texte

L’extrait de script suivant permet de rechercher une chaîne de caractères spécifiée. Même si l’extrait de script fait porter la recherche sur le document entier, vous pouvez aussi effectuer une recherche dans les articles, les blocs de texte, les paragraphes, les colonnes de texte ou tout autre objet texte. La méthode find text et ses paramètres sont identiques pour tous les objets texte. (Pour consulter le script complet, voir FindText.)

Page 53: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 53

--Clear the find/change preferences. set find text preferences to nothing set change text preferences to nothing --Search the document for the string "Text". set find what of find text preferences to "text" --Set the find options. set case sensitive of find change text options to false set include footnotes of find change text options to false set include hidden layers of find change text options to false set include locked layers for find of find change text options to false set include locked stories for find of find change text options to false set include master pages of find change text options to false set whole word of find change text options to false tell document 1

set myFoundItems to find text display dialog ("Found " & (count myFoundItems) & " instances of the search

string.")

L’extrait de script suivant permet de rechercher une chaîne de caractères spécifiée et de la remplacer par une chaîne différente (pour consulter le script complet, voir ChangeText) :

--Clear the find/change preferences. set find text preferences to nothing set change text preferences to nothing --Set the find options. set case sensitive of find change text options to false set include footnotes of find change text options to false set include hidden layers of find change text options to false set include locked layers for find of find change text options to false set include locked stories for find of find change text options to false set include master pages of find change text options to false set whole word of find change text options to false --Search the document for the string "copy" and change it to "text". --Search the document for the string "copy". set find what of find text preferences to "copy" set change to of change text preferences to "text" tell document 1

set myFoundItems to change text end tell display dialog ("Changed " & (count myFoundItems) & " instances of the search string.") --Clear the find/change preferences after the search. set find text preferences to nothing set change text preferences to nothing

Recherche et remplacement d’une mise en forme

Pour rechercher et remplacer la mise en forme du texte, définissez d’autres propriétés des objets findTextPreferences et changeTextPreferences, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage FindChangeFormatting) :

--Clear the find/change preferences. set find text preferences to nothing set change text preferences to nothing --Search the document for the string "Text". set find what of find text preferences to "text" --Set the find options. set case sensitive of find change text options to false set include footnotes of find change text options to false set include hidden layers of find change text options to false

Page 54: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 54

set include locked layers for find of find change text options to false set include locked stories for find of find change text options to false set include master pages of find change text options to false set whole word of find change text options to false --Search the document for the 24 point text and change it to 10 point text. set point size of find text preferences to 24 set point size of change text preferences to 10 tell document 1

change text end tell --Clear the find/change preferences after the search. set find text preferences to nothing set change text preferences to nothing

Vous pouvez également rechercher une chaîne de caractères et appliquer une mise en forme, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage FindChangeStringFormatting) :

--Clear the find/change preferences. set find text preferences to nothing set change text preferences to nothing --Set the find options. set case sensitive of find change text options to false set include footnotes of find change text options to false set include hidden layers of find change text options to false set include locked layers for find of find change text options to false set include locked stories for find of find change text options to false set include master pages of find change text options to false set whole word of find change text options to false set find what of find text preferences to "WIDGET^9^9^9^9" --The following line will only work if your default font has a font style named "Bold" --if not, change the text to a font style used by your default font. set font style of change text preferences to "Bold" --Search the document. In this example, we'll use the --InCopy search metacharacter "^9" to find any digit. tell document 1

set myFoundItems to change text end tell display dialog ("Changed " & (count myFoundItems) & " instances of the search string.") --Clear the find/change preferences after the search. set find text preferences to nothing set change text preferences to nothing

Utilisation de l’outil Grep

InCopy prend en charge la recherche/modification des expressions régulières à l’aide des méthodes findGrep et changeGrep. Les opérations de recherche/modification des expressions régulières permettent également de rechercher du texte dans un format particulier ou de remplacer la mise en forme du texte par des attributs de mise en forme spécifiés dans les propriétés de l’objet changeGrepPreferences. L’extrait de script suivant montre comment utiliser ces méthodes et les objets de préférences associés (pour consulter le script complet, voir FindGrep) :

--Clear the find/change preferences. set find grep preferences to nothing set change grep preferences to nothing --Set the find options. set include footnotes of find change grep options to false set include hidden layers of find change grep options to false set include locked layers for find of find change grep options to false

Page 55: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 55

set include locked stories for find of find change grep options to false set include master pages of find change grep options to false --Regular expression for finding an email address. set find what of find grep preferences to "(?i)[A-Z0-9]*?@[A-Z0-9]*?[.]..." --Apply the change to 24-point text only. set point size of find grep preferences to 24 set underline of change grep preferences to true tell document 1

change grep end tell --Clear the find/change preferences after the search. set find grep preferences to nothing set change grep preferences to nothing

REMARQUE : il manque à l’objet findChangeGrepOptions deux propriétés de l’objet find change text options  : whole word et case sensitive. En fait, vous pouvez définir ces options en utilisant l’expression régulière elle-même. Utilisez (?i) pour activer le respect de la casse et (?-i) pour le désactiver. Utilisez \> pour faire coïncider le début d’un mot et \< la fin d’un mot, ou utilisez \b pour faire coïncider les limites d’un mot.

Une utilisation pratique de l’outil de recherche/modification grep consiste à convertir le balisage d’un texte (par exemple, certaines formes de balisage du texte brut avec des instructions de mise en forme) en texte InCopy mis en forme. Les balises de paragraphe PageMaker (à différencier des fichiers de format texte balisés PageMaker) illustrent un schéma de balisage de texte simplifié. Dans un fichier texte balisé selon ce schéma, le nom des styles de paragraphe s’affiche en début de paragraphe, comme indiqué dans ces exemples :

<heading1>This is a heading.

<body_text>This is body text.

Nous pouvons créer un script qui utilise l’outil de recherche grep dans le cadre des opérations de recherche/modification de texte pour appliquer la mise en forme au texte et supprimer les balises de marquage, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ReadPMTags) :

on myReadPMTags(myStory) tell application "Adobe InCopy CS6"

set myDocument to parent of myStory --Reset the find grep preferences to ensure that --previous settings do not affect the search. set find grep preferences to nothing set change grep preferences to nothing --Set the find options. set include footnotes of find change grep options to false set include hidden layers of find change grep options to false set include locked layers for find of find change grep options to false set include locked stories for find of find change grep options to false set include master pages of find change grep options to false --Find the tags. set find what of find grep preferences to "(?i)^<\\s*\\w+\\s*>" tell myStory

set myFoundItems to find grep end tell if (count myFoundItems) is not equal to 0 then

set myFoundTags to {} repeat with myCounter from 1 to (count myFoundItems)

set myFoundTag to contents of item myCounter of myFoundItems if myFoundTags does not contain myFoundTag then

copy myFoundTag to end of myFoundTags

Page 56: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Recherche et modification de texte 56

end if end repeat --At this point, we have a list of tags to search for. repeat with myCounter from 1 to (count myFoundTags)

set myString to item myCounter of myFoundTags --Find the tag using find what. set find what of find text preferences to myString --Extract the style name from the tag. set myStyleName to text 2 through ((count characters of myString) -1) of myString tell myDocument

--Create the style if it does not already exist. try

set myStyle to paragraph style myStyleName on error

set myStyle to make paragraph style with properties {name:myStyleName}

end try end tell --Apply the style to each instance of the tag. set applied paragraph style of change text preferences to myStyle tell myStory

change text end tell --Reset the change text preferences. set change text preferences to nothing --Set the change to property to an empty string. set change to of change text preferences to "" --Search to remove the tags. tell myStory

change text end tell --Reset the find/change preferences again. set change text preferences to nothing

end repeat end if --Reset the findGrepPreferences. set find grep preferences to nothing

end tell end myReadPMTags

Recherche de glyphes

Vous pouvez rechercher et modifier des caractères individuels dans une police particulière avec les méthodes find glyph et change glyph, ainsi que les objets find glyph preferences et change glyph preferences associés. L’extrait de script suivant permet de rechercher et remplacer un glyphe dans un exemple de document (pour consulter le script complet, voir FindChangeGlyphs) :

--Clear glyph search preferences. set find glyph preferences to nothing set change glyph preferences to nothing set myDocument to document 1 --You must provide a font that is used in the document for the --applied font property of the find glyph preferences object. set applied font of find glyph preferences to applied font of character 1 of story 1 of myDocument --Provide the glyph ID, not the glyph Unicode value. set glyph ID of find glyph preferences to 500

Page 57: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Tableaux 57

--The applied font of the change glyph preferences object can be --any font available to the application. set applied font of change glyph preferences to "Times New RomanRegular" set glyph ID of change glyph preferences to 374 tell myDocument

change glyph end tell --Clear glyph search preferences. set find glyph preferences to nothing set change glyph preferences to nothing

TableauxIl est possible de créer des tableaux à partir d’un texte existant à l’aide de la méthode convert text to table ou de créer un tableau vide dans un article à n’importe quel point d’insertion. L’extrait de script suivant illustre trois méthodes différentes pour créer un tableau (pour consulter le script complet, voir MakeTable) :

set myStory to story 1 of myDocument tell myStory

set myStartCharacter to index of character 1 of paragraph 7 set myEndCharacter to index of character -2 of paragraph 7 set myText to object reference of text from character myStartCharacter to character myEndCharacter --The convertToTable method takes three parameters: --[column separator as string] --[row separator as string] --[number of columns as integer] (only used if the column separator --and row separator values are the same) --In the last paragraph in the story, columns are separated by commas --and rows are separated by semicolons, so we provide those characters --to the method as parameters. tell myText

set myTable to convert to table column separator "," row separator ";" end tell set myStartCharacter to index of character 1 of paragraph 2 set myEndCharacter to index of character -2 of paragraph 5 set myText to object reference of text from character myStartCharacter to character myEndCharacter --In the second through the fifth paragraphs, colums are separated by --tabs and rows are separated by returns. These are the default delimiter --parameters, so we don't need to provide them to the method. tell myText

set myTable to convert to table column separator tag row separator return end tell --You can also explicitly add a table--you don't have to convert text --to a table. tell insertion point -1

set myTable to make table set column count of myTable to 3 set body row count of myTable to 3

end tell end tell

Page 58: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Tableaux 58

L’extrait de script suivant permet de fusionner les cellules d’un tableau (pour consulter le script complet, voir MergeTableCells) :

set myDocument to document 1 tell story 1 of myDocument

tell table 1 --Merge all of the cells in the first column. merge cell 1 of column 1 with cell -1 of column 1 --Convert column 2 into 2 cells (rather than 4). merge cell 3 of column 2 with cell -1 of column 2 merge cell 1 of column 2 with cell 2 of column 2 --Merge the last two cells in row 1. merge cell -2 of row 1 with cell -1 of row 1 --Merge the last two cells in row 3. merge cell -2 of row 3 with cell -1 of row 3

end tell end tell

L’extrait de script suivant permet de scinder les cellules d’un tableau (pour consulter le script complet, voir SplitTableCells) :

tell table 1 of story 1 of document 1 split cell 1 using horizontal split column 1 using vertical split cell 1 using vertical split row -1 using horizontal split cell -1 using vertical --Fill the cells with row:cell labels. repeat with myRowCounter from 1 to (count rows)

set myRow to row myRowCounter repeat with myCellCounter from 1 to (count cells of myRow)

set myString to "Row: " & myRowCounter & " Cell: " & myCellCounter set contents of text 1 of cell myCellCounter of row myRowCounter to myString

end repeat end repeat

end tell

L’extrait de script suivant permet de créer des lignes d’en-tête et de notes de bas de page dans un tableau (pour consulter le script complet, voir HeaderAndFooterRows) :

tell table 1 of story 1 of document 1 --Convert the first row to a header row. set row type of row 1 to header row --Convert the last row to a footer row. set row type of row -1 to footer row

end tell

L’extrait de script suivant permet d’appliquer des attributs de mise en forme à un tableau (pour consulter le script complet, voir TableFormatting) :

set myTable to table 1 of story 1 of document 1 tell myTable

--Convert the first row to a header row. set row type of row 1 to header row --Use a reference to a swatch, rather than to a color. set fill color of row 1 to swatch "DGC1_446b" of myDocument set fill tint of row 1 to 40 set fill color of row 2 to swatch "DGC1_446a" of myDocument set fill tint of row 2 to 40

Page 59: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Tableaux 59

set fill color of row 3 to swatch "DGC1_446a" of myDocument set fill tint of row 3 to 20 set fill color of row 4 to swatch "DGC1_446a" of myDocument set fill tint of row 4 to 40 --Use everyItem to set the formatting of multiple cells at once. tell every cell in myTable

--myTable.cells.everyItem().topEdgeStrokeColor to myDocument.swatches.item("DGC1_446b")

set top edge stroke color to swatch "DGC1_446b" of myDocument --myTable.cells.everyItem().topEdgeStrokeWeight to 1 set top edge stroke weight to 1 --myTable.cells.everyItem().bottomEdgeStrokeColor to

myDocument.swatches.item("DGC1_446b") set bottom edge stroke color to swatch "DGC1_446b" of myDocument --myTable.cells.everyItem().bottomEdgeStrokeWeight to 1 set bottom edge stroke weight to 1 --When you set a cell stroke to a swatch, make certain that you also set the

stroke weight. --myTable.cells.everyItem().leftEdgeStrokeColor to

myDocument.swatches.item("None") set left edge stroke color to swatch "None" of myDocument --myTable.cells.everyItem().leftEdgeStrokeWeight to 0 set left edge stroke weight to 0 --myTable.cells.everyItem().rightEdgeStrokeColor to

myDocument.swatches.item("None") set right edge stroke color to swatch "None" of myDocument --myTable.cells.everyItem().rightEdgeStrokeWeight to 0 set right edge stroke weight to 0

end tell end tell

L’extrait de script suivant permet d’ajouter une mise en forme de ligne en alternance à un tableau (pour consulter le script complet, voir AlternatingRows) :

set myTable to table 1 of story 1 of myDocument tell myTable

--Convert the first row to a header row. set row type of row 1 to header row --Apply alternating fills to the table. set alternating fills to alternating rows set start row fill color to swatch "DGC1_446a" of myDocument set start row fill tint to 60 set end row fill color to swatch "DGC1_446b" of myDocument set end row fill tint to 50

end tell

L’extrait de script suivant montre comment traiter la sélection lorsque du texte ou des cellules de tableau sont sélectionnés. Dans cet exemple, le script affiche une alerte pour chaque condition de sélection, mais un véritable script de production pourrait manipuler les éléments sélectionnés. (Pour consulter le script complet, voir TableSelection.)

if (count documents) is not equal to 0 then --If the selection contains more than one item, the selection --is not text selected with the Type tool. set mySelection to selection if (count mySelection) is not equal to 0 then

--Evaluate the selection based on its type. set myTextClasses to {insertion point, word, text style range, line, paragraph, text column, text, story} if class of item 1 of selection is in myTextClasses then

Page 60: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Correction automatique 60

--The object is a text object; display the text object type. --A practical script would do something with the selection, --or pass the selection on to a function. if class of parent of item 1 of mySelection is cell then

display dialog ("The selection is inside a table cell") else

display dialog ("The selection is not in a table") end if

else if class of item 1 of selection is cell then display dialog ("The selection is a table cell")

else if class of item 1 of selection is row then display dialog ("The selection is a table row")

else if class of item 1 of selection is column then display dialog ("The selection is a table column")

else if class of item 1 of selection is table then display dialog ("The selection is a table.")

else display dialog ("The selection is not in a table")

end if end if

end if

Correction automatiqueLa fonction de correction automatique permet de corriger le texte pendant la saisie. Le script suivant illustre son mode d’utilisation (pour consulter le script complet, voir Autocorrect) :

--The autocorrect preferences object turns the --autocorrect feature on or off. tell application "Adobe InCopy CS6"

tell auto correct preferences set autocorrect to true set auto correct capitalization errors to true --Add a word pair to the autocorrect list. Each auto correct table --is linked to a specific language.

end tell set myAutoCorrectTable to auto correct table "English: USA" --To safely add a word pair to the auto correct table, get the current --word pair list, then add the new word pair to that array, and then --set the autocorrect word pair list to the array. set myWordPairList to auto correct word pair list of myAutoCorrectTable --Add a new word pair to the array. set myWordPairList to myWordPairList & {"paragraph", "paragraph"} --Update the word pair list. set auto correct word pair list of auto correct table "English: USA" to myWordPairList --To clear all autocorrect word pairs in the current dictionary: --myAutoCorrectTable.autoCorrectWordPairList to {{}}

end tell

Page 61: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Texte et saisie Notes de bas de page 61

Notes de bas de pageL’extrait de script suivant permet d’ajouter des notes de bas de page à un article (pour consulter le script complet, voir Footnotes) :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell footnote options of myDocument

set separator text to tab set marker positioning to superscript marker

end tell set myStory to story 1 of myDocument --Add four footnotes at random locations in the story. local myStoryLength, myRandomNumber set myStoryLength to (count words of myStory) repeat with myCounter from 1 to 5

set myRandomNumber to my myGetRandom(1, myStoryLength) tell insertion point -1 of word myRandomNumber of myStory

set myFootnote to make footnote end tell --Note: when you create a footnote, it contains text--the footnote marker --and the separator text (if any). If you try to set the text of the --footnote by setting the footnote contents, you will delete the marker. --Instead, append the footnote text, as shown below. tell insertion point -1 of myFootnote

set contents to "This is a footnote." end tell

end repeat end tell end mySnippet --This function gets a random integer in the range myStart to myEnd. on myGetRandom(myStart, myEnd)

set myRange to myEnd - myStart set myRandomInteger to (myStart + (random number from myStart to myEnd)) as integer return myRandomInteger

end myGetRandom

Page 62: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

5

Interfaces utilisateur

Avec AppleScript, vous pouvez créer des boîtes de dialogue pour les questions de type oui/non et la saisie de texte, mais vous aurez parfois besoin de créer des boîtes de dialogue plus complexes pour vos scripts. Avec les scripts InCopy, vous pouvez ajouter des boîtes de dialogue et les compléter avec des éléments d’interface utilisateur courants, comme des listes déroulantes, des champs d’entrée de texte et des champs numériques. Pour que votre script puisse collecter les informations entrées par vos soins ou par tout autre utilisateur et les traiter, utilisez l’objet dialog.

Ce chapitre décrit l’utilisation des scripts de boîte de dialogue InCopy. Les exemples de scripts de ce chapitre sont présentés par ordre de complexité, en commençant par des scripts très simples et en progressant vers des opérations plus complexes.

REMARQUE : les scripts InCopy créés dans JavaScript peuvent également inclure des interfaces utilisateur créées à l’aide du composant Adobe ScriptUI. Ce chapitre contient certains didacticiels de script ScriptUI ; pour plus de détails, voir le Guide des outils JavaScript Adobe Creative Suite® 3.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script.

Présentation des boîtes de dialogueUne boîte de dialogue InCopy est un objet de script InCopy comme un autre. La boîte de dialogue peut contenir plusieurs types d’éléments (appelés collectivement « objets d’interface » (ou widgets), comme illustré ci-dessous.

Statut de mise à jour du chapitre

CS6 Inchangé

62

Page 63: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Votre première boîte de dialogue InCopy 63

Les éléments de la figure sont définis dans le tableau suivant :

L’objet dialog ne contient pas directement de commandes ; c’est le but de l’objet dialog column. L’objet dialog columns permet de contrôler la position des commandes dans une boîte de dialogue. Dans un objet dialog columns, il est possible de diviser une colonne de boîte de dialogue en plusieurs autres objets dialog columns ou border panels (qui peuvent eux-mêmes être divisés en d’autres objets dialog columns et border panels).

Comme tout autre objet de script InCopy, les différentes parties d’une boîte de dialogue possèdent leurs propres propriétés. Par exemple, une commande checkbox control possède une propriété pour son texte (static label) et une autre propriété pour son état (checked state). La commande dropdown possède une propriété (string list) qui permet de paramétrer la liste d’options figurant dans son menu.

Pour utiliser une boîte de dialogue dans un script, vous devez créer l’objet dialog, le remplir de commandes, afficher la boîte de dialogue et rassembler les valeurs de ses commandes afin de les rendre disponibles pour le script. Les boîtes de dialogue restent dans la mémoire InCopy jusqu’à leur destruction. De cette façon, vous pouvez conserver une boîte de dialogue en mémoire et faire en sorte que les données stockées dans ses propriétés soient utilisées par plusieurs scripts. Notez que ces boîtes de dialogue occupent de l’espace mémoire et doivent être supprimées lorsqu’elles sont inutilisées. En règle générale, il est préférable de détruire l’objet boîte de dialogue avant la fin de l’exécution du script.

Votre première boîte de dialogue InCopyLe processus de création d’une boîte de dialogue InCopy est très simple : vous ajoutez une boîte de dialogue, une colonne à la boîte de dialogue et des commandes à la colonne de la boîte de dialogue. Le script ci-après illustre ce processus (pour consulter le script complet, voir SimpleDialog).

tell application "Adobe InCopy CS6" set myDialog to make dialog with properties {name:"Simple Dialog"} tell myDialog

tell (make dialog column) make static text with properties {static label:"This is a very simple dialog box."}

end tell end tell --Show the dialog box. set myResult to show myDialog --If the user clicked OK, display one message; --if they clicked Cancel, display a different message. if myResult is true then

Elément de boîte de dialogue Nom InCopy

Text-edit fields Text editbox control

Numeric-entry fields Real editbox, integer editbox, measurement editbox, percent editbox, angle editbox

Pop-up menus Drop-down control

Control that combines a text-edit field with a pop-up menu

Combo-box control

Check box Check-box control

Radio buttons Radio-button control

Page 64: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Ajout d’une interface utilisateur à « Hello World » 64

display dialog ("You clicked the OK button") else

display dialog ("You clicked the Cancel button") end if --Remove the dialog box from memory. destroy myDialog

end tell

Ajout d’une interface utilisateur à « Hello World »Dans cet exemple, nous ajoutons une interface utilisateur simple au script d’apprentissage « Hello World » présenté au Chapitre 2, « Prise en main ». Les options de la boîte de dialogue vous permettent d’indiquer l’échantillon de texte et de modifier le corps de la police du texte. Pour consulter le script complet, voir HelloWorldUI.

tell application "Adobe InCopy CS6" set myDialog to make dialog tell myDialog

set name to "Simple User Interface Example Script" set myDialogColumn to make dialog column tell myDialogColumn

--Create a text entry field. set myTextEditField to make text editbox with properties ¬

{edit contents:"Hello World!", min width:180} --Create a number (real) entry field. set myPointSizeField to make real editbox with properties {edit contents:"72"}

end tell show --Get the settings from the dialog box. --Get the point size from the point size field. set myPointSize to edit contents of myPointSizeField as real --Get the example text from the text edit field. set myString to edit contents of myTextEditField --Remove the dialog box from memory. destroy myDialog

end tell set myDocument to make document tell story 1 of myDocument

--Apply the settings from the dialog box to the text. set contents to myString --Set the point size of the text. set point size of text 1 to myPointSize

end tell end tell

Page 65: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Création d’une interface utilisateur plus complexe 65

Création d’une interface utilisateur plus complexeDans l’exemple suivant, nous allons ajouter des commandes supplémentaires et de différents types à notre boîte de dialogue. L’exemple permet de créer une boîte de dialogue ressemblant à l’illustration ci-dessous.

Pour consulter le script complet, voir ComplexUI.

tell application "Adobe InCopy CS6" set myDocument to make document set mySwatchNames to name of every swatch of myDocument set myDialog to make dialog --This example dialog box uses border panels and dialog columns to --separate and organize the user interface items in the dialog. tell myDialog

set name to "User Interface Example Script" set myDialogColumn to make dialog column tell myDialogColumn

set myBorderPanel to make border panel tell myBorderPanel

set myDialogColumn to make dialog column tell myDialogColumn

make static text with properties {static label:"Message:"} end tell set myDialogColumn to make dialog column tell myDialogColumn

set myTextEditField to make text editbox with properties {edit contents:"Hello World!", min width:180}

end tell end tell set myBorderPanel to make border panel tell myBorderPanel

set myDialogColumn to make dialog column tell myDialogColumn

make static text with properties {static label:"Point Size:"} end tell set myDialogColumn to make dialog column tell myDialogColumn

set myPointSizeField to make real editbox with properties {edit contents:"72"}

end tell end tell set myBorderPanel to make border panel tell myBorderPanel

make static text with properties { static label:"Paragraph Alignment:"} set myParagraphAlignmentGroup to make radiobutton group tell myParagraphAlignmentGroup

Page 66: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Création d’une interface utilisateur plus complexe 66

set myLeftRadioButton to make radiobutton control with properties {static label:"Left", checked state:true} set myCenterRadioButton to make radiobutton control with properties {static label:"Center"} set myRightRadioButton to make radiobutton control with properties {static label:"Right"}

end tell end tell set myBorderPanel to make border panel tell myBorderPanel

make static text with properties {static label:"Text Color:"} set mySwatchesDropdown to make dropdown with properties {string list:mySwatchNames, selected index:1}

end tell end tell show --Get the settings from the dialog box. --Get the point size from the point size field. set myPointSize to edit contents of myPointSizeField as real --Get the example text from the text edit field. set myString to edit contents of myTextEditField --Get the paragraph alignment setting from the radiobutton group. get properties of myParagraphAlignmentGroup if selected button of myParagraphAlignmentGroup is 0 then

set myParagraphAlignment to left align else if selected button of myParagraphAlignmentGroup is 1 then

set myParagraphAlignment to center align else

set myParagraphAlignment to right align end if --Get the text color selected in the dropdown. set mySwatchName to item ((selected index of mySwatchesDropdown) + 1) of mySwatchNames --Remove the dialog box from memory. destroy myDialog

end tell tell story 1 of myDocument

--Apply the settings from the dialog box to the text frame. set contents to myString --Apply the paragraph alignment ("justification"). --"text 1 of myStory" is all of the text in the text story. set justification of text 1 to myParagraphAlignment --Set the point size of the text in the text frame. set point size of text 1 to myPointSize --Set the fill color of the text to the selected swatch. set fill color of text 1 to swatch mySwatchName of myDocument

end tell end tell

Page 67: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Utilisation de ScriptUI 67

Utilisation de ScriptUIAvec JavaScript, vous pouvez créer et définir des éléments d’interface utilisateur à l’aide du composant de script Adobe appelé ScriptUI. ScriptUI permet aux créateurs de scripts de créer des panneaux flottants, des barres de progression et des boîtes de dialogue interactives dont la complexité est bien supérieure à l’objet dialog intégré d’InCopy.

Cela ne signifie pas, cependant, que les éléments d’interface utilisateur créés à l’aide de ScriptUI ne sont pas accessibles aux utilisateurs AppleScript. Les scripts InCopy peuvent exécuter des scripts rédigés dans d’autres langages de script à l’aide de la méthode do script.

Création d’une barre de progression avec ScriptUI

L’exemple de script ci-après illustre la création d’une barre de progression à l’aide de JavaScript et ScriptUI, puis l’utilisation de cette barre de progression à partir d’un script AppleScript (pour consulter le script complet, voir ProgressBar).

#targetengine "session" var myProgressPanel; var myMaximumValue = 300; var myProgressBarWidth = 300; var myIncrement = myMaximumValue/myProgressBarWidth; myCreateProgressPanel(myMaximumValue, myProgressBarWidth); function myCreateProgressPanel(myMaximumValue, myProgressBarWidth){

myProgressPanel = new Window('window', 'Progress'); with(myProgressPanel){

myProgressPanel.myProgressBar = add('progressbar', [12, 12, myProgressBarWidth, 24], 0, myMaximumValue);

} }

L’extrait de script ci-après permet d’appeler la barre de progression créée dans le script ci-dessus à l’aide d’un script AppleScript (pour consulter le script complet, voir CallProgressBar).

tell application "Adobe InCopy CS6" set myDocument to make document --Note that the JavaScripts must use the "session" --engine for this to work. set myJavaScript to "#targetengine \"session\"" & return set myJavaScript to myJavaScript & "myCreateProgressPanel(100, 400);" set myJavaScript to myJavaScript & return set myJavaScript to myJavaScript & "myProgressPanel.show();" & return do script myJavaScript language javascript repeat with myCounter from 1 to 100

set myJavaScript to "#targetengine \"session\"" & return set myJavaScript to myJavaScript & "myProgressPanel.myProgressBar.value" set myJavaScript to myJavaScript & "=" & myCounter & "/myIncrement;" set myJavaScript to myJavaScript & return do script myJavaScript language javascript tell insertion point -1 of story 1 of myDocument

set contents to "x" end tell if myCounter = 100 then

set myJavaScript to "#targetengine \"session\"" & return set myJavaScript to myJavaScript & "myProgressPanel.myProgressBar.value = 0;" & return set myJavaScript to myJavaScript & "myProgressPanel.hide();" & return

Page 68: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Utilisation de ScriptUI 68

do script myJavaScript language javascript close myDocument saving no

end if end repeat

end tell

Création d’un panneau avec barre de boutons au moyen de ScriptUI

Si vous voulez exécuter vos scripts en cliquant sur les boutons d’un panneau flottant, vous pouvez en créer un avec JavaScript et ScriptUI. Peu importe le langage de script utilisé.

Le script d’apprentissage suivant permet de créer un panneau flottant simple. Le panneau peut contenir une série de boutons, chaque bouton étant associé à un script stocké sur disque. Cliquez sur le bouton, et le panneau exécute le script (le script, à son tour, peut afficher des boîtes de dialogue ou d’autres éléments d’interface utilisateur). Le bouton, dans le panneau, peut contenir du texte ou des graphiques. (Pour consulter le script complet, voir ButtonBar.)

Le script d’apprentissage lit un fichier XML sous la forme suivante :

<buttons> <button>

<buttonType></buttonType> <buttonName></buttonName> <buttonFileName></buttonFileName> <buttonIconFile></buttonIconFile>

</button> ...

</buttons>

Par exemple :

<buttons> <button>

<buttonType>text</buttonType> <buttonName>FindChangeByList</buttonName> <buttonFileName>/c/buttons/FindChangeByList.jsx</buttonFileName> <buttonIconFile></buttonIconFile>

</button> <button>

<buttonType>text</buttonType> <buttonName>SortParagraphs</buttonName> <buttonFileName>/c/buttons/SortParagraphs.jsx</buttonFileName> <buttonIconFile></buttonIconFile>

</button> </buttons>

Les fonctions suivantes permettent de lire le fichier XML et de configurer la barre de boutons :

#targetengine "session" var myButtonBar; main(); function main(){

myButtonBar = myCreateButtonBar(); myButtonBar.show();

} function myCreateButtonBar(){

var myButtonName, myButtonFileName, myButtonType, myButtonIconFile, myButton; var myButtons = myReadXMLPreferences(); if(myButtons != ""){

Page 69: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Interfaces utilisateur Utilisation de ScriptUI 69

myButtonBar = new Window('window', 'Script Buttons', undefined, {maximizeButton:false, minimizeButton:false}); with(myButtonBar){

spacing = 0; margins = [0,0,0,0]; with(add('group')){

spacing = 2; orientation = 'row'; for(var myCounter = 0; myCounter < myButtons.length(); myCounter++){

myButtonName = myButtons[myCounter].xpath("buttonName"); myButtonType = myButtons[myCounter].xpath("buttonType"); myButtonFileName = myButtons[myCounter].xpath("buttonFileName"); myButtonIconFile = myButtons[myCounter].xpath("buttonIconFile"); if(myButtonType == "text"){

myButton = add('button', undefined, myButtonName); } else{

myButton = add('iconbutton', undefined, File(myButtonIconFile));

} myButton.scriptFile = myButtonFileName; myButton.onClick = function(){

myButtonFile = File(this.scriptFile) app.doScript(myButtonFile);

} }

} }

} return myButtonBar;

} function myReadXMLPreferences(){

myXMLFile = File.openDialog("Choose the file containing your button bar defaults"); var myResult = myXMLFile.open("r", undefined, undefined); var myButtons = ""; if(myResult == true){

var myXMLDefaults = myXMLFile.read(); myXMLFile.close(); var myXMLDefaults = new XML(myXMLDefaults); var myButtons = myXMLDefaults.xpath("/buttons/button");

} return myButtons;

}

Page 70: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

6

Menus

Les scripts InCopy permettent d’ajouter des éléments de menu, d’en supprimer, d’exécuter des commandes de menu et d’associer des scripts à des éléments de menu.

Ce chapitre décrit l’utilisation des scripts de menus InCopy. Les exemples de scripts de ce chapitre sont présentés par ordre de complexité, en commençant par des scripts très simples et en progressant vers des opérations plus complexes.

Vous devez avoir lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script.

Présentation du modèle de menuLe modèle de scripts de menus InCopy comprend une série d’objets qui correspondent aux menus affichés dans l’interface utilisateur de l’application, notamment les menus associés aux panneaux, ainsi que ceux affichés dans la barre de menus principale. Un objet menu contient les objets suivants :

menu items : options de menu figurant dans un menu. Cela n’inclut pas les sous-menus.

menu separators : lignes utilisées pour séparer les options de menu dans un menu.

submenus : options de menu qui contiennent d’autres menus.

menu elements : tous les objets menu items, menu separators et submenus figurant dans un menu.

event listeners : répondent aux actions d’un utilisateur (ou script) associées à un menu.

events : objets events déclenchés par un menu.

Chaque objet menu item est connecté à un objet menu action par l’intermédiaire de la propriété associated menu action. Les propriétés de l’objet menu action définissent l’action exécutée lorsque l’élément de menu est sélectionné. En plus des objets menu actions définis par l’interface utilisateur, les créateurs de scripts InCopy peuvent créer leurs propres objets script menu actions, qui associent un script à une sélection de menu.

Un objet menu action ou script menu action peut être associé à un ou plusieurs objets menu items, ou à aucun.

Statut de mise à jour du chapitre

CS6 Inchangé

70

Page 71: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Présentation du modèle de menu 71

Le diagramme suivant illustre les relations entre les différents objets de menu :

Pour créer une liste (sous la forme d’un fichier texte) de toutes les actions de menu visibles, exécutez l’extrait de script suivant (dans le script d’apprentissage GetMenuActions) :

set myTextFile to choose file name("Save menu action names as:") if myTextFile is not equal to "" then

tell application "Adobe InCopy CS6" set myString to "" set myMenuActionNames to name of every menu action repeat with myMenuActionName in myMenuActionNames

set myString to myString & myMenuActionName & return end repeat my myWriteToFile(myString, myTextFile, false)

end tell end if on myWriteToFile(myString, myFileName, myAppendData)

set myTextFile to open for access myFileName with write permission if myAppendData is false then

set eof of myTextFile to 0 end if write myString to myTextFile starting at eof close access myTextFile

end myWriteToFile

application

menuActions

scriptMenuAction

area

enabled

checked

eventListeners

events

id

index

label

name

parent

title

same as menuAction

menuAction

scriptMenuActions

eventListener

eventListener

event

...

...

event

Page 72: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Présentation du modèle de menu 72

Pour créer une liste (sous la forme d’un fichier texte) de tous les menus disponibles, exécutez l’extrait de script suivant (pour consulter la liste complète des scripts, voir le script d’apprentissage GetMenuNames). Notez que ces scripts peuvent être très lents, car il existe un grand nombre de noms de menu dans InCopy.

--Open a new text file. set myTextFile to choose file name ("Save Menu Action Names As") --If the user clicked the Cancel button, the result is null. if (myTextFile is not equal to "") then

tell application "Adobe InDesign CS6" --Open the file with write access. my myWriteToFile("Adobe InDesign CS6 Menu Names" & return, myTextFile, false) repeat with myCounter from 1 to (count menus)

set myMenu to item myCounter of menus set myString to "----------" & return & name of myMenu & return & "----------" & return set myString to my myProcessMenu(myMenu, myString) my myWriteToFile(myString, myTextFile, true)

end repeat display dialog ("done!")

end tell end if on myProcessMenu(myMenu, myString)

tell application "Adobe InDesign CS6" set myIndent to my myGetIndent(myMenu) repeat with myCounter from 1 to (count menu elements of myMenu)

set myMenuElement to menu element myCounter of myMenu set myClass to class of myMenuElement if myClass is not equal to menu separator then

set myMenuElementName to name of myMenuElement set myString to myString & myIndent & myMenuElementName & return if class of myMenuElement is submenu then

if myMenuElementName is not "Font" then set myString to my myProcessMenu(myMenuElement, myString)

end if end if

end if end repeat return myString

end tell end myProcessMenu on myGetIndent(myObject)

tell application "Adobe InDesign CS6" set myString to "" repeat until class of myObject is menu

set myString to myString & tab set myObject to parent of myObject

end repeat return myString

end tell end myGetIndent on myWriteToFile(myString, myFileName, myAppendData)

set myTextFile to open for access myFileName with write permission if myAppendData is false then

set eof of myTextFile to 0 end if write myString to myTextFile starting at eof close access myTextFile

end myWriteToFile

Page 73: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Exécution d’une action de menu à partir d’un script 73

Localisation et noms de menu

Avec les scripts InCopy, les objets menu items, menus, menu actions et submenus sont désignés par un nom. Par conséquent, les scripts doivent s’appuyer sur une méthode de recherche d’objets qui soit indépendante de la langue installée de l’application. Pour cela, vous pouvez utiliser une base de données interne de chaînes qui font référence à un élément spécifique, indépendamment de la langue. Par exemple, pour obtenir le nom (indépendamment de la langue) d’une action de menu, vous pouvez utiliser l’extrait de script suivant (pour consulter le script complet, voir GetKeyStrings) :

tell application "Adobe InCopy CS6" set myMenuAction to menu action "$ID/Convert to Note" set myKeyStrings to find key strings for title of myMenuAction if class of myKeyStrings is list then

repeat with myKeyString in myKeyStrings set myString to myKeyString & return

end repeat else

set myString to myKeyStrings end if display dialog(myString)

end tell

REMARQUE : il est préférable d’obtenir le nom indépendant de la langue d’un objet menu action plutôt que celui d’un objet menu, menu item ou submenu, parce que le titre d’un objet menu action sera vraisemblablement une chaîne unique. La plupart des autres objets de menu renvoient plusieurs chaînes si vous utilisez la méthode get key strings.

Une fois que vous disposez de la chaîne indépendante de la langue à utiliser, vous pouvez l’inclure dans vos scripts. Les scripts qui utilisent ces chaînes fonctionneront correctement dans les langues différentes de celle de votre version InCopy.

Pour traduire une chaîne indépendante de la langue dans la langue actuelle, utilisez l’extrait de script suivant (dans le script d’apprentissage TranslateKeyString) :

tell application "Adobe InCopy CS6" set myString to translate key string "$ID/Convert to Note" display dialog(myString)

end tell

Exécution d’une action de menu à partir d’un scriptLes objets menu actions intégrés d’InCopy peuvent être exécutés à partir d’un script. L’objet menu action ne doit pas être nécessairement associé à un objet menu item ; cependant, l’exécution d’un objet menu item à partir d’un script est en tout point identique à la sélection d’une option de menu dans l’interface utilisateur. Si la sélection de l’option de menu affiche une boîte de dialogue, l’exécution de l’objet menu action correspondant à partir d’un script affiche également une boîte de dialogue.

Le script suivant illustre le mode d’exécution d’un objet menu action à partir d’un script (pour consulter le script complet, voir InvokeMenuAction) :

tell application "Adobe InCopy CS6" --Get a reference to a menu action. set myMenuAction to menu action "$ID/Convert to Note" --Run the menu action. The example action will fail if you do not --have text selected. invoke myMenuAction

end tell

Page 74: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Ajout de menus et d’éléments de menu 74

REMARQUE : en règle générale, évitez d’essayer d’automatiser les processus InCopy en codant les actions de menu et les sélections de l’interface utilisateur ; le modèle d’objet de script InCopy est un outil de travail bien plus performant. Les actions de menu dépendent d’un certain nombre de conditions d’interface utilisateur, comme la sélection et l’état de la fenêtre. Les scripts utilisant le modèle d’objet sollicitent directement les objets d’un document InCopy, ce qui signifie qu’ils ne dépendent pas de l’interface utilisateur ; leur rapidité et leur cohérence en sont ainsi améliorées.

Ajout de menus et d’éléments de menuLes scripts peuvent également créer des menus et des éléments de menu ou en supprimer, comme dans l’interface utilisateur InCopy. L’exemple de script suivant illustre la duplication du contenu d’un sous-menu dans un nouveau menu, à un autre emplacement de menu (pour consulter le script complet, voir CustomizeMenu) :

tell application "Adobe InCopy CS6" set myMainMenu to menu "Main" set myTypeMenu to submenu "Type" of myMainMenu set myFontMenu to submenu "Font" of myTypeMenu set myKozukaMenu to submenu "Kozuka Mincho Pro " of myFontMenu tell myMainMenu

set mySpecialFontMenu to make submenu with properties {title:"Kozuka Mincho Pro"}

end tell repeat with myMenuItem in menu items of myKozukaMenu

set myAssociatedMenuAction to associated menu action of myMenuItem tell mySpecialFontMenu

make menu item with properties {associated menu action:myAssociatedMenuAction}

end tell end repeat

end tell

Pour supprimer le menu personnalisé ajouté par le script ci-dessus, exécutez le script RemoveSpecialFontMenu.

set myMainMenu to menu item "Main" set mySpecialFontMenu to submenu "Kozuka Mincho Pro" of myMainMenu tell mySpecialFontMenu to delete

Menus et événementsLes menus et les sous-menus génèrent des événements lorsqu’ils sont sélectionnés dans l’interface utilisateur, et les objets menu actions et script menu actions génèrent des événements lorsqu’ils sont utilisés. Les scripts peuvent installer des objets event listeners pour répondre à ces événements. Le tableau suivant illustre les événements des différents composants de scripts de menu :

Objet Evénement Description

menu beforeDisplay Exécute le script associé avant l’affichage du contenu du menu.

menu action afterInvoke Exécute le script associé lorsque l’objet menu item associé est sélectionné, mais à la suite de l’événement onInvoke.

beforeInvoke Exécute le script associé lorsque l’objet menu item associé est sélectionné, mais avant l’événement onInvoke.

Page 75: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Utilisation des objets d’action de menu de script 75

Pour plus de détails sur les objets events et event listeners, voir le Chapitre 7, « Evénements ».

Pour modifier les éléments affichés dans un menu, ajoutez un objet event listener pour l’événement event beforeDisplay. Lorsque le menu est sélectionné, l’objet event listener peut alors exécuter un script qui active ou désactive les éléments de menu, modifie le nom de l’élément de menu ou exécute d’autres tâches associées au menu. Cette opération est utilisée en interne pour modifier la liste des menus pour les polices disponibles, les documents récents ou les fenêtres ouvertes.

Utilisation des objets d’action de menu de scriptVous pouvez utiliser un objet script menu action pour créer un objet menu action dont le comportement est implémenté par l’intermédiaire du script prévu pour être exécuté lorsque l’événement event onInvoke est déclenché.

Le script suivant illustre la création d’un objet script menu action et son association à un élément de menu (pour consulter le script complet, voir MakeScriptMenuAction). Ce script affiche simplement une alerte lorsque l’élément de menu est sélectionné.

tell application "Adobe InCopy CS6" --Create the script menu action "Display Message" --if it does not already exist. try

set myScriptMenuAction to script menu action "Display Message" on error

set myScriptMenuAction to make script menu action with properties {title:"Display Message"}

end try tell myScriptMenuAction

--If the script menu action already existed, --remove the existing event listeners. if (count event listeners) > 0 then

tell every event listener to delete end if set myEventListener to make event listener with properties {event type:"onInvoke", handler:"yukino:message.applescript"}

end tell tell menu "$ID/Main"

set mySampleScriptMenu to make submenu with properties

script menu action afterInvoke Exécute le script associé lorsque l’objet menu item associé est sélectionné, mais à la suite de l’événement onInvoke.

beforeInvoke Exécute le script associé lorsque l’objet menu item associé est sélectionné, mais avant l’événement onInvoke.

beforeDisplay Exécute le script associé avant une demande interne de l’état activé/coché de l’objet script menu actionscript menu action.

onInvoke Exécute le script associé lorsque l’objet script menu action est appelé.

submenu beforeDisplay Exécute le script associé avant l’affichage du contenu de l’objet submenu.

Objet Evénement Description

Page 76: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Utilisation des objets d’action de menu de script 76

{title:"Script Menu Action"} tell mySampleScriptMenu

set mySampleScriptMenuItem to make menu item with properties {associated menu action:myScriptMenuAction}

end tell end tell

end tell

Le fichier de script message.applescript contient le code suivant :

tell application "Adobe InCopy CS6" display dialog ("You selected an example script menu action.")

end tell

Pour supprimer les objets menu, submenu, menu item et script menu action créés par le script ci-dessus, exécutez l’extrait de script suivant (dans le script d’apprentissage RemoveScriptMenuAction) :

tell application "Adobe InCopy CS6" try

set myScriptMenuAction to script menu action "Display Message" tell myScriptMenuAction

delete end tell tell submenu "Script Menu Action" of menu "$ID/Main" to delete

end try end tell

Vous pouvez également supprimer tous les objets script menu action, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage RemoveAllScriptMenuActions). Ce script supprime également les listes de menus de l’objet script menu action, mais il ne supprime pas les menus ou sous-menus que vous avez créés.

tell application "Adobe InCopy CS6" delete every script menu action

end tell

Vous pouvez créer une liste de tous les objets script menu actions courants, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage GetScriptMenuActions) :

set myTextFile to choose file name {"Save Script Menu Action Names As"} --If the user clicked the Cancel button, the result is null. if myTextFile is not equal to "" then

tell application "Adobe InCopy CS6" set myString to "" set myScriptMenuActionNames to name of every script menu action repeat with myScriptMenuActionName in myScriptMenuActionNames

set myString to myString & myScriptMenuActionName & return end repeat my myWriteToFile(myString, myTextFile, false)

end tell end if on myWriteToFile(myString, myFileName, myAppendData)

set myTextFile to open for access myFileName with write permission if myAppendData is false then

set eof of myTextFile to 0 end if write myString to myTextFile starting at eof close access myTextFile

end myWriteToFile

Page 77: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Utilisation des objets d’action de menu de script 77

L’objet script menu actions peut également exécuter des scripts pendant l’événement event beforeDisplay, auquel cas ils sont exécutés avant une demande interne de l’état de l’objet script menu action (par exemple, lorsque l’élément de menu est sur le point d’être affiché). Ensuite, le script peut notamment modifier le nom des menus et/ou définir l’état activé/coché.

Dans l’exemple de script suivant, un objet event listener est ajouté à l’événement event beforeDisplay qui vérifie la sélection en cours. En l’absence de sélection, le script dans l’objet event listener désactive l’élément de menu. Si un élément est sélectionné, celui-ci est activé, et la sélection de l’élément de menu affiche le type du premier élément de la sélection. (Pour consulter le script complet, voir BeforeDisplay.)

tell application "Adobe InCopy CS6" --Create the script menu action "Display Message" --if it does not already exist. try

set myScriptMenuAction to script menu action "Display Message" on error

set myScriptMenuAction to make script menu action with properties {title:"Display Message"}

end try tell myScriptMenuAction

--If the script menu action already existed, --remove the existing event listeners. if (count event listeners) > 0 then

tell every event listener to delete end if --Fill in a valid file path for your system. make event listener with properties {event type:"onInvoke", handler:"yukino:WhatIsSelected.applescript"}

end tell tell menu "$ID/Main"

set mySampleScriptMenu to make submenu with properties {title:"Script Menu Action"} tell mySampleScriptMenu

set mySampleScriptMenuItem to make menu item with properties {associated menu action:myScriptMenuAction} --Fill in a valid file path for your system. make event listener with properties {event type:"beforeDisplay", handler:"yukino:BeforeDisplayHandler.applescript"}

end tell end tell

end tell

Le fichier de script d’apprentissage BeforeDisplayHander contient le script suivant :

tell application "Adobe InCopy CS6" try

set mySampleScriptAction to script menu action "Display Message" set mySelection to selection if (count mySelection) > 0 then

set enabled of mySampleScriptAction to true else

set enabled of mySampleScriptAction to false end if

on error alert("Script menu action did not exist.")

end try end tell

Page 78: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Menus Utilisation des objets d’action de menu de script 78

Le fichier de script d’apprentissage WhatIsSelected contient le script suivant :

tell application "Adobe InCopy CS6" set mySelection to selection if (count mySelection) > 0 then

set myString to class of item 1 of mySelection as string display dialog ("The first item in the selection is a " & myString & ".")

end if end tell

Page 79: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

7

Evénements

Les scripts InCopy peuvent répondre aux événements d’application et de document courants, comme l’ouverture d’un fichier, la création d’un fichier, l’impression et l’importation de fichiers texte et graphiques à partir d’un disque. Avec les scripts InCopy, l’objet event répond à un événement qui se produit dans l’application. Les scripts peuvent être associés aux événements par l’intermédiaire de l’objet de script event listener. Les scripts qui utilisent les événements sont identiques aux autres scripts, à la seule différence près qu’ils sont exécutés automatiquement lorsque l’événement correspondant se produit, et non manuellement par l’utilisateur (dans le panneau Scripts).

Ce chapitre décrit le mode d’utilisation des scripts d’événement InCopy. Les exemples de scripts de ce chapitre sont présentés par ordre de complexité, en commençant par des scripts très simples et en progressant vers des opérations plus complexes.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script.

Ce chapitre décrit les événements d’application et de document. Vous trouverez une description des événements liés aux menus au Chapitre 6, « Menus ».

Le modèle de scripts d’événements InCopy est semblable à la recommandation W3C (Worldwide Web Consortium) concernant les événements du modèle d’objet de document DOM (pour plus de détails, visiter le site http://www.w3c.org).

Présentation du modèle de scripts d’événementsLe modèle de scripts d’événements InCopy comprend une série d’objets qui correspondent aux événements survenant pendant l’utilisation de l’application. Le premier objet, event, correspond à l’une des séries limitées d’actions dans l’interface utilisateur InCopy (ou des actions correspondantes déclenchées par les scripts).

Pour répondre à un événement, vous devez enregistrer un objet event listener avec un objet capable de recevoir l’événement. Lorsque l’événement spécifié atteint l’objet, l’objet event listener exécute la fonction de script définie dans son gestionnaire (référence à un fichier de script sur disque).

Le tableau suivant répertorie les événements auxquels l’objet event listeners peut répondre. Ces événements peuvent être déclenchés par n’importe quel moyen disponible, notamment les options de menu sélectionnées, les raccourcis clavier ou les actions de script.

Statut de mise à jour du chapitre

CS6 Inchangé

79

Page 80: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Présentation du modèle de scripts d’événements 80

Evénement d’interface utilisateur

Nom de l’événement Description Type d’objet

Toute action de menu

beforeDisplay Se produit avant que le menu ou le sous-menu ne s’affiche.

event

beforeDisplay Se produit avant que l’action de menu du script ne s’affiche ou ne change.

event

beforeInvoke Se produit après la sélection de l’action de menu, mais avant son exécution.

event

afterInvoke Se produit après l’exécution de l’action de menu.

event

onInvoke Exécute l’action de menu ou l’action de menu du script.

event

Fermer beforeClose Se produit après une demande de fermeture de document, mais avant que le document ne soit fermé.

document event

afterClose Se produit après la fermeture d’un document.

document event

Exporter beforeExport Se produit après une demande d’exportation, mais avant que le document ou l’élément de page ne soit exporté.

import export event

afterExport Se produit après l’exportation d’un document ou d’un élément de page.

import export event

Importer beforeImport Se produit avant qu’un fichier ne soit importé, mais avant que le fichier ne soit importé dans un document (avant l’insertion).

import export event

afterImport Se produit après l’importation d’un fichier, mais avant que le fichier ne soit inséré dans une page.

import export event

Nouveau beforeNew Se produit après une demande de nouveau document, mais avant que le document ne soit créé.

document event

afterNew Se produit après la création d’un document.

document event

Ouvrir beforeOpen Se produit après une demande d’ouverture de document, mais avant que le document ne soit ouvert.

document event

afterOpen Se produit après l’ouverture d’un document.

document event

Page 81: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Présentation du modèle de scripts d’événements 81

Imprimer beforePrint Se produit après une demande d’impression de document, mais avant que le document ne soit imprimé.

document event

afterPrint Se produit après l’impression d’un document.

document event

Version précédente

beforeRevert Se produit après une demande de restauration d’un document, mais avant que la version antérieure du document ne soit restaurée.

document event

afterRevert Se produit après la restauration de la version antérieure d’un document.

document event

Enregistrer beforeSave Se produit après une demande d’enregistrement d’un document, mais avant que le document ne soit enregistré.

document event

afterSave Se produit après l’enregistrement d’un document.

document event

Enregistrer une copie

beforeSaveACopy Se produit après une demande d’enregistrement d’une copie d’un document, mais avant que le document ne soit enregistré.

document event

afterSaveACopy Se produit après l’enregistrement d’un document.

document event

Enregistrer sous

beforeSaveAs Se produit après une demande d’enregistrement sous un format, mais avant que le document ne soit enregistré.

document event

afterSaveAs Se produit après l’enregistrement d’un document.

document event

Evénement d’interface utilisateur

Nom de l’événement Description Type d’objet

Page 82: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Présentation du modèle de scripts d’événements 82

A propos des propriétés des événements et de la propagation des événements

Lorsqu’une action, qu’elle soit exécutée par un utilisateur ou par un script, déclenche un événement, cet événement peut s’étendre, ou se propager, aux objets de script capables d’y répondre. Lorsqu’un événement atteint un objet ayant un objet event listener enregistré pour cet événement, cet objet event listener est déclenché par l’événement. Un événement peut être traité par plusieurs objets à mesure qu’il se propage.

Il existe trois types de propagation d’événement :

Aucune : seuls les objets event listeners enregistrés avec la cible de l’événement sont déclenchés par l’événement. L’événement beforeDisplay est l’exemple d’un événement qui ne se propage pas.

Capture : l’événement démarre au niveau supérieur du modèle d’objet de script, l’application, puis se propage à travers le modèle jusqu’à la cible de l’événement. Tout objet event listeners capable de répondre à l’événement enregistré dans les objets au-dessus de la cible (target) traite l’événement.

Bouillonnement : l’événement démarre la propagation vers sa cible (target) et déclenche tout objet event listeners approprié enregistré avec la cible (target). L’événement se propage alors vers le haut à travers le modèle d’objet de script, déclenchant les objets event listeners appropriés qui sont enregistrés avec les objets situés au-dessus de la cible (target) dans la hiérarchie du modèle d’objet de script.

Le tableau suivant décrit de manière détaillée les propriétés d’un événement (event) et leurs relations avant la propagation d’événement à travers le modèle d’objet de script.

Propriété Description

Bubbles Si elle est vraie (true), l’événement (event) se propage aux objets de script situés au-dessus de l’objet déclenchant l’événement (event).

Cancelable Si elle est vraie (true), le comportement par défaut de l’événement (event) sur sa cible (target) peut être annulé. Pour cela, utilisez la commande prevent default.

Captures Si elle est vraie (true), l’événement (event) peut être traité par l’objet event listeners enregistré avec les objets de script situés au-dessus de l’objet cible de l’événement au cours de la phase de capture de la propagation d’événement. Cela signifie qu’un objet event listener dans l’application, par exemple, peut répondre à un événement de document avant qu’un objet event listener ne soit déclenché.

CurrentTarget Objet de script actif traitant l’événement (event) (voir la propriété target dans ce tableau).

DefaultPrevented Si elle est vraie (true), le comportement par défaut de l’événement (event) sur la cible (target) actuelle (voir la propriété target dans ce tableau) a été bloqué, annulant ainsi l’opération.

EventPhase Etape en cours du processus de propagation de l’événement (event).

EventType Type d’événement (event), sous la forme d’une chaîne (par exemple, « beforeNew »).

PropagationStopped Si elle est vraie (true), l’événement (event) a cessé de se propager au-delà de la cible actuelle (current target) (voir la propriété target dans ce tableau). Pour arrêter la propagation de l’événement, utilisez la commande stop propagation.

Page 83: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Utilisation des objets eventListeners 83

Utilisation des objets eventListenersLorsque vous créez un objet event listener, vous spécifiez le type d’événement (sous forme de chaîne), le gestionnaire d’événements (comme référence de fichier), et vous indiquez si l’objet event listener peut être déclenché dans la phase de capture de l’événement. L’extrait de script suivant permet d’ajouter un objet event listener pour un événement spécifique (pour consulter le script complet, voir EventListener).

--Registers an event listener on the afterNew event. tell application "Adobe InCopy CS6"

make event listener with properties {event type:"afterNew", handler:"yukino:ICEventHandlers:Message.applescript", captures:true} end tell

Le script qui est référencé dans le script ci-dessus contient le code suivant :

tell application "Adobe InCopy 3.0" --"evt" is the event passed to this script by the event listener. set myEvent to evt display dialog ("This event is the "& event type of myEvent & "event.")

end tell

Pour supprimer l’objet event listener créé par le script ci-dessus, exécutez le script suivant (dans le script d’apprentissage RemoveEventListener) :

tell application "Adobe InCopy CS6" remove event listener event type "afterNew" handler file

"yukino:IDEventHandlers:Message.applescript" without captures end tell

Lorsqu’un objet event listener répond à un événement, l’événement peut quand même être traité par d’autres objets event listeners qui peuvent surveiller l’événement (en fonction de la propagation de l’événement). Par exemple, l’événement afterOpen peut être surveillé par l’objet event listeners associé à l’application et au document.

Les objets event listeners ne sont plus valides au-delà de la session InCopy en cours. Pour pouvoir utiliser un objet event listener dans chaque session InCopy, ajoutez le script au dossier des scripts de démarrage (pour plus de détails sur l’installation des scripts, voir le Chapitre 2, « Prise en main »). Lorsque vous ajoutez un script event listener à un document, il n’est pas enregistré avec le document, ni exporté au format INX.

REMARQUE : si vous rencontrez des problèmes avec un script qui définit un objet event listener, vous pouvez soit exécuter un script qui supprime l’objet event listener, soit fermer la session et relancer InCopy.

Target Objet dont est issu l’événement (event). A titre d’exemple, la propriété target (cible) d’un événement beforeImport est un document ; pour l’événement beforeNew, il s’agit d’une application.

TimeStamp Date et heure auxquelles l’événement (event) s’est produit.

Propriété Description

Page 84: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Utilisation des objets eventListeners 84

Un événement peut déclencher plusieurs objets event listeners au cours de sa propagation à travers le modèle d’objet de script. L’exemple de script suivant illustre un événement qui déclenche des objets event listeners enregistrés avec d’autres objets (pour consulter le script complet, voir MultipleEventListeners) :

--Shows that an event can trigger multiple event listeners. tell application "Adobe InCopy CS6"

set myDocument to make document --You'll have to fill in a valid file path for your system make event listener with properties {event type:"beforeImport", handler:"yukino:EventInfo.applescript", captures:true} tell myDocument

make event listener with properties {event type:"beforeImport", handler:"yukino:EventInfo.applescript", captures:true}

end tell end tell

Le script EventInfo.applescript qui est référencé dans le script ci-dessus contient le code suivant :

main(evt) on main(myEvent)

tell application "Adobe InCopy CS6" set myString to "Current Target: " & name of current target of myEvent display dialog (myString)

end tell end main

Lorsque vous exécutez le script ci-dessus et que vous insérez un fichier, InCopy affiche des alertes répertoriant, dans l’ordre, le nom du document, puis le nom de l’application.

L’exemple de script suivant crée un objet event listener pour chaque événement pris en charge et affiche des informations sur l’événement dans une boîte de dialogue simple. Pour consulter le script complet, voir EventListenersOn.

--Turns on all event listeners on the application object. tell application "Adobe InCopy CS6" set myEventNames to {"beforeNew", "afterNew", "beforeQuit", "afterQuit", "beforeOpen", "afterOpen", "beforeClose", "afterClose", "beforeSave", "afterSave", "beforeSaveAs", "afterSaveAs", "beforeSaveACopy", "afterSaveACopy", "beforeRevert", "afterRevert", "beforePrint", "afterPrint", "beforeExport", "afterExport", "beforeImport", "afterImport", "beforePlace", "afterPlace"}

repeat with myEventName in myEventNames make event listener with properties {event type:myEventName, handler:"yukino:GetEventInfo.applescript", captures:false}

end repeat end tell

Le script suivant est référencé par le script ci-dessus. La référence de fichier dans le script ci-dessus doit correspondre à l’emplacement de ce script sur votre disque. Pour consulter le script complet, voir GetEventInfo.applescript.

main(evt) on main(myEvent)

tell application "Adobe InCopy CS6" set myString to "Handling Event: " & event type of myEvent & return set myString to myString & "Target: " & name of target of myEvent & return set myString to myString & "Current: " & name of current target of myEvent & return set myString to myString & "Phase: " & my myGetPhaseName(event phase o f myEvent) & return

Page 85: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Exemple d’objet eventListener « afterNew » 85

set myString to myString & "Captures: " & captures of myEvent & return set myString to myString & "Bubbles: " & bubbles of myEvent & return set myString to myString & "Cancelable: " & cancelable of myEvent & return set myString to myString & "Stopped: " & propagation stopped of myEvent & return set myString to myString & "Canceled: " & default prevented of myEvent & return set myString to myString & "Time: " & time stamp of myEvent & return display dialog (myString)

end tell end main --Function returns a string corresponding to the event phase. on myGetPhaseName(myEventPhase)

tell application "Adobe InCopy CS6" if myEventPhase is at target then

set myString to "At Target" else if myEventPhase is bubbling phase then

set myString to "Bubbling" else if myEventPhase is capturing then

set myString to "Capturing" else if myEventPhase is done then

set myString to "Done" else if myEventPhase is not dispatching then

set myString to "Not Dispatching" else

set myString to "Unknown Phase" end if return myString

end tell end myGetPhaseName

L’exemple de script suivant permet de désactiver tous les objets event listeners pour l’objet d’application. Pour consulter le script complet, voir EventListenersOff.

--EventListenersOff.applescript --An InCopy CS6 AppleScript -- --Turns off all of the event listeners on the application object. tell application "Adobe InCopy CS6"

tell event listeners to delete end tell

Exemple d’objet eventListener « afterNew »L’événement afterNew est pratique pour ajouter des informations au document, notamment le nom de l’utilisateur, la date de création du document, les informations de copyright et toute autre information de suivi. L’exemple de script suivant permet d’ajouter ce type d’information aux métadonnées d’un document, également appelées informations de fichier ou informations XMP. Pour consulter le script complet, voir le script d’apprentissage AfterNew.

tell application "Adobe InCopy CS6" make event listener with properties {event type:"afterNew",

handler:"yukino:AfterNewHandler.applescript", captures:true} end tell

Page 86: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Evénements Exemple d’objet eventListener « afterNew » 86

Le script suivant est référencé par le script ci-dessus. La référence de fichier dans le script ci-dessus doit correspondre à l’emplacement de ce script sur votre disque. Pour consulter le script complet, voir AfterNewHandler.applescript.

--AfterNewHandler.applescript --An InCopy CS6 AppleScript -- main(evt) on main(myEvent)

tell application "Adobe InCopy CS6" set user name to "Adobe" set myDocument to document 1 tell metadata preferences of myDocument

set author to "Adobe Systems" set description to "This is an example document containing XMP metadata. Created: " & time stamp of myEvent

end tell end tell

end main

Page 87: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

8

Notes

Grâce aux fonctions de notes d’édition en ligne d’InDesign et d’InCopy, vous pouvez ajouter des commentaires et des remarques en tant que notes directement au texte sans que cela n’affecte le flux d’un article. Les fonctions d’annotation sont conçues pour fonctionner dans un environnement de groupe de travail. Vous pouvez coder les notes à l’aide de couleurs ou les désactiver selon certains critères.

Pour créer des notes, utilisez l’outil Note de la boîte à outils, la commande Notes > Nouvelle note ou l’icône Nouvelle note du panneau Notes.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script. Vous devez également savoir manipuler les notes dans InCopy.

Saisie et importation d’une noteCette section décrit le processus d’insertion d’une note dans vos documents InCopy. De la même manière que vous pouvez créer une note et remplacer son texte à l’aide de l’interface utilisateur d’InCopy, vous pouvez créer des notes et y insérer du texte à l’aide des scripts.

Ajout d’une note à un article

Pour ajouter une note à un article, utilisez la méthode add. L’exemple suivant ajoute une note au dernier point d’insertion. Pour consulter le script complet, voir InsertNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document tell myStory

--Add note to a default story. We'll use the last insertion point in the story. tell insertion point -1

--Add text to the note set myNote to make note set contents of text 1 of myNote to "This is a note."

end tell end tell

end tell

Statut de mise à jour du chapitre

CS6 Inchangé

87

Page 88: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Notes Conversion de notes et de texte 88

Remplacement du texte d’une note

Pour remplacer le texte d’une note, utilisez la propriété contents, comme illustré dans l’exemple suivant. Pour consulter le script complet, voir Replace.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNote to note 1 of myStory -- We'll use the last insertion point in the story. tell insertion point -1

--Add text to the note set contents of text 1 of myNote to "This is a note."

end tell end tell

Conversion de notes et de texte

Conversion d’une note en texte

Pour convertir une note en texte, utilisez la méthode convert to text, comme illustré dans l’exemple suivant. Pour consulter le script complet, voir ConvertToText.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNote to note 1 of myStory --Convert the note to text tell myNote

convert to text end tell

end tell

Conversion d’un texte en note

Pour convertir un texte en note, utilisez la méthode convert to note, comme illustré dans l’exemple suivant. Pour consulter le script complet, voir ConvertToNote.

tell application "Adobe InCopy CS6" --Select a text set myStory to story 1 of active document select word 1 of myStory tell selection

-- Convert the text to a note set myWords to convert to note

endtell end tell

Page 89: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Notes Développement et réduction de notes 89

Développement et réduction de notes

Réduction d’une note

L’extrait de script suivant montre comment réduire une note. Pour consulter le script complet, voir CollapseNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNote to note 1 of myStory --Collapse a note set collapsed of myNote to true

end tell

Développement d’une note

L’extrait de script suivant montre comment développer une note. Pour consulter le script complet, voir ExpandNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNote to note 1 of myStory --Expand a note set collapsed of myNote to false

end tell

Suppression d’une notePour supprimer une note, utilisez la méthode delete, comme illustré dans l’exemple suivant. Pour consulter le script complet, voir RemoveNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNote to note 1 of myStory --Remove the note delete myNote

end tell

Navigation entre les notes

Accès à la première note d’un article

L’extrait de script suivant décrit comment accéder à la première note d’un article. Pour consulter le script complet, voir FirstNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNotes to notes of myStory set FirstNote to first item of myNote --Add text to the first note set contents of text 1 of FirstNote to "This is the first note."

end tell

Page 90: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Notes Navigation entre les notes 90

Accès à la note suivante d’un article

L’extrait de script suivant décrit comment accéder à la note suivante d’un article. Pour consulter le script complet, voir NextNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document -- current Note set myCount to 1 set myNote to note myCount of myStory set myCount to myCount + 1 set myNextNote to note 2 of myStory --Add text to the next note set contents of text 1 of myNextNote to "This is the next note."

end tell

Accès à la note précédente d’un article

L’extrait de script suivant décrit comment accéder à la note précédente d’un article. Pour consulter le script complet, voir PreviousNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document -- current Note set myCount to 2 set myNote to note myCount of myStory -- previous Note set myCount to myCount - 1 set myPrevNote to note myCount of myStory --Add text to the previous note set contents of text 1 of myPrevNote to "This is the previous note."

end tell

Accès à la dernière note d’un article

L’extrait de script suivant décrit comment accéder à la dernière note d’un article. Pour consulter le script complet, voir LastNote.

tell application "Adobe InCopy CS6" set myStory to story 1 of active document set myNotes to notes of myStory set LastNote to last item of myNotes --Add text to the last note set contents of text 1 of LastNote to "This is the last note."

end tell

Page 91: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

9

Suivi des modifications

Les rédacteurs peuvent suivre, afficher, masquer, accepter et rejeter des modifications à mesure qu’un document progresse dans le processus de rédaction et d’édition. Toutes les modifications sont enregistrées et visualisées pour faciliter la révision d’un document.

Ce chapitre décrit comment automatiser avec des scripts les opérations les plus courantes appliquées au suivi des modifications.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script. Vous devez également savoir manipuler le texte dans InCopy et connaître la terminologie de base du domaine de la composition.

Suivi des modificationsCette section explique comment naviguer entre les modifications suivies, les accepter ou les rejeter à l’aide des scripts.

Lorsqu’une personne ajoute, supprime ou déplace du texte dans un article, la modification est répercutée dans les modes Epreuve en placard et Article.

Navigation entre les modifications suiviesSi l’article contient un enregistrement des modifications suivies, l’utilisateur peut les parcourir de façon séquentielle. Les scripts suivants montrent comment naviguer entre les modifications.

Le script suivant utilise les numéros d’index pour parcourir les modifications :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myStory to story 1 tell myStory

if (track changes) is true then set myChangeCounter to count set myChange to change 1

end if end tell

end tell end tell

Statut de mise à jour du chapitre

CS6 Inchangé

91

Page 92: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Suivi des modifications Suivi des modifications 92

Acceptation et rejet des modifications suivies

Lorsque vous (ou d’autres personnes) apportez une modification à un article, la fonction de suivi vous permet de passer en revue toutes les modifications et de décider ou non de les intégrer à l’article. Vous pouvez accepter et rejeter les modifications (texte ajouté, supprimé ou déplacé), effectuées par un autre utilisateur.

Dans le script suivant, la modification est acceptée :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myStory to story 1 tell myStory

set myChange = myStory change 1 tell myChange

accept end tell

end tell end tell

end tell

Dans le script suivant, la modification est rejetée :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myStory to story 1 tell myStory

set myChange = myStory change 1 tell myChange

reject end tell

end tell end tell

end tell

Informations sur les modifications faisant l’objet d’un suivi

Ces informations incluent la date et l’heure de la modification. Le script suivant affiche des informations sur une modification suivie :

--Shows how to get track change informations. tell application "Adobe InCopy CS6"

set myDocument to document 1 tell myDocument

set myStory to story 1 tell myStory

set myChange to change 1 tell myChange -- change type (inserted text/deleted text/moved text, r/o)

set myTypes to change type set myCharacters to characters set myDate to date set myInsertionPoints to insertion points set myLines to lines

-- paragraphs A collection of paragraphs. set myParagraphs to paragraphs

Page 93: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Suivi des modifications Préférences en matière de suivi des modifications 93

set myStoryOffset to story offset set myTextColumns to text columns set myTextStyleRanges to text style ranges set myTextsetiableInstances to text variable instances

-- The user who made the change. Note: Valid only when changes is true. set myUserName to user name -- Words A collection of words set myWords to words

end tell end tell

end tell end tell

Préférences en matière de suivi des modificationsLes préférences de suivi des modifications sont des paramètres destinés aux utilisateurs. Par exemple, vous pouvez indiquer quelles modifications (ajout, suppression ou déplacement de texte) feront l’objet d’un suivi. Vous pouvez préciser l’aspect de chaque type de modification suivie, mais aussi identifier les changements par des barres de couleurs dans les marges. Le script suivant montre comment définir et obtenir ces préférences :

tell application "Adobe InCopy CS6" set myTrackChangesPreference to track changes preferences tell myTrackChangesPreference

-- added background color choice (change background uses galley background color/change background uses user color/change background uses change pref color) : The background color option for added text.

set myAddedBackgroundColorChoice to added background color choice set added background color choice to change background uses change pref color --added text color choice (change uses galley text color/change uses change pref

color) : The color option for added text. set myAddedTextColorChoice to added text color choice set added text color choice to change uses change pref color --background color for added text (any) : The background color for added text,

specified as an InCopy UI color. Note: Valid only when added background color choice is change background uses change pref color.

set myBackgroundColorForAddedText to background color for added text set background color for added text to gray --background color for deleted text (any) : The background color for deleted

text, specified as an InCopy UI color. Note: Valid only when deleted background color choice is change background uses change pref color.

set myBackgroundColorForDeletedText to background color for deleted text set background color for deleted text to red --background color for moved text (any) : The background color for moved text,

specified as an InCopy UI color. Note: Valid only when moved background color choice is change background uses change pref color.

set myBackgroundColorForMovedText to background color for moved text set background color for moved text to pink --change bar color (any) : The change bar color, specified as an InCopy UI color. set myChangeBarColor to change bar color set change bar color to charcoal --deleted background color choice (change background uses galley background

color/change background uses user color/change background uses change pref color) : The

Page 94: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Suivi des modifications Préférences en matière de suivi des modifications 94

background color option for deleted text. set myDeletedBackgroundColorChoice to deleted background color choice set deleted background color choice to change background uses change pref color --deleted text color choice (change uses galley text color/change uses change

pref color) : The color option for deleted text. set myDeletedTextColorChoice to deleted text color choice set deleted text color choice to change uses change pref color --location for change bar (left align/right align) : The change bar location. set myLocationForChangeBar to location for change bar set location for change bar to left align --marking for added text (none/strikethrough/underline single/outline) : The

marking that identifies added text. set myMarkingForAddedText to marking for added text set marking for added text to strikethrough --marking for deleted text (none/strikethrough/underline single/outline) : The

marking that identifies deleted text. set myMarkingForDeletedText to marking for deleted text set marking for deleted text to underline single --marking for moved text (none/strikethrough/underline single/outline) : The

marking that identifies moved text. set myMarkingForMovedText to marking for moved text set marking for moved text to outline --moved background color choice (change background uses galley background

color/change background uses user color/change background uses change pref color) : The background color option for moved text.

set myMovedBackgroundColorChoice to moved background color choice set moved background color choice to change background uses galley background

color -- moved text color choice (change uses galley text color/change uses change pref

color) : The color option for moved text. set myMovedTextColorChoice to moved text color choice set moved text color choice to change uses change pref color -- If true, displays added text. set myShowAddedText to show added text set show added text to true -- If true, displays change bars. set myShowChangeBars to show change bars set show change bars to true -- If true, displays deleted text. set myShowDeletedText to show deleted text set show deleted text to true -- If true, displays moved text. set myShowMovedText to show moved text set show moved text to true -- If true, includes deleted text when using the Spell Check command. set mySpellCheckDeletedText to spell check deleted text set spell check deleted text to true

Page 95: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Suivi des modifications Préférences en matière de suivi des modifications 95

--The color for added text, specified as an InCopy UI color. Note: Valid only

when added text color choice is change uses change pref color. set myTextColorForAddedText to text color for added text set text color for added text to blue -- text color for deleted text (any) : The color for deleted text, specified as

an InCopy UI color. Note: Valid only when deleted text color choice is change uses change pref color.

set myTextColorForDeletedText to text color for deleted text set text color for deleted text to yellow -- The color for moved text, specified as an InCopy UI color. Note: Valid only

when moved text color choice is change uses change pref color. set myTextColorForMovedText to text color for moved text set text color for moved text to green

end tell end tell

Page 96: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

10

Affectations

Une affectation est un conteneur pour le texte et les graphiques placé dans un fichier InDesign qui peut être consulté et modifié dans InCopy. En général, une affectation contient du texte et des graphiques associés, comme le corps du texte, les légendes et les illustrations qui composent un article de magazine. Seule l’application InDesign permet de créer des affectations et des fichiers d’affectation.

Ce didacticiel explique comment automatiser par des scripts les opérations les plus courantes appliquées aux affectations.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script.

Objet affectationCette section explique comment travailler avec des affectations et des fichiers d’affectation. Grâce aux scripts, vous pouvez ouvrir le fichier d’affectation et obtenir les propriétés d’affectation.

Ouverture des fichiers d’affectation

Le script suivant indique comment ouvrir un fichier d’affectation :

tell application "Adobe InCopy CS6" set myDesktopFolder to path to desktop as string set myFile to myDesktopFolder & "a.icma" --Opens an existing document. You'll have to fill in your own file path --in the variable "myFile". set myDocument to open myFile tell myDocument

set myAssignement to assignment 1 end tell

end tell

Itérations dans les propriétés d’affectation

L’extrait de script suivant indique comment obtenir les propriétés d’affectation, comme le nom d’affectation, le nom d’utilisateur, l’emplacement du fichier d’affectation, ainsi que les options d’exportation de l’affectation.

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myAssignement to assignment 1 tell myAssignement

set myuserName to user name set myFilePath to file path set myDocPath to document path

Statut de mise à jour du chapitre

CS6 Inchangé

96

Page 97: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Affectations Article d’affectation 97

set myFramecolor to frame color set myincludeLinksWhenPackage to include links when package -- Export options for assignment files. -- ASSIGNED_SPREADS: Exports only spreads with assigned frames -- EMPTY_FRAMES: Exports frames but does not export content -- EVERYTHING: Exports the entire document. set myExportOptions to export options

end tell end tell

end tell

Assemblages d’affectationLes assemblages d’affectation (fichiers .incp créés par InCopy) sont des dossiers compressés qui contiennent les fichiers d’affectation. Une affectation peut être assemblée à l’aide de la méthode createPackage. L’exemple de script suivant utilise cette technique pour créer un fichier d’affectation :

tell application "Adobe InDesign CS6" set myDocument to document 1 tell myDocument

set myAssignement to assignment 1 tell myAssignement

if packaged is false then set myDesktopFolder to path to desktop as string set myFile to myDesktopFolder & "b.icap" create package myFile with FORWARD_PACKAGE

end if end tell

end tell end tell

Article d’affectationLe diagramme suivant illustre un modèle d’objet affectation InCopy. Un document d’affectation contient une ou plusieurs affectations ; une affectation ne contient aucun article ou peut en contenir au moins un. Chaque article affecté contient une référence à un article de texte ou à un article d’image.

Cette section explique le processus d’obtention d’articles affectés et décrit les propriétés d’article d’affectation.

document

assignment

assigned story

text/image story

1

1…*

0…*

1

1

1

Page 98: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

Affectations Article d’affectation 98

Objet article affecté

Le script suivant indique comment obtenir un article affecté à partir d’un objet affectation :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myAssignement to assignment 1 tell myAssignement

set myAssignmentStory to assigned story 1 end tell

end tell end tell

Itérations dans les propriétés de l’article affecté

Dans InCopy, les objets article affecté ont des propriétés. Le script suivant indique comment obtenir toutes les propriétés d’un objet article affecté :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

set myAssignement to assignment 1 tell myAssignement

set myAssignmentStory to assigned story 1 tell myAssignmentStory

set myName to name set myFilePath to file path set myStoryReference to story reference

end tell end tell

end tell end tell

Page 99: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

11

XML

XML (Extensible Markup Language) est un langage de balisage reposant sur le texte, créé et géré par le groupe World Wide Web Consortium (www.w3.org). Comme le langage HTML (Hypertext Markup Language), le langage XML utilise des chevrons pour délimiter les balises (par exemple, <article> ou <para>). Le langage HTML comprend un ensemble prédéfini de balises, tandis que le langage XML permet de décrire le contenu avec plus de précision en créant des balises personnalisées.

En raison de sa souplesse, le langage XML est de plus en plus utilisé comme format de stockage des données. InCopy propose un ensemble complet de fonctions d’importation de données XML dans des mises en page ; ces fonctions peuvent même être contrôlées à l’aide des scripts.

Vous devez avoir préalablement lu le Chapitre 2, « Prise en main » et savoir créer, installer et exécuter un script. Vous devez également posséder une certaine connaissance des formats XML, DTD et XSLT.

PrésentationComme le format XML concerne entièrement le contenu et non la mise en forme, son utilisation dans le cadre d’une mise en page peut se révéler un véritable défi. La stratégie InCopy face à XML est complète et souple, malgré un certain nombre de limites :

Une fois que les éléments XML sont importés dans un document InCopy, ils deviennent des éléments InCopy qui correspondent à la structure XML. Les représentations InCopy des éléments XML sont différentes des éléments XML proprement dits.

Chaque élément XML ne peut figurer qu’une seule fois dans une mise en page. Si vous souhaitez dupliquer les informations de l’élément XML dans la mise en page, vous devez dupliquer l’élément XML lui-même.

L’ordre d’affichage des éléments XML dans une mise en page dépend principalement de leur ordre d’affichage dans la structure XML.

Tout texte qui s’affiche dans un article associé à un élément XML fait partie des données de cet élément.

Meilleure méthode appliquée aux scripts XML dans InCopyIl est conseillé d’effectuer la majorité des opérations sur un fichier XML à l’extérieur d’InCopy, avant d’importer le fichier dans une mise en page InCopy. Ainsi, vous pouvez utiliser d’excellents outils, comme les analyseurs et les éditeurs XML.

Si vous devez réorganiser ou dupliquer des éléments dans une structure de données XML importante, le meilleur moyen consiste à transformer le format XML à l’aide du format XSLT. Cette opération s’effectue pendant l’importation du fichier XML.

Statut de mise à jour du chapitre

CS6 Inchangé

99

Page 100: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 100

Codage des éléments XML à l’aide des scriptsCette section décrit le mode de configuration des préférences générales XML et des préférences d’importation XML, le mode d’importation du format XML, la création d’éléments XML et l’ajout d’attributs XML. Les scripts de cette section illustrent les techniques d’utilisation du contenu XML ; vous trouverez les scripts permettant d’appliquer des attributs de mise en forme aux éléments XML à la section « Ajout d’éléments XML à un article » à la page 107.

Configuration des préférences XML

Vous pouvez définir l’aspect du panneau de la structure InCopy à l’aide de l’objet des préférences d’affichage XML, comme l’indique l’extrait de script suivant (dans le script d’apprentissage XMLViewPreferences) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

tell XML view preferences set show attributes to true set show structure to true set show tagged frames to true set show tag markers to true set show text snippets to true

end tell end tell

end tell

Vous pouvez également définir des préférences de balisage XML prédéfini (le nom des balises par défaut et les couleurs de l’interface utilisateur pour les tableaux et les articles) à l’aide de l’objet des préférences XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage XMLPreferences) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

tell XML preferences set default cell tag color to blue set default cell tag name to "cell" set default image tag color to brick red set default image tag name to "image" set default story tag color to charcoal set default story tag name to "text" set default table tag color to cute teal set default table tag name to "table"

end tell end tell

end tell

Page 101: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 101

Configuration des préférences d’importation du format XML

Avant d’importer un fichier XML, vous pouvez définir des préférences d’importation XML qui peuvent appliquer une transformation XSLT, gérer les espaces dans le fichier XML ou créer des éléments de texte de répétition. Pour cela, utilisez l’objet des préférences d’importation XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage XMLImportPreferences) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

tell XML import preferences set allow transform to false set create link to XML to false set ignore unmatched incoming to true set ignore whitespace to true set import CALS tables to true set import style to merge import set import text into tables to false set import to selected to false set remove unmatched existing to false set repeat text elements to true --The following properties are only used when the --allow transform property is set to true. --set transform filename to "yukino:myTransform.xsl" --If you have defined parameters in your XSL file, --you can pass them to the file during the XML import --process. For each parameter, enter a list containign two --strings. The first string is the name of the parameter, --the second is the value of the parameter. --set transform parameters to {{"format", "1"}}

end tell end tell

end tell

Importation du format XML

Une fois que vous avez défini les préférences d’importation du format XML, vous pouvez importer un fichier XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ImportXML) :

tell myDocument import XML from "yukino:completeDocument.xml" end tell

Si vous devez importer le contenu d’un fichier XML dans un élément XML spécifique, utilisez la méthode importXML de l’élément XML, à la place de la méthode correspondante du document. Voir l’extrait de script suivant (dans le script d’apprentissage ImportXMLIntoElement) :

tell myDocument set myXMLTag to make xml tag with properties{name:"xml_element"} set myXMLElement to make XML elemement with properties{markup tag:myXMLTag] --Import into the new XML element. tell myXMLElement

import from "yukino:completeDocument.xml" end tell

end tell

Page 102: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 102

Vous pouvez également définir la propriété import to selected de l’objet xml import preferences sur true (vrai), puis sélectionner l’élément XML et importer le fichier XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ImportXMLIntoSelectedXMLElement) :

tell myDocument set myXMLTag to make XML tag with properties{name: "xml_element"} tell XML element 1

set myXMLElement to make XML element with properties{markup tag: myXMLTag}

end tell tell XML import preferences

set import to selected to true end tell select myXMLElement import XML from "yukino:text.xml"

end tell

Création d’une balise XML

Les balises XML sont les noms des éléments XML à créer dans un document. Lorsque vous importez un contenu au format XML, le nom des éléments présents dans le fichier XML est ajouté à la liste des balises XML dans le document. Vous pouvez également créer directement des balises XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage MakeXMLTags) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

--You can create an XML tag without specifying a color for the tag. set myXMLTagA to make XML tag with properties {name:"XML_tag_A"} --You can define the highlight oclor o fthe XML tag. set myXMLTagB to make XML tag with properties {name:"XML_tag_B", color:gray} --...or you can proved an RGB array to set the color of the tag. set myXMLTagC to make XML tag with properties {name:"XML_tag_C", color:{0, 92, 128}}

end tell end tell

Chargement des balises XML

Vous pouvez importer des balises XML à partir d’un fichier XML sans importer le contenu XML du fichier. Cette opération peut être utile pour établir un mappage balise-style ou style-balise avant d’importer les données XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage LoadXMLTags) :

tell myDocument load xml tags from "yukino:test.xml"

end tell

Page 103: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 103

Enregistrement des balises XML

Tout comme vous pouvez charger des balises XML à partir d’un fichier, vous pouvez enregistrer des balises XML dans un fichier, comme l’illustre le script suivant. Seules les balises sont alors enregistrées dans le fichier XML ; les données du document n’y sont pas incluses. Comme vous l’espériez sans doute, ce processus est plus rapide que l’opération d’exportation du format XML, et le fichier généré est plus petit. L’exemple de script suivant permet d’enregistrer les balises XML (pour consulter le script complet, voir SaveXMLTags) :

save XML tags to "yukino:xml_tags.xml" version comments "Tag set created October 5, 2006"

Création d’un élément XML

Normalement, vous créez des éléments XML en important un fichier XML, mais vous pouvez également créer un élément XML à l’aide des scripts InCopy, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage CreateXMLElement) :

tell myDocument set myXMLTag to make xml tag with properties{name:"myXMLTag"} set myRootElement to xml element 1 tell myRootElement

set myXMLElement to make xml element with properties{markup tag:myXMLTag} end tell set contents of myXMLElement to "This is an XML element containing text."

end tell

Déplacement d’un élément XML

Vous pouvez déplacer des éléments XML dans la structure XML à l’aide de la méthode move, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage MoveXMLElement) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLTag"} set myRootElement to XML element 1 tell myRootElement

set myXMLElementA to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementA to "This is XML element A." set myXMLElementB to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementB to "This is XML element B."

end tell move myXMLElementA to after myXMLElementB --Place the root XML element so that you can see the result. tell story 1

place XML using myRootElement end tell

end tell end tell

Page 104: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 104

Suppression d’un élément XML

Un élément XML est supprimé à la fois de la mise en page et de la structure XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage DeleteXMLElement) :

tell xml element 1 of myRootXMLElement to delete

Duplication d’un élément XML

Lorsque vous dupliquez un élément XML, le nouvel élément XML s’affiche immédiatement après l’élément XML d’origine dans la structure XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage DuplicateXMLElement) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLTag"} set myRootElement to XML element 1 tell myRootElement

set myXMLElementA to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementA to "This is XML element A." set myXMLElementB to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementB to "This is XML element B."

end tell duplicate myXMLElementA --Place the root XML element so that you can see the result. tell story 1

place XML using myRootElement end tell

end tell end tell

Retrait d’éléments de la structure XML

Pour annuler une association entre un objet texte et un élément XML, utilisez la méthode untag, comme l’illustre le script suivant. Les objets ne sont pas supprimés, mais ils ne sont plus liés à un élément XML (lequel est supprimé). Le contenu de l’élément XML supprimé est alors associé à l’élément XML parent. Si l’élément XML est l’élément racine, les objets de mise en page (texte ou élément de page) associés à l’élément XML restent dans le document. (Pour consulter le script complet, voir UntagElement.)

tell XML element -2 to untag

Création d’un commentaire XML

Les commentaires XML sont utilisés pour effectuer des annotations dans des structures de données XML. Vous pouvez ajouter un commentaire XML en utilisant, par exemple, un script qui ressemble à l’extrait de script suivant (dans le script d’apprentissage MakeXMLComment) :

Page 105: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 105

tell myRootXMLElement set myXMLElement to make XML element with properties{markup tag:myXMLTag} tell myXMLElement

make xml comment with properties{contents:"This is an XML comment."} end tell

end tell

Création d’une instruction de traitement XML

Une instruction de traitement est un élément XML qui contient des indications pour l’application qui lit le document XML. Les instructions de traitement XML sont ignorées par InCopy, mais elles peuvent être insérées dans une structure XML InCopy pour être exportées dans d’autres applications. Un document XML peut contenir plusieurs instructions de traitement.

Une instruction de traitement XML comprend deux parties : cible et valeur. Exemple d’instruction de traitement XML :

<?xml-stylesheet type="text/css" href="generic.css"?>

L’extrait de script suivant permet d’ajouter une instruction de traitement XML (pour consulter le script complet, voir MakeProcessingInstruction) :

tell myRootXMLElement make xml processing instruction with properties{target:"xml-stylesheet

type=\"text/css\".", data:"href=\"generic.css\""} end tell

Utilisation des attributs XML

Les attributs XML sont des « métadonnées » qui peuvent être associées à un élément XML. Pour ajouter un attribut à un élément, utilisez un script qui ressemble à l’extrait suivant. Un élément XML peut comporter un nombre quelconque d’attributs XML, mais chaque nom d’attribut doit être unique pour un même élément (c’est-à-dire que vous ne pouvez pas avoir deux attributs nommés « id »).

L’extrait de script suivant permet d’ajouter un attribut XML à un élément XML (pour consulter le script complet, voir MakeXMLAttribute) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLElement"} set myRootXMLElement to XML element 1 tell myRootXMLElement

set myXMLElement to make XML element with properties {markup tag:myXMLTag} tell myXMLElement

make XML attribute with properties {name:"example_attribute", value:"This is an XML attribute."}

end tell end tell

end tell end tell

Page 106: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Codage des éléments XML à l’aide des scripts 106

Outre la création d’attributs directement à l’aide des scripts, vous pouvez convertir les éléments XML en attributs. Le contenu textuel de l’élément XML devient alors la valeur d’un attribut XML ajouté à l’élément XML parent. Comme le nom de l’élément XML devient le nom de l’attribut, cette méthode peut échouer si un attribut portant ce nom existe déjà dans l’élément XML parent. Si l’élément XML contient des éléments de page, ils sont supprimés de la mise en page.

Lorsque vous convertissez un attribut XML en élément XML, vous pouvez spécifier l’emplacement où le nouvel élément XML est ajouté. Le nouvel élément XML peut être ajouté au début ou à la fin de l’attribut XML parent. Par défaut, le nouvel élément est ajouté au début de l’élément parent.

Vous pouvez également spécifier une balise de marquage XML pour le nouvel élément XML. Si vous ignorez ce paramètre, le nouvel élément XML est créé avec la même balise XML que celle de l’élément XML contenant l’attribut XML.

Le script suivant permet de convertir un élément XML en attribut XML (pour consulter le script complet, voir le script d’apprentissage ConvertElementToAttribute) :

tell myDocument set myXMLTag to make XML tag with properties {name:"myXMLElement"} set myRootXMLElement to XML element 1

end tell tell myRootXMLElement

set myXMLElement to make XML element with properties {markup tag:myXMLTag, contents:"This is content in an XML element."}

end tell tell myXMLElement

convert to attribute end tell

Vous pouvez également convertir un attribut XML en élément XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ConvertAttributeToElement) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLElement"} set myRootXMLElement to XML element 1

end tell tell myRootXMLElement

set myXMLElementA to make XML element with properties {markup tag:myXMLTag, contents:"A"} set myXMLElementB to make XML element with properties {markup tag:myXMLTag, contents:"B"} set myXMLElementC to make XML element with properties {markup tag:myXMLTag, contents:"C"} set myXMLElementD to make XML element with properties {markup tag:myXMLTag, contents:"D"}

end tell tell myXMLElementB

set myAttribute to make XML attribute with properties {name:"example_attribute", value:"This is an XML attribute."}

end tell tell myAttribute

convert to element located element end markup tag myXMLTag end tell

end tell

Page 107: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 107

Utilisation des articles XML

Lorsque vous importez des éléments XML qui ne sont pas associés à un élément de mise en page (article ou élément de page), ils sont stockés dans un article XML. Vous pouvez utiliser le texte d’éléments XML non placés, comme vous le feriez s’il s’agissait du texte d’un bloc. L’extrait de script suivant explique comment procéder (pour consulter le script complet, voir XMLStory) :

set myXMLStory to xml story 1 of myDocument set the point size of text 1 of myXMLStory to 72

Exportation du format XML

Pour exporter des données XML à partir d’un document InCopy, exportez la structure XML entière dans le document ou un élément XML (y compris les éléments XML enfants qu’il contient). L’extrait de script suivant montre comment procéder (pour consulter le script complet, voir ExportXML) :

export to "yukino:test.xml" format "XML"

Ajout d’éléments XML à un articlePrécédemment, nous avons étudié le processus d’importation des données XML dans les documents InCopy et l’utilisation de la structure XML dans un document. Dans cette section, nous allons aborder les techniques d’importation des données XML dans un article et l’application d’attributs de mise en forme.

Association d’éléments XML à du texte

Pour associer un texte à un élément XML existant, utilisez la méthode place xml. Elle consiste à remplacer le contenu de l’élément de page par le contenu de l’élément XML, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage PlaceXML) :

tell myDocument tell story 1

plac XML using myRootXMLElement end tell

end tell

Pour associer un objet texte existant à un élément XML existant, utilisez la méthode markup. Elle consiste à fusionner le contenu de l’élément XML (le cas échéant) avec le contenu de l’objet texte. L’extrait de script suivant illustre l’utilisation de la méthode markup (pour consulter le script complet, voir Markup) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLElement"} set myRootXMLElement to XML element 1 --Place the XML root element so that you can see --the result in the Structure panel. tell story 1

place XML using myRootXMLElement set myString to "This is the first paragraph in the story.\r" set myString to myString & "This is the second paragraph in the story.\r" set myString to myString & "This is the third paragraph in the story.\r" set myString to myString & "This is the fourth paragraph in

Page 108: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 108

the story.\r" set contents to myString

end tell tell myRootXMLElement

set myXMLElement to make XML element with properties {markup tag:myXMLTag}

end tell tell paragraph 3 of story 1

markup using myXMLElement end tell

end tell end tell

Insertion d’un texte dans et autour des éléments de texte XML

Lorsque vous insérez des données XML dans un article InCopy, vous devez souvent ajouter des espaces (par exemple, des caractères de retour chariot et de tabulation) et du texte statique (étiquettes « nom » ou « adresse ») au texte des éléments XML. L’exemple de script suivant permet d’ajouter du texte à l’intérieur et autour des éléments XML (pour consulter le script complet, voir InsertTextAsContent) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set myXMLTag to make XML tag with properties {name:"myXMLElement"} set myRootXMLElement to XML element 1 tell myRootXMLElement

set myXMLElementA to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementA to "This is a paragraph in an XML story." set myXMLElementB to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementB to "This is a another paragraph in an XML story." set myXMLElementC to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementC to "This is the third paragraph in an XML story." set myXMLElementD to make XML element with properties {markup tag:myXMLTag} set contents of myXMLElementD to "This is the last paragraph in an XML story." tell myXMLElementA

--By inserting the return character after the XML element, the --character becomes part of the content of the parent XML element, --and not part of the content of the XML element itself. insert text as content using return position after element

end tell tell myXMLElementB

insert text as content using "Static text: " position before element insert text as content using return position after element

end tell tell myXMLElementC

insert text as content using "Text at the start of an element: " position element start insert text as content using " Text at the end of an element. " position element end

Page 109: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 109

end tell tell myXMLElementD

insert text as content using "Text before the element: " position before element insert text as content using " Text after the element. " position after element

end tell end tell tell story 1

place XML using myRootXMLElement end tell

end tell end tell

Mappage des balises aux styles

Le moyen le plus rapide d’appliquer une mise en forme aux éléments de texte XML est de recourir à la méthode xml import maps, appelée également mappage balise-style. Vous pouvez alors associer une balise XML spécifique à un style de paragraphe ou de caractère. Lorsque vous utilisez la méthode map tags to styles du document, InCopy applique le style au texte, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage MapTagsToStyles) :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

--Create a tag to style mapping. make XML import map with properties {markup tag:"heading_1", mapped style:"heading 1"} make XML import map with properties {markup tag:"heading_2", mapped style:"heading 2"} make XML import map with properties {markup tag:"para_1", mapped style:"para 1"} make XML import map with properties {markup tag:"body_text", mapped style:"body text"} --Apply the xML tag to style mapping map XML tags to styles

end tell --Place the story so that you can see the result of the change. tell story 1 of myDocument

place XML using XML element 1 of myDocument end tell

end tell

Mappage des styles aux balises

Lorsque vous avez mis en forme un texte qui n’est pas associé à des éléments XML, et que vous souhaitez placer ce texte dans une structure XML, utilisez le mappage style-balise pour associer les styles de paragraphe et de caractère aux balises XML. Pour cela, utilisez les objets xml export maps pour créer les liens entre les balises et les styles XML, puis utilisez la méthode map styles to tags pour créer les éléments XML correspondants, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage MapStylesToTags) :

Page 110: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 110

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

--Create a tag to style mapping. make XML export map with properties {markup tag:"heading_1", mapped style:"heading 1"} make XML export map with properties {markup tag:"heading_2", mapped style:"heading 2"} make XML export map with properties {markup tag:"para_1", mapped style:"para 1"} make XML export map with properties {markup tag:"body_text", mapped style:"body text"} --Apply the style to xml tag mapping. map styles to XML tags

end tell end tell

Une autre méthode consiste tout simplement à utiliser le script pour créer une nouvelle balise XML pour chacun des styles de paragraphe ou de caractère du document, puis à appliquer le mappage style-balise, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage MapAllStylesToTags) :

tell application "Adobe InCopy CS6" set myDocument to document 1 tell myDocument

--Create a tag to style mapping. repeat with myParagraphStyle in paragraph styles

set myParagraphStyleName to name of myParagraphStyle set myXMLTagName to my myReplace(myParagraphStyleName, " ", "_") set myXMLTagName to my myReplace(myXMLTagName, "[", "") set myXMLTagName to my myReplace(myXMLTagName, "]", "") set myMarkupTag to make XML tag with properties {name:myXMLTagName} make XML export map with properties {markup tag:myMarkupTag, mapped style:myParagraphStyle}

end repeat --Apply the style to XML tag mapping. map styles to XML tags

end tell end tell

Application des styles aux éléments XML

Outre l’utilisation des mappages balise-style et style-balise ou l’application des styles au texte et aux éléments de page associés aux éléments XML, vous pouvez également appliquer directement des styles aux éléments XML. Le fragment de script suivant vous montre comment utiliser les méthodes apply paragraph style et apply character style. (Pour consulter le script complet, voir ApplyStylesToXMLElements.)

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

set horizontal measurement units of view preferences to points set vertical measurement units of view preferences to points --Create a series of XML tags. set myHeading1XMLTag to make XML tag with properties {name:"heading_1"} set myHeading2XMLTag to make XML tag with properties {name:"heading_2"} set myPara1XMLTag to make XML tag with properties {name:"para_1"} set myBodyTextXMLTag to make XML tag with properties {name:"body_text"} --Create a series of paragraph styles.

Page 111: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 111

set myHeading1Style to make paragraph style with properties {name:"heading 1", point size:24} set myHeading2Style to make paragraph style with properties {name:"heading 2", point size:14, space before:12} set myPara1Style to make paragraph style with properties {name:"para 1", point size:12, first line indent:0} set myBodyTextStyle to make paragraph style with properties {name:"body text", point size:12, first line indent:24} --Create a character style. set myCharacterStyle to make character style with properties {name:"Emphasis", font style:"Italic"} --Add XML elements. set myRootXMLElement to XML element 1 tell myRootXMLElement

set myXMLElementA to make XML element with properties {markup tag:myHeading1XMLTag, contents:"Heading 1"} tell myXMLElementA

insert text as content using return position after element apply paragraph style using myHeading1Style clearing overrides yes

end tell set myXMLElementB to make XML element with properties {markup tag:myPara1XMLTag, contents:"This is the first paragraph in the article."} tell myXMLElementB

insert text as content using return position after element apply paragraph style using myPara1Style clearing overrides yes

end tell set myXMLElementC to make XML element with properties {markup tag:myBodyTextXMLTag, contents:"This is the second paragraph in the article."} tell myXMLElementC

insert text as content using return position after element apply paragraph style using myBodyTextStyle clearing overrides yes

end tell set myXMLElementD to make XML element with properties {markup tag:myHeading2XMLTag, contents:"Heading 2"} tell myXMLElementD

insert text as content using return position after element apply paragraph style using myHeading2Style clearing overrides yes

end tell set myXMLElementE to make XML element with properties {markup tag:myPara1XMLTag, contents:"This is the first paragraph following the subhead."} tell myXMLElementE

insert text as content using return position after element apply paragraph style using myPara1Style clearing overrides yes

end tell set myXMLElementF to make XML element with properties {markup tag:myBodyTextXMLTag, contents:"Note:"} tell myXMLElementF

insert text as content using " " position after element apply character style using myCharacterStyle

end tell set myXMLElementG to make XML element with properties {markup tag:myBodyTextXMLTag, contents:"This is the second paragraph following the subhead."} tell myXMLElementG

insert text as content using return position after element apply paragraph style using myBodyTextStyle clearing overrides no

end tell

Page 112: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 112

end tell end tell --Place the story so that you can see the result of the change. tell story 1 of myDocument

place XML using myRootXMLElement end tell

end tell

Utilisation des tableaux XML

InCopy importe automatiquement les données XML dans les cellules du tableau lorsque les données sont balisées à l’aide du marquage de tableau standard HTML. Si vous ne pouvez pas ou préférez ne pas utiliser le balisage de tableau par défaut, InCopy permet de convertir les éléments XML en tableau à l’aide de la méthode convert element to table.

Pour utiliser cette méthode, les éléments XML à convertir en tableau doivent être conformes à une structure spécifique. Chaque rangée du tableau doit correspondre à un élément XML spécifique, et cet élément doit contenir une série d’éléments XML correspondant aux cellules de la rangée. L’extrait de script suivant explique comment utiliser cette méthode (pour consulter le script complet, voir ConvertXMLElementToTable). L’élément XML utilisé pour désigner la rangée du tableau est utilisé par ce processus.

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

--Create a series of XML tags. set myRowTag to make XML tag with properties {name:"Row"} set myCellTag to make XML tag with properties {name:"Cell"} set myTableTag to make XML tag with properties {name:"Table"} --Add XML elements. set myRootXMLElement to XML element 1 tell myRootXMLElement

set myTableXMLElement to make XML element with properties {markup tag:myTableTag} tell myTableXMLElement

repeat with myRowCounter from 1 to 6 set myXMLRow to make XML element with properties {markup tag:myRowTag} tell myXMLRow

set myString to "Row " & myRowCounter repeat with myCellCounter from 1 to 4

make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}

end repeat end tell

end repeat convert element to table row tag myRowTag cell tag myCellTag

end tell end tell --Place the story so that you can see the result of the change. tell story 1 of myDocument

place XML using XML element 1 of myDocument end tell

end tell end tell

Page 113: Adobe InCopy CS6 Scripting Guide...chances, y compris, le cas échéant, les dispositions du décret-loi (Executive Order) 11246, tel qu’amendé, la section 402 de l’Acte d’assistance

XML Ajout d’éléments XML à un article 113

Une fois que vous utilisez un tableau contenant des éléments XML, vous pouvez appliquer directement des styles de tableau et de cellule aux éléments XML, au lieu d’appliquer les styles aux tableaux ou aux cellules associés aux éléments XML. Pour cela, utilisez les méthodes applyTableStyle et applyCellStyle, comme l’illustre l’extrait de script suivant (dans le script d’apprentissage ApplyTableStyle) :

tell application "Adobe InCopy CS6" set myDocument to make document tell myDocument

--Create a series of XML tags. set myRowTag to make XML tag with properties {name:"Row"} set myCellTag to make XML tag with properties {name:"Cell"} set myTableTag to make XML tag with properties {name:"Table"} --Create a table style and a cell style. set myTableStyle to make table style with properties {name:"myTableStyle", start row fill color:color "Black", start row fill tint:25, end row fill color:color "Black", end row fill tint:10} set myCellStyle to make cell style with properties {name:"myCellStyle", fill color:color "Black", fill tint:45} --Add XML elements. set myRootXMLElement to XML element 1 tell myRootXMLElement

set myTableXMLElement to make XML element with properties {markup tag:myTableTag} tell myTableXMLElement

repeat with myRowCounter from 1 to 6 set myXMLRow to make XML element with properties {markup tag:myRowTag} tell myXMLRow

set myString to "Row " & myRowCounter repeat with myCellCounter from 1 to 4

make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}

end repeat end tell

end repeat set myTable to convert element to table row tag myRowTag cell tag myCellTag

end tell end tell set myTableXMLElement to XML element 1 of XML element 1 tell myTableXMLElement

apply table style using myTableStyle with clearing overrides tell XML element 1 to apply cell style using myCellStyle tell XML element 4 to apply cell style using myCellStyle tell XML element 9 to apply cell style using myCellStyle tell XML element 14 to apply cell style using myCellStyle tell XML element 15 to apply cell style using myCellStyle tell XML element 20 to apply cell style using myCellStyle

end tell end tell set alternating fills of myTable to alternating rows --Place the story so that you can see the result of the change. tell story 1 of myDocument

place XML using XML element 1 of myDocument end tell

end tell