1#!/usr/bin/env ruby 2# Make the computer speaking, using AppleScript. 3 4class AppleScript 5 require 'osx/cocoa' 6 include OSX 7 8 def initialize (src, raise_err_p = true) 9 @script = NSAppleScript.alloc.initWithSource(src) 10 @errinfo = OCObject.new 11 @script.compileAndReturnError?(@errinfo) 12 @script = nil if handle_error(@errinfo, raise_err_p) 13 end 14 15 def execute (raise_err_p = false) 16 @errinfo = OCObject.new 17 result = @script.executeAndReturnError(@errinfo) 18 handle_error(@errinfo, raise_err_p) 19 return result 20 end 21 22 def source 23 @script.source.to_s 24 end 25 26 def error? 27 return nil if @errinfo.ocnil? 28 return errmsg_of(@errinfo) 29 end 30 31 private 32 33 def handle_error (errinfo, raise_err_p) 34 return false if errinfo.ocnil? 35 if raise_err_p then 36 raise "AppleScriptError: #{errmsg_of errinfo}" 37 else 38 $stderr.puts errmsg_of(errinfo) 39 end 40 return true 41 end 42 43 def errmsg_of (errinfo) 44 errinfo.objectForKey('NSAppleScriptErrorMessage').to_s 45 end 46 47end 48 49if __FILE__ == $0 then 50 ARGF.each do |str| 51 str.gsub!(/"/, '\"') 52 src = %(say "#{str}") 53 AppleScript.new(src).execute 54 end 55end 56