{"id":88,"date":"2011-06-14T16:53:33","date_gmt":"2011-06-14T15:53:33","guid":{"rendered":"http:\/\/www.tyflosaccessiblesoftware.com\/programaraciegas\/?p=88"},"modified":"2011-06-14T16:53:33","modified_gmt":"2011-06-14T15:53:33","slug":"hola-mundo-en-applescript-al-detalle","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=88","title":{"rendered":"Hola mundo en AppleScript al detalle"},"content":{"rendered":"<p>Un script de AppleScript es un conjunto de \u00f3rdenes que siguen una gram\u00e1tica definida por el lenguaje y se ejecuta de forma ordenada empezando por arriba del script y terminando por abajo.<\/p>\n<p>Este lenguaje de programaci\u00f3n posee similitudes con otros lenguajes de programaci\u00f3n para poder crear scripts m\u00e1s complejos. Podemos crear estructuras repetitivas, ejecutar ciertos comandos dependiendo de condiciones, almacenar y manipular informaci\u00f3n etc.<\/p>\n<h2>Analizando el c\u00f3digo fuente<\/h2>\n<p>Vamos a analizar paso a paso el c\u00f3digo fuente de un script de ejemplo <em>Hola mundo<\/em>, el cual, hemos visto en otro art\u00edculo de este blog. El c\u00f3digo es el siguiente:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo 1:<br \/>\n\tHola Mundo<br \/>\n*)<br \/>\non run<br \/>\nsay \"Hola mundo!\"<br \/>\nend run<br \/>\n<\/code><\/p>\n<h3>Comentarios en AppleScript<\/h3>\n<p>Al principio del script encontramos esta estructura:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo 1:<br \/>\n\tHola Mundo<br \/>\n*)<br \/>\n<\/code><\/p>\n<p>Esta es una estructura de comentario, en el c\u00f3digo de las aplicaciones, sean scripts o aplicaciones compiladas, se introducen mecanismos para proporcionar comentarios y anotaciones para el programador, de esta forma puede detallar qu\u00e9 hacen ciertas partes del c\u00f3digo del programa para refrescar la memoria por si vuelve a esa zona del c\u00f3digo pasado un tiempo u otro programador accede al c\u00f3digo de la aplicaci\u00f3n.<\/p>\n<p>En AppleScript se puede comentar un trozo de c\u00f3digo utilizando los operadores <strong>(*<\/strong> (abre par\u00e9ntesis seguido de aster\u00edsco) y <strong>*)<\/strong> (asterisco seguido de cierra par\u00e9ntesis). Todo lo que est\u00e9 entre estos dos operadores ser\u00e1 ignorado por el int\u00e9rprete de AppleScript a la hora de que el script sea ejecutado.<\/p>\n<h3>Zonas de ejecuci\u00f3n<\/h3>\n<p>Siguiendo con el c\u00f3digo del ejemplo nos encontramos una estructura que comienza por <code>on run<\/code> y termina con <code>end run<\/code>. El comando <strong>on<\/strong> nos permite definir un trozo de c\u00f3digo que ser\u00e1 ejecutado cuando <em>suceda<\/em> algo espec\u00edfico. En nuestro caso, la sentencia <strong>on<\/strong> espera al evento <em>run<\/em> que tiene lugar nada m\u00e1s comienza a interpretarse el script.<\/p>\n<p>El comando <strong>end<\/strong> se utiliza para indicar el final de una estructura. Puede ser una estructura <strong>on<\/strong>, una estructura condicional, un bucle, etc. Veremos m\u00e1s ejemplos m\u00e1s adelante.<\/p>\n<h3>Haciendo hablar a nuestro script<\/h3>\n<p>Por \u00faltimo, s\u00f3lo nos queda la sentencia <code>say \"Hola mundo!\"<\/code> Esta sentencia se compone del comando <strong>say<\/strong> y una cadena de texto, encerrada entre comillas (\u00ab\u00bb).<\/p>\n<p>El comando say verbalizar\u00e1 lo que haya a su derecha utilizando la voz del sistema. Puede modificarse su comportamiento pero esto lo veremos m\u00e1s adelante.<\/p>\n<h2>Complicando el ejemplo<\/h2>\n<p>El ejemplo anterior es muy simple ya que utiliza la configuraci\u00f3n por defecto del sistema. El utilizar el comando <strong>say<\/strong> puede crear conflictos con otros m\u00e9todos de verbalizaci\u00f3n de informaci\u00f3n. Por ejemplo, VoiceOver, el lector de pantallas de Mac OSX utilizados por los usuarios ciegos, puede sufrir problemas de tartamudeo o colapso en la voz si se usan demasiadas sentencias <strong>say<\/strong> consecutivas. Una forma de solucionar esto es hacer que la propia aplicaci\u00f3n VoiceOver sea la que hable en lugar de que hable el sistema. Adem\u00e1s, esto permitir\u00e1 que se use la voz personalizada por el usuario de VoiceOver en lugar de la personalizaci\u00f3n del sistema. Para hacer esto debemos saber si el usuario est\u00e1 ejecutando VoiceOver y, si es as\u00ed, usar las funciones de VoiceOver, si no es as\u00ed deberemos seguir utilizando el comando <strong>say<\/strong> ya que no hay peligro de conflictos con los servicios de s\u00edntesis de voz.<\/p>\n<p>El c\u00f3digo de nuestro script ser\u00eda el siguiente:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo 2:<br \/>\n\tHola Mundo con VoiceOver<br \/>\n*)<br \/>\non run<br \/>\n\tsay \"Hola mundo\"<br \/>\n\ttell application \"VoiceOver\"<br \/>\n\t\toutput \" desde VoiceOver!\"<br \/>\n\tend tell<br \/>\nend run<br \/>\n<\/code><\/p>\n<p>Al ejecutar el script escucharemos, con la voz del sistema, el texto <em>Hola mundo<\/em> y, los usuarios que tengan VoiceOver activado adem\u00e1s escuchar\u00e1n el texto <em>desde VoiceOver<\/em> con la voz que tengan configurada en su lector de pantallas.<\/p>\n<p>Si comparamos los dos scripts veremos que lo nuevo se concentra en el siguiente trozo de c\u00f3digo:<\/p>\n<p><code><br \/>\n\ttell application \"VoiceOver\"<br \/>\n\t\toutput \" desde VoiceOver!\"<br \/>\n\tend tell<br \/>\n<\/code><\/p>\n<p>El comando <strong>tell<\/strong> hace que nuestro script se comunique con una aplicaci\u00f3n para utilizar sus funciones. En nuestro caso se comunica con la aplicaci\u00f3n <em>VoiceOver<\/em>. Una vez comunicados con VoiceOver podemos utilizar varios comandos AppleScript que VoiceOver nos proporciona, entre ellos, tenemos el comando <em>output<\/em> que nos permite utilizar los canales de salida de VoiceOver, los cuales pueden ser la voz sint\u00e9tica, la l\u00ednea braille conectada al equipo y el sistema de subt\u00edtulos de VoiceOver.<\/p>\n<p>A algunos usuarios de VoiceOver no les funcionar\u00e1 el anterior script debido a que tienen desactivado el soporte de script de VoiceOver por lo que al solicitar desde un script de AppleScript que VoiceOver nos ceda el control, se devolver\u00e1 un mensaje de error. En un pr\u00f3ximo art\u00edculo veremos c\u00f3mo solucionar esto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un script de AppleScript es un conjunto de \u00f3rdenes que siguen una gram\u00e1tica definida por el lenguaje y se ejecuta de forma ordenada empezando por arriba del script y terminando por abajo. Este lenguaje de programaci\u00f3n posee similitudes con otros lenguajes de programaci\u00f3n para poder crear scripts m\u00e1s complejos. Podemos crear estructuras repetitivas, ejecutar ciertos &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=88\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abHola mundo en AppleScript al detalle\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[80,38,6],"tags":[83,86,87,249],"class_list":["post-88","post","type-post","status-publish","format-standard","hentry","category-applescript","category-macos-x","category-programacion","tag-applescript-2","tag-ejemplo","tag-programacion-2","tag-voiceover"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=88"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/88\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}