parent
de6905a00d
commit
3e17f2c2f5
@ -0,0 +1,130 @@ |
||||
#!/usr/bin/perl |
||||
|
||||
use XML::DOM; |
||||
use strict; |
||||
|
||||
# get the first element under a node of the given tag |
||||
# @param node: node under which to look for elements |
||||
# @param tag: the tage to look for |
||||
# @return: first element under node with the given tag |
||||
sub subvalue($$) |
||||
{ |
||||
my ($class, $tag) = @_; |
||||
return value($class->getElementsByTagName($tag)->item(0)); |
||||
} |
||||
|
||||
# get the node value of the first child of a given node |
||||
# @param node: whose child to use |
||||
# @return: node value of given node's first child |
||||
sub value($) |
||||
{ |
||||
my ($class) = @_; |
||||
if (undef == $class) { return undef; } |
||||
|
||||
my $child = $class->getFirstChild(); |
||||
|
||||
if (undef == $child) { |
||||
return undef; |
||||
} |
||||
|
||||
return $child->getNodeValue(); |
||||
} |
||||
|
||||
print <<END_OF_FILE; |
||||
BEGIN:VCALENDAR |
||||
VERSION:2.0 |
||||
X-WR-CALNAME:University of Waterloo Computer Science Club |
||||
PRODID:-//Apple Computer\, Inc//iCal 2.0//EN |
||||
X-WR-RELCALID:3359A191-B19E-4B53-BADC-DFC084FC51C9 |
||||
X-WR-TIMEZONE:Canada/Eastern |
||||
CALSCALE:GREGORIAN |
||||
METHOD:PUBLISH |
||||
BEGIN:VTIMEZONE |
||||
TZID:Canada/Eastern |
||||
LAST-MODIFIED:20060912T200739Z |
||||
BEGIN:DAYLIGHT |
||||
DTSTART:20060301T070000 |
||||
TZOFFSETTO:-0400 |
||||
TZOFFSETFROM:+0000 |
||||
TZNAME:EDT |
||||
END:DAYLIGHT |
||||
BEGIN:STANDARD |
||||
DTSTART:20061029T020000 |
||||
TZOFFSETTO:-0500 |
||||
TZOFFSETFROM:-0400 |
||||
TZNAME:EST |
||||
END:STANDARD |
||||
BEGIN:DAYLIGHT |
||||
DTSTART:20070311T010000 |
||||
TZOFFSETTO:-0400 |
||||
TZOFFSETFROM:-0500 |
||||
TZNAME:EDT |
||||
END:DAYLIGHT |
||||
END:VTIMEZONE |
||||
END_OF_FILE |
||||
|
||||
my $parser = XML::DOM::Parser->new(); |
||||
my $doc = $parser->parsefile($ARGV[0]); |
||||
my @events = $doc->getElementsByTagName("eventitem"); |
||||
|
||||
foreach my $event (@events) { |
||||
my $date = $event->getAttribute("date"); |
||||
my $time = $event->getAttribute("time"); |
||||
my $talk_title = $event->getAttribute("title"); |
||||
$talk_title =~ s/[:;,]//g; |
||||
|
||||
my $room = $event->getAttribute("room"); |
||||
|
||||
my $short = subvalue($event, "short"); |
||||
$short =~ s/[:;,]//g; |
||||
my $abstract = $event->getElementsByTagName("abstract")->item(0)->toString(); |
||||
|
||||
my $ical_date = `date -d"$date" +%Y%m%d`; |
||||
chomp $ical_date; |
||||
|
||||
my ($ical_start, $ical_end); |
||||
|
||||
if ($time =~ /(.*)-(.*)/) { |
||||
$ical_start = ical_time($1); |
||||
$ical_end = ical_time($2); |
||||
} else { |
||||
$ical_start = ical_time($time); |
||||
$ical_end = ical_time("$time + 1 hour"); |
||||
} |
||||
|
||||
$abstract =~ s/<abstract>//; |
||||
$abstract =~ s/<\/abstract>//; |
||||
$abstract =~ s/\n/ /sg; |
||||
|
||||
my $ical_abstract = "\"$abstract\""; |
||||
|
||||
sub ical_time { |
||||
my ($ds) = @_; |
||||
my $d = `date -d"$ds" +\%H\%M\%S`; |
||||
chomp $d; |
||||
return $d; |
||||
} |
||||
|
||||
print <<END_OF_EVENT; |
||||
|
||||
BEGIN:VEVENT |
||||
LOCATION:University of Waterloo - $room |
||||
DTSTAMP:20060912T200708Z |
||||
UID:${ical_date}T${ical_start}\@csclub.uwaterloo.ca |
||||
SEQUENCE:11 |
||||
DTSTART;TZID=Canada/Eastern:${ical_date}T${ical_start} |
||||
DTEND;TZID=Canada/Eastern:${ical_date}T${ical_end} |
||||
SUMMARY:<a href=http://www.csclub.uwaterloo.ca>$talk_title</a> -- $short |
||||
DESCRIPTION:$ical_abstract |
||||
END:VEVENT |
||||
END_OF_EVENT |
||||
} |
||||
|
||||
print "END:VCALENDAR\n"; |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in new issue