あいかわらず、AppleScript をほったらかしで JavaScript や XHTML、CSS、PHP に熱中しています。というか、AppleScript Studio でビューツールバーアイテムがやっぱり使えなくて意気消沈してしまいました。
Script factory さんは、時々チェックしているサイトさんなのですが、ついに、FilterScripts for mi が Objective-C で書き直されたようです。このアプリケーションが公開されたとき、刺激されて同じようなコンセプトのアプリケーションを AppleScript Studio で作成したのです。まぁ、その昔あった Script Runner のようなものですが。
Objective-C を導入する気持ち、非常によく分かります...。個人的には、Cocoa/Objective-C でアプリケーションを作成して Objective-C からAppleScript を呼び出すという方向で開発を行っています。なので、AppleScript Studio を使うのはある意味苦痛だったりします。あれもできない、これもできない、という感じで。
AppleScript Studio には、それなりにいいところがあるんですけどね。あるのかな?そう信じたい...。そんな AppleScript の最近の成果は、カレンダーです。それほど珍しいものでもないのですが、ちょっと、月ごとのカレンダーを簡単に参照したくて作ってみました。
on run
set calendarList to getCalendar(current date)
set beginning of calendarList to {"日", "月", "火", "水", "木", "金", "土"}
set calendarText to ""
repeat with thisItem in calendarList
set calendarText to calendarText & listToText(thisItem, tab) & return
end repeat
set calendarText to (date string of (current date)) & return & return & calendarText
display dialog calendarText with icon 1 buttons {"OK"} default button 1 giving up after 15
end run
on getCalendar(selectedDate)
set theList to {{}, {}, {}, {}, {}, {}}
set numDaysInMonth to {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
set currentYear to year of selectedDate
set currentMonth to month of selectedDate as number
set day of selectedDate to 1
set time of selectedDate to 0
copy selectedDate to firstOfMonth
set startOffset to weekday of firstOfMonth as number
set daysInMonth to item currentMonth of numDaysInMonth
if ((currentMonth is 2) and (isLeap(currentYear))) then set daysInMonth to daysInMonth + 1
set dayLabel to 1
set num to 0
repeat with i from 1 to 6
set currentWeek to item i of theList
repeat with j from 1 to 7
set num to num + 1
if (num is less than startOffset or num is greater than or equal to (daysInMonth + startOffset)) then
set end of currentWeek to ""
else
set end of currentWeek to dayLabel
set dayLabel to dayLabel + 1
end if
end repeat
end repeat
return theList
end getCalendar
on isLeap(theYear)
return (((theYear mod 4) is 0 and ((theYear mod 100) is not 0)) or (theYear mod 400) is 0)
end isLeap
on listToText(theList, delimStr)
set the AppleScript's text item delimiters to delimStr
set theText to theList as text
set the AppleScript's text item delimiters to ""
return theText
end listToText
細かい部分を気にせずに作っているので実際に使うには不都合があると思いますが。getCalendar に date 値を渡せばその月のカレンダーをリストで返します。月によっては利用しないリストも含まれているのですが、それは気にしない。ダイアログで見る限りは、特に困らない。
0 件のコメント :
コメントを投稿