Raw Apple Events

Un des problèmes des scripts lancés depuis le menu script d’une application, ce sont les allez-retour lorsque le bloc tell application ... end tell est employé pour atteindre l’application elle-même.
Il ne faudrait pas l’employer, puisque par défaut le script est lancé depuis l’application, il se trouve donc déjà dans l’environnement de cette application, donc à chaque appel il s’appelle lui-même... ce qui cause des dysfonctionnements, souvent bloquant.
Mais, me direz-vous, on ne peut pas écrire le script sans ce tell application ... end tell, sinon, à la compilation, les termes employés ne sont pas reconnus ... alors, comment faire ?

Il existe un moyen: se sont les Raw Apple Events.

Prenons un exemple avec le bout de script suivant :

if NCell ­ "Direct" then
tell application "AppleWorks"
if (document kind of document 1) as text is "SS " then
set Aref to a reference to spreadsheet of document 1
else if (document kind of document 1) as text is "WP " then
if "§" is in text body of document 1 then set InText to true
set Aref to a reference to spreadsheet of spreadsheet frame 1 of drawing area of document 1
else
set Aref to a reference to spreadsheet of spreadsheet frame 1 of drawing area of document 1
end if
set AtraduirT to (cell ATraduir of Aref) as text
end tell
else
set AtraduirT to ATraduir
end if

En réalité un mot comme "document kind" est interprété, sa véritable écriture est :
«class pDcK».
Évidemment «class pDcK» n’est connu que de l’application AppleWorks et ne peut être interprété que sous AppleWorks. C’est pourquoi lors de l’écriture d’un programme, pour que le mot “document kind” dise quelque chose au compilateur, il faut spécifier à qui il appartient. Vous avez deviné: c’est le rôle du tell application ... end tell qui permet au compilateur de dire que “document kind” veut dire «class pDcK».
Mais rien ne nous empêche d’écrire directement «class pDcK», mais dans ce cas c’est à nous que cela ne veut rien dire.
Toutefois l’énorme avantage du Raw Apple Event, c’est que le compilateur sait ce que cela veut dire et donc accepte une phrase comme :
if («class pDcK» of document 1) as text is "SS " then ,
alors qu’une phrase comme :
if (document kind of document 1) as text is "SS " then ,
produira un message d’erreur, il faudra impérativement l’inclure dans un tell application "AppleWorks" ... end tell.

Si on reprend notre bout de script en Raw Apple Events cela nous donne :

if NCell ­ "Direct" then
if («class pDcK» of document 1) as text is "SS " then
set Aref to a reference to «class cSS » of document 1
else if («class pDcK» of document 1) as text is "WP " then
if "§" is in «class pTxt» of document 1 then set InText to true
set Aref to a reference to «class cSS » of «class cGss» 1 of «class cdrw» of document 1
else
set Aref to a reference to «class cSS » of «class cGss» 1 of «class cdrw» of document 1
end if
set AtraduirT to («class ccel» ATraduir of Aref) as text
else
set AtraduirT to ATraduir
end if

Et là nous constatons d’une part que le tell application “AppleWorks” à disparu et d’autre part que le compilateur accepte l’intégralité du script.
Bien évidemment un tel script ne pourra fonctionner que par l’appel de celui-ci depuis “AppleWorks”.

Là, une question de taille reste à résoudre : comment je sais que document kind veut dire «class pDcK» ? c’est inscrit nulle part !
Pour réaliser ce tour de passe passe il faut :
[ également expliqué dans l’AppleScript Language Guide for AppleScript 1.3.7, du 5 mai 1999 page 126. Il faut toutefois remplacer “2. Save the script as text and quit ..” par “2. Save the script as script compiled and quit .... ]

1°) Écrire le script normalement (avec les tell application ... end tell), le tester etc..
2°) L’enregistrer en script compilé. Dupliquer ce script et lui donner un autre nom, par exemple le premier sera nommé : “Script avec Tell” et le second “Script sans Tell”. Quitter l Éditeur de script.
3°) Mettre l’application en question (l’application seulement suffira) sur une cartouche zip par exemple et supprimer cette application du disque dur. Éjecter le cartouche zip.
5°) Ouvrir “Script sans Tell”: là l’ Éditeur de script vous demande où se trouve l’application (dans notre exemple “AppleWorks”). Choisir n’importe quelle application, SimpleText etc...
6°) Le passage en Raw Apple Event est fait. Il faut maintenant supprimer tous les tell application (ne pas oublier les end tell), compiler, sauvegarder.
7°) On