Guide des scripts d’Adobe®InCopy®CS6: AppleScript
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)
CS6Mis à jourDans tout le document, CS5 est remplacé par CS6 et version 7.0 par version 8.0.
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 logoAdobe, CreativeSuite, InCopy, InDesign, Illustrator et Photoshop sont des marques ou des marques
déposées d’AdobeSystemsIncorporated aux Etats-Unis et/ou dans d’autres pays. Microsoft et Windows sont des
marques ou des marques déposées de MicrosoftCorporation aux Etats-Unis et dans d’autres pays. Apple et MacOS sont
des marques d’AppleComputer,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, SanJose, Californie95110, 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’article48C.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’article48C.F.R. §12.212 ou48C.F.R. §227.7202, selon
le cas. Conformément aux articles 48C.F.R. §12.212 ou48C.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ésici. 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, SanJose, CA95110-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 section402
de l’Acte d’assistance à la réhabilitation des vétérans du Vietnam (the Vietnam Era Veterans Readjustment Assistance Act)
de1974 (38USC4212) et la section503 de l’Acte de réhabilitation (RehabilitationAct) de1973, tel qu’amendé, ainsi que
les règlements de l’article41C.F.R., sections60-1 à 60-60, 60-250 et60-741. Les règlements et la clause d’action
affirmative contenus dans la phrase précédente doivent être inclus comme référence.
XUtilisation de l’environnement de création de scripts Adobe®InCopy®
XUtilisation des fonctions avancées de création de scripts
XUtilisation et saisie de texte dans un document InCopy, notamment recherche et modification de texte
XCréation de boîtes de dialogue et autres éléments d’interface utilisateur
XPersonnalisation et ajout de menus et création d’actions de menu
XRéponse aux événements de l’interface utilisateur
XUtilisation du langageXML, de la création d’élémentsXML et l’importation de donnéesXML à l’ajout
d’élémentsXML à une mise en page
Utilisation des scripts de ce document
La 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 archivezip, accessible depuis la
page d’accueil des scripts InCopy, à l’adresse suivante:
l’archive, déplacez les dossiers correspondant au(x) langage(s) de script de votre choix dans le dossier
ScriptsPanel du dossierScripts, situé dans le dossier de l’applicationInCopy. Vous pouvez alors exécuter
les scripts à partir du panneauScripts de votre applicationInCopy.
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».
. Après avoir téléchargé et décompressé
7
CHAPITRE 1: IntroductionPour plus de détails 8
Pour plus de détails
Vous trouverez plus de détails sur la création de scriptsInCopy sur le forum des utilisateurs consacré aux
scriptsInCopy (en anglais), à l’adresse suivante: http://www.adobeforums.com
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.
. Dans ce forum, les
A propos d’InCopy
InCopy est une application d’édition de texte collaborative développée pour une utilisation conjointe avec
AdobeInDesign®. 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 InDesign
Les 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:
XVous pouvez exporter un fichierICML (basé surIDML).
XVous pouvez exporter un fichierINCX (basé surINX).
Il existe deux scénarios courants d’exportation à partir d’InDesign qui font appel à InCopy:
XLes articles exportés à partir d’InDesign en tant que fichiers InCopy sont des fichiers ou des fluxXML;
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/fluxXML peuvent être utilisées sans InDesign/InCopy
(pour les moteurs de recherche, outils de base de données, etc.).
XLes 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 fichiersInCopy.
informations relatives à la géométrie et les relations entre les fichiers sont incluses dans le fichier
Les
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».
CHAPITRE 1: IntroductionRelations entre les fichiers InCopy et InDesign 9
Articles
Chaque 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 langageXML. Ceci signifie que des donnéesXML peuvent contenir
d’autres donnéesXML. 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 formatICML/INCX ou, si l’article possède une
structure, la structure logique peut être exportée au formatXML.
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éesXML, 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 documentInDesign. 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 chargeXMP.
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
fichiersInCopy. Pour plus de détails, voir le Chapitre 11, «
XML».
CHAPITRE 1: IntroductionConception et architecture 10
Modèle de document
Les documents InDesign sont à la base de tout le contenuInDesign. 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 fichierINX ouIDML 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 fichierInDesign stockée dans un fichierXML. 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ésentationIDML 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.
FormatICML
Chaque fichier ou flux InCopy utilise le langageXML. Ceci permet de facilement analyser les fichiers
InCopy et de les ouvrir dans n’importe quel éditeur de texte.
FormatINCX
Le format INCX est la représentationINX d’un article InCopy. Ce format n’est pas aussi convivial que le
formatICML, mais il prend en charge les flux de travailINCX.
CHAPITRE 1: IntroductionConception 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éesXMP
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 fichierInCopy. 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 SDKXMP.
2
Statut de mise à jour du chapitre
CS6Mis à jourRéférences à CS5 supprimées ou modifiées.
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 utilisateursd’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 scriptsInCopy. Ce document traite également de l’installation
et de l’exécution d’un scriptInCopy, ainsi que des capacités et limites des scriptsInCopy. 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
utilisateurInCopy. 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éesXML 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 toutentier.
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 documentInCopy 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 kitSDK (Software Developer’s Kit) d’InCopy, qui vous indique
comment écrire des modules externes compilés à l’aide du langageC++.
Ce document traite d’AdobeInDesign® et d’InCopy, car InCopy est quasiment toujours utilisé en
association avec des documentsInDesign. En outre, la création de scripts InDesign est très proche de celle
de scriptsInCopy. Vous trouverez de plus amples détails sur la création de scriptsInDesign dans le
Didacticiel de scripts AdobeInDesign et le Guide des scripts d’AdobeInDesign.
Installation des scripts
Pour installer un script InCopy, il vous suffit de placer le fichier de script dans le dossier ScriptsPanel du
dossierScripts, situé dans le dossier de l’applicationInCopy.
Vous pouvez également placer le script dans le dossier ScriptsPanel 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:
MacOS®:
/Users/<username>/Library/Preferences/Adobe InCopy/
Version
8.0/<locale>/Scripts
12
Prise en mainExécution de scripts 13
Une fois dans le dossier, le script s’affiche dans le panneauScripts de l’applicationInCopy (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 ScriptsPanel. Ils s’afficheront dans le panneauScripts.
Exécution de scripts
Pour exécuter un script, vous devez afficher le panneauScripts (choisissez la commande Fenêtre>Scripts), puis
cliquer deux fois sur le nom du script dans le panneauScripts. De nombreux scripts affichent des éléments
d’interface utilisateur (boîtes de dialogue ou panneaux, parexemple), ainsi que des messages d’alerte, si nécessaire.
Utilisation du panneauScripts
Le panneauScripts peut exécuter des AppleScripts (fichiers avec l’extension.spt, .asou.applescript)
compilés ou non, des JavaScripts (fichiers avec l’extension
l’extension
Pour modifier un script affiché dans le panneauScripts, cliquez deuxfois sur le nom du script tout en
maintenant la toucheOption (MacOS) ouAlt (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 panneauScripts, cliquez deuxfois sur le nom du
script tout en maintenant la toucheCommande (MacOS) ou les touches Ctrl+Maj (Windows) enfoncées.
Vous pouvez également choisir la commande Faireapparaître dans le Finder (MacOS) ou Faireapparaître
dans l’Explorateur (Windows), dans le menu du panneauScripts. Le dossier contenant le script s’ouvre
dans le Finder (MacOS) ou l’Explorateur (Windows).
.vbs) ou des programmes exécutables à partir de ce panneau.
.js ou.jsx), des VBScripts (fichiers avec
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 commandeAnnuler dans le menuEdition.
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> Raccourcisclavier,
sélectionnez un ensemble de raccourcis modifiable dans le menuEnsemble, puis sélectionnez
l’optionScripts dans le menuZone duproduit. Une liste de scripts apparaît dans le panneauScripts.
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 AppleScript
Pour écrire des AppleScripts, vous devez posséder AppleScript version1.6 ou supérieure, ainsi qu’un
éditeur de scriptsAppleScript. AppleScript est fourni avec tous les systèmes Apple® et peut être téléchargé
gratuitement à partir du siteWebd’Apple. L’éditeur de scripts Apple est fourni avec MacOS; vous pouvez y
accéder depuis les menus:
Des éditeurs de script tiers, tels que ScriptDebugger (de Late Night Software,
http://www.latenightsw.com
Applications > AppleScript > Script Editor
), sont également disponibles.
Prise en mainUtilisation des scripts de ce document 14
Utilisation des scripts de ce document
Pour 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
ScriptsPanel. 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 AdobePDF et collez-le dans l’Editeur AppleScript.
2.Enregistrez le script dans un fichier de texte brut dans le dossier ScriptsPanel (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 panneauScripts.
4.Pour exécuter le script, cliquez deux fois sur son nom dans le panneauScripts.
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.
EMARQUE : si vous copiez et collez des scripts de ce document, soyez conscient que les sauts de ligne
R
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’archivezip.
Votre premier script InCopy
Nous allons maintenant créer un scriptInCopy 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:
XEtablissement de la communication avecInCopy
XCréation d’un document
XAjout 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
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 ScriptsPanel (voir
la section «
dans le panneauScripts ou cliquez sur le boutonExécuter dans la fenêtre de l’éditeur de scripts.
Installation des scripts » à la page 12). Pour exécuter le script, cliquez deux fois sur son nom
HelloWorld.applescript):
Prise en mainTerminologie des scripts et modèle d’objet InCopy 15
Analyse du script
Cette section présente une analyse détaillée du script HelloWorld.
1.Etablissement de la communication avec l’objet d’applicationInCopy
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 unechaîne
set contents of myStory to "Hello World!"
Terminologie des scripts et modèle d’objet InCopy
Maintenant que vous avez créé votre premier script InCopy, le moment est venu de vous familiariser avec
la terminologie des langages de script engénéral, et d’InCopy enparticulier.
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
ou placez le commentaire entre
--this is a comment
(* and so is this *)
-- (deuxtirets) à gauche du commentaire
(*et*). Par exemple:
Prise en mainTerminologie 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 scriptsInCopy. 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 scriptsInCopy.
Type de valeurNatureExemple
BooleanTrue ou False logique.
IntegerNombres entiers (sans virgule).
True
14
Les entiers peuvent être positifs ou
négatifs.
Fixed or realNombre très précis pouvant être
13.9972
décimal.
StringSérie de caractères de texte. Les
"I am a string"
chaînes de texte sont présentées
entre guillemets anglais.
ListListe de valeurs (ces valeurs
{"0p0", "0p0", "16p4", "20p6"}
pouvant être de tout type).
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 objetInCopy. 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 accompagnantInCopy, les variables
commencent par
termes du langage de script.
my. Vous pouvez ainsi différencier facilement les variables créées dans un script des
Prise en mainTerminologie 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 quex ouc, parexemple. 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. EnAppleScript, le premier élément d’un tableau est l’élément1:
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, parexemple, 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 variablemyWidth.
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.
Prise en mainTerminologie des scripts et modèle d’objet InCopy 18
EnAppleScript, 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 12points, définissez le corps sur 10points». 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ôle
Si 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 structuredecontrô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.
Gestionnaires
Les 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 InCopy
Lorsque vous pensez aux documentsInCopy 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
planchestypes. 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 fichiersEPS ou des fichiersPDF; les groupes
contiennent d’autres éléments de page. Tous ces éléments sont les objets qui composent une
publicationInDesign, et qui sont utilisés pour écrire les scriptsInDesign etInCopy.
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’applicationInCopy. 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 dansInCopy est votre connaissance de
l’applicationelle-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.
Prise en mainTerminologie des scripts et modèle d’objet InCopy 19
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
Les propriétés possèdent des valeurs. Ainsi, le corps des caractères du texte peut être représenté par un
nombre (enpoints) 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 encremélangée ou une nuance.
Les propriétés peuvent être en lecture/écriture ou en lectureseule. Vous pouvez définir les propriétés en
lecture/écriture sur d’autres valeurs, mais pas les propriétés en lectureseule.
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’objetInCopy. Ce diagramme ne représente pas
la liste complète des objets disponibles dans les scriptsInCopy. Il s’agit simplement d’une structure
conceptuelle permettant de comprendre la relation entre les types d’objets.
Prise en mainTerminologie des scripts et modèle d’objet InCopy 20
Les objets figurant dans le diagramme sont expliqués dans le tableau suivant:
Te rm eS ig n if i ca ti o n
ApplicationInCopy
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
utilisateurd’InCopy. Vous pouvez attacher des scripts aux menus pour exécuter des
commandes.
Application
methods
Application
preferences
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.
Parexemple, les préférences de texte, les préférences d’exportationPDF 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.
BooksUne collection de livres ouverts.
DocumentUn document InCopy.
Document
defaults
Document
elements
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.
Parexemple, 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émentsXML, ainsi que tout autre
type d’objet que vous pouvez importer ou créer.
Document
events
Document
methods
Document
preferences
Document
properties
Les événements qui se produisent au niveau du document, parexemple, l’importation
de texte (voir Application events plus haut dans le tableau).
Les opérations que le document peut effectuer, notamment fermer, imprimer ou
exporter un document.
Les préférences d’un document, telles que les préférences de repères, d’affichage ou de
document.
Par exemple, le nom de fichier du document, le nombre de pages ou l’emplacement de
l’origine (pointzéro).
DocumentsUne collection de documents ouverts.
LibrariesUne collection de bibliothèques ouvertes.
PageUne page dans un document InCopy.
Prise en mainTerminologie des scripts et modèle d’objet InCopy 21
Te rm eS ig n if i ca ti o n
Page itemTout 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
StoriesLe texte dans un documentInCopy.
Text objects Les caractères, mots, lignes, paragraphes et colonnes de texte sont des exemples
Les pages ou les planches dans un documentInCopy.
d’objets texte dans un articleInCopy.
Consultation du modèle d’objet InCopy
Vous pouvez afficher le modèle d’objetInCopy à 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.
Prise en mainTerminologie des scripts et modèle d’objet InCopy 22
4.Sélectionnez votre copie d’InCopy et cliquez surOK. 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éex et sa composante verticale,y. Vous pouvez voir ces coordonnées dans le
panneauTransformation ouContrôle lorsqu’un objet est sélectionné avec l’outilSélection. Comme dans
l’interface utilisateur d’InCopy, les coordonnées sont mesurées par rapport à l’emplacement actuel de
l’origine (pointzéro) de la règle.
Il existe une différence entre les coordonnées utilisées dansInCopy et le système de coordonnées
géométrique traditionnel. Sur l’axe vertical (ouy) d’InCopy, les coordonnées au-dessous de l’origine sont
des nombres positifs, et celles situées au-dessus, des nombres négatifs.
Prise en mainAjout de caractéristiques à «HelloWorld» 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 panneauTransformation 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 panneauTransformation. 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.
RemplacementSignificationExemple
ccicéros (lec peut être suivi de didots, si nécessaire)1.4c
cmcentimètres.635cm
i (or in)pouces .25i
mmmillimètres6.35mm
ppicas (lep peut être suivi de points, si nécessaire)1p6
ptpoints18pt
Ajout de caractéristiques à «HelloWorld»
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:
XObtention du document actif
XChangement de la mise en forme du texte dans son bloc
XAjout 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
2.Dans l’éditeur de script, choisissez la commande Fichier> Nouveau pour créer un script.
HelloWorld.applescript
pour créer un nouveau document.
Prise en mainAjout de caractéristiques à «HelloWorld» 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 panneauScripts.
3
Statut de mise à jour du chapitre
CS6Modifié« Versionnage des scripts » à la page 26 et ses trois sous-sections ont été mises à jour, corrigées et clarifiées.
Fonctions de scripts
Ce chapitre décrit les techniques de scripts en relation avec l’environnement de scriptInCopy. 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:
XObjet script preferences et ses propriétés
XRéférence au script d’exécution
XExécution des scripts dans les versions antérieures du modèle d’objet de script
XMéthode do script pour exécuter des scripts
XExé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
scriptsInCopy dans le langage de votre choix.
Préférences des scripts
L’o b j e t scriptpreferences fournit les objets et les propriétés liés au mode d’exécution des
scriptsInCopy. Le tableau suivant décrit plus en détail chaque propriété de l’objet script preferences:
PropriétéDescription
enable redrawActive ou désactive la réactualisation de l’écran pendant l’exécution d’un
scripts folderChemin d’accès au dossier des scripts.
scripts listListe des scripts disponibles. Cette propriété représente un ensemble
script dans le panneauScripts.
d’éléments (tableau de données) sous la forme suivante:
[[fileName, filePath], …]
fileName
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.
correspond au nom du fichier de script et filePath au chemin
25
Fonctions de scriptsObtention du script en cours 26
PropriétéDescription
user interaction levelCette 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
interact, InCopy n’affiche pas d’alertes, ni de boîtes de dialogue;
définissez-la sur
désactiver les boîtes de dialogue, etsur
interact with alerts pour activer les alertes mais
interact with all pour rétablir
never
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
l’interaction utilisateur (en définissant la propriété sur
never interact avant d’ouvrir le document, puis rétablissez
interact with all)
avant d’exécuter le script.
versionVersion 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.
Obtention du script en cours
Vous 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 panneauScripts figurent dans la propriété
Versionnage des scripts
InCopypeut exécuter des scripts utilisant des versions antérieures du modèle d’objet de scriptInCopy.
Pour exécuter un ancien script dans une version plus récente d’InCopy, vous devez prendre en compte les
points suivants:
XCiblage: 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.
active script.
XCompilation: cette opération implique la mise en correspondance des noms dans le script avec lesID
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.
Fonctions de scriptsVersionnage des scripts 27
XInterprétation: cette opération implique la mise en correspondance desID 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:
DossierVersion des scripts pour InCopy
Version 8.0 Scripts
Version 7.0 Scripts
Version 6.0 Scripts
Version 5.0 Scripts
Version 2.0 Scripts
Ciblage
Un 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 panneauScripts.
Sinon, le ciblage explicite des scripts AppleScript est effectué à l’aide de l’instruction
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
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):
CS6
CS5 et CS5.5
CS4
CS3
CS2
tell:
using terms from qui remplace le dictionnaire
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 duDOM) qui se trouve dans le dossier
ScriptingSupport du dossier de préférences d’InCopy. Par exemple, pour générer le dictionnaire CS5
Fonctions de scriptsUtilisation 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 script
La 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 MacOS, vous pouvez exécuter un scriptAppleScript ouJavaScript; sous
Windows, vous pouvez exécuter un scriptVBScript ouJavaScript.
La méthode
XExécution d’un script dans un autre langage qui fournit une fonction manquante dans votre langage
do script présente plusieurs utilisations possibles:
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,
AppleScript etVBScript proposent cette fonctionnalité. Dans tous ces exemples, la méthode do
mais
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.
XCré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
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 scriptcrée.
X
Incorporation des scripts dans les objets. Les scripts peuvent utiliser la méthode do
des scripts qui ont été enregistrés sous la forme de chaînes dans la propriété
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émentsXML 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
do script. C’est une méthode idéale
script
label
des objets. Cette
pour exécuter
Pour envoyer un paramètre à un script exécuté par l’objet doscript, 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.
Fonctions de scriptsExé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 script
Pour 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.
Pour exécuter un script au lancement d’InCopy, placez le script dans le dossier StartupScripts du
dossierScripts (pour plus de détails, voir la section «
Installation des scripts » à la page 12).
4
Statut de mise à jour du chapitre
CS6Inchangé
Tex te et sa is ie
La saisie, l’édition et la mise en forme d’un texte représentent la majeure partie du temps consacré à la
plupart des documentsInCopy. 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, «
script. Vous devez également savoir manipuler le texte dansInCopy et connaître la terminologie de base
du domaine de la composition.
Saisie et importation de texte
Cette section décrit le processus d’insertion d’un texte dans les documentsInCopy. Tout comme vous
pouvez saisir du texte dans des blocs de texte et importer des fichiers texte au moyen de l’interface
utilisateurInCopy, 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 texte
Tout 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’articlesInCopy
(fichiers
Lorsque vous utilisez un articleInCopy 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 pageInDesign. Contrairement à InDesign, InCopy ne peut pas ajouter de nouveaux blocs de texte à
l’aide des scripts.
.icml).
Prise en main» et savoir créer, installer et exécuter un
Pour plus de détails sur les relations entre les objets texte dans un documentInCopy, voir la section
Objets texte » à la page 39.
«
30
Texte et saisie
Ajout d’un texte à un article
Pour 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, voirAddText):
--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, voirReplaceWord):
--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
Saisie et importation de texte
31
Le script suivant remplace du texte dans un paragraphe (pour consulter le script complet, voirReplaceText):
--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.
Texte et saisie
Insertion de caractères spéciaux
Comme l’éditeur de scripts prend en chargeUnicode, vous pouvez simplement entrer des caractères
Unicode dans des chaînes de caractères exportées dansInCopy. Vous pouvez également utiliser un
raccourci clavier InCopy pour entrer directement des caractères Unicode parID de glyphe: <nnnn> (nnnn
étant le codeUnicode du caractère). Le script suivant illustre plusieurs méthodes de saisie des caractères
spéciaux (pour consulter le script complet, voirSpecialCharacters):
--Shows how to enter special characters in text.
tell application "Adobe InCopy CS6"
--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
Importation de texte et définition des préférences d’importation de texte
32
Le meilleur moyen pour rechercher l’IDUnicode d’un caractère est d’utiliser le panneauGlyphes
dansInCopy (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 valeurUnicode. Vous trouverez de plus
amples informations surUnicode sur le sitehttp://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, voirPlaceTextFile):
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, voirTextImportPreferences). Les commentaires du script
expliquent les différentes valeurs possibles pour chaque propriété.
Texte et saisie
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
Importation de texte et définition des préférences d’importation de texte
33
Texte et saisie
Importation de texte et définition des préférences d’importation de texte
--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
34
Le script suivant montre comment définir les préférences d’importation de texte référencé (pour consulter
le script complet, voirTaggedTextImportPreferences):
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, voirWordRTFImportPreferences):
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
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 formatExcel (pour consulter le
script complet, voirExcelImportPreferences):
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 documentInCopy. 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,
voirExportTextFile.)
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
Texte et saisie
Exportation de texte et définition des préférences d’exportation de texte
--fill in a valid file path on your system.
tell myStory
export to "yukino:test.txt" format text type
end tell
end tell
36
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, voirTextExportPreferences):
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, voirTaggedTextExportPreferences):
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
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 texteInCopy au
formatHTML (pour consulter le script complet, voirExportHTML):
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
Texte et saisie
end if
end if
end tell
end mySnippet
else
end if
end repeat
end repeat
Exportation de texte et définition des préférences d’exportation de texte
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
--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)
38
Texte et saisie
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
on myFindTag(myStyleName, myStyleToTagMapping)
local myTag, myDone, myStyleName
set myTag to ""
set myDone to false
repeat with myStyleToTagMap in myStyleToTagMapping
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
end if
write myString to myTextFile starting at eof
close access myTextFile
end myWriteToFile
Objets texte
if item 1 of myStyleToTagMap = myStyleName then
set myTag to item 2 of myStyleToTagMap
exit repeat
end if
set eof of myTextFile to 0
Objets texte
39
Le diagramme suivant illustre une vue du modèle d’objet texteInCopy. 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
au bloc de texte (ou aux blocs de texte) contenant un objet texte donné, utilisez la propriété
parent de l’objet est l’article contenant l’objet. Pour obtenir une référence
parenttextframes.
Texte et saisie
Sélections
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
en bloc ancré, le
parent du bloc de texte est l’élément de page qui le contient. Si le bloc de texte a été converti
parent du bloc de texte est le caractère contenant le bloc ancré.
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,
voirTextSelection.)
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éthodemove. Pour copier le texte, utilisez la
méthode
script suivant illustre son mode d’utilisation (pour consulter le script complet, voirMoveText):
tell application "Adobe InCopy CS6"
duplicate (qui possède exactement les mêmes paramètres que la méthode move). L’extrait de
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
Texte et saisie
Objets texte
--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 ouduplicate 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
du texte d’un document à l’autre à l’aide des méthodes
move etduplicate sont plus rapides et plus performantes. Le script suivant permet de déplacer
move etduplicate (pour consulter le script
complet, voirMoveTextBetweenDocuments):
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
41
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,
voirCopyUnformattedText):
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
Texte et saisie
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, voirTextIterationWrong):
--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
Objets texte
42
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 affiche3, 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
Texte et saisie
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 texte
Dans les sections précédentes de ce chapitre, nous avons ajouté du texte à un document et utilisé des
articles et des objetstexte. 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 texte
Vous 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, voirTextDefaults.)
Mise en forme du texte
43
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"
Texte et saisie
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
Mise en forme du texte
44
Texte et saisie
end tell
end tell
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
Mise en forme du texte
45
Texte et saisie
Polices
Mise en forme du texte
46
La collection des polices d’un objet d’applicationInCopy 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, voirFontCollections):
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"
Texte et saisie
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 objettexte. 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
Mise en forme du texte
47
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
Texte et saisie
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
Mise en forme du texte
48
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, voirCreateStyles):
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
Texte et saisie
end tell
end tell
Mise en forme du texte
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
49
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, voirNestedStyles):
Texte et saisie
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
Mise en forme du texte
50
Texte et saisie
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 cestyle. Les scriptsInCopy 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 documentsInCopy.
L’extrait de script suivant montre comment procéder (pour consulter le script complet,
voirImportTextStyles):
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 texte
51
Recherche et modification de texte
La 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 utilisateurInCopy. Il existedans InCopy trois
méthodes de recherche de texte:
XVous 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
preferences pour définir les paramètres des méthodes find text et change text.
XVous 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
preferences et change grep preferences pour définir les paramètres des méthodes find grep et
change grep.
XVous 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
find glyph preferences et change glyph preferences pour définir les paramètres des
objets
méthodes
find glyph et change glyph.
find text preferences et change text
find grep
Texte et saisie
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 «
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
Recherche et modification de texte
Objets texte et
52
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 objetstexte. (Pour consulter le script complet,
voirFindText.)
Texte et saisie
Recherche et modification de texte
--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.")
53
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, voirChangeText):
--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
Texte et saisie
Recherche et modification de texte
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
54
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
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, voirFindGrep):
--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
findGrep etchangeGrep. Les opérations de recherche/modification des expressions régulières
Texte et saisie
Recherche et modification de texte
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
55
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
\> pour faire coïncider le début d’un mot et\< la fin d’un mot, ou utilisez\b pour faire
(?i) pour activer le respect de la casse et (?-i) pour le
coïncider les limites d’un mot.
Une utilisation pratique de l’outil de recherche/modificationgrep consiste à convertir le balisage d’un
texte (par exemple, certaines formes de balisage du texte brut avec des instructions de mise en forme)
en texteInCopy 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
Texte et saisie
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
end tell
--Apply the style to each instance of the tag.
set applied paragraph style of change text preferences to myStyle
tell myStory
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
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 et modification de texte
--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
change text
change text
56
Recherche de glyphes
Vous pouvez rechercher et modifier des caractères individuels dans une police particulière avec les
méthodes
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, voirFindChangeGlyphs):
--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
find glyph et change glyph, ainsi que les objets find glyph preferences et change glyph
Texte et saisie
--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
end tell
--Clear glyph search preferences.
set find glyph preferences to nothing
set change glyph preferences to nothing
Tableaux
Il 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,
voirMakeTable):
set myStory to story 1 of myDocument
tell myStory
end tell
change glyph
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
Tableaux
57
Texte et saisie
Tableaux
58
L’extrait de script suivant permet de fusionner les cellules d’un tableau (pour consulter le script complet,
voirMergeTableCells):
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,
voirSplitTableCells):
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, voirHeaderAndFooterRows):
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, voirTableFormatting):
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
Texte et saisie
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
Tableaux
59
L’extrait de script suivant permet d’ajouter une mise en forme de ligne en alternance à un tableau (pour
consulter le script complet, voirAlternatingRows):
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, voirTableSelection.)
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
Texte et saisie
--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 automatique
Correction automatique
60
La 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, voirAutocorrect):
--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
Texte et saisie
Notes de bas de page
L’extrait de script suivant permet d’ajouter des notes de bas de page à un article (pour consulter le script
complet, voirFootnotes):
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
Notes de bas de page
61
5
Statut de mise à jour du chapitre
CS6Inchangé
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
Ce chapitre décrit l’utilisation des scripts de boîte de dialogueInCopy. 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.
EMARQUE : les scripts InCopy créés dans JavaScript peuvent également inclure des interfaces utilisateur
R
créées à l’aide du composant AdobeScriptUI. Ce chapitre contient certains didacticiels de script ScriptUI;
pour plus de détails, voir le Guide des outils JavaScriptAdobe 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.
dialog.
Présentation des boîtes de dialogue
Une 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.
62
Interfaces utilisateurVotre première boîte de dialogue InCopy 63
Les éléments de la figure sont définis dans le tableau suivant:
L’o b j e t dialog ne contient pas directement de commandes; c’est le but de l’objet dialogcolumn. L’objet
dialogcolumns permet de contrôler la position des commandes dans une boîte de dialogue. Dans un
dialogcolumns, il est possible de diviser une colonne de boîte de dialogue en plusieurs autres
objet
dialogcolumns ou borderpanels (qui peuvent eux-mêmes être divisés en d’autres objets
objets
dialogcolumns et borderpanels).
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
static label) et une autre propriété pour son état (checked state). La commande dropdown
texte (
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
checkbox control possède une propriété pour son
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émoireInCopy 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 InCopy
Le processus de création d’une boîte de dialogueInCopy 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, voirSimpleDialog).
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
Interfaces utilisateurAjout 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, «
l’échantillon de texte et de modifier le corps de la police du texte. Pour consulter le script complet,
voirHelloWorldUI.
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 ¬
--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
Prise en main». Les options de la boîte de dialogue vous permettent d’indiquer
{edit contents:"Hello World!", min width:180}
Interfaces utilisateurCréation d’une interface utilisateur plus complexe 65
Création d’une interface utilisateur plus complexe
Dans 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, voirComplexUI.
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
Interfaces utilisateurCréation d’une interface utilisateur plus complexe 66
set myLeftRadioButton to make radiobutton control with
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
Interfaces utilisateurUtilisation de ScriptUI 67
Utilisation de ScriptUI
Avec 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 à
dialog intégré d’InCopy.
l’objet
Cela ne signifie pas, cependant, que les éléments d’interface utilisateur créés à l’aide de ScriptUI ne sont
pas accessibles aux utilisateursAppleScript. Les scripts InCopy peuvent exécuter des scripts rédigés dans
d’autres langages de script à l’aide de la méthodedoscript.
Création d’une barre de progression avecScriptUI
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, voirProgressBar).
#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){
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, voirCallProgressBar).
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.hide();" & return
Interfaces utilisateurUtilisation 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 etScriptUI. 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, voirButtonBar.)
Le script d’apprentissage lit un fichierXML sous la forme suivante:
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;
}
6
Statut de mise à jour du chapitre
CS6Inchangé
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 menusInCopy. 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 menu
Le modèle de scripts de menusInCopy 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
Xmenu items: options de menu figurant dans un menu. Cela n’inclut pas les sous-menus.
Xmenu separators: lignes utilisées pour séparer les options de menu dans un menu.
Xsubmenus: options de menu qui contiennent d’autres menus.
Xmenu elements: tous les objets menu items, menu separators et submenus figurant dans un menu.
Xevent listeners: répondent aux actions d’un utilisateur (ou script) associées à un menu.
Xevents: objets events déclenchés par un menu.
Chaque objet menuitem est connecté à un objet menuaction 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
créateurs de scriptsInCopy peuvent créer leurs propres objets
script à une sélection de menu.
menu contient les objets suivants:
menu actions définis par l’interface utilisateur, les
script menu actions, qui associent un
Un objet
àaucun.
menu action ou script menu action peut être associé à un ou plusieurs objets menu items, ou
70
MenusPrésentation du modèle de menu 71
application
menuActions
scriptMenuAction
area
enabled
checked
eventListeners
events
id
index
label
name
parent
title
same as menuAction
menuAction
scriptMenuActions
eventListener
eventListener
event
...
...
event
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"
end tell
end if
on myWriteToFile(myString, myFileName, myAppendData)
set myTextFile to open for access myFileName with write permission
if myAppendData is false then
end if
write myString to myTextFile starting at eof
close access myTextFile
end myWriteToFile
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)
set eof of myTextFile to 0
MenusPré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 dansInCopy.
--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
MenusExé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, voirGetKeyStrings):
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 :
que celui d’un objet
il est préférable d’obtenir le nom indépendant de la langue d’un objet
menu, menu item
ou
submenu
, parce que le titre d’un objet
menu action
menu action
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 versionInCopy.
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 script
Les 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
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
correspondant à partir d’un script affiche également une boîte de dialogue.
menu item; cependant, l’exécution d’un objet menu item à
menu action
plutôt
sera
Le script suivant illustre le mode d’exécution d’un objet
menu action à partir d’un script (pour consulter le
script complet, voirInvokeMenuAction):
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
MenusAjout 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 scriptInCopy 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 documentInCopy, 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 menu
Les scripts peuvent également créer des menus et des éléments de menu ou en supprimer, comme dans
l’interface utilisateurInCopy. 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,
voirCustomizeMenu):
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énements
Les menus et les sous-menus génèrent des événements lorsqu’ils sont sélectionnés dans l’interface
utilisateur, et les objets
utilisés. Les scripts peuvent installer des objets
tableau suivant illustre les événements des différents composants de scripts de menu:
ObjetEvénementDescription
menu
menu action
menu actions et script menu actions génèrent des événements lorsqu’ils sont
beforeDisplay
afterInvoke
beforeInvoke Exécute le script associé lorsque l’objet menu item associé est
event listeners pour répondre à ces événements. Le
Exécute le script associé avant l’affichage du contenu du menu.
Exécute le script associé lorsque l’objet menu item associé est
sélectionné, mais à la suite de l’événement
sélectionné, mais avant l’événement
onInvoke.
onInvoke.
MenusUtilisation des objets d’action de menu de script 75
ObjetEvénementDescription
script menu action
afterInvoke
beforeInvoke Exécute le script associé lorsque l’objet menu item associé est
beforeDisplay Exécute le script associé avant une demande interne de l’état
onInvoke Exécute le script associé lorsque l’objet script menu action
Exécute le script associé lorsque l’objet menu item associé est
sélectionné, mais à la suite de l’événement
sélectionné, mais avant l’événement
activé/coché de l’objet
action.
script menu actionscript menu
onInvoke.
onInvoke.
est appelé.
submenu
beforeDisplay
Exécute le script associé avant l’affichage du contenu de
submenu.
l’objet
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 script
Vous 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
menu (pour consulter le script complet, voirMakeScriptMenuAction). 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 et son association à un élément de
MenusUtilisation 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, menuitem et scriptmenuaction 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
MenusUtilisation des objets d’action de menu de script 77
L’o b j e t scriptmenuactions 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
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
event listener est ajouté à l’événement event
l’élément de menu affiche le type du premier élément de la sélection. (Pour consulter le script complet,
voirBeforeDisplay.)
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
MenusUtilisation 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
7
Statut de mise à jour du chapitre
CS6Inchangé
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
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 panneauScripts).
Ce chapitre décrit le mode d’utilisation des scripts d’événementInCopy. 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.
event répond à un événement qui se produit dans
Vous devez avoir préalablement lu le Chapitre 2, «
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, «
Le modèle de scripts d’événements InCopy est semblable à la recommandationW3C (Worldwide Web
Consortium) concernant les événements du modèle d’objet de documentDOM (pour plus de détails,
visiter le sitehttp://www.w3c.org
).
Prise en main» et savoir créer, installer et exécuter un
Menus».
Présentation du modèle de scripts d’événements
Le 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,
des séries limitées d’actions dans l’interface utilisateurInCopy (ou des actions correspondantes
déclenchées par les scripts).
Pour répondre à un événement, vous devez enregistrer un objet
recevoir l’événement. Lorsque l’événement spécifié atteint l’objet, l’objet
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
é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.
event listener avec un objet capable de
event listener exécute la
event listeners peut répondre. Ces
event, correspond à l’une
79
EvénementsPrésentation du modèle de scripts d’événements 80
Evénement
d’interface
utilisateur
Toute ac tion de
menu
Nom de
l’événementDescriptionType d’objet
beforeDisplay
Se produit avant que le menu ou le
event
sous-menu ne s’affiche.
beforeDisplay
Se produit avant que l’action de
event
menu du script ne s’affiche ou ne
change.
beforeInvoke
Se produit après la sélection de
event
l’action de menu, mais avant son
exécution.
afterInvoke
Se produit après l’exécution de
event
l’action de menu.
onInvoke
Exécute l’action de menu ou l’action
event
de menu du script.
Fermer
beforeClose
Se produit après une demande de
document event
fermeture de document, mais avant
que le document ne soit fermé.
afterClose
Se produit après la fermeture d’un
document event
document.
Exporter
beforeExport
Se produit après une demande
import export event
d’exportation, mais avant que le
document ou l’élément de page ne
soit exporté.
afterExport
Se produit après l’exportation d’un
import export event
document ou d’un élément de page.
Importer
beforeImport
Se produit avant qu’un fichier ne soit
import export event
importé, mais avant que le fichier ne
soit importé dans un document
(avant l’insertion).
afterImport
Se produit après l’importation d’un
import export event
fichier, mais avant que le fichier ne
soit inséré dans une page.
Nouveau
beforeNew
Se produit après une demande de
document event
nouveau document, mais avant que
le document ne soit créé.
afterNew
Se produit après la création d’un
document event
document.
Ouvrir
beforeOpen
Se produit après une demande
document event
d’ouverture de document, mais avant
que le document ne soit ouvert.
afterOpen
Se produit après l’ouverture d’un
document event
document.
EvénementsPrésentation du modèle de scripts d’événements 81
Evénement
d’interface
utilisateur
Imprimer
Nom de
l’événementDescriptionType d’objet
beforePrint
Se produit après une demande
document event
d’impression de document, mais avant
que le document ne soit imprimé.
afterPrint
Se produit après l’impression d’un
document event
document.
Version
précédente
beforeRevert
Se produit après une demande de
restauration d’un document, mais
document event
avant que la version antérieure du
document ne soit restaurée.
afterRevert
Se produit après la restauration de la
document event
version antérieure d’un document.
Enregistrer
beforeSave
Se produit après une demande
document event
d’enregistrement d’un document, mais
avant que le document ne soit enregistré.
afterSave
Se produit après l’enregistrement
document event
d’un document.
Enregistrer une
copie
beforeSaveACopy
Se produit après une demande
d’enregistrement d’une copie d’un
document event
document, mais avant que le
document ne soit enregistré.
afterSaveACopy
Se produit après l’enregistrement
document event
d’un document.
Enregistrer
sous
beforeSaveAs
Se produit après une demande
d’enregistrementsous un format, mais
document event
avant que le document ne soit enregistré.
afterSaveAs
Se produit après l’enregistrement
document event
d’un document.
EvénementsPré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
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:
XAucune: 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
XCapture: l’événement démarre au niveau supérieur du modèle d’objet de script, l’application, puis se
beforeDisplay est l’exemple d’un événement qui ne se propagepas.
propage à travers le modèle jusqu’à la cible de l’événement. Tout objet
répondre à l’événement enregistré dans les objets au-dessus de la cible (
XBouillonnement: 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
sont enregistrés avec les objets situés au-dessus de la cible (
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.
listener enregistré pour cet événement, cet objet
event listeners capable de
target) traite l’événement.
event listeners appropriés qui
target) dans la hiérarchie du modèle
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 (
Cancelable
Captures Si elle est vraie (true), l’événement (event) peut être traité par l’objet event
Si elle est vraie (true), le comportement par défaut de l’événement (
target
cible (
default
listeners enregistré avec les objets de script situés au-dessus de l’objet cible
) peut être annulé. Pour cela, utilisez la commande
.
event).
event
prevent
) sur sa
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
PropagationStopped Si elle est vraie (true), l’événement (event) a cessé de se propager au-delà de la
Type d’événement (
cible actuelle (
event
), sous la forme d’une chaîne (par exemple,
current target) (voir la propriété target dans ce tableau). Pour
arrêter la propagation de l’événement, utilisez la commande
«beforeNew»
stop propagation.
).
EvénementsUtilisation des objets eventListeners 83
PropriétéDescription
Target Objet dont est issu l’événement (event). A titre d’exemple, la propriété target
(cible) d’un événement
beforeNew, il s’agit d’une application.
TimeStamp Date et heure auxquelles l’événement (event) s’est produit.
beforeImport est un document; pour l’événement
Utilisation des objets eventListeners
Lorsque 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
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,
voirEventListener).
--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
event listener
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
l’événement). Par exemple, l’événement
event listeners qui peuvent surveiller l’événement (en fonction de la propagation de
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 sessionInCopy encours. Pour pouvoir
utiliser un objet
démarrage (pour plus de détails sur l’installation des scripts, voir le Chapitre 2, «
vous ajoutez un script
event listener dans chaque session InCopy, ajoutez le script au dossier des scripts de
Prise en main»). Lorsque
event listener à un document, il n’est pas enregistré avec le document, ni exporté
au formatINX.
REMARQUE : si vous rencontrez des problèmes avec un script qui définit un objet eventlistener, vous
pouvez soit exécuter un script qui supprime l’objet
event listener, soit fermer la session et
relancerInCopy.
EvénementsUtilisation 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,
voirMultipleEventListeners):
--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",
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, voirEventListenersOn.
--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,
GetEventInfo.applescript.
voir
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
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, voirEventListenersOff.
--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 informationsXMP. Pour consulter le script
complet, voir le script d’apprentissageAfterNew.
tell application "Adobe InCopy CS6"
make event listener with properties {event type:"afterNew",
handler:"yukino:AfterNewHandler.applescript", captures:true}
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,
AfterNewHandler.applescript.
voir
--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
8
Statut de mise à jour du chapitre
CS6Inchangé
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, «
script. Vous devez également savoir manipuler les notes dansInCopy.
Saisie et importation d’une note
Cette section décrit le processus d’insertion d’une note dans vos documentsInCopy. 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, voirInsertNote.
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
Prise en main» et savoir créer, installer et exécuter un
87
NotesConversion 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, voirReplace.
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, voirConvertToText.
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, voirConvertToNote.
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
NotesDé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,
voirCollapseNote.
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,
voirExpandNote.
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 note
Pour supprimer une note, utilisez la méthode delete, comme illustré dans l’exemple suivant. Pour
consulter le script complet, voirRemoveNote.
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, voirFirstNote.
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
NotesNavigation 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, voirNextNote.
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, voirPreviousNote.
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, voirLastNote.
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
9
Statut de mise à jour du chapitre
CS6Inchangé
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, «
script. Vous devez également savoir manipuler le texte dansInCopy et connaître la terminologie de base
du domaine de la composition.
Suivi des modifications
Cette 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 suivies
Si 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
Prise en main» et savoir créer, installer et exécuter un
91
Suivi des modificationsSuivi 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
Suivi des modificationsPré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 modifications
Les 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
Suivi des modificationsPré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
Suivi des modificationsPré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
10
Statut de mise à jour du chapitre
CS6Inchangé
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 affectation
Cette 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
96
AffectationsArticle d’affectation 97
document
assignment
assigned story
text/image story
1
1…*
0…*
1
1
1
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’affectation
Les 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’affectation
Le 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.
AffectationsArticle 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
11
Statut de mise à jour du chapitre
CS6Inchangé
XML
XML (Extensible Markup Language) est un langage de balisage reposant sur le texte, créé et géré par le
groupe WorldWideWeb Consortium(www.w3.org
Language), le langageXML utilise des chevrons pour délimiter les balises (par exemple,
<para>). Le langageHTML comprend un ensemble prédéfini de balises, tandis que le langageXML permet
de décrire le contenu avec plus de précision en créant des balises personnalisées.
En raison de sa souplesse, le langageXML est de plus en plus utilisé comme format de stockage des
données. InCopy propose un ensemble complet de fonctions d’importation de donnéesXML dans des
mises en page; ces fonctions peuvent même être contrôlées à l’aide des scripts.
). Comme le langageHTML (Hypertext Markup
<article> ou
Vous devez avoir préalablement lu le Chapitre 2, «
script. Vous devez également posséder une certaine connaissance des formatsXML, DTD etXSLT.
Prise en main » et savoir créer, installer et exécuter un
Présentation
Comme le formatXML 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:
XUne fois que les élémentsXML sont importés dans un document InCopy, ils deviennent des
élémentsInCopy qui correspondent à la structureXML. Les représentations InCopy des élémentsXML
sont différentes des élémentsXML proprementdits.
XChaque élémentXML ne peut figurer qu’une seule fois dans une mise en page. Si vous souhaitez
dupliquer les informations de l’élémentXML dans la mise en page, vous devez dupliquer
l’élémentXML lui-même.
XL’ordre d’affichage des élémentsXML dans une mise en page dépend principalement de leur ordre
d’affichage dans la structureXML.
XTout texte qui s’affiche dans un article associé à un élémentXML fait partie des données de cet
élément.
Meilleure méthode appliquée aux scriptsXML dansInCopy
Il est conseillé d’effectuer la majorité des opérations sur un fichierXML à l’extérieur d’InCopy, avant
d’importer le fichier dans une mise en pageInCopy. Ainsi, vous pouvez utiliser d’excellents outils, comme
les analyseurs et les éditeursXML.
Si vous devez réorganiser ou dupliquer des éléments dans une structure de donnéesXML importante,
le meilleur moyen consiste à transformer le formatXML à l’aide du formatXSLT. Cette opération s’effectue
pendant l’importation du fichierXML.
99
XMLCodage des élémentsXML à l’aide des scripts 100
Codage des élémentsXML à l’aide des scripts
Cette section décrit le mode de configuration des préférences généralesXML et des préférences
d’importationXML, le mode d’importation du formatXML, la création d’élémentsXML et l’ajout
d’attributsXML. Les scripts de cette section illustrent les techniques d’utilisation du contenuXML; vous
trouverez les scripts permettant d’appliquer des attributs de mise en forme aux élémentsXML à la section
Ajout d’élémentsXML à un article » à la page 107.
«
Configuration des préférencesXML
Vous pouvez définir l’aspect du panneau de la structure InCopy à l’aide de l’objet des préférences
d’affichageXML, 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 balisageXML 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érencesXML,
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
Loading...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.