ics-tools - iCalendar 形式のファイルのためのツール群

ID: 18
creation date: 2011/12/08 19:23
modification date: 2013/11/19 18:49
owner: taiji
tags: iCalendar, C++, boost, boost::regex, boost::xpressive, boost::date_time, boost::optional

Mac OS X の iCal.app で読み込める iCalendar 形式のファイル、例えば、http://www.aihara.co.jp/~taiji/Holidays.ja.ics を生成するために、以下のツール群を作成した。

このツール群には以下のプログラムが含まれる。

  • tsv2ics
  • ics2tsv
  • ics-view
  • ics-merge

tsv2ics - タブ区切りデータファイルから iCalendar 形式のファイルを生成する。

例えば、同梱されている「春分・秋分の日」に関する equin.tsv ファイルから equin.ics ファイルを生成するには、以下のように実行する。

$ tsv2ics --ical equin.tsv > equin.ics

タブ区切りデータファイルの形式は、他には次の ics2tsv が生成する形式などに対応する。

ics2tsv - iCalendar 形式のファイルからタブ区切りデータファイルを生成する。

例えば、同梱されている「国民の休日」に関する citholid.ics ファイルから citholid.tsv ファイルを生成するには、以下のように実行する。

$ ics2tsv citholid.ics > citholid.tsv

これは、デフォルトで VEVENT 構成要素のみを処理する。もし、VTODO 構成要素のみを処理したいなら「--todo」オプションを指定する。ちなみに、VALARM 構成要素や EXRULE 構成要素には対応していない。RRULE 構成要素に加えて、RDATE, EXDATE 構成要素には対応しているが、iCal は RDATE には対応していないようである。

ics-view - iCalendar 形式のファイルを less 等の PAGER で見やすくする。

例えば、以下のように実行する。

$ ics-view *.ics | less

ics-merge - 複数の iCalendar 形式のファイルを結合して、ひとつの iCalendar 形式のファイルを生成する。

例えば、http://www.asahi-net.or.jp/~ci5m-nmr/iCal/ で配布されている holid110.zip を展開して得られる複数の iCalendar 形式のファイルをひとつにするには以下のように実行する。

$ ics-merge holid110/*.ICS > holid110.ics

ついでに、繰り返し規則にて12ヶ月の整数倍は1ヶ年の整数倍に修正したり、終日を VALUE=DATE で修正したりする。ちなみに、VCALENDAR 構成要素の諸情報は最初の入力ファイルのみが使用される。

その他

http://www.asahi-net.or.jp/~ci5m-nmr/iCal/ で配布されている holid110.zip は2007年の法改正に対応しておらず、また equin201.zip の「秋分の日」の4年毎の1951年から1979年の日付が間違っているように思われる。よって、以下のパッチを作成した。

また、http://www.aihara.co.jp/~taiji/Holidays.ja.ics を生成するにあたり、iPhone の iOS におけるカレンダーでは終点をもつ長期の繰り返し規則が無視されることがあるので、「春分・秋分の日」はせいぜい2年先までとしている。さらに、「国民の休日」や「振替休日」など holid110.zip では対応していない祝祭日を含めた。

0 コメント
ゲストコメント認証用なぞなぞ:
キーボードのLから左に全部打って下さい。それを二回やって下さい。 ...