r2532 - in packages: . libtie-ical-perl libtie-ical-perl/branches libtie-ical-perl/branches/upstream libtie-ical-perl/branches/upstream/current libtie-ical-perl/branches/upstream/current/lib libtie-ical-perl/branches/upstream/current/lib/Tie libtie-ical-perl/branches/upstream/current/samples libtie-ical-perl/branches/upstream/current/t

gregor herrmann gregoa-guest at costa.debian.org
Sun Apr 9 13:38:37 UTC 2006


Author: gregoa-guest
Date: 2006-04-09 13:38:36 +0000 (Sun, 09 Apr 2006)
New Revision: 2532

Added:
   packages/libtie-ical-perl/
   packages/libtie-ical-perl/branches/
   packages/libtie-ical-perl/branches/upstream/
   packages/libtie-ical-perl/branches/upstream/current/
   packages/libtie-ical-perl/branches/upstream/current/Build.PL
   packages/libtie-ical-perl/branches/upstream/current/CHANGES
   packages/libtie-ical-perl/branches/upstream/current/MANIFEST
   packages/libtie-ical-perl/branches/upstream/current/META.yml
   packages/libtie-ical-perl/branches/upstream/current/Makefile.PL
   packages/libtie-ical-perl/branches/upstream/current/README
   packages/libtie-ical-perl/branches/upstream/current/TODO
   packages/libtie-ical-perl/branches/upstream/current/lib/
   packages/libtie-ical-perl/branches/upstream/current/lib/Tie/
   packages/libtie-ical-perl/branches/upstream/current/lib/Tie/iCal.pm
   packages/libtie-ical-perl/branches/upstream/current/samples/
   packages/libtie-ical-perl/branches/upstream/current/samples/demo.ics
   packages/libtie-ical-perl/branches/upstream/current/samples/demo.pl
   packages/libtie-ical-perl/branches/upstream/current/samples/uniquify.pl
   packages/libtie-ical-perl/branches/upstream/current/t/
   packages/libtie-ical-perl/branches/upstream/current/t/a_use.t
   packages/libtie-ical-perl/branches/upstream/current/t/b_tie.t
   packages/libtie-ical-perl/branches/upstream/current/t/c_storefetch.t
   packages/libtie-ical-perl/tags/
Log:
[svn-inject] Installing original source of libtie-ical-perl

Added: packages/libtie-ical-perl/branches/upstream/current/Build.PL
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/Build.PL	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/Build.PL	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,11 @@
+use Module::Build;
+my $build = Module::Build->new(
+	module_name => 'Tie::iCal',
+	license => 'perl',
+	requires => {
+		'Tie::File'   => '0.97',
+	},
+	dist_author => 'Blair Sutton <bsdz at cpan.org>',
+	dist_abstract => 'Tie iCal files to Perl hashes',
+);
+$build->create_build_script;
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/Build.PL
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/CHANGES
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/CHANGES	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/CHANGES	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,25 @@
+CHANGES
+
+0.12 -> 0.13
+corrected unfold behaviour with "\n" character sequences.
+corrected property extraction with "\n" character sequences.
+added more documentation.
+
+0.11 -> 0.12
+fixed typo in Makefile.PL ASTRACT.
+fixed exists reset key interator bug in seekUid.
+added uniquify.pl example.
+added more documentation.
+
+0.10 -> 0.11
+added modified parse_line to ignore single quotes.
+remove dependency on Text::ParseWords.
+added b_tie.t test.
+fixed UID bug on STORE method.
+fixed typo in subcomponent creation.
+added c_storefetch.t test.
+fold lines over 75 characters.
+
+0.09 -> 0.10
+support multiple content lines with/without params.
+FETCH, EXISTS, DELETE all use seekUid.
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/CHANGES
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/MANIFEST	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/MANIFEST	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,14 @@
+Makefile.PL
+Build.PL
+MANIFEST			This list of files
+META.yml
+README
+t/a_use.t
+t/b_tie.t
+t/c_storefetch.t
+samples/demo.pl
+samples/demo.ics
+samples/uniquify.pl
+TODO
+CHANGES
+lib/Tie/iCal.pm


Property changes on: packages/libtie-ical-perl/branches/upstream/current/MANIFEST
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/META.yml	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/META.yml	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,11 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         Tie-iCal
+version:      0.13
+version_from: lib/Tie/iCal.pm
+installdirs:  site
+requires:
+    Tie::File:                     0.97
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17


Property changes on: packages/libtie-ical-perl/branches/upstream/current/META.yml
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/Makefile.PL	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/Makefile.PL	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,23 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+
+WriteMakefile(
+	'NAME'         => 'Tie::iCal',
+	'VERSION_FROM' => 'lib/Tie/iCal.pm',
+	'PM' => {
+		'lib/Tie/iCal.pm' => '$(INST_LIBDIR)/iCal.pm',
+	},
+	'PL_FILES' => {},
+	'PREREQ_PM'   => {
+		'Tie::File'	=> '0.97',
+	},
+	($] ge '5.005') ?
+	(
+		'AUTHOR'   => 'Blair Sutton (bsdz at cpan.org)',
+		'ABSTRACT' => 'Tie iCal files to Perl hashes',
+	)
+	: (),
+);
+
+


Property changes on: packages/libtie-ical-perl/branches/upstream/current/Makefile.PL
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/README
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/README	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/README	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,31 @@
+Tie::iCal
+=========
+
+Copyright (c) 2005 Blair Sutton. All rights reserved. 
+This program is free software; you can redistribute 
+it and/or modify it under the same terms as Perl itself. 
+
+INSTALLATION
+
+To install this module type the following:
+
+   perl Makefile.PL
+   make
+   make test
+   make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+   Tie::File
+   
+Both should come with bundled with the latest version of Perl.
+
+INSTRUCTIONS
+
+Please read the perldoc.
+
+AUTHOR
+
+   Blair Sutton (bsdz at cpan.org)


