#!perl sub walk { while() { return 1 if m!!; last if m!^ !; }; } sub suck { my ($room,$session,$chair,$style,$level,$audience,$categories,@speaker) = (@_); $_=; if (m!body!) { print STDERR "Done\n"; return 1; } else { print STDERR "$_\n"; }; die "$_ / $." unless m!

(\w{2}\d+): (.*)

!; $title = "$1: $2"; $_=; die "$_ / $." unless m!

!; $_=; die "$_ / $." unless m!!; $_=; die "$_ / $." unless m!Day: (\w+)!; $day = $1; $_=; die "$_ / $." unless m!Time: (\w+)!; $time = $1; unless (length $room) { $_=; if (m/Room/) { die "$_ / $." unless m!Room: ([^<]+)! ; $room = $1; $_=; } if (m/Session/) { die "$_ / $." unless m!Session chair: (.*)!; $session = $1; } } $_=; die "$_ / $." unless m!Duration: ([^<]+)!; $duration=int($1); unless (length $room) { $_=; die "$_ / $." unless m!Style: ([^<]*)!; $style = $1; $_=; die "$_ / $." unless m!Level: ([^<]+)!; $level = $1; $_=; die "$_ / $." unless m!Audience: ([^<]+)!; $audience = $1; $_=; die "$_ / $." unless m!Categories: ([^<]*)!; $categories = $1; } $_=; die "$_ / $." unless m!
!; while(1) { $_ = ; next if m/
/; last unless m/Speaker/; die "$_ / $." unless m!Speaker: ]+>([^<]+)!; push @speaker,$1; }; die "$_ / $." unless m!
!; $_=; die "$_ / $." unless m!

!; $_=; die "$_ / $." unless m!
!; $_=; die "$_ / $." unless m!
Abstract:
!; $_=; die "$_ / $." unless m!
(.*)!; $txt = $1; while() { $txt .= $_; last if m!
!; }; $_=; die "$_ / $." unless m!
!; $txt =~ s!<[^>]+>!!sg; $txt =~ s!\n+! !sg; $txt =~ s!\s+! !sg; %d = ( 'Sun' => 16, 'Mon' => 17,'Tue' => 18,'Wed' => 19); $d = $d{ $day } or die; $t = $time; ($h,$m) = split /h/,$t; $t1=$h.$m; $m += $duration; if ($m>=60) { $h+=1; $m-=60; }; $m = '0'.$m if $m <10; $h = '0'.$h if $h <10; $t2=$h.$m; $d1="200311$d\T$t1"."00Z"; $d2="200311$d\T$t2"."00Z"; print STDERR "$title - $day / $time -- $t1 - $t2 ($duration)\n"; $txt .= '\n\n'."$level $audience $category $style\\n"; $ii++; $h=sprintf "%04x",$ii; $speakers = join(', ',@speaker); print <<"EOM"; BEGIN:VEVENT ATTENDEE;CN="$speakers":mailto:none\@apace.org UID:57128C48-1931-11D8-$h-00039344C7CD DTSTART;TZID=US/Pacific:$d1 SEQUENCE:$ii SUMMARY:$title DTEND;TZID=US/Pacific:$d2 DESCRIPTION:$txt ORGANIZER;CN="$speakers":mailto:none\@apace.org LOCATION: $room END:VEVENT EOM return 0; } print <<"EOM"; BEGIN:VCALENDAR VERSION:2.0 X-WR-CALNAME:DirkxApacheCon PRODID:-//Apple Computer\, Inc//iCal 1.5//EN X-WR-RELCALID:571295C9-1931-11D8-A96D-00039344C7CD X-WR-TIMEZONE:US/Pacific CALSCALE:GREGORIAN METHOD:PUBLISH BEGIN:VTIMEZONE TZID:US/Pacific LAST-MODIFIED:20031117T190751Z BEGIN:STANDARD DTSTART:20031026T090000 TZOFFSETTO:-0800 TZOFFSETFROM:+0000 TZNAME:PST END:STANDARD BEGIN:DAYLIGHT DTSTART:20040404T010000 TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:PDT END:DAYLIGHT END:VTIMEZONE EOM &walk(); &suck('Main Room'); &walk(); &suck('Main Room'); &walk(); &suck('Main Room'); for $i (1..100) { &walk() and last; &suck() and last; }; print << "EOM"; END:VCALENDAR EOM