Property changes on: packages/libtie-ical-perl/branches/upstream/current/README
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/TODO
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/TODO	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/TODO	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,4 @@
+To Do
+=====
+delete empty VCALENDAR blocks.
+more examples.
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/TODO
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/lib/Tie/iCal.pm
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/lib/Tie/iCal.pm	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/lib/Tie/iCal.pm	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,593 @@
+package Tie::iCal;
+
+use strict;
+require Exporter;
+our $VERSION = 0.13;
+our @ISA     = qw(Exporter);
+
+use Tie::File;
+
+=head1 NAME
+
+Tie::iCal - Tie iCal files to Perl hashes.
+
+=head1 VERSION
+
+This document describes version 0.13 released 29th January 2005.
+
+=head1 SYNOPSIS
+
+	use Tie::iCal;
+	
+	tie %my_events, 'Tie::iCal', "mycalendar.ics" or die "Failed to tie file!\n";
+	tie %your_events, 'Tie::iCal', "yourcalendar.ics" or die "Failed to tie file!\n";
+	
+	$my_events{"A-NEW-UNIQUE-ID"} = [
+		'VEVENT',
+		{
+			'SUMMARY' => 'Bastille Day Party',
+			'DTSTAMP' => '19970714T170000Z',
+			'DTEND' => '19970715T035959Z',
+		}
+	];
+	
+	tie %our_events, 'Tie::iCal', "ourcalendar.ics" or die "Failed to tie file!\n";
+	
+	# assuming %my_events and %your_events
+	# have no common keys (unless that's your intention)
+	#
+	while (my($uid,$event) = each(%my_events)) {
+		$our_events{$uid} = $event;	
+	}
+	while (my($uid,$event) = each(%your_events)) {
+		$our_events{$uid} = $event;
+	}
+	
+	untie %our_events;
+	untie %your_events;
+	untie %my_events;
+
+=head1 DEPENDENCIES
+
+	Tie::File
+
+=head1 DESCRIPTION
+
+Tie::iCal represents an RFC2445 iCalendar file as a Perl hash. Each key in the hash represents
+an iCalendar component like VEVENT, VTODO or VJOURNAL. Each component in the file must have
+a unique UID property as specified in the RFC 2445. A file containing non-unique UIDs can
+be converted to have only unique UIDs (see samples/uniquify.pl).
+
+The module makes very little effort in understanding what each iCalendar property means and concentrates
+on the format of the iCalendar file only.
+
+=head1 FILE LOCKING
+
+The Tie::iCal object returned by tie can also be used to access the underlying Tie::File object.
+This is accessable via the 'A' class variable.
+This may be useful for file locking.
+
+	my $ical = tie %events, 'Tie::iCal', "mycalendar.ics";
+	$ical->{A}->flock;
+
+=head1 DATES
+
+The iCalendar specification uses a special format for dates. This module makes no effort in trying
+to interpret dates in this format. You should look at the Date::ICal module that can convert between
+Unix epoch dates and iCalendar date strings.
+
+=cut
+
+sub TIEHASH {
+	my ($p, $f, %O) = @_;
+	
+	tie my @a, 'Tie::File', $f, recsep => "\r\n" or die "failed to open ical file\n";
+	$O{A} = \@a; # file array
+	$O{i} = 0;   # current file index for FIRSTKEY and NEXTKEY
+	$O{C} = ();  # uid to index cache
+	
+	bless \%O => $p;
+}
+
+sub FETCH {
+	my $self = shift;
+	my $uid  = shift;
+	
+	my $index = $self->seekUid($uid);
+	
+	return defined $index ? $self->toHash($index) : undef;
+}
+
+sub EXISTS {
+	my $self = shift;
+	my $uid  = shift;
+	
+	my $index = $self->seekUid($uid);
+
+	return defined $index ? 1 : 0;
+}
+
+sub FIRSTKEY {
+	my $self = shift;
+	
+	$self->{i} = 0;
+	for my $line (@{$self->{A}}) {
+		if ($line =~ m/^UID/) {
+			if ($self->unfold($self->{i}) =~ /^UID.*:(.*)$/) {
+				$self->{C}->{$1} = $self->{i}; # cache in any case
+				return $1;
+			} else {
+				warn("FISRTKEY: discovered illegal UID property format, should be like UID;...:..., ignoring for now\n");
+			}
+		}
+		$self->{i}++;
+	}
+}
+
+# copy of FIRSTKEY but with extra condition $self->{i} > last index
+#
+sub NEXTKEY {
+	my $self = shift;
+	
+	my $i = $self->{i};
+	$self->{i} = 0;
+	for my $line (@{$self->{A}}) {
+		if ($line =~ m/^UID/ && $self->{i} > $i) {
+			if ($self->unfold($self->{i}) =~ /^UID.*:(.*)$/) {
+				$self->{C}->{$1} = $self->{i}; # cache in any case
+				return $1;
+			} else {
+				warn("NEXTKEY: discovered illegal UID property format, should be like UID;...:..., ignoring for now\n");
+			}
+		}
+		$self->{i}++;
+	}
+	return undef;
+}
+
+sub SCALAR {
+	my $self = shift;
+	
+	my $count = 0;
+	for my $line (@{$self->{A}}) {
+		$count++ if $line =~ m/^UID/;
+	}
+	return $count;
+}
+
+sub ceil {
+    return int($_[0]) + (int($_[0]) != $_[0]);
+}
+
+sub fold {
+    my $MAXLENGTH = 75;
+    my @A;
+    foreach my $string (@_) {
+        my @B = unpack("A$MAXLENGTH" x (&ceil(length($string)/$MAXLENGTH)), $string);
+        push @A, $B[0], map { ' '.$_ } @B[1..$#B];
+    }
+    return @A;
+}
+
+sub STORE {
+	my $self = shift;
+	my $uid = shift;
+	my $c = shift;
+	
+	die "event must be array!\n" if ref $c ne 'ARRAY';
+
+	$self->DELETE($uid);
+    
+	push @{$self->{A}}, fold($self->toiCal($uid, $c));
+}
+
+sub DELETE {
+	my $self = shift;
+	my $uid  = shift;
+	
+	my $index = $self->seekUid($uid);
+	
+	return defined $index ? $self->removeComponent($index) : 0;
+}
+
+sub CLEAR {
+	my $self  = shift;
+	
+	@{$self->{A}} = ();
+}
+
+sub DESTROY {
+  my $self = shift;
+  untie $self->{A};
+}
+
+sub debug {
+	my $self = shift;
+	print(STDERR shift, "\n") if $self->{debug};
+}
+
+sub unfold {
+	my $self = shift;
+	my $index = shift;
+	
+	my $result = ${$self->{A}}[$index];
+	my $i = 1;
+	until (${$self->{A}}[$index + $i] !~ /^ (.*)$/s) {
+		$result .= $1;
+		$i++;
+	}
+	$self->debug("unfolded index $index to $result");
+	return $result;
+}
+
+sub seekUid {
+	my $self = shift;
+	my $uid  = shift;
+	
+	my $index;
+	
+	# check cache
+	#
+	if (exists $self->{C}->{$uid}) {
+		$self->debug("found cached index for $uid, checking..");
+		$index = $self->{C}->{$uid};
+		if ($self->unfold($index) =~ /^UID.*:(.*)$/) {
+			if ($1 eq $uid) {
+				$self->debug("found key $uid in cache");
+				return $index;
+			} else {
+				$self->debug("could not find key $uid in cache, deleting");
+				delete $self->{C}->{$uid};
+			}
+		} else {
+			warn("seekUid: discovered illegal UID property format, should be like UID;...:..., ignoring for now\n");
+		}
+	}
+	
+	# not in cache then lets search the file
+	#
+	$index = 0;
+	for my $line (@{$self->{A}}) {
+		if ($line =~ m/^UID/) {
+			if ($self->unfold($index) =~ /^UID.*:(.*)$/) {
+				$self->{C}->{$1} = $index; # cache in any case
+				if ($1 eq $uid) {
+					$self->debug("found key $uid");
+					return $index;
+				}
+			} else {
+				warn("discovered illegal UID property format, should be like UID;...:..., ignoring for now\n");
+			}
+		}
+		$index++;
+	}
+	
+	# doesn't exist!
+	#
+	return undef;	
+}
+
+sub removeComponent {
+	my $self = shift;
+	my $index = shift;
+	
+	my $i;
+	$i = 0;	$i++ until ${$self->{A}}[$index - $i] =~ /^BEGIN:(\w+)$/; my $si = $index - $i;
+	my $component = $1;
+	$i = 0;	$i++ until ${$self->{A}}[$index + $i] =~ /^END:$component/; my $fi = $index + $i;
+	$self->debug("component $component found between [$si, $fi]");
+	
+	splice @{$self->{A}}, $si, $fi - $si + 1;	
+}
+
+=head1 How Tie::iCal interprets iCal files
+
+Tie::iCal interprets files by mapping iCal components into Perl hash keys and
+iCal content lines into various Perl arrays and hashes.
+
+=head2 Components
+
+An iCal component such as VEVENT, VTODO or VJOURNAL maps to a hash key:-
+
+	BEGIN:VEVENT
+	UID:a_unique_uid
+	NAME1:VALUE1
+	..
+	END:VEVENT
+
+corresponds to
+
+	$events{'a_unique_uid'} = ['VEVENT', {'NAME1' => 'VALUE1'}]
+
+=head2 Subcomponents
+
+An iCal subcomponent such as VALARM maps to a list of hash keys:-
+
+	BEGIN:VALARM
+	TRIGGER;VALUE=DURATION:-PT1S
+	TRIGGER;VALUE=DURATION:-PT1S
+	END:VALARM
+	BEGIN:VALARM
+	X-TIE-ICAL;VALUE=ANOTHER:HERE
+	X-TIE-ICAL:HERE2
+	X-TIE-ICAL-NAME:HERE2
+	END:VALARM
+
+corresponds to
+
+	'VALARM' => [
+		{
+			'TRIGGER' => [
+				[{'VALUE' => 'DURATION'},'-PT1S'],
+				[{'VALUE' => 'DURATION'},'-PT1S']
+			]
+		},
+		{
+			'X-TIE-ICAL' => [
+				[{'VALUE' => 'ANOTHER'},'HERE'],
+				['HERE2']
+			],
+			'X-TIE-ICAL-NAME' => 'HERE2'
+		}
+	]
+
+To see how individual content lines are formed see below.
+
+=head2 Content Lines
+
+Once unfolded, a content line may look like:-
+
+    NAME;PARAM1=PVAL1;PARAM2=PVAL2;...:VALUE1,VALUE2,...
+
+having an equivalent perl data structure like: -
+
+    'NAME' => [{'PARAM1'=>'PVAL1', 'PARAM2'=>'PVAL2', ..}, 'VALUE1', 'VALUE2', ..]
+
+or
+
+    NAME:VALUE1,VALUE2,...
+
+having an equivalent perl data structure like: -
+
+    'NAME' => ['VALUE1', 'VALUE2', ..]
+
+or
+
+    NAME:VALUE
+
+having an equivalent perl data structure like: -
+
+    'NAME' => 'VALUE'
+
+Multiple contentlines with same name, i.e. FREEBUSY, ATTENDEE:-
+
+    NAME;PARAM10=PVAL10;PARAM20=PVAL20;...:VALUE10,VALUE20,...
+    NAME;PARAM11=PVAL11;PARAM21=PVAL21;...:VALUE11,VALUE21,...
+    ...
+
+having an equivalent perl data structure like: -
+
+    'NAME' => [ 
+        [{'PARAM10'=>'PVAL10', 'PARAM20'=>'PVAL20', ..}, 'VALUE10', 'VALUE20', ..],
+        [{'PARAM11'=>'PVAL11', 'PARAM21'=>'PVAL21', ..}, 'VALUE11', 'VALUE21', ..],
+        ...
+    ]
+
+or
+
+    NAME:VALUE10,VALUE20,...
+    NAME:VALUE11,VALUE21,...
+    ...
+
+having an equivalent perl data structure like: -
+
+    'NAME' => [ 
+        ['VALUE10', 'VALUE20', ..],
+        ['VALUE11', 'VALUE21', ..],
+        ...
+    ]
+
+or in a mixed form, i.e.
+
+    NAME:VALUE10,VALUE20,...
+    NAME;PARAM11=PVAL11;PARAM21=PVAL21:VALUE11,VALUE21,...
+    NAME:VALUE12,VALUE22,...
+    ...
+
+having an equivalent perl data structure like: -
+
+    'NAME' => [ 
+        ['VALUE10', 'VALUE20', ..],
+        [{'PARAM11'=>'PVAL11', 'PARAM21'=>'PVAL21', ..}, 'VALUE11', 'VALUE21', ..],
+        ['VALUE12', 'VALUE22', ..],
+        ...
+    ]
+
+=cut
+
+sub toiCal {
+	my $self = shift;
+	my $uid = shift;
+    my $c = shift;
+    my $excludeComponent = shift;
+
+	my @lines;
+	my ($component, $e) = $excludeComponent ? (undef, $c) : @$c;
+    push @lines, "BEGIN:VCALENDAR", "VERSION:2.0", "PRODID:-//Numen Inest/NONSGML Tie::iCal $VERSION//EN", "BEGIN:$component", "UID:$uid" if ! $excludeComponent;
+    foreach my $name (keys %$e) {
+		if ($name eq 'RRULE') {
+            if (ref($$e{$name}) ne 'HASH') {
+                warn "RRULE property should be expressed as a hash, ignoring..\n";
+            } else {
+                my @rrule;
+                foreach my $k (keys %{$$e{$name}}) {
+                    push @rrule, ref(${$$e{$name}}{$k}) eq 'ARRAY' ? "$k=".join(',', @{${$$e{$name}}{$k}}) : "$k=".${$$e{$name}}{$k}; 
+                }
+                push @lines, "$name:".join(';', at rrule); 
+            }
+		} elsif (ref(\$$e{$name}) eq 'SCALAR') {
+			push @lines, "$name:$$e{$name}";
+		} elsif (ref($$e{$name}) eq 'ARRAY') {
+			if (@{$$e{$name}} && !grep({ref($_) ne 'HASH'} @{$$e{$name}})) { # strict list of hashes => we have a subcomponent
+				push @lines, "BEGIN:$name";
+                foreach my $sc (@{$$e{$name}}) {
+                    push @lines, $self->toiCal(undef, $sc, 1);
+                }
+                push @lines, "END:$name";
+			} elsif (@{$$e{$name}} && !grep({ref($_) ne 'ARRAY'} @{$$e{$name}})) { # strict list of arrays => we have several content lines
+                foreach my $cl (@{$$e{$name}}) {
+    				if (ref(${$cl}[0]) eq 'HASH') { # we have params
+						my ($params, @values) = @{$cl};
+	    				push @lines, "$name;".join(";", map { "$_=$$params{$_}" } keys(%$params)).":".join(',', at values);
+					} else { # we only have values
+						push @lines, "$name:".join(',',@{$cl});
+					}
+                }
+            } else {
+				my ($params, @values) = @{$$e{$name}};
+				push @lines, "$name;".join(";", map { "$_=$$params{$_}" } keys(%$params)).":".join(',', at values);
+			}
+		} else {
+			warn "ignoring unimplemented ",ref(\${$e}{$name}),"  ->  ",$name."\n";
+		}
+	}
+    push @lines, "END:$component", "END:VCALENDAR" if ! $excludeComponent;
+	
+	return @lines;
+}
+
+# taken from Text::ParseWords without single quote as quote char
+# and keep flag
+#
+sub parse_line {
+	# We will be testing undef strings
+	no warnings;
+	use re 'taint'; # if it's tainted, leave it as such
+
+    my($delimiter, $line) = @_;
+    my($word, @pieces);
+
+    while (length($line)) {
+		$line =~ s/^(["])								# a $quote
+			((?:\\.|(?!\1)[^\\])*)						# and $quoted text
+			\1											# followed by the same quote
+			|											# --OR--
+			^((?:\\.|[^\\"])*?) 						# an $unquoted text
+			(\Z(?!\n)|(?-x:$delimiter)|(?!^)(?=["]))  
+														# plus EOL, delimiter, or quote
+		//xs or return;		# extended layout
+		my($quote, $quoted, $unquoted, $delim) = ($1, $2, $3, $4);
+		return() unless( defined($quote) || length($unquoted) || length($delim));
+
+		$quoted = "$quote$quoted$quote";
+        $word .= defined $quote ? $quoted : $unquoted;
+ 
+        if (length($delim)) {
+            push(@pieces, $word);
+            undef $word;
+        }
+        if (!length($line)) {
+            push(@pieces, $word);
+		}
+    }
+    return(@pieces);
+}
+
+sub toHash {
+	my $self = shift;
+	my $index = shift;
+	my $excludeComponent = shift;
+	
+	my $i;
+	$i = 0;	$i++ until ${$self->{A}}[$index - $i] =~ /^BEGIN:(\w+)$/; my $si = $index - $i;
+	my $component = $1;
+	$i = 0;	$i++ until ${$self->{A}}[$index + $i] =~ /^END:$component/; my $fi = $index + $i;
+	$self->debug("component $component found between [$si, $fi]");
+	
+	my %e;
+	my $subComponent = '';
+	for my $i ($si+1..$fi-1) {
+		next if ${$self->{A}}[$i] =~ m/^UID/;
+		if (${$self->{A}}[$i] =~ m/^\w+/) {
+			my $contentLine = $self->unfold($i);
+			if ($subComponent ne '') { # we are in a subcomponent
+				$subComponent = '' if $contentLine =~ /^END:$subComponent$/;
+				next;
+			} elsif ($contentLine =~ /^BEGIN:(\w+)$/) { # we have found a subcomponent
+				$subComponent = $1;
+				push @{$e{$subComponent}}, $self->toHash($i, 1);
+			} elsif ($contentLine =~ /^[\w-]+;.*$/s) { # we have params
+				my ($nameAndParamString, @valueFragments) = &parse_line(':', $contentLine);
+				my @values = &parse_line(',', join(':', @valueFragments));
+				my ($name, @params) = &parse_line(';', $nameAndParamString);
+				my %params = map { my ($p, $v) = split(/=/, $_); $p => $v } @params;
+				if (exists $e{$name}) {
+                    if (!(@{$e{$name}} && !grep({ref($_) ne 'ARRAY'} @{$e{$name}}))) { # not a strict list of arrays
+                        $self->debug("found singleton data, converting to list..");
+                        $e{$name} = [$e{$name}, [{%params}, @values]];
+                    } else {
+                        push @{$e{$name}}, [{%params}, @values];
+                    }
+                } else {
+                    $e{$name} = [{%params}, @values];
+                }
+			} elsif ($contentLine =~ /^[\w-]+:.*$/s) { # we don't have params
+				my ($name, @valueFragments) = &parse_line(':', $contentLine);
+				my @values;
+				if ($name eq 'RRULE') {
+					my @params = &parse_line(';', join(':', @valueFragments));
+					my %params = map { my ($p, $v) = split(/=/, $_); $p => $v =~ /,/ ? [split(/,/,$v)] : $v } @params;
+					push @values, {%params};
+				} else {
+					@values = &parse_line(',', join(':', @valueFragments));
+				}
+				if (exists $e{$name}) {
+                    if (!(@{$e{$name}} && !grep({ref($_) ne 'ARRAY'} @{$e{$name}}))) { # not a strict list of arrays
+                        $self->debug("found singleton data, converting to list..");
+                        $e{$name} = [$e{$name}, [@values]];
+                    } else {
+                        push @{$e{$name}}, [@values];
+                    }
+                } else {
+                    $e{$name} = @values == 1 ? $values[0] : [@values];
+                }
+			} else { # what do we have?
+				warn("discovered illegal property format, should be like NAME;...:..., ignoring for now\n");
+			}
+		}
+	}
+	
+	return $excludeComponent ?  \%e : [$component, \%e] ;
+}
+
+=head1 BUGS
+
+Property names are assumed not to be folded, i.e.
+
+	DESCR
+	 IPTION:blah blah..
+     
+RRULE property does not support parameters.
+
+Property names that begin with UID can potentially confuse this module.
+
+Subcomponents such as VALARM must exist after any UID property.
+
+Deleting events individually may leave non-RFC2445 compliant empty VCALENDAR objects.
+
+=head1 AUTHOR
+
+Blair Sutton, <mailto:bsdz at cpan.org>, L<http://www.numeninest.com/>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2005 Blair Sutton. All rights reserved.
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<perl>, L<Tie::File>, L<Date::ICal>
+
+=cut
+
+1;
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/lib/Tie/iCal.pm
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/samples/demo.ics
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/samples/demo.ics	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/samples/demo.ics	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,1155 @@
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :413dd998-67d6-11d9-9a33-e4a59cf11a95
+SUMMARY
+ :my event
+DESCRIPTION
+ :my note
+LOCATION
+ :my location
+URL
+ :http://myurl.com
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X
+ ;MEMBER=AlarmEmailAddress
+ :me at myaddress
+RRULE
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,WE,TH
+EXDATE
+ :20050118T000000
+DTSTART
+ :20050118T160000Z
+DTEND
+ :20050118T170000Z
+DTSTAMP
+ :20050116T154856Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :927172676
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20020826
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :1ce81410-4769-11d9-8693-ee0b0a9128b1
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041228
+DTEND
+ ;VALUE=DATE
+ :20041229
+DTSTAMP
+ :20041206T092748Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :2285be0e-4769-11d9-9032-fb135edc90b2
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041227
+DTEND
+ ;VALUE=DATE
+ :20041228
+DTSTAMP
+ :20041206T092802Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :3be6a610-4769-11d9-bf60-e015b2923205
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050325
+DTEND
+ ;VALUE=DATE
+ :20050326
+DTSTAMP
+ :20041206T092845Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :42faa140-4769-11d9-8181-bcd3c0ece72d
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050328
+DTEND
+ ;VALUE=DATE
+ :20050329
+DTSTAMP
+ :20041206T092857Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :496a1a2e-4769-11d9-8b9e-9a84f95c649f
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050502
+DTEND
+ ;VALUE=DATE
+ :20050503
+DTSTAMP
+ :20041206T092907Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :4f246064-4769-11d9-add5-c041a1ed7968
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050530
+DTEND
+ ;VALUE=DATE
+ :20050531
+DTSTAMP
+ :20041206T092917Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :56208410-4769-11d9-840a-ff72353214de
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050829
+DTEND
+ ;VALUE=DATE
+ :20050830
+DTSTAMP
+ :20041206T092929Z
+LAST-MODIFIED
+ :20041206T092938Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :6389be50-4769-11d9-b537-96d51d02ab76
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051227
+DTEND
+ ;VALUE=DATE
+ :20051228
+DTSTAMP
+ :20041206T092951Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :698ded6c-4769-11d9-9e35-8764b0ff2b8e
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051226
+DTEND
+ ;VALUE=DATE
+ :20051227
+DTSTAMP
+ :20041206T093001Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7323412e-4769-11d9-8f2d-c469be04ddf5
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060102
+DTEND
+ ;VALUE=DATE
+ :20060103
+DTSTAMP
+ :20041206T093018Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7ff3e4ee-4769-11d9-b1d4-e2dcd6159dd0
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060414
+DTEND
+ ;VALUE=DATE
+ :20060415
+DTSTAMP
+ :20041206T093038Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :85c3a04e-4769-11d9-8af7-cda5e3e98ebe
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060417
+DTEND
+ ;VALUE=DATE
+ :20060418
+DTSTAMP
+ :20041206T093047Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :8c18df5e-4769-11d9-ac09-e97dffd65595
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060501
+DTEND
+ ;VALUE=DATE
+ :20060502
+DTSTAMP
+ :20041206T093101Z
+LAST-MODIFIED
+ :20041206T093108Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :958a6fda-4769-11d9-88db-e91b56d7b8f8
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060529
+DTEND
+ ;VALUE=DATE
+ :20060530
+DTSTAMP
+ :20041206T093113Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :9f39fd7a-4769-11d9-a665-99a1ee535d36
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060828
+DTEND
+ ;VALUE=DATE
+ :20060829
+DTSTAMP
+ :20041206T093129Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :a6b9427c-4769-11d9-964c-e7e2f4c2006a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061225
+DTEND
+ ;VALUE=DATE
+ :20061226
+DTSTAMP
+ :20041206T093144Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ab98305a-4769-11d9-b056-be29252508db
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061226
+DTEND
+ ;VALUE=DATE
+ :20061227
+DTSTAMP
+ :20041206T093151Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :b36fac5e-4769-11d9-9833-cbe45ff8e08b
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070101
+DTEND
+ ;VALUE=DATE
+ :20070102
+DTSTAMP
+ :20041206T093204Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ba1d2270-4769-11d9-bc2f-f524346ae56f
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070406
+DTEND
+ ;VALUE=DATE
+ :20070407
+DTSTAMP
+ :20041206T093217Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :bf0cc0c4-4769-11d9-bd28-8ce79732df58
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070409
+DTEND
+ ;VALUE=DATE
+ :20070410
+DTSTAMP
+ :20041206T093225Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :c70f271c-4769-11d9-85d5-eeae49afa7c8
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070507
+DTEND
+ ;VALUE=DATE
+ :20070508
+DTSTAMP
+ :20041206T093238Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :cd6b8d3a-4769-11d9-8ec2-b2672c137a80
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070528
+DTEND
+ ;VALUE=DATE
+ :20070529
+DTSTAMP
+ :20041206T093248Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :d5de0218-4769-11d9-8ab6-fc42c8cf7511
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070827
+DTEND
+ ;VALUE=DATE
+ :20070828
+DTSTAMP
+ :20041206T093303Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e2435c06-4769-11d9-8189-85efc4fcc75a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071225
+DTEND
+ ;VALUE=DATE
+ :20071226
+DTSTAMP
+ :20041206T093325Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e6b9626c-4769-11d9-9636-b4b242071a07
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071226
+DTEND
+ ;VALUE=DATE
+ :20071227
+DTSTAMP
+ :20041206T093331Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eed602a2-4769-11d9-9c29-87e14bef7e97
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20080101
+DTEND
+ ;VALUE=DATE
+ :20080102
+DTSTAMP
+ :20041206T093345Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :de525990-4768-11d9-b210-dbb23e96122f
+SUMMARY
+ :New Year's day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040101
+DTEND
+ ;VALUE=DATE
+ :20040102
+DTSTAMP
+ :20041206T092559Z
+LAST-MODIFIED
+ :20041207T102901Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eaabc7bc-4768-11d9-a9f0-d813f0b4250b
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040409
+DTEND
+ ;VALUE=DATE
+ :20040410
+DTSTAMP
+ :20041206T092625Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :f3741142-4768-11d9-90f2-b75bdc777a72
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040412
+DTEND
+ ;VALUE=DATE
+ :20040413
+DTSTAMP
+ :20041206T092637Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ffac1e82-4768-11d9-af34-c8169769d183
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040503
+DTEND
+ ;VALUE=DATE
+ :20040504
+DTSTAMP
+ :20041206T092702Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :06af693c-4769-11d9-88da-f9a496177710
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040531
+DTEND
+ ;VALUE=DATE
+ :20040601
+DTSTAMP
+ :20041206T092714Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :0fcfe9c4-4769-11d9-b1de-afc927cc7b57
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040830
+DTEND
+ ;VALUE=DATE
+ :20040831
+DTSTAMP
+ :20041206T092731Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :359d52c2-4769-11d9-9cd3-fde74dbfad50
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20050103T010338
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050103
+DTEND
+ ;VALUE=DATE
+ :20050104
+DTSTAMP
+ :20041206T092833Z
+LAST-MODIFIED
+ :20050103T010338Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :971445858
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :925921922
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :936923338
+SUMMARY
+ :New Year's Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030101
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :962980365
+SUMMARY
+ :Good Friday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030418
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :909072250
+SUMMARY
+ :Easter Monday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030421
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :940352282
+SUMMARY
+ :May Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030505
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :975821516
+SUMMARY
+ :Spring Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030526
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :902762343
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030825
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :956630271
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :911737808
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+ORGANIZER:Mailto:B at example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D at example.com
+ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big at example.com
+ATTENDEE:conf_Big1 at example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E at example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T190000Z
+DTEND:19970701T193000Z
+SUMMARY:Conference
+UID:calsrv.example.com-873970198738777 at example.com
+SEQUENCE:1
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR


Property changes on: packages/libtie-ical-perl/branches/upstream/current/samples/demo.ics
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/samples/demo.pl
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/samples/demo.pl	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/samples/demo.pl	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,87 @@
+use Tie::iCal;
+use Data::Dumper;
+
+print "TIEHASH test..";
+tie %events, 'Tie::iCal', "./demo.ics", 'debug' => 0 or die "Failed to tie file!\n";
+print "ok\n";
+
+print "FETCH test..\n";
+print Dumper($events{'413dd998-67d6-11d9-9a33-e4a59cf11a95'});
+
+print "FETCH cache test..\n";
+print Dumper($events{'413dd998-67d6-11d9-9a33-e4a59cf11a95'});
+
+print "EXISTS test..\n";
+if (exists $events{'calsrv.example.com-873970198738777 at example.com'}) {
+	print "Found key 'calsrv.example.com-873970198738777\@example.com', printing it..\n";
+	print Dumper($events{'calsrv.example.com-873970198738777 at example.com'})."\n";
+}
+if (!exists $events{'this_UID_does_not_exist'}) {
+	print "Did not find non-existant key\n";
+}
+
+print "FIRSTKEY test..\n";
+print each(%events)."\n";
+
+print "NEXTKEY test..\n";
+#~ print "list keys..\n";
+#~ foreach (keys %events) { print $_."\n" }
+#~ print "list values..\n";
+#~ foreach (values %events) { print Dumper($_)."\n" }
+
+while (($key, $value) = each %events) { print $key, "\n" }  
+
+print "COUNT test..\n";
+print scalar(%events)."\n";
+
+print "DELETE test..\n";
+use File::Copy;
+copy("./demo.ics","./democopy.ics");
+tie %eventscopy, 'Tie::iCal', "./democopy.ics", 'debug' => 1 or die "Failed to tie file!\n";
+delete $eventscopy{'1ce81410-4769-11d9-8693-ee0b0a9128b1'};
+if (!exists $events{'1ce81410-4769-11d9-8693-ee0b0a9128b1'}) {
+	print "Did not find deleted key\n";
+}
+
+print "STORE test..\n";
+$eventscopy{"A-UNIQUE-ID"} = [
+	'VEVENT',
+	{
+		'URL' => 'http//myurl.com',
+		'SUMMARY' => 'my event',
+		'CLASS' => 'PRIVATE',
+		'LOCATION' => 'my location',
+		'X' => [{'MEMBER' => 'AlarmEmailAddress'},	'me at myaddress'],
+		'STATUS' => 'TENTATIVE',
+		'DTSTAMP' => '20050116T154856Z',
+		'DTEND' => '20050118T170000Z',
+		'VALARM' => [
+			{
+				'TRIGGER' => [{'VALUE' => 'DURATION'}, '-PT1S']
+			}
+		],
+		'DESCRIPTION' => 'my note',
+		'X-MOZILLA-ALARM-DEFAULT-LENGTH' => '0',
+		'RRULE' => {
+			'FREQ' => 'WEEKLY',
+			'BYDAY' => [
+				'TU',
+				'WE',
+				'TH'
+			],
+			'INTERVAL' => '1'
+		},
+		'EXDATE' => '20050118T000000',
+		'DTSTART' => '20050118T160000Z',
+        'ATTENDEE' => [
+            [{'CN' => 'BIG A','ROLE' => 'CHAIR','PARTSTAT' => 'ACCEPTED'},'MailtoA at example.com'],
+            [{'CN' => 'B','RSVP' => 'TRUE','CUTYPE' => 'INDIVIDUAL'},'MailtoB at example.com'],
+            ['MailtoB at example.com']
+        ]
+	}
+];
+
+print "hit Enter to test CLEAR..\n";
+getc(STDIN);
+print "CLEAR test..\n";
+%eventscopy = ();
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/samples/demo.pl
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/samples/uniquify.pl
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/samples/uniquify.pl	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/samples/uniquify.pl	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,74 @@
+use Tie::iCal;
+
+unlink "unique.ics", "nonunique.ics";
+open ICS, ">nonunique.ics";
+while (<main::DATA>) { print ICS $_ }
+close ICS;
+
+tie %events, 'Tie::iCal', "nonunique.ics", 'debug' => 0 or die "Failed to tie file!\n";
+tie %newevents, 'Tie::iCal', "unique.ics", 'debug' => 0 or die "Failed to tie file!\n";
+
+print STDERR "Converting nonunique.ics to unique.ics..\n";
+while (($uid, $event) = each %events) { 
+	my $newuid = createUniqueID(\%events);
+	print STDERR "Converting old key $uid to new key $newuid..\n";
+	$newevents{$newuid} = $event;
+}
+print STDERR "done\n";
+
+untie %events;
+untie %newevents;
+exit;
+
+# modified mozilla recipe
+#
+sub createUniqueID {
+	my $href = shift;
+	my $newID = "";
+	while ($newID eq "" || exists $$href{$newID}) {
+		$newID = int(900000000 + rand(100000000));
+	}
+	return $newID;
+}
+
+__END__
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Numen Inest/NONSGML Tie::iCal 0.11//EN
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+BEGIN:VEVENT
+UID:9999
+SUMMARY:My Event
+DTSTART;VALUE=DATE:20031225
+DTEND;VALUE=DATE:20031226
+END:VEVENT
+END:VCALENDAR
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/samples/uniquify.pl
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/t/a_use.t
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/t/a_use.t	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/t/a_use.t	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,8 @@
+#!/usr/bin/env perl -w
+use strict;
+use Test;
+BEGIN { plan tests => 1 }
+
+use Tie::iCal; ok(1);
+exit;
+__END__


Property changes on: packages/libtie-ical-perl/branches/upstream/current/t/a_use.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/t/b_tie.t
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/t/b_tie.t	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/t/b_tie.t	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,1248 @@
+#!/usr/bin/env perl -w
+use strict;
+use Test;
+BEGIN { plan tests => 14 }
+
+open ICS, ">test.ics";
+while (<main::DATA>) { print ICS $_ }
+close ICS;
+
+use Tie::iCal;
+
+# TIEHASH
+ok(tie my %events, 'Tie::iCal', "test.ics", 'debug' => 0);
+
+# FETCH
+my ($comp, $hash) = @{$events{'413dd998-67d6-11d9-9a33-e4a59cf11a95'}};
+ok($comp eq 'VEVENT');
+ok(${$hash}{'SUMMARY'} eq 'my event');
+
+# FETCH cache
+my ($comp1, $hash1) = @{$events{'413dd998-67d6-11d9-9a33-e4a59cf11a95'}};
+ok($comp1 eq 'VEVENT');
+ok(${$hash1}{'SUMMARY'} eq 'my event');
+
+# EXISTS
+ok(exists $events{'calsrv.example.com-873970198738777 at example.com'});
+ok(!exists $events{'this_UID_does_not_exist'});
+
+# FIRSTKEY
+ok(each(%events) eq '413dd998-67d6-11d9-9a33-e4a59cf11a95');
+
+# NEXTKEY
+my $count = 0;
+while (my ($key, $value) = each %events) { $count++; }
+ok($count == 45);
+
+# COUNT
+ok(scalar(%events) == 46);
+
+# DELETE
+delete $events{'1ce81410-4769-11d9-8693-ee0b0a9128b1'};
+ok(!exists $events{'1ce81410-4769-11d9-8693-ee0b0a9128b1'});
+
+# STORE
+$events{'A-UNIQUE-ID'} = [
+	'VEVENT',
+	{
+		'URL' => 'http//myurl.com',
+		'SUMMARY' => 'my event',
+		'CLASS' => 'PRIVATE',
+		'LOCATION' => 'my location',
+		'X' => [{'MEMBER' => 'AlarmEmailAddress'},	'me at myaddress'],
+		'STATUS' => 'TENTATIVE',
+		'DTSTAMP' => '20050116T154856Z',
+		'DTEND' => '20050118T170000Z',
+		'VALARM' => [
+			{
+				'TRIGGER' => [{'VALUE' => 'DURATION'}, '-PT1S']
+			}
+		],
+		'DESCRIPTION' => 'my note',
+		'X-MOZILLA-ALARM-DEFAULT-LENGTH' => '0',
+		'RRULE' => {
+			'FREQ' => 'WEEKLY',
+			'BYDAY' => [
+				'TU',
+				'WE',
+				'TH'
+			],
+			'INTERVAL' => '1'
+		},
+		'EXDATE' => '20050118T000000',
+		'DTSTART' => '20050118T160000Z',
+        'ATTENDEE' => [
+            [{'CN' => 'BIG A','ROLE' => 'CHAIR','PARTSTAT' => 'ACCEPTED'},'MailtoA at example.com'],
+            [{'CN' => 'B','RSVP' => 'TRUE','CUTYPE' => 'INDIVIDUAL'},'MailtoB at example.com'],
+            ['MailtoB at example.com']
+        ]
+	}
+];
+my ($comp2, $hash2) = @{$events{'A-UNIQUE-ID'}};
+ok($comp2 eq 'VEVENT');
+ok(${$hash2}{'LOCATION'} eq 'my location');
+
+# CLEAR
+%events = ();
+ok(-z 'test.ics');
+
+untie %events;
+unlink 'test.ics';
+exit;
+
+__END__
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :413dd998-67d6-11d9-9a33-e4a59cf11a95
+SUMMARY
+ :my event
+DESCRIPTION
+ :my note
+LOCATION
+ :my location
+URL
+ :http://myurl.com
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X
+ ;MEMBER=AlarmEmailAddress
+ :me at myaddress
+RRULE
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,WE,TH
+EXDATE
+ :20050118T000000
+DTSTART
+ :20050118T160000Z
+DTEND
+ :20050118T170000Z
+DTSTAMP
+ :20050116T154856Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :927172676
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20020826
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :1ce81410-4769-11d9-8693-ee0b0a9128b1
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041228
+DTEND
+ ;VALUE=DATE
+ :20041229
+DTSTAMP
+ :20041206T092748Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :2285be0e-4769-11d9-9032-fb135edc90b2
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041227
+DTEND
+ ;VALUE=DATE
+ :20041228
+DTSTAMP
+ :20041206T092802Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :3be6a610-4769-11d9-bf60-e015b2923205
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050325
+DTEND
+ ;VALUE=DATE
+ :20050326
+DTSTAMP
+ :20041206T092845Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :42faa140-4769-11d9-8181-bcd3c0ece72d
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050328
+DTEND
+ ;VALUE=DATE
+ :20050329
+DTSTAMP
+ :20041206T092857Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :496a1a2e-4769-11d9-8b9e-9a84f95c649f
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050502
+DTEND
+ ;VALUE=DATE
+ :20050503
+DTSTAMP
+ :20041206T092907Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :4f246064-4769-11d9-add5-c041a1ed7968
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050530
+DTEND
+ ;VALUE=DATE
+ :20050531
+DTSTAMP
+ :20041206T092917Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :56208410-4769-11d9-840a-ff72353214de
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050829
+DTEND
+ ;VALUE=DATE
+ :20050830
+DTSTAMP
+ :20041206T092929Z
+LAST-MODIFIED
+ :20041206T092938Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :6389be50-4769-11d9-b537-96d51d02ab76
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051227
+DTEND
+ ;VALUE=DATE
+ :20051228
+DTSTAMP
+ :20041206T092951Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :698ded6c-4769-11d9-9e35-8764b0ff2b8e
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051226
+DTEND
+ ;VALUE=DATE
+ :20051227
+DTSTAMP
+ :20041206T093001Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7323412e-4769-11d9-8f2d-c469be04ddf5
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060102
+DTEND
+ ;VALUE=DATE
+ :20060103
+DTSTAMP
+ :20041206T093018Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7ff3e4ee-4769-11d9-b1d4-e2dcd6159dd0
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060414
+DTEND
+ ;VALUE=DATE
+ :20060415
+DTSTAMP
+ :20041206T093038Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :85c3a04e-4769-11d9-8af7-cda5e3e98ebe
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060417
+DTEND
+ ;VALUE=DATE
+ :20060418
+DTSTAMP
+ :20041206T093047Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :8c18df5e-4769-11d9-ac09-e97dffd65595
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060501
+DTEND
+ ;VALUE=DATE
+ :20060502
+DTSTAMP
+ :20041206T093101Z
+LAST-MODIFIED
+ :20041206T093108Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :958a6fda-4769-11d9-88db-e91b56d7b8f8
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060529
+DTEND
+ ;VALUE=DATE
+ :20060530
+DTSTAMP
+ :20041206T093113Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :9f39fd7a-4769-11d9-a665-99a1ee535d36
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060828
+DTEND
+ ;VALUE=DATE
+ :20060829
+DTSTAMP
+ :20041206T093129Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :a6b9427c-4769-11d9-964c-e7e2f4c2006a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061225
+DTEND
+ ;VALUE=DATE
+ :20061226
+DTSTAMP
+ :20041206T093144Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ab98305a-4769-11d9-b056-be29252508db
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061226
+DTEND
+ ;VALUE=DATE
+ :20061227
+DTSTAMP
+ :20041206T093151Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :b36fac5e-4769-11d9-9833-cbe45ff8e08b
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070101
+DTEND
+ ;VALUE=DATE
+ :20070102
+DTSTAMP
+ :20041206T093204Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ba1d2270-4769-11d9-bc2f-f524346ae56f
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070406
+DTEND
+ ;VALUE=DATE
+ :20070407
+DTSTAMP
+ :20041206T093217Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :bf0cc0c4-4769-11d9-bd28-8ce79732df58
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070409
+DTEND
+ ;VALUE=DATE
+ :20070410
+DTSTAMP
+ :20041206T093225Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :c70f271c-4769-11d9-85d5-eeae49afa7c8
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070507
+DTEND
+ ;VALUE=DATE
+ :20070508
+DTSTAMP
+ :20041206T093238Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :cd6b8d3a-4769-11d9-8ec2-b2672c137a80
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070528
+DTEND
+ ;VALUE=DATE
+ :20070529
+DTSTAMP
+ :20041206T093248Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :d5de0218-4769-11d9-8ab6-fc42c8cf7511
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070827
+DTEND
+ ;VALUE=DATE
+ :20070828
+DTSTAMP
+ :20041206T093303Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e2435c06-4769-11d9-8189-85efc4fcc75a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071225
+DTEND
+ ;VALUE=DATE
+ :20071226
+DTSTAMP
+ :20041206T093325Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e6b9626c-4769-11d9-9636-b4b242071a07
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071226
+DTEND
+ ;VALUE=DATE
+ :20071227
+DTSTAMP
+ :20041206T093331Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eed602a2-4769-11d9-9c29-87e14bef7e97
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20080101
+DTEND
+ ;VALUE=DATE
+ :20080102
+DTSTAMP
+ :20041206T093345Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :de525990-4768-11d9-b210-dbb23e96122f
+SUMMARY
+ :New Year's day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040101
+DTEND
+ ;VALUE=DATE
+ :20040102
+DTSTAMP
+ :20041206T092559Z
+LAST-MODIFIED
+ :20041207T102901Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eaabc7bc-4768-11d9-a9f0-d813f0b4250b
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040409
+DTEND
+ ;VALUE=DATE
+ :20040410
+DTSTAMP
+ :20041206T092625Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :f3741142-4768-11d9-90f2-b75bdc777a72
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040412
+DTEND
+ ;VALUE=DATE
+ :20040413
+DTSTAMP
+ :20041206T092637Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ffac1e82-4768-11d9-af34-c8169769d183
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040503
+DTEND
+ ;VALUE=DATE
+ :20040504
+DTSTAMP
+ :20041206T092702Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :06af693c-4769-11d9-88da-f9a496177710
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040531
+DTEND
+ ;VALUE=DATE
+ :20040601
+DTSTAMP
+ :20041206T092714Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :0fcfe9c4-4769-11d9-b1de-afc927cc7b57
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040830
+DTEND
+ ;VALUE=DATE
+ :20040831
+DTSTAMP
+ :20041206T092731Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :359d52c2-4769-11d9-9cd3-fde74dbfad50
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20050103T010338
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050103
+DTEND
+ ;VALUE=DATE
+ :20050104
+DTSTAMP
+ :20041206T092833Z
+LAST-MODIFIED
+ :20050103T010338Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :971445858
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :925921922
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :936923338
+SUMMARY
+ :New Year's Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030101
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :962980365
+SUMMARY
+ :Good Friday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030418
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :909072250
+SUMMARY
+ :Easter Monday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030421
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :940352282
+SUMMARY
+ :May Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030505
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :975821516
+SUMMARY
+ :Spring Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030526
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :902762343
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030825
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :956630271
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :911737808
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+ORGANIZER:Mailto:B at example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D at example.com
+ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big at example.com
+ATTENDEE:conf_Big1 at example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E at example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T190000Z
+DTEND:19970701T193000Z
+SUMMARY:Conference
+UID:calsrv.example.com-873970198738777 at example.com
+SEQUENCE:1
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/t/b_tie.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libtie-ical-perl/branches/upstream/current/t/c_storefetch.t
===================================================================
--- packages/libtie-ical-perl/branches/upstream/current/t/c_storefetch.t	2006-04-09 13:07:12 UTC (rev 2531)
+++ packages/libtie-ical-perl/branches/upstream/current/t/c_storefetch.t	2006-04-09 13:38:36 UTC (rev 2532)
@@ -0,0 +1,1210 @@
+#!/usr/bin/env perl -w
+use strict;
+use Test;
+BEGIN { plan tests => 49 }
+
+open ICS, ">test1.ics";
+while (<main::DATA>) { print ICS $_ }
+close ICS;
+
+use Tie::iCal;
+
+# TIEHASH
+ok(tie my %events1, 'Tie::iCal', "test1.ics", 'debug' => 0);
+ok(tie my %events2, 'Tie::iCal', "test2.ics", 'debug' => 0);
+
+ok(scalar(%events1) == 46);
+
+while (my ($key, $value) = each %events1) {
+    $events2{$key} = $value;
+    ok(compare($events1{$key}, $events2{$key}));
+}
+
+untie %events1;
+untie %events2;
+unlink 'test1.ics';
+unlink 'test2.ics';
+
+exit;
+
+sub compare {
+    my ($a, $b) = @_;
+    return 0 if ref($a) ne ref($b);
+    if (ref($a) eq 'ARRAY') {
+        return 0 if $#$a != $#$b;
+        for my $i (0..$#$a) {
+            return 0 if !compare($$a[$i], $$b[$i]);
+        }
+    } elsif (ref($a) eq 'HASH') {
+        my @A = sort keys %$a;
+        my @B = sort keys %$b;
+        return 0 if $#A != $#B;
+        for my $j (0..$#A) {
+            return 0 if !compare($A[$j], $B[$j]);
+            return 0 if !compare($$a{$A[$j]}, $$b{$B[$j]});
+        }
+    } else {
+        return 0 if $a ne $b;
+    }
+    return 1;
+}
+
+__END__
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :413dd998-67d6-11d9-9a33-e4a59cf11a95
+SUMMARY
+ :my event
+DESCRIPTION
+ :my note
+LOCATION
+ :my location
+URL
+ :http://myurl.com
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X
+ ;MEMBER=AlarmEmailAddress
+ :me at myaddress
+RRULE
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,WE,TH
+EXDATE
+ :20050118T000000
+DTSTART
+ :20050118T160000Z
+DTEND
+ :20050118T170000Z
+DTSTAMP
+ :20050116T154856Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :927172676
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20020826
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :1ce81410-4769-11d9-8693-ee0b0a9128b1
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041228
+DTEND
+ ;VALUE=DATE
+ :20041229
+DTSTAMP
+ :20041206T092748Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :2285be0e-4769-11d9-9032-fb135edc90b2
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20041227
+DTEND
+ ;VALUE=DATE
+ :20041228
+DTSTAMP
+ :20041206T092802Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :3be6a610-4769-11d9-bf60-e015b2923205
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050325
+DTEND
+ ;VALUE=DATE
+ :20050326
+DTSTAMP
+ :20041206T092845Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :42faa140-4769-11d9-8181-bcd3c0ece72d
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050328
+DTEND
+ ;VALUE=DATE
+ :20050329
+DTSTAMP
+ :20041206T092857Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :496a1a2e-4769-11d9-8b9e-9a84f95c649f
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050502
+DTEND
+ ;VALUE=DATE
+ :20050503
+DTSTAMP
+ :20041206T092907Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :4f246064-4769-11d9-add5-c041a1ed7968
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050530
+DTEND
+ ;VALUE=DATE
+ :20050531
+DTSTAMP
+ :20041206T092917Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :56208410-4769-11d9-840a-ff72353214de
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050829
+DTEND
+ ;VALUE=DATE
+ :20050830
+DTSTAMP
+ :20041206T092929Z
+LAST-MODIFIED
+ :20041206T092938Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :6389be50-4769-11d9-b537-96d51d02ab76
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051227
+DTEND
+ ;VALUE=DATE
+ :20051228
+DTSTAMP
+ :20041206T092951Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :698ded6c-4769-11d9-9e35-8764b0ff2b8e
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20051226
+DTEND
+ ;VALUE=DATE
+ :20051227
+DTSTAMP
+ :20041206T093001Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7323412e-4769-11d9-8f2d-c469be04ddf5
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060102
+DTEND
+ ;VALUE=DATE
+ :20060103
+DTSTAMP
+ :20041206T093018Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :7ff3e4ee-4769-11d9-b1d4-e2dcd6159dd0
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060414
+DTEND
+ ;VALUE=DATE
+ :20060415
+DTSTAMP
+ :20041206T093038Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :85c3a04e-4769-11d9-8af7-cda5e3e98ebe
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060417
+DTEND
+ ;VALUE=DATE
+ :20060418
+DTSTAMP
+ :20041206T093047Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :8c18df5e-4769-11d9-ac09-e97dffd65595
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060501
+DTEND
+ ;VALUE=DATE
+ :20060502
+DTSTAMP
+ :20041206T093101Z
+LAST-MODIFIED
+ :20041206T093108Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :958a6fda-4769-11d9-88db-e91b56d7b8f8
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060529
+DTEND
+ ;VALUE=DATE
+ :20060530
+DTSTAMP
+ :20041206T093113Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :9f39fd7a-4769-11d9-a665-99a1ee535d36
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20060828
+DTEND
+ ;VALUE=DATE
+ :20060829
+DTSTAMP
+ :20041206T093129Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :a6b9427c-4769-11d9-964c-e7e2f4c2006a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061225
+DTEND
+ ;VALUE=DATE
+ :20061226
+DTSTAMP
+ :20041206T093144Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ab98305a-4769-11d9-b056-be29252508db
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20061226
+DTEND
+ ;VALUE=DATE
+ :20061227
+DTSTAMP
+ :20041206T093151Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :b36fac5e-4769-11d9-9833-cbe45ff8e08b
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070101
+DTEND
+ ;VALUE=DATE
+ :20070102
+DTSTAMP
+ :20041206T093204Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ba1d2270-4769-11d9-bc2f-f524346ae56f
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070406
+DTEND
+ ;VALUE=DATE
+ :20070407
+DTSTAMP
+ :20041206T093217Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :bf0cc0c4-4769-11d9-bd28-8ce79732df58
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070409
+DTEND
+ ;VALUE=DATE
+ :20070410
+DTSTAMP
+ :20041206T093225Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :c70f271c-4769-11d9-85d5-eeae49afa7c8
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070507
+DTEND
+ ;VALUE=DATE
+ :20070508
+DTSTAMP
+ :20041206T093238Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :cd6b8d3a-4769-11d9-8ec2-b2672c137a80
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070528
+DTEND
+ ;VALUE=DATE
+ :20070529
+DTSTAMP
+ :20041206T093248Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :d5de0218-4769-11d9-8ab6-fc42c8cf7511
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20070827
+DTEND
+ ;VALUE=DATE
+ :20070828
+DTSTAMP
+ :20041206T093303Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e2435c06-4769-11d9-8189-85efc4fcc75a
+SUMMARY
+ :Christmas Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071225
+DTEND
+ ;VALUE=DATE
+ :20071226
+DTSTAMP
+ :20041206T093325Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :e6b9626c-4769-11d9-9636-b4b242071a07
+SUMMARY
+ :Boxing Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20071226
+DTEND
+ ;VALUE=DATE
+ :20071227
+DTSTAMP
+ :20041206T093331Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eed602a2-4769-11d9-9c29-87e14bef7e97
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20080101
+DTEND
+ ;VALUE=DATE
+ :20080102
+DTSTAMP
+ :20041206T093345Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :de525990-4768-11d9-b210-dbb23e96122f
+SUMMARY
+ :New Year's day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040101
+DTEND
+ ;VALUE=DATE
+ :20040102
+DTSTAMP
+ :20041206T092559Z
+LAST-MODIFIED
+ :20041207T102901Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :eaabc7bc-4768-11d9-a9f0-d813f0b4250b
+SUMMARY
+ :Good Friday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040409
+DTEND
+ ;VALUE=DATE
+ :20040410
+DTSTAMP
+ :20041206T092625Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :f3741142-4768-11d9-90f2-b75bdc777a72
+SUMMARY
+ :Easter Monday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040412
+DTEND
+ ;VALUE=DATE
+ :20040413
+DTSTAMP
+ :20041206T092637Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :ffac1e82-4768-11d9-af34-c8169769d183
+SUMMARY
+ :Early May Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040503
+DTEND
+ ;VALUE=DATE
+ :20040504
+DTSTAMP
+ :20041206T092702Z
+LAST-MODIFIED
+ :20041207T102903Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :06af693c-4769-11d9-88da-f9a496177710
+SUMMARY
+ :Spring Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040531
+DTEND
+ ;VALUE=DATE
+ :20040601
+DTSTAMP
+ :20041206T092714Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :0fcfe9c4-4769-11d9-b1de-afc927cc7b57
+SUMMARY
+ :Summer Bank Holiday
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20041207T102901
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20040830
+DTEND
+ ;VALUE=DATE
+ :20040831
+DTSTAMP
+ :20041206T092731Z
+LAST-MODIFIED
+ :20041207T102904Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+BEGIN:VEVENT
+UID
+ :359d52c2-4769-11d9-9cd3-fde74dbfad50
+SUMMARY
+ :New Year's Day
+STATUS
+ :TENTATIVE
+CLASS
+ :PRIVATE
+X-MOZILLA-ALARM-DEFAULT-LENGTH
+ :0
+X-MOZILLA-LASTALARMACK
+ :20050103T010338
+X-MOZILLA-RECUR-DEFAULT-INTERVAL
+ :0
+DTSTART
+ ;VALUE=DATE
+ :20050103
+DTEND
+ ;VALUE=DATE
+ :20050104
+DTSTAMP
+ :20041206T092833Z
+LAST-MODIFIED
+ :20050103T010338Z
+BEGIN:VALARM
+TRIGGER
+ ;VALUE=DURATION
+ :-PT1S
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :971445858
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :925921922
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20021226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :936923338
+SUMMARY
+ :New Year's Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030101
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :962980365
+SUMMARY
+ :Good Friday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030418
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :909072250
+SUMMARY
+ :Easter Monday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030421
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :940352282
+SUMMARY
+ :May Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030505
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :975821516
+SUMMARY
+ :Spring Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030526
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :902762343
+SUMMARY
+ :Summer Bank Holiday
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20030825
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :956630271
+SUMMARY
+ :Christmas Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031225
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION
+ :2.0
+PRODID
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
+BEGIN:VEVENT
+UID
+ :911737808
+SUMMARY
+ :Boxing Day
+CATEGORIES
+ :Holidays
+CLASS
+ :PUBLIC
+DTSTART
+ ;VALUE=DATE
+ :20031226
+DTSTAMP
+ :20020430T114937Z
+END:VEVENT
+BEGIN:VEVENT
+ORGANIZER:Mailto:B at example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C at example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D at example.com
+ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big at example.com
+ATTENDEE:conf_Big1 at example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E at example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T190000Z
+DTEND:19970701T193000Z
+SUMMARY:Conference
+UID:calsrv.example.com-873970198738777 at example.com
+SEQUENCE:1
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
\ No newline at end of file


Property changes on: packages/libtie-ical-perl/branches/upstream/current/t/c_storefetch.t
___________________________________________________________________
Name: svn:executable
   + 




More information about the Pkg-perl-cvs-commits mailing list