[Bps-public-commit] Data-ICal branch, master, updated. 2a6db733d217022103caa927f569e164b860fc9d

Alex M Vandiver alexmv at bestpractical.com
Thu Jul 9 23:58:25 EDT 2009


The branch, master has been updated
       via  2a6db733d217022103caa927f569e164b860fc9d (commit)
       via  7091e0cd2f2fdf72ae83342184b01c15bc91f23d (commit)
       via  90c6cb3b23ed7623682ff69cf9a41044c3ee935e (commit)
       via  b2e32ef3d575b23906202e735b5e156a0537a981 (commit)
       via  9e1217849a0cbe76fe131f475fde33f12e04b451 (commit)
       via  8c7b317bc01ecc642b89382b0cf4f7f9386de618 (commit)
       via  43a47cdf3ed0c817861d478fd47afa04c5283850 (commit)
       via  dabe65d65959da8e4c505645b2d9532b3f6dd760 (commit)
       via  aeccf4dc95b6663b75b2258de79da61fe34bd816 (commit)
      from  b13ca0940a20609dc2176caf5e38d983369fd26d (commit)

Summary of changes:
 Changes                                  |   10 +-
 META.yml                                 |    2 +-
 README                                   |  147 +++++++++++++++++--
 SIGNATURE                                |   42 +++---
 lib/Data/ICal.pm                         |  139 ++++++++----------
 lib/Data/ICal/Entry.pm                   |  169 ++++++++++++----------
 lib/Data/ICal/Entry/Alarm/Audio.pm       |   37 +++---
 lib/Data/ICal/Entry/Alarm/Display.pm     |   35 +++--
 lib/Data/ICal/Entry/Alarm/Email.pm       |   49 +++---
 lib/Data/ICal/Entry/Alarm/Procedure.pm   |   40 +++---
 lib/Data/ICal/Entry/Event.pm             |   42 ++++--
 lib/Data/ICal/Entry/FreeBusy.pm          |   26 ++--
 lib/Data/ICal/Entry/Journal.pm           |   24 ++--
 lib/Data/ICal/Entry/TimeZone.pm          |   29 ++--
 lib/Data/ICal/Entry/TimeZone/Daylight.pm |   64 ++++-----
 lib/Data/ICal/Entry/TimeZone/Standard.pm |   64 ++++-----
 lib/Data/ICal/Entry/Todo.pm              |   29 ++--
 lib/Data/ICal/Property.pm                |  235 ++++++++++++++++++------------
 t/01.simplegen.t                         |    4 +-
 19 files changed, 689 insertions(+), 498 deletions(-)

- Log -----------------------------------------------------------------
commit aeccf4dc95b6663b75b2258de79da61fe34bd816
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 22:48:02 2009 -0400

    Escaping of \ was being done incorrectly, and tested incorrectly

diff --git a/lib/Data/ICal/Property.pm b/lib/Data/ICal/Property.pm
index a10d76f..312273b 100644
--- a/lib/Data/ICal/Property.pm
+++ b/lib/Data/ICal/Property.pm
@@ -223,7 +223,7 @@ sub _value_as_string {
     my $value = defined($self->value()) ? $self->value() : '';
     
     unless ($self->vcal10) {
-        $value =~ s/\\/\\/gs;
+        $value =~ s/\\/\\\\/gs;
         $value =~ s/;/\\;/gs unless lc($key) eq 'rrule';
         $value =~ s/,/\\,/gs unless lc($key) eq 'rrule';
         $value =~ s/\x0d?\x0a/\\n/gs;
diff --git a/t/01.simplegen.t b/t/01.simplegen.t
index fa61b28..93a72a0 100644
--- a/t/01.simplegen.t
+++ b/t/01.simplegen.t
@@ -79,7 +79,7 @@ can_ok($event, qw/add_property add_properties properties/);
 
 $event->add_properties( 
                         summary => 'Awesome party',
-                        description => 'at my \ place,\nOn 5th St.;',
+                        description => "at my \\ place,\nOn 5th St.;",
                     );
 
 ok($s->add_entry($event));
@@ -96,7 +96,7 @@ SUMMARY:This one trumps number two\\, even though weird capitalization!
 URL:http://example.com/todo1
 END:VTODO
 BEGIN:VEVENT
-DESCRIPTION:at my \\ place\\,\\nOn 5th St.\\;
+DESCRIPTION:at my \\\\ place\\,\\nOn 5th St.\\;
 SUMMARY:Awesome party
 END:VEVENT
 END:VCALENDAR

commit dabe65d65959da8e4c505645b2d9532b3f6dd760
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 22:48:26 2009 -0400

    Remove a useless and incorrect "escape code"

diff --git a/lib/Data/ICal/Property.pm b/lib/Data/ICal/Property.pm
index 312273b..ece7748 100644
--- a/lib/Data/ICal/Property.pm
+++ b/lib/Data/ICal/Property.pm
@@ -227,7 +227,6 @@ sub _value_as_string {
         $value =~ s/;/\\;/gs unless lc($key) eq 'rrule';
         $value =~ s/,/\\,/gs unless lc($key) eq 'rrule';
         $value =~ s/\x0d?\x0a/\\n/gs;
-        $value =~ s/\\N/\\N/gs;
     }
 
     return $value;

commit 43a47cdf3ed0c817861d478fd47afa04c5283850
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 22:55:31 2009 -0400

    Mention Data::ICal::DateTime (RT#17257)

diff --git a/lib/Data/ICal/Entry/Event.pm b/lib/Data/ICal/Entry/Event.pm
index 27a7d17..3902e6a 100644
--- a/lib/Data/ICal/Entry/Event.pm
+++ b/lib/Data/ICal/Entry/Event.pm
@@ -87,6 +87,19 @@ sub optional_repeatable_properties {
     );
 }
 
+=head1 SEE ALSO
+
+=over 4
+
+=item L<Data::ICal::DateTime>
+
+For date parsing and formatting, including denoting "all day" events,
+considering using this module. Because it's a "mix in", you can still
+use all the methods here as well as the new date handling methods it
+defines.
+
+=back
+
 =head1 AUTHOR
 
 Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow

commit 8c7b317bc01ecc642b89382b0cf4f7f9386de618
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:16:03 2009 -0400

    Update copyright

diff --git a/lib/Data/ICal.pm b/lib/Data/ICal.pm
index 58e6aae..fc13bba 100644
--- a/lib/Data/ICal.pm
+++ b/lib/Data/ICal.pm
@@ -310,7 +310,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry.pm b/lib/Data/ICal/Entry.pm
index 2bc1073..96de3f7 100644
--- a/lib/Data/ICal/Entry.pm
+++ b/lib/Data/ICal/Entry.pm
@@ -537,7 +537,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Alarm/Audio.pm b/lib/Data/ICal/Entry/Alarm/Audio.pm
index 688a720..30c58e4 100644
--- a/lib/Data/ICal/Entry/Alarm/Audio.pm
+++ b/lib/Data/ICal/Entry/Alarm/Audio.pm
@@ -93,7 +93,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Alarm/Display.pm b/lib/Data/ICal/Entry/Alarm/Display.pm
index 1b2404a..14a63d7 100644
--- a/lib/Data/ICal/Entry/Alarm/Display.pm
+++ b/lib/Data/ICal/Entry/Alarm/Display.pm
@@ -90,7 +90,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Alarm/Email.pm b/lib/Data/ICal/Entry/Alarm/Email.pm
index 43134d6..15eece1 100644
--- a/lib/Data/ICal/Entry/Alarm/Email.pm
+++ b/lib/Data/ICal/Entry/Alarm/Email.pm
@@ -122,7 +122,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Alarm/Procedure.pm b/lib/Data/ICal/Entry/Alarm/Procedure.pm
index deb390b..103c8a6 100644
--- a/lib/Data/ICal/Entry/Alarm/Procedure.pm
+++ b/lib/Data/ICal/Entry/Alarm/Procedure.pm
@@ -95,7 +95,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Event.pm b/lib/Data/ICal/Entry/Event.pm
index 3902e6a..c81069a 100644
--- a/lib/Data/ICal/Entry/Event.pm
+++ b/lib/Data/ICal/Entry/Event.pm
@@ -102,12 +102,13 @@ defines.
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/FreeBusy.pm b/lib/Data/ICal/Entry/FreeBusy.pm
index 347c364..e2dd53f 100644
--- a/lib/Data/ICal/Entry/FreeBusy.pm
+++ b/lib/Data/ICal/Entry/FreeBusy.pm
@@ -79,7 +79,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Journal.pm b/lib/Data/ICal/Entry/Journal.pm
index f95b4a8..8139abc 100644
--- a/lib/Data/ICal/Entry/Journal.pm
+++ b/lib/Data/ICal/Entry/Journal.pm
@@ -85,7 +85,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/TimeZone.pm b/lib/Data/ICal/Entry/TimeZone.pm
index 58a6c19..8fe8c60 100644
--- a/lib/Data/ICal/Entry/TimeZone.pm
+++ b/lib/Data/ICal/Entry/TimeZone.pm
@@ -81,7 +81,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/TimeZone/Daylight.pm b/lib/Data/ICal/Entry/TimeZone/Daylight.pm
index 49dbb56..a5fed82 100644
--- a/lib/Data/ICal/Entry/TimeZone/Daylight.pm
+++ b/lib/Data/ICal/Entry/TimeZone/Daylight.pm
@@ -111,7 +111,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/TimeZone/Standard.pm b/lib/Data/ICal/Entry/TimeZone/Standard.pm
index fb58eed..e0e4e8d 100644
--- a/lib/Data/ICal/Entry/TimeZone/Standard.pm
+++ b/lib/Data/ICal/Entry/TimeZone/Standard.pm
@@ -111,7 +111,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.
diff --git a/lib/Data/ICal/Entry/Todo.pm b/lib/Data/ICal/Entry/Todo.pm
index e667281..ec84921 100644
--- a/lib/Data/ICal/Entry/Todo.pm
+++ b/lib/Data/ICal/Entry/Todo.pm
@@ -94,7 +94,7 @@ Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wis
 
 =head1 LICENCE AND COPYRIGHT
 
-Copyright (c) 2005, Best Practical Solutions, LLC.  All rights reserved.
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
 
 This module is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself. See L<perlartistic>.

commit 9e1217849a0cbe76fe131f475fde33f12e04b451
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:16:18 2009 -0400

    POD cleanup

diff --git a/lib/Data/ICal.pm b/lib/Data/ICal.pm
index fc13bba..68726a0 100644
--- a/lib/Data/ICal.pm
+++ b/lib/Data/ICal.pm
@@ -5,7 +5,6 @@ package Data::ICal;
 use base qw/Data::ICal::Entry/;
 
 use Class::ReturnValue;
-
 use Text::vFile::asData;
 
 our $VERSION = '0.15_01';
@@ -16,7 +15,6 @@ use Carp;
 
 Data::ICal - Generates iCalendar (RFC 2445) calendar files
 
-
 =head1 SYNOPSIS
 
     use Data::ICal;
@@ -29,13 +27,9 @@ Data::ICal - Generates iCalendar (RFC 2445) calendar files
     );
 
     # ... or
-
     $calendar = Data::ICal->new(filename => 'foo.ics'); # parse existing file
-    $calendar = Data::ICal->new(data => 'BEGIN:VCALENDAR...'); # parse existing file
-
-
+    $calendar = Data::ICal->new(data => 'BEGIN:VCALENDAR...'); # parse from scalar
     $calendar->add_entry($vtodo);
-
     print $calendar->as_string;
    
 =head1 DESCRIPTION
@@ -104,15 +98,15 @@ sub new {
 
 =head2 parse [ data => $data, ] [ filename => $file, ]
 
-Parse a .ics file or string containing one, and populate C<$self> with
-its contents.
+Parse a C<.ics> file or string containing one, and populate C<$self>
+with its contents.
 
 Should only be called once on a given object, and will be automatically
 called by C<new> if you provide arguments to C<new>.
 
-Returns C<$self> on success.
-Returns a false value upon failure to open or parse the file or data; this false
-value is a L<Class::ReturnValue> object and can be queried as to its 
+Returns C<$self> on success.  Returns a false value upon failure to
+open or parse the file or data; this false value is a
+L<Class::ReturnValue> object and can be queried as to its
 C<error_message>.
 
 =cut
@@ -262,50 +256,42 @@ sub _vcal10_input_cleanup {
     return @out_lines;
 } 
 
-=head1 CONFIGURATION AND ENVIRONMENT
-
-L<Data::ICal> requires no configuration files or environment variables.
-
-
 =head1 DEPENDENCIES
 
-L<Data::ICal> requires L<Class::Accessor>.
-
-
-=head1 INCOMPATIBILITIES
-
-None reported.
-
+L<Data::ICal> requires L<Class::Accessor>, L<Text::vFile::asData>,
+L<MIME::QuotedPrint>, and L<Class::ReturnValue>.
 
 =head1 BUGS AND LIMITATIONS
 
-L<Data::ICal> does not support time zone daylight or standard entries, so time zone
-components are basically useless.
+L<Data::ICal> does not support time zone daylight or standard entries,
+so time zone components are basically useless.
 
-While L<Data::ICal> tries to check which properties are required and repeatable, this
-only works in simple cases; it does not check for properties that must either both exist
-or both not exist, or for mutually exclusive properties.
+While L<Data::ICal> tries to check which properties are required and
+repeatable, this only works in simple cases; it does not check for
+properties that must either both exist or both not exist, or for
+mutually exclusive properties.
 
-L<Data::ICal> does not check to see if property parameter names are known in
-general or allowed on the particular property.
+L<Data::ICal> does not check to see if property parameter names are
+known in general or allowed on the particular property.
 
-L<Data::ICal> does not check to see if nested entries are nested properly (alarms in
-todos and events only, everything else in calendars only).
+L<Data::ICal> does not check to see if nested entries are nested
+properly (alarms in todos and events only, everything else in
+calendars only).
 
-The only property encoding supported by L<Data::ICal> is quoted printable.
+The only property encoding supported by L<Data::ICal> is quoted
+printable.
 
 There is no L<Data::ICal::Entry::Alarm> base class.
 
-No bugs have been reported.
-
 Please report any bugs or feature requests to
-C<bug-data-ical-generator at rt.cpan.org>, or through the web interface at
+C<bug-data-ical at rt.cpan.org>, or through the web interface at
 L<http://rt.cpan.org>.
 
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 
 =head1 LICENCE AND COPYRIGHT

commit b2e32ef3d575b23906202e735b5e156a0537a981
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:38:24 2009 -0400

    Update README from POD

diff --git a/README b/README
index 9ccc2f0..7b938c4 100644
--- a/README
+++ b/README
@@ -1,29 +1,148 @@
-Data-ICal
+NAME
+    Data::ICal - Generates iCalendar (RFC 2445) calendar files
 
-Data::ICal is a straightforward generator for iCalendar (RFC 2445) files, such
-as those used in Apple's iCal.
+INSTALLATION
+        perl Makefile.PL
+        make
+        make test
+        make install
 
+SYNOPSIS
+        use Data::ICal;
 
-INSTALLATION
+        my $calendar = Data::ICal->new();
+
+        my $vtodo = Data::ICal::Entry::Todo->new();
+        $vtodo->add_properties(
+            # ... see Data::ICal::Entry::Todo documentation
+        );
+
+        # ... or
+        $calendar = Data::ICal->new(filename => 'foo.ics'); # parse existing file
+        $calendar = Data::ICal->new(data => 'BEGIN:VCALENDAR...'); # parse from scalar
+        $calendar->add_entry($vtodo);
+        print $calendar->as_string;
+
+DESCRIPTION
+    A Data::ICal object represents a "VCALENDAR" object as defined in the
+    iCalendar protocol (RFC 2445, MIME type "text/calendar"), as implemented
+    in many popular calendaring programs such as Apple's iCal.
+
+    Each Data::ICal object is a collection of "entries", which are objects
+    of a subclass of Data::ICal::Entry. The types of entries defined by
+    iCalendar (which refers to them as "components") include events, to-do
+    items, journal entries, free/busy time indicators, and time zone
+    descriptors; in addition, events and to-do items can contain alarm
+    entries. (Currently, Data::ICal only implements to-do items and events.)
+
+    Data::ICal is a subclass of Data::ICal::Entry; see its manpage for more
+    methods applicable to Data::ICal.
+
+METHODS
+  new [ data => $data, ] [ filename => $file ], [ vcal10 => $bool ]
+    Creates a new Data::ICal object.
+
+    If it is given a filename or data argument is passed, then this parses
+    the content of the file or string into the object. If the "vcal10" flag
+    is passed, parses it according to vCalendar 1.0, not iCalendar 2.0; this
+    in particular impacts the parsing of continuation lines in
+    quoted-printable sections.
+
+    If a filename or data argument is not passed, this just sets its
+    "VERSION" and "PRODID" properties to "2.0" (or "1.0" if the "vcal10"
+    flag is passed) and the value of the "product_id" method respectively.
+
+    Returns a false value upon failure to open or parse the file or data;
+    this false value is a Class::ReturnValue object and can be queried as to
+    its "error_message".
+
+  parse [ data => $data, ] [ filename => $file, ]
+    Parse a ".ics" file or string containing one, and populate $self with
+    its contents.
 
-To install this module, run the following commands:
+    Should only be called once on a given object, and will be automatically
+    called by "new" if you provide arguments to "new".
 
-    perl Makefile.PL
-    make
-    make test
-    make install
+    Returns $self on success. Returns a false value upon failure to open or
+    parse the file or data; this false value is a Class::ReturnValue object
+    and can be queried as to its "error_message".
 
+  ical_entry_type
+    Returns "VCALENDAR", its iCalendar entry name.
 
+  product_id
+    Returns the product ID used in the calendar's "PRODID" property; you may
+    wish to override this in a subclass for your own application.
+
+  mandatory_unique_properties
+    According to the iCalendar standard, the following properties must be
+    specified exactly one time for a calendar:
+
+          prodid version
+
+  optional_unique_properties
+    According to the iCalendar standard, the following properties may be
+    specified at most one time for a calendar:
+
+          calscale method
 
 DEPENDENCIES
+    Data::ICal requires Class::Accessor, Text::vFile::asData,
+    MIME::QuotedPrint, and Class::ReturnValue.
+
+BUGS AND LIMITATIONS
+    Data::ICal does not support time zone daylight or standard entries, so
+    time zone components are basically useless.
+
+    While Data::ICal tries to check which properties are required and
+    repeatable, this only works in simple cases; it does not check for
+    properties that must either both exist or both not exist, or for
+    mutually exclusive properties.
+
+    Data::ICal does not check to see if property parameter names are known
+    in general or allowed on the particular property.
+
+    Data::ICal does not check to see if nested entries are nested properly
+    (alarms in todos and events only, everything else in calendars only).
+
+    The only property encoding supported by Data::ICal is quoted printable.
+
+    There is no Data::ICal::Entry::Alarm base class.
+
+    Please report any bugs or feature requests to
+    "bug-data-ical at rt.cpan.org", or through the web interface at
+    <http://rt.cpan.org>.
 
-Class::Accessor
+AUTHOR
+    Jesse Vincent "<jesse at bestpractical.com>" with David Glasser, Simon
+    Wistow, and Alex Vandiver
 
+LICENCE AND COPYRIGHT
+    Copyright (c) 2005 - 2009, Best Practical Solutions, LLC. All rights
+    reserved.
 
-COPYRIGHT AND LICENCE
+    This module is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself. See perlartistic.
 
-Copyright (C) 2005, Best Practical Solutions LLC.
+DISCLAIMER OF WARRANTY
+    BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+    FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+    PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+    EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+    ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+    YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+    NECESSARY SERVICING, REPAIR, OR CORRECTION.
 
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
+    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+    REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
+    TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
+    CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+    SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+    RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+    FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+    DAMAGES.
 

commit 90c6cb3b23ed7623682ff69cf9a41044c3ee935e
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:52:34 2009 -0400

    POD nits; mostly reflowing and whitespace fixes

diff --git a/lib/Data/ICal.pm b/lib/Data/ICal.pm
index 68726a0..f290bd6 100644
--- a/lib/Data/ICal.pm
+++ b/lib/Data/ICal.pm
@@ -31,7 +31,7 @@ Data::ICal - Generates iCalendar (RFC 2445) calendar files
     $calendar = Data::ICal->new(data => 'BEGIN:VCALENDAR...'); # parse from scalar
     $calendar->add_entry($vtodo);
     print $calendar->as_string;
-   
+
 =head1 DESCRIPTION
 
 A L<Data::ICal> object represents a C<VCALENDAR> object as defined in the
@@ -293,7 +293,6 @@ L<http://rt.cpan.org>.
 Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
 Simon Wistow, and Alex Vandiver
 
-
 =head1 LICENCE AND COPYRIGHT
 
 Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
diff --git a/lib/Data/ICal/Entry.pm b/lib/Data/ICal/Entry.pm
index 96de3f7..4248f91 100644
--- a/lib/Data/ICal/Entry.pm
+++ b/lib/Data/ICal/Entry.pm
@@ -12,7 +12,6 @@ use constant CRLF => "\x0d\x0a";
 
 Data::ICal::Entry - Represents an entry in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vtodo = Data::ICal::Entry::Todo->new();
@@ -23,22 +22,23 @@ Data::ICal::Entry - Represents an entry in an iCalendar file
     $calendar->add_entry($vtodo);
 
     $event->add_entry($alarm); 
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry> object represents a single entry in an iCalendar file.
-(Note that the iCalendar RFC refers to entries as "components".)  iCalendar
-defines several types of entries, such as events and to-do lists; each of
-these corresponds to a subclass of L<Data::ICal::Entry> (though only to-do
-lists and events are currently implemented).  L<Data::ICal::Entry> should be treated
-as an abstract base class -- all objects created should be of its subclasses.
-The entire calendar itself (the L<Data::ICal> object) is also represented
+A L<Data::ICal::Entry> object represents a single entry in an
+iCalendar file.  (Note that the iCalendar RFC refers to entries as
+"components".)  iCalendar defines several types of entries, such as
+events and to-do lists; each of these corresponds to a subclass of
+L<Data::ICal::Entry> (though only to-do lists and events are currently
+implemented).  L<Data::ICal::Entry> should be treated as an abstract
+base class -- all objects created should be of its subclasses.  The
+entire calendar itself (the L<Data::ICal> object) is also represented
 as a L<Data::ICal::Entry> object.
 
-Each entry has an entry type (such as C<VCALENDAR> or C<VEVENT>), a series
-of "properties", and possibly some sub-entries.  (Only the root L<Data::ICal>
-object can have sub-entries, except for alarm entries contained in events and
-to-dos (not yet implemented).)
+Each entry has an entry type (such as C<VCALENDAR> or C<VEVENT>), a
+series of "properties", and possibly some sub-entries.  (Only the root
+L<Data::ICal> object can have sub-entries, except for alarm entries
+contained in events and to-dos (not yet implemented).)
 
 =head1 METHODS
 
@@ -109,12 +109,14 @@ sub as_string {
 
 =head2 add_entry $entry
 
-Adds an entry to this entry.  (According to the standard, this should only be called
-on either a to-do or event entry with an alarm entry, or on a calendar entry (L<Data::ICal>)
-with a to-do, event, journal, timezone, or free/busy entry.)
+Adds an entry to this entry.  (According to the standard, this should
+only be called on either a to-do or event entry with an alarm entry,
+or on a calendar entry (L<Data::ICal>) with a to-do, event, journal,
+timezone, or free/busy entry.)
 
-Returns true if the entry was successfully added, and false otherwise (perhaps because you
-tried to add an entry of an invalid type, but this check hasn't been implemented yet). 
+Returns true if the entry was successfully added, and false otherwise
+(perhaps because you tried to add an entry of an invalid type, but
+this check hasn't been implemented yet).
 
 =cut
 
@@ -138,8 +140,9 @@ __PACKAGE__->mk_ro_accessors('entries');
 
 =head2 properties
 
-Returns a reference to the hash of properties of this entry.  The keys are property names and
-the values are array references containing L<Data::ICal::Property> objects.
+Returns a reference to the hash of properties of this entry.  The keys
+are property names and the values are array references containing
+L<Data::ICal::Property> objects.
 
 =cut
 
@@ -147,7 +150,8 @@ __PACKAGE__->mk_ro_accessors('properties');
 
 =head2 property
 
-Given a property name returns a reference to the array of L<Data::ICal::Property> objects.
+Given a property name returns a reference to the array of
+L<Data::ICal::Property> objects.
 
 =cut
 
@@ -159,19 +163,20 @@ sub property {
 
 =head2 add_property $propname => $propval
 
-Creates a new L<Data::ICal::Property> object with name C<$propname> and value
-C<$propval> and adds it to the event.
+Creates a new L<Data::ICal::Property> object with name C<$propname>
+and value C<$propval> and adds it to the event.
 
-If the property is not known to exist for that object type and does not begin
-with C<X->, issues a warning.
+If the property is not known to exist for that object type and does
+not begin with C<X->, issues a warning.
 
 If the property is known to be unique, replaces the original property.
 
-To specify parameters for the property, let C<$propval> be a two-element array reference
-where the first element is the property value and the second element is a hash reference.
-The keys of the hash are parameter names; the values should be either strings or array references
-of strings, depending on whether the parameter should have one or multiple (to be comma-separated)
-values.
+To specify parameters for the property, let C<$propval> be a
+two-element array reference where the first element is the property
+value and the second element is a hash reference.  The keys of the
+hash are parameter names; the values should be either strings or array
+references of strings, depending on whether the parameter should have
+one or multiple (to be comma-separated) values.
 
 Examples of setting parameters:
 
@@ -210,13 +215,16 @@ sub add_property {
 
 =head2 add_properties $propname1 => $propval1, [$propname2 => $propname2, ...]
 
-Convenience function to call C<add_property> several times with a list of properties.
+Convenience function to call C<add_property> several times with a list
+of properties.
 
-This method is guaranteed to call add C<add_property> on them in the order given, so that
-unique properties given later in the call will take precedence over those given earlier.
-(This is unrelated to the order of properties when the entry is rendered as a string, though.)
+This method is guaranteed to call add C<add_property> on them in the
+order given, so that unique properties given later in the call will
+take precedence over those given earlier.  (This is unrelated to the
+order of properties when the entry is rendered as a string, though.)
 
-Parameters for the properties are specified in the same way as in C<add_property>.
+Parameters for the properties are specified in the same way as in
+C<add_property>.
 
 =cut
 
@@ -237,9 +245,10 @@ sub add_properties {
 
 =head2 mandatory_unique_properties 
 
-Subclasses should override this method (which returns an empty list by default)
-to provide a list of lower case strings identifying the properties which must appear exactly
-once in the subclass's entry type.
+Subclasses should override this method (which returns an empty list by
+default) to provide a list of lower case strings identifying the
+properties which must appear exactly once in the subclass's entry
+type.
 
 =cut
 
@@ -247,9 +256,10 @@ sub mandatory_unique_properties { () }
 
 =head2 mandatory_repeatable_properties 
 
-Subclasses should override this method (which returns an empty list by default)
-to provide a list of lower case strings identifying the properties which must appear at least
-once in the subclass's entry type.
+Subclasses should override this method (which returns an empty list by
+default) to provide a list of lower case strings identifying the
+properties which must appear at least once in the subclass's entry
+type.
 
 =cut
 
@@ -257,9 +267,10 @@ sub mandatory_repeatable_properties { () }
 
 =head2 optional_unique_properties 
 
-Subclasses should override this method (which returns an empty list by default)
-to provide a list of lower case strings identifying the properties which must appear at most
-once in the subclass's entry type.
+Subclasses should override this method (which returns an empty list by
+default) to provide a list of lower case strings identifying the
+properties which must appear at most once in the subclass's entry
+type.
 
 =cut
 
@@ -267,9 +278,10 @@ sub optional_unique_properties { () }
 
 =head2 optional_repeatable_properties
 
-Subclasses should override this method (which returns an empty list by default)
-to provide a list of lower case strings identifying the properties which may appear zero,
-one, or more times in the subclass's entry type.
+Subclasses should override this method (which returns an empty list by
+default) to provide a list of lower case strings identifying the
+properties which may appear zero, one, or more times in the subclass's
+entry type.
 
 =cut
 
@@ -277,8 +289,9 @@ sub optional_repeatable_properties { () }
 
 =head2 is_property $name
 
-Returns a boolean value indicating whether or not the property C<$name> is known to the class
-(that is, if it's listed in C<(mandatory/optional)_(unique/repeatable)_properties>).
+Returns a boolean value indicating whether or not the property
+C<$name> is known to the class (that is, if it's listed in
+C<(mandatory/optional)_(unique/repeatable)_properties>).
 
 =cut
 
@@ -293,8 +306,9 @@ sub is_property {
 
 =head2 is_mandatory $name
 
-Returns a boolean value indicating whether or not the property C<$name> is known to the class as mandatory
-(that is, if it's listed in C<mandatory_(unique/repeatable)_properties>).
+Returns a boolean value indicating whether or not the property
+C<$name> is known to the class as mandatory (that is, if it's listed
+in C<mandatory_(unique/repeatable)_properties>).
 
 =cut
 
@@ -307,8 +321,9 @@ sub is_mandatory {
 
 =head2 is_optional $name
 
-Returns a boolean value indicating whether or not the property C<$name> is known to the class as optional
-(that is, if it's listed in C<optional_(unique/repeatable)_properties>).
+Returns a boolean value indicating whether or not the property
+C<$name> is known to the class as optional (that is, if it's listed in
+C<optional_(unique/repeatable)_properties>).
 
 =cut
 
@@ -321,8 +336,9 @@ sub is_optional {
 
 =head2 is_unique $name
 
-Returns a boolean value indicating whether or not the property C<$name> is known to the class as unique
-(that is, if it's listed in C<(mandatory/optional)_unique_properties>).
+Returns a boolean value indicating whether or not the property
+C<$name> is known to the class as unique (that is, if it's listed in
+C<(mandatory/optional)_unique_properties>).
 
 =cut
 
@@ -335,8 +351,9 @@ sub is_unique {
 
 =head2 is_repeatable $name
 
-Returns a boolean value indicating whether or not the property C<$name> is known to the class as repeatable
-(that is, if it's listed in C<(mandatory/optional)_repeatable_properties>).
+Returns a boolean value indicating whether or not the property
+C<$name> is known to the class as repeatable (that is, if it's listed
+in C<(mandatory/optional)_repeatable_properties>).
 
 =cut
 
@@ -349,8 +366,8 @@ sub is_repeatable {
 
 =head2 ical_entry_type
 
-Subclasses should override this method to provide the identifying type name of the entry
-(such as C<VCALENDAR> or C<VTODO>).
+Subclasses should override this method to provide the identifying type
+name of the entry (such as C<VCALENDAR> or C<VTODO>).
 
 =cut
 
@@ -358,10 +375,11 @@ sub ical_entry_type {'UNDEFINED'}
 
 =head2 vcal10 [$bool]
 
-Gets or sets a boolean saying whether this entry should be interpreted as vCalendar
-1.0 (as opposed to iCalendar 2.0).  Generally, you can just set this on your
-main L<Data::ICal> object when you construct it; C<add_entry> automatically makes
-sure that sub-entries end up with the same value as their parents.
+Gets or sets a boolean saying whether this entry should be interpreted
+as vCalendar 1.0 (as opposed to iCalendar 2.0).  Generally, you can
+just set this on your main L<Data::ICal> object when you construct it;
+C<add_entry> automatically makes sure that sub-entries end up with the
+same value as their parents.
 
 =cut
 
@@ -410,7 +428,7 @@ my %_generic = (
 
 =head2 parse_object
 
-Translate a L<Text::vFile::asData> sub object into the appropriate 
+Translate a L<Text::vFile::asData> sub object into the appropriate
 L<Data::iCal::Event> subtype.
 
 =cut 
@@ -433,7 +451,7 @@ sub parse_object {
     } elsif ( my $sub = $self->can( '_parse_' . lc($type) ) ) {
         $new_self = $self->$sub($object);
 
-        # bitch
+        # complain
     } else {
         warn "Can't parse type $type yet";
         return;
@@ -532,8 +550,8 @@ sub _parse_generic_event {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Alarm/Audio.pm b/lib/Data/ICal/Entry/Alarm/Audio.pm
index 30c58e4..bcbbcc0 100644
--- a/lib/Data/ICal/Entry/Alarm/Audio.pm
+++ b/lib/Data/ICal/Entry/Alarm/Audio.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Alarm::Audio - Represents an audio alarm in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $valarm = Data::ICal::Entry::Alarm::Audio->new();
@@ -20,13 +19,13 @@ Data::ICal::Entry::Alarm::Audio - Represents an audio alarm in an iCalendar file
     );
 
     $vevent->add_entry($valarm);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Alarm::Audio> object represents an audio alarm attached
-to a todo item or event in an iCalendar file.  (Note that the iCalendar RFC
-refers to entries as "components".)  It is a subclass of L<Data::ICal::Entry>
-and accepts all of its methods.
+A L<Data::ICal::Entry::Alarm::Audio> object represents an audio alarm
+attached to a todo item or event in an iCalendar file.  (Note that the
+iCalendar RFC refers to entries as "components".)  It is a subclass of
+L<Data::ICal::Entry> and accepts all of its methods.
 
 =head1 METHODS
 
@@ -34,8 +33,8 @@ and accepts all of its methods.
 
 =head2 new
 
-Creates a new L<Data::ICal::Entry::Alarm::Audio> object; sets its C<ACTION> property
-to C<AUDIO>.
+Creates a new L<Data::ICal::Entry::Alarm::Audio> object; sets its
+C<ACTION> property to C<AUDIO>.
 
 =cut
 
@@ -56,13 +55,14 @@ sub ical_entry_type {'VALARM'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for an audio alarm:
+According to the iCalendar standard, the following properties may be
+specified at most one time for an audio alarm:
 
 	duration repeat attach
 
-Note that if one of C<duration> or C<repeat> is specified, the other one must be also,
-though this module does not enforce that restriction.
+Note that if one of C<duration> or C<repeat> is specified, the other
+one must be also, though this module does not enforce that
+restriction.
 
 =cut
 
@@ -74,9 +74,10 @@ sub optional_unique_properties {
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the C<trigger> property must be specified
-exactly once for an audio alarm.  (In addition, the C<action> property must be
-specified exactly once, but the module automatically sets it for you.)
+According to the iCalendar standard, the C<trigger> property must be
+specified exactly once for an audio alarm.  (In addition, the
+C<action> property must be specified exactly once, but the module
+automatically sets it for you.)
 
 =cut
 
@@ -88,8 +89,8 @@ sub mandatory_unique_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Alarm/Display.pm b/lib/Data/ICal/Entry/Alarm/Display.pm
index 14a63d7..455768e 100644
--- a/lib/Data/ICal/Entry/Alarm/Display.pm
+++ b/lib/Data/ICal/Entry/Alarm/Display.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Alarm::Display - Represents a displayed alarm in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $valarm = Data::ICal::Entry::Alarm::Display->new();
@@ -20,13 +19,14 @@ Data::ICal::Entry::Alarm::Display - Represents a displayed alarm in an iCalendar
     );
 
     $vevent->add_entry($valarm);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Alarm::Display> object represents a alarm that displays a
-message which is attached to a todo item or event in an iCalendar file.  (Note
-that the iCalendar RFC refers to entries as "components".)  It is a subclass of
-L<Data::ICal::Entry> and accepts all of its methods.
+A L<Data::ICal::Entry::Alarm::Display> object represents a alarm that
+displays a message which is attached to a todo item or event in an
+iCalendar file.  (Note that the iCalendar RFC refers to entries as
+"components".)  It is a subclass of L<Data::ICal::Entry> and accepts
+all of its methods.
 
 =head1 METHODS
 
@@ -34,8 +34,8 @@ L<Data::ICal::Entry> and accepts all of its methods.
 
 =head2 new
 
-Creates a new L<Data::ICal::Entry::Alarm::Display> object; sets its C<ACTION> property
-to C<DISPLAY>.
+Creates a new L<Data::ICal::Entry::Alarm::Display> object; sets its
+C<ACTION> property to C<DISPLAY>.
 
 =cut
 
@@ -56,9 +56,10 @@ sub ical_entry_type {'VALARM'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the C<duration> and C<retreat> properties may be specified
-at most one time for an displayed alarm, and if one is specified, the other one must be also,
-though this module does not enforce that restriction.
+According to the iCalendar standard, the C<duration> and C<retreat>
+properties may be specified at most one time for an displayed alarm,
+and if one is specified, the other one must be also, though this
+module does not enforce that restriction.
 
 =cut
 
@@ -71,9 +72,9 @@ sub optional_unique_properties {
 =head2 mandatory_unique_properties
 
 According to the iCalendar standard, the C<trigger> and C<description>
-properties must be specified exactly once for an displayed alarm.  (In addition, the
-C<action> property must be specified exactly once, but the module automatically
-sets it for you.)
+properties must be specified exactly once for an displayed alarm.  (In
+addition, the C<action> property must be specified exactly once, but
+the module automatically sets it for you.)
 
 =cut
 
@@ -85,8 +86,8 @@ sub mandatory_unique_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Alarm/Email.pm b/lib/Data/ICal/Entry/Alarm/Email.pm
index 15eece1..a0b4c70 100644
--- a/lib/Data/ICal/Entry/Alarm/Email.pm
+++ b/lib/Data/ICal/Entry/Alarm/Email.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Alarm::Email - Represents an emailed alarm in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $valarm = Data::ICal::Entry::Alarm::Audio->new();
@@ -20,16 +19,17 @@ Data::ICal::Entry::Alarm::Email - Represents an emailed alarm in an iCalendar fi
     );
 
     $vevent->add_entry($valarm);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Alarm::Email> object represents an emailed alarm attached
-to a todo item or event in an iCalendar file.  (Note that the iCalendar RFC
-refers to entries as "components".)  It is a subclass of L<Data::ICal::Entry>
-and accepts all of its methods.
+A L<Data::ICal::Entry::Alarm::Email> object represents an emailed
+alarm attached to a todo item or event in an iCalendar file.  (Note
+that the iCalendar RFC refers to entries as "components".)  It is a
+subclass of L<Data::ICal::Entry> and accepts all of its methods.
 
-The C<attendee> properties are intended as the recipient list of the email; the C<summary>
-as its subject; the C<description> as its body; and the C<attach>  as its attachments.
+The C<attendee> properties are intended as the recipient list of the
+email; the C<summary> as its subject; the C<description> as its body;
+and the C<attach> as its attachments.
 
 =head1 METHODS
 
@@ -37,8 +37,8 @@ as its subject; the C<description> as its body; and the C<attach>  as its attach
 
 =head2 new
 
-Creates a new L<Data::ICal::Entry::Alarm::Email> object; sets its C<ACTION> property
-to C<EMAIL>.
+Creates a new L<Data::ICal::Entry::Alarm::Email> object; sets its
+C<ACTION> property to C<EMAIL>.
 
 =cut
 
@@ -59,9 +59,10 @@ sub ical_entry_type {'VALARM'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the C<duration> and C<retreat> properties may be specified
-at most one time for an emailed alarm, and if one is specified, the other one must be also,
-though this module does not enforce that restriction.
+According to the iCalendar standard, the C<duration> and C<retreat>
+properties may be specified at most one time for an emailed alarm, and
+if one is specified, the other one must be also, though this module
+does not enforce that restriction.
 
 =cut
 
@@ -73,13 +74,13 @@ sub optional_unique_properties {
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the following properties must be specified
-exactly once for an emailed alarm:
+According to the iCalendar standard, the following properties must be
+specified exactly once for an emailed alarm:
 
   description summary trigger
 
-In addition, the C<action> property must be specified exactly once, but the
-module automatically sets it for you.
+In addition, the C<action> property must be specified exactly once,
+but the module automatically sets it for you.
 
 =cut
 
@@ -91,8 +92,8 @@ sub mandatory_unique_properties {
 
 =head2 mandatory_repeatable_properties
 
-According to the iCalendar standard, the C<attendee> property must be specified
-at least once for an emailed alarm.
+According to the iCalendar standard, the C<attendee> property must be
+specified at least once for an emailed alarm.
 
 =cut
 
@@ -104,8 +105,8 @@ sub mandatory_repeatable_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the C<attach> property may be specified
-any number of times for an emailed alarm.
+According to the iCalendar standard, the C<attach> property may be
+specified any number of times for an emailed alarm.
 
 =cut
 
@@ -117,8 +118,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Alarm/Procedure.pm b/lib/Data/ICal/Entry/Alarm/Procedure.pm
index 103c8a6..661855e 100644
--- a/lib/Data/ICal/Entry/Alarm/Procedure.pm
+++ b/lib/Data/ICal/Entry/Alarm/Procedure.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Alarm::Procedure - Represents a procedure-call alarm in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $valarm = Data::ICal::Entry::Alarm::Procedure->new();
@@ -20,14 +19,14 @@ Data::ICal::Entry::Alarm::Procedure - Represents a procedure-call alarm in an iC
     );
 
     $vevent->add_entry($valarm);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Alarm::Procedure> object represents an alarm that calls a
-procedure (in some application-defined way), which is attached to a todo item or
-event in an iCalendar file.  (Note that the iCalendar RFC refers to entries as
-"components".)  It is a subclass of L<Data::ICal::Entry> and accepts all of its
-methods.
+A L<Data::ICal::Entry::Alarm::Procedure> object represents an alarm
+that calls a procedure (in some application-defined way), which is
+attached to a todo item or event in an iCalendar file.  (Note that the
+iCalendar RFC refers to entries as "components".)  It is a subclass of
+L<Data::ICal::Entry> and accepts all of its methods.
 
 =head1 METHODS
 
@@ -35,8 +34,8 @@ methods.
 
 =head2 new
 
-Creates a new L<Data::ICal::Entry::Alarm::Procedure> object; sets its C<ACTION> property
-to C<PROCEDURE>.
+Creates a new L<Data::ICal::Entry::Alarm::Procedure> object; sets its
+C<ACTION> property to C<PROCEDURE>.
 
 =cut
 
@@ -57,13 +56,14 @@ sub ical_entry_type {'VALARM'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for a procedure-call alarm:
+According to the iCalendar standard, the following properties may be
+specified at most one time for a procedure-call alarm:
 
 	duration repeat description
 
-Note that if one of C<duration> or C<repeat> is specified, the other one must be also,
-though this module does not enforce that restriction.
+Note that if one of C<duration> or C<repeat> is specified, the other
+one must be also, though this module does not enforce that
+restriction.
 
 =cut
 
@@ -75,10 +75,10 @@ sub optional_unique_properties {
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the C<trigger> and C<attach> properties
-must be specified exactly once for a procedure-call alarm.  (In addition, the C<action>
-property must be specified exactly once, but the module automatically sets it
-for you.)
+According to the iCalendar standard, the C<trigger> and C<attach>
+properties must be specified exactly once for a procedure-call alarm.
+(In addition, the C<action> property must be specified exactly once,
+but the module automatically sets it for you.)
 
 =cut
 
@@ -90,8 +90,8 @@ sub mandatory_unique_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Event.pm b/lib/Data/ICal/Entry/Event.pm
index c81069a..4828354 100644
--- a/lib/Data/ICal/Entry/Event.pm
+++ b/lib/Data/ICal/Entry/Event.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Event - Represents an event in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vevent = Data::ICal::Entry::Event->new();
@@ -23,12 +22,13 @@ Data::ICal::Entry::Event - Represents an event in an iCalendar file
     $calendar->add_entry($vevent);
 
     $vevent->add_entry($alarm); 
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Event> object represents a single event in an iCalendar file.
-(Note that the iCalendar RFC refers to entries as "components".)  It is a subclass
-of L<Data::ICal::Entry> and accepts all of its methods.
+A L<Data::ICal::Entry::Event> object represents a single event in an
+iCalendar file.  (Note that the iCalendar RFC refers to entries as
+"components".)  It is a subclass of L<Data::ICal::Entry> and accepts
+all of its methods.
 
 =head1 METHODS
 
@@ -44,16 +44,17 @@ sub ical_entry_type {'VEVENT'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for an event:
+According to the iCalendar standard, the following properties may be
+specified at most one time for an event:
 
 	class  created  description  dtstart  geo 
 	last-modified  location  organizer  priority 
 	dtstamp  sequence  status  summary  transp 
 	uid  url  recurrence-id 
 
-In addition, C<dtend> and C<duration> may be specified at most once each, but not both
-in the same entry (though this restriction is not enforced).
+In addition, C<dtend> and C<duration> may be specified at most once
+each, but not both in the same entry (though this restriction is not
+enforced).
 
 =cut
 
@@ -70,8 +71,8 @@ sub optional_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for an event:
+According to the iCalendar standard, the following properties may be
+specified any number of times for an event:
 
 	attach  attendee  categories  comment 
 	contact  exdate  exrule  request-status  related-to 
@@ -105,7 +106,6 @@ defines.
 Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
 Simon Wistow, and Alex Vandiver
 
-
 =head1 LICENCE AND COPYRIGHT
 
 Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
diff --git a/lib/Data/ICal/Entry/FreeBusy.pm b/lib/Data/ICal/Entry/FreeBusy.pm
index e2dd53f..6c8a8b7 100644
--- a/lib/Data/ICal/Entry/FreeBusy.pm
+++ b/lib/Data/ICal/Entry/FreeBusy.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::FreeBusy - Represents blocks of free and busy time in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vfreebusy = Data::ICal::Entry::FreeBusy->new();
@@ -20,13 +19,14 @@ Data::ICal::Entry::FreeBusy - Represents blocks of free and busy time in an iCal
     );
 
     $calendar->add_entry($vfreebusy);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::FreeBusy> object represents a request for information about free and
-busy time or a reponse to such a request, in an iCalendar file.
-(Note that the iCalendar RFC refers to entries as "components".)  It is a subclass
-of L<Data::ICal::Entry> and accepts all of its methods.
+A L<Data::ICal::Entry::FreeBusy> object represents a request for
+information about free and busy time or a reponse to such a request,
+in an iCalendar file.  (Note that the iCalendar RFC refers to entries
+as "components".)  It is a subclass of L<Data::ICal::Entry> and
+accepts all of its methods.
 
 =head1 METHODS
 
@@ -42,8 +42,8 @@ sub ical_entry_type {'VFREEBUSY'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for a free/busy entry:
+According to the iCalendar standard, the following properties may be
+specified at most one time for a free/busy entry:
 
 	contact  dtstart  dtend  duration  dtstamp 
 	organizer  uid  url 
@@ -59,8 +59,8 @@ sub optional_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for free/busy entry:
+According to the iCalendar standard, the following properties may be
+specified any number of times for free/busy entry:
 
         attendee comment freebusy request-status
 
@@ -74,8 +74,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Journal.pm b/lib/Data/ICal/Entry/Journal.pm
index 8139abc..2154950 100644
--- a/lib/Data/ICal/Entry/Journal.pm
+++ b/lib/Data/ICal/Entry/Journal.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Journal - Represents a journal entry in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vjournal = Data::ICal::Entry::Journal->new();
@@ -21,12 +20,13 @@ Data::ICal::Entry::Journal - Represents a journal entry in an iCalendar file
     );
 
     $calendar->add_entry($vjournal);
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Journal> object represents a single journal entry in an iCalendar file.
-(Note that the iCalendar RFC refers to entries as "components".)  It is a subclass
-of L<Data::ICal::Entry> and accepts all of its methods.
+A L<Data::ICal::Entry::Journal> object represents a single journal
+entry in an iCalendar file.  (Note that the iCalendar RFC refers to
+entries as "components".)  It is a subclass of L<Data::ICal::Entry>
+and accepts all of its methods.
 
 =head1 METHODS
 
@@ -42,8 +42,8 @@ sub ical_entry_type {'VJOURNAL'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for a journal entry:
+According to the iCalendar standard, the following properties may be
+specified at most one time for a journal entry:
 
     class  created  description  dtstart  dtstamp 
     last-modified  organizer  recurrence-id  sequence  status 
@@ -61,8 +61,8 @@ sub optional_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for a journal entry:
+According to the iCalendar standard, the following properties may be
+specified any number of times for a journal entry:
 
 	attach  attendee  categories  comment 
 	contact  exdate  exrule  related-to  rdate 
@@ -80,8 +80,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/TimeZone.pm b/lib/Data/ICal/Entry/TimeZone.pm
index 8fe8c60..54a1849 100644
--- a/lib/Data/ICal/Entry/TimeZone.pm
+++ b/lib/Data/ICal/Entry/TimeZone.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::TimeZone - Represents a time zone definition in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vtimezone = Data::ICal::Entry::TimeZone->new();
@@ -23,16 +22,16 @@ Data::ICal::Entry::TimeZone - Represents a time zone definition in an iCalendar
 
     $calendar->add_entry($vtimezone);
 
-  
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::TimeZone> object represents the declaration of a time
-zone in an iCalendar file.  (Note that the iCalendar RFC refers to entries as
-"components".)  It is a subclass of L<Data::ICal::Entry> and accepts all of its
-methods.
+A L<Data::ICal::Entry::TimeZone> object represents the declaration of
+a time zone in an iCalendar file.  (Note that the iCalendar RFC refers
+to entries as "components".)  It is a subclass of L<Data::ICal::Entry>
+and accepts all of its methods.
 
-This module is not yet useful, because every time zone declaration needs to contain
-at least one C<STANDARD> or C<DAYLIGHT> component, and these have not yet been implemented.
+This module is not yet useful, because every time zone declaration
+needs to contain at least one C<STANDARD> or C<DAYLIGHT> component,
+and these have not yet been implemented.
 
 =head1 METHODS
 
@@ -48,8 +47,8 @@ sub ical_entry_type {'VTIMEZONE'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for a time zone declaration:
+According to the iCalendar standard, the following properties may be
+specified at most one time for a time zone declaration:
 
 	last-modified tzurl
 
@@ -63,8 +62,8 @@ sub optional_unique_properties {
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the C<tzid> property must be specified
-exactly one time in a time zone declaration.
+According to the iCalendar standard, the C<tzid> property must be
+specified exactly one time in a time zone declaration.
 
 =cut
 
@@ -76,8 +75,8 @@ sub mandatory_unique_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/TimeZone/Daylight.pm b/lib/Data/ICal/Entry/TimeZone/Daylight.pm
index a5fed82..ae89566 100644
--- a/lib/Data/ICal/Entry/TimeZone/Daylight.pm
+++ b/lib/Data/ICal/Entry/TimeZone/Daylight.pm
@@ -9,25 +9,21 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::TimeZone::Daylight - Represents a Daylight Time base offset from UTC for parent TimeZone
 
-
-=head1 SYNOPSIS
-
-  
 =head1 DESCRIPTION
 
-A time zone is unambiguously defined by the set of time
-measurement rules determined by the governing body for a given
-geographic area. These rules describe at a minimum the base  offset
-from UTC for the time zone, often referred to as the Standard Time
-offset. Many locations adjust their Standard Time forward or backward
-by one hour, in order to accommodate seasonal changes in number of
-daylight hours, often referred to as Daylight  Saving Time. Some
-locations adjust their time by a fraction of an hour. Standard Time
-is also known as Winter Time. Daylight Saving Time is also known as
-Advanced Time, Summer Time, or Legal Time in certain countries. The
-following table shows the changes in time zone rules in effect for
-New York City starting from 1967. Each line represents a description
-or rule for a particular observance.
+A time zone is unambiguously defined by the set of time measurement
+rules determined by the governing body for a given geographic
+area. These rules describe at a minimum the base offset from UTC for
+the time zone, often referred to as the Standard Time offset. Many
+locations adjust their Standard Time forward or backward by one hour,
+in order to accommodate seasonal changes in number of daylight hours,
+often referred to as Daylight Saving Time. Some locations adjust their
+time by a fraction of an hour. Standard Time is also known as Winter
+Time. Daylight Saving Time is also known as Advanced Time, Summer
+Time, or Legal Time in certain countries. The following table shows
+the changes in time zone rules in effect for New York City starting
+from 1967. Each line represents a description or rule for a particular
+observance.
 
      Effective Observance Rule
 
@@ -46,16 +42,16 @@ or rule for a particular observance.
      1987-*     first Sun in Apr, 02:00 -0400   EDT
 
 Note: The specification of a global time zone registry is not
-addressed by this document and is left for future study.
-However, implementers may find the Olson time zone database [TZ]
-a useful reference. It is an informal, public-domain collection
-of time zone information, which is currently being maintained by
-volunteer Internet participants, and is used in several
-operating systems. This database contains current and historical
-time zone information for a wide variety of locations around the
-globe; it provides a time zone identifier for every unique time
-zone rule set in actual use since 1970, with historical data
-going back to the introduction of standard time.
+addressed by this document and is left for future study.  However,
+implementers may find the Olson time zone database [TZ] a useful
+reference. It is an informal, public-domain collection of time zone
+information, which is currently being maintained by volunteer Internet
+participants, and is used in several operating systems. This database
+contains current and historical time zone information for a wide
+variety of locations around the globe; it provides a time zone
+identifier for every unique time zone rule set in actual use since
+1970, with historical data going back to the introduction of standard
+time.
 
 =head1 METHODS
 
@@ -71,8 +67,8 @@ sub ical_entry_type {'DAYLIGHT'}
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the following properties must be specified
-exactly one time in a daylight declaration:
+According to the iCalendar standard, the following properties must be
+specified exactly one time in a daylight declaration:
 
 	dtstart  tzoffsetto  tzoffsetfrom
 
@@ -88,8 +84,8 @@ sub mandatory_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for a daylight declaration:
+According to the iCalendar standard, the following properties may be
+specified any number of times for a daylight declaration:
 
 	comment  rdate  rrule  tzname  
 
@@ -106,8 +102,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/TimeZone/Standard.pm b/lib/Data/ICal/Entry/TimeZone/Standard.pm
index e0e4e8d..2206719 100644
--- a/lib/Data/ICal/Entry/TimeZone/Standard.pm
+++ b/lib/Data/ICal/Entry/TimeZone/Standard.pm
@@ -9,25 +9,21 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::TimeZone::Standard - Represents a Standard Time base offset from UTC for parent TimeZone
 
-
-=head1 SYNOPSIS
-
-  
 =head1 DESCRIPTION
 
-A time zone is unambiguously defined by the set of time
-measurement rules determined by the governing body for a given
-geographic area. These rules describe at a minimum the base  offset
-from UTC for the time zone, often referred to as the Standard Time
-offset. Many locations adjust their Standard Time forward or backward
-by one hour, in order to accommodate seasonal changes in number of
-daylight hours, often referred to as Daylight  Saving Time. Some
-locations adjust their time by a fraction of an hour. Standard Time
-is also known as Winter Time. Daylight Saving Time is also known as
-Advanced Time, Summer Time, or Legal Time in certain countries. The
-following table shows the changes in time zone rules in effect for
-New York City starting from 1967. Each line represents a description
-or rule for a particular observance.
+A time zone is unambiguously defined by the set of time measurement
+rules determined by the governing body for a given geographic
+area. These rules describe at a minimum the base offset from UTC for
+the time zone, often referred to as the Standard Time offset. Many
+locations adjust their Standard Time forward or backward by one hour,
+in order to accommodate seasonal changes in number of daylight hours,
+often referred to as Daylight Saving Time. Some locations adjust their
+time by a fraction of an hour. Standard Time is also known as Winter
+Time. Daylight Saving Time is also known as Advanced Time, Summer
+Time, or Legal Time in certain countries. The following table shows
+the changes in time zone rules in effect for New York City starting
+from 1967. Each line represents a description or rule for a particular
+observance.
 
      Effective Observance Rule
 
@@ -46,16 +42,16 @@ or rule for a particular observance.
      1987-*     first Sun in Apr, 02:00 -0400   EDT
 
 Note: The specification of a global time zone registry is not
-addressed by this document and is left for future study.
-However, implementers may find the Olson time zone database [TZ]
-a useful reference. It is an informal, public-domain collection
-of time zone information, which is currently being maintained by
-volunteer Internet participants, and is used in several
-operating systems. This database contains current and historical
-time zone information for a wide variety of locations around the
-globe; it provides a time zone identifier for every unique time
-zone rule set in actual use since 1970, with historical data
-going back to the introduction of standard time.
+addressed by this document and is left for future study.  However,
+implementers may find the Olson time zone database [TZ] a useful
+reference. It is an informal, public-domain collection of time zone
+information, which is currently being maintained by volunteer Internet
+participants, and is used in several operating systems. This database
+contains current and historical time zone information for a wide
+variety of locations around the globe; it provides a time zone
+identifier for every unique time zone rule set in actual use since
+1970, with historical data going back to the introduction of standard
+time.
 
 =head1 METHODS
 
@@ -71,8 +67,8 @@ sub ical_entry_type {'STANDARD'}
 
 =head2 mandatory_unique_properties
 
-According to the iCalendar standard, the following properties must be specified
-exactly one time in a standard time declaration:
+According to the iCalendar standard, the following properties must be
+specified exactly one time in a standard time declaration:
 
 	dtstart  tzoffsetto  tzoffsetfrom
 
@@ -88,8 +84,8 @@ sub mandatory_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for a standard time declaration:
+According to the iCalendar standard, the following properties may be
+specified any number of times for a standard time declaration:
 
 	comment  rdate  rrule  tzname 
 
@@ -106,8 +102,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Entry/Todo.pm b/lib/Data/ICal/Entry/Todo.pm
index ec84921..c98dfa6 100644
--- a/lib/Data/ICal/Entry/Todo.pm
+++ b/lib/Data/ICal/Entry/Todo.pm
@@ -9,7 +9,6 @@ use base qw/Data::ICal::Entry/;
 
 Data::ICal::Entry::Todo - Represents a to-do entry in an iCalendar file
 
-
 =head1 SYNOPSIS
 
     my $vtodo = Data::ICal::Entry::Todo->new();
@@ -23,12 +22,13 @@ Data::ICal::Entry::Todo - Represents a to-do entry in an iCalendar file
     $calendar->add_entry($vtodo);
 
     $vtodo->add_entry($alarm); 
-  
+
 =head1 DESCRIPTION
 
-A L<Data::ICal::Entry::Todo> object represents a single to-do entry in an iCalendar file.
-(Note that the iCalendar RFC refers to entries as "components".)  It is a subclass
-of L<Data::ICal::Entry> and accepts all of its methods.
+A L<Data::ICal::Entry::Todo> object represents a single to-do entry in
+an iCalendar file.  (Note that the iCalendar RFC refers to entries as
+"components".)  It is a subclass of L<Data::ICal::Entry> and accepts
+all of its methods.
 
 =head1 METHODS
 
@@ -44,16 +44,17 @@ sub ical_entry_type {'VTODO'}
 
 =head2 optional_unique_properties
 
-According to the iCalendar standard, the following properties may be specified
-at most one time for a to-do item:
+According to the iCalendar standard, the following properties may be
+specified at most one time for a to-do item:
 
       class  completed  created  description  dtstamp
       dtstart  geo  last-modified  location  organizer
       percent-complete  priority  recurrence-id  sequence  status
       summary  uid  url
 
-In addition, C<due> and C<duration> may be specified at most once each, but not both
-in the same entry (though this restriction is not enforced).
+In addition, C<due> and C<duration> may be specified at most once
+each, but not both in the same entry (though this restriction is not
+enforced).
 
 =cut
 
@@ -70,8 +71,8 @@ sub optional_unique_properties {
 
 =head2 optional_repeatable_properties
 
-According to the iCalendar standard, the following properties may be specified
-any number of times for a to-do item:
+According to the iCalendar standard, the following properties may be
+specified any number of times for a to-do item:
 
       attach  attendee  categories  comment  contact
       exdate  exrule  request-status  related-to  resources
@@ -89,8 +90,8 @@ sub optional_repeatable_properties {
 
 =head1 AUTHOR
 
-Jesse Vincent  C<< <jesse at bestpractical.com> >> with David Glasser and Simon Wistow
-
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
 
 =head1 LICENCE AND COPYRIGHT
 
diff --git a/lib/Data/ICal/Property.pm b/lib/Data/ICal/Property.pm
index ece7748..29c56ef 100644
--- a/lib/Data/ICal/Property.pm
+++ b/lib/Data/ICal/Property.pm
@@ -14,18 +14,18 @@ our $VERSION = '0.06';
 
 Data::ICal::Property - Represents a property on an entry in an iCalendar file
 
-  
 =head1 DESCRIPTION
 
 A L<Data::ICal::Property> object represents a single property on an
-entry in an iCalendar file.  Properties have parameters in addition to their value.
+entry in an iCalendar file.  Properties have parameters in addition to
+their value.
 
-You shouldn't need to create L<Data::ICal::Property> values directly -- just use
-C<add_property> in L<Data::ICal::Entry>.
+You shouldn't need to create L<Data::ICal::Property> values directly
+-- just use C<add_property> in L<Data::ICal::Entry>.
 
-The C<encoding> parameter value is only interpreted by L<Data::ICal> in the
-C<decoded_value> and C<encode> methods: all other methods access
-the encoded version directly (if there is an encoding).
+The C<encoding> parameter value is only interpreted by L<Data::ICal>
+in the C<decoded_value> and C<encode> methods: all other methods
+access the encoded version directly (if there is an encoding).
 
 Currently, the only supported encoding is C<QUOTED-PRINTABLE>.
 
@@ -37,12 +37,12 @@ Currently, the only supported encoding is C<QUOTED-PRINTABLE>.
 
 Creates a new L<Data::ICal::Property> with key C<$key> and value C<$value>.
 
-If C<$parameter_hash> is provided, sets the property's parameters to it.
-The parameter hash should have keys equal to the names of the parameters (case 
-insensitive; parameter hashes should not contain two different keys which are
-the same when converted to upper case); the values should either be a string
-if the parameter has a single value or an array reference of strings if
-the parameter has multiple values.
+If C<$parameter_hash> is provided, sets the property's parameters to
+it.  The parameter hash should have keys equal to the names of the
+parameters (case insensitive; parameter hashes should not contain two
+different keys which are the same when converted to upper case); the
+values should either be a string if the parameter has a single value
+or an array reference of strings if the parameter has multiple values.
 
 =cut
 
@@ -68,17 +68,17 @@ Gets or sets the value of this property.
 
 =head2 parameters [$param_hash]
 
-Gets or sets the parameter hash reference of this property.
-Parameter keys are converted to upper case.
+Gets or sets the parameter hash reference of this property.  Parameter
+keys are converted to upper case.
 
 =head2 vcal10 [$bool]
 
-Gets or sets a boolean saying whether this should be interpreted as vCalendar
-1.0 (as opposed to iCalendar 2.0).  Generally, you can just set this on your
-main L<Data::ICal> object when you construct it; C<add_entry> automatically makes
-sure that sub-entries end up with the same value as their parents, and 
-C<add_property> makes sure that properties end up with the same value as
-their entry.
+Gets or sets a boolean saying whether this should be interpreted as
+vCalendar 1.0 (as opposed to iCalendar 2.0).  Generally, you can just
+set this on your main L<Data::ICal> object when you construct it;
+C<add_entry> automatically makes sure that sub-entries end up with the
+same value as their parents, and C<add_property> makes sure that
+properties end up with the same value as their entry.
 
 =cut
 
@@ -115,10 +115,10 @@ my %ENCODINGS = (
 
 =head2 decoded_value
 
-Gets the value of this property, converted from the encoding specified in 
-its encoding parameter.  (That is, C<value> will return the encoded version;
-this will apply the encoding.)  If the encoding is not specified or recognized, just returns
-the raw value.
+Gets the value of this property, converted from the encoding specified
+in its encoding parameter.  (That is, C<value> will return the encoded
+version; this will apply the encoding.)  If the encoding is not
+specified or recognized, just returns the raw value.
 
 =cut
 
@@ -136,12 +136,14 @@ sub decoded_value {
 
 =head2 encode $encoding
 
-Calls C<decoded_value> to get the current decoded value, then encodes it in C<$encoding>,
-sets the value to that, and sets the encoding parameter to C<$encoding>. (C<$encoding> is
-first converted to upper case.)
+Calls C<decoded_value> to get the current decoded value, then encodes
+it in C<$encoding>, sets the value to that, and sets the encoding
+parameter to C<$encoding>. (C<$encoding> is first converted to upper
+case.)
 
-If C<$encoding> is undef, deletes the encoding parameter and sets the value to the decoded
-value.  Does nothing if the encoding is not recognized.
+If C<$encoding> is undef, deletes the encoding parameter and sets the
+value to the decoded value.  Does nothing if the encoding is not
+recognized.
 
 =cut
 
@@ -162,7 +164,8 @@ sub encode {
 
 =head2 as_string ARGS
 
-Returns the property formatted as a string (including trailing newline).
+Returns the property formatted as a string (including trailing
+newline).
 
 Takes named arguments:
 
@@ -170,7 +173,8 @@ Takes named arguments:
 
 =item fold
 
-Defaults to true. pass in a false value if you need to generate non-rfc-compliant calendars.
+Defaults to true. pass in a false value if you need to generate
+non-rfc-compliant calendars.
 
 =item crlf
 
@@ -206,12 +210,11 @@ sub as_string {
 
 =head2 _value_as_string
 
-Returns the property's value as a string.  
-Comma and semicolon are not escaped when the value is recur type (the key is 
-rrule).
+Returns the property's value as a string.  Comma and semicolon are not
+escaped when the value is recur type (the key is rrule).
 
-Values are quoted according the iCal spec, unless 
-this is in vCal 1.0 mode.
+Values are quoted according the iCal spec, unless this is in vCal 1.0
+mode.
 
 =end private
 
@@ -261,10 +264,11 @@ sub _parameters_as_string {
 
 =head2 _quoted_parameter_values @values
 
-Quotes any of the values in C<@values> that need to be quoted and returns the quoted values
-joined by commas.
+Quotes any of the values in C<@values> that need to be quoted and
+returns the quoted values joined by commas.
 
-If any of the values contains a double-quote, erases it and emits a warning.
+If any of the values contains a double-quote, erases it and emits a
+warning.
 
 =end private
 
@@ -291,12 +295,14 @@ sub _quoted_parameter_values {
 
 =head2 _fold $string $crlf
 
-Returns C<$string> folded with newlines and leading whitespace so that each
-line is at most 75 characters.
+Returns C<$string> folded with newlines and leading whitespace so that
+each line is at most 75 characters.
 
-(Note that it folds at 75 characters, not 75 bytes as specified in the standard.)
+(Note that it folds at 75 characters, not 75 bytes as specified in the
+standard.)
 
-If this is vCalendar 1.0 and encoded with QUOTED-PRINTABLE, does not fold at all.
+If this is vCalendar 1.0 and encoded with QUOTED-PRINTABLE, does not
+fold at all.
 
 =end private
 
@@ -328,5 +334,43 @@ sub _fold {
     return $string;
 }
 
+=head1 AUTHOR
+
+Jesse Vincent C<< <jesse at bestpractical.com> >> with David Glasser,
+Simon Wistow, and Alex Vandiver
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2005 - 2009, Best Practical Solutions, LLC.  All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+=cut
+
 1;
 

commit 7091e0cd2f2fdf72ae83342184b01c15bc91f23d
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:54:39 2009 -0400

    Perltidy

diff --git a/lib/Data/ICal.pm b/lib/Data/ICal.pm
index f290bd6..3067920 100644
--- a/lib/Data/ICal.pm
+++ b/lib/Data/ICal.pm
@@ -82,15 +82,16 @@ sub new {
         @_
     );
 
-    $self->vcal10($args{vcal10});
+    $self->vcal10( $args{vcal10} );
+
+    if ( defined $args{filename} or defined $args{data} ) {
 
-    if (defined $args{filename} or defined $args{data}) {
         # might return a Class::ReturnValue if parsing fails
         return $self->parse(%args);
     } else {
         $self->add_properties(
-            version => ($self->vcal10 ? '1.0' : '2.0'),
-            prodid  => $self->product_id,
+            version => ( $self->vcal10 ? '1.0' : '2.0' ),
+            prodid => $self->product_id,
         );
         return $self;
     }
@@ -119,17 +120,18 @@ sub parse {
         @_
     );
 
-    unless (defined $args{filename} or defined $args{data}) {
-        return $self->_error("parse called with no filename or data specified");
-    } 
+    unless ( defined $args{filename} or defined $args{data} ) {
+        return $self->_error(
+            "parse called with no filename or data specified");
+    }
 
     my @lines;
 
     # open the file (checking as we go, like good little Perl mongers)
     if ( defined $args{filename} ) {
-        open my $fh, '<', $args{filename} or 
-            return $self->_error("could not open '$args{filename}': $!");
-        @lines = map {chomp; $_} <$fh>;
+        open my $fh, '<', $args{filename}
+            or return $self->_error("could not open '$args{filename}': $!");
+        @lines = map { chomp; $_ } <$fh>;
     } else {
         @lines = split /\r?\n/, $args{data};
     }
@@ -140,7 +142,8 @@ sub parse {
     my $cal = eval { Text::vFile::asData->new->parse_lines(@lines) };
     return $self->_error("parse failure: $@") if $@;
 
-    return $self->_error("parse failure") unless $cal and exists $cal->{objects};
+    return $self->_error("parse failure")
+        unless $cal and exists $cal->{objects};
 
     # loop through all the vcards
     foreach my $object ( @{ $cal->{objects} } ) {
@@ -149,28 +152,30 @@ sub parse {
 
     my $version_ref = $self->property("version");
     my $version = $version_ref ? $version_ref->[0]->value : undef;
-    unless (defined $version) {
+    unless ( defined $version ) {
         return $self->_error("data does not specify a version property");
-    } 
-
-    if ($version eq '1.0' and not $self->vcal10 or
-        $version eq '2.0' and $self->vcal10) {
-        return $self->_error('application claims data is' .
-                    ($self->vcal10 ? '' : ' not') . ' vCal 1.0 but doc contains VERSION:' .
-                    $version);
-    } 
-    
+    }
+
+    if (   $version eq '1.0' and not $self->vcal10
+        or $version eq '2.0' and $self->vcal10 )
+    {
+        return $self->_error( 'application claims data is'
+                . ( $self->vcal10 ? '' : ' not' )
+                . ' vCal 1.0 but doc contains VERSION:'
+                . $version );
+    }
+
     return $self;
 }
 
 sub _error {
     my $self = shift;
     my $msg  = shift;
-    
+
     my $ret = Class::ReturnValue->new;
-    $ret->as_error(errno => 1, message => $msg);
+    $ret->as_error( errno => 1, message => $msg );
     return $ret;
-} 
+}
 
 =head2 ical_entry_type
 
@@ -222,39 +227,38 @@ sub optional_unique_properties {
     );
 }
 
-
 # In quoted-printable sections, convert from vcal10 "=\n" line endings to
 # ical20 "\n ".
 sub _vcal10_input_cleanup {
-    my $self = shift;
+    my $self     = shift;
     my @in_lines = @_;
 
     my @out_lines;
 
     my $in_qp = 0;
-    LINE: while (@in_lines) {
+LINE: while (@in_lines) {
         my $line = shift @in_lines;
 
-        if (not $in_qp and $line =~ /^[^:]+;ENCODING=QUOTED-PRINTABLE/i) {
+        if ( not $in_qp and $line =~ /^[^:]+;ENCODING=QUOTED-PRINTABLE/i ) {
             $in_qp = 1;
-        } 
+        }
 
         unless ($in_qp) {
             push @out_lines, $line;
             next LINE;
-        } 
+        }
 
-        if ($line =~ s/=$//) {
+        if ( $line =~ s/=$// ) {
             push @out_lines, $line;
             $in_lines[0] = ' ' . $in_lines[0] if @in_lines;
         } else {
             push @out_lines, $line;
             $in_qp = 0;
-        } 
+        }
     }
 
     return @out_lines;
-} 
+}
 
 =head1 DEPENDENCIES
 
diff --git a/lib/Data/ICal/Entry.pm b/lib/Data/ICal/Entry.pm
index 4248f91..8f3f306 100644
--- a/lib/Data/ICal/Entry.pm
+++ b/lib/Data/ICal/Entry.pm
@@ -52,9 +52,9 @@ Creates a new entry object with no properties or sub-entries.
 
 sub new {
     my $class = shift;
-    my $self = $class->SUPER::new;
-    $self->set(properties => {});
-    $self->set(entries => []);
+    my $self  = $class->SUPER::new;
+    $self->set( properties => {} );
+    $self->set( entries    => [] );
     return $self;
 }
 
@@ -91,7 +91,7 @@ sub as_string {
     {
         carp "Mandatory property for " . ( ref $self ) . " missing: $name"
             unless $self->properties->{$name}
-            and @{ $self->properties->{$name} };
+                and @{ $self->properties->{$name} };
     }
 
     for my $name ( sort keys %{ $self->properties } ) {
@@ -190,9 +190,8 @@ sub add_property {
     my $prop = lc shift;
     my $val  = shift;
 
-
     return unless defined $prop;
-    
+
     unless ( $self->is_property($prop) or $prop =~ /^x-/i ) {
         carp "Unknown property for " . ( ref $self ) . ": $prop";
     }
@@ -209,7 +208,7 @@ sub add_property {
 
     my $p = Data::ICal::Property->new( $prop => $prop_value, $param_hash );
     $p->vcal10( $self->vcal10 );
-    
+
     push @{ $self->properties->{$prop} }, $p;
 }
 
@@ -534,7 +533,7 @@ sub _parse_generic_event {
                 $occurence->{value} =~ s/\\([;,\\])/$1/g;
                 $occurence->{value} =~ s/\\n/\n/ig;
             }
-            
+
             # handle optional params and 'normal' key/value pairs
             # TODO: line wrapping?
             if ( $occurence->{param} ) {
diff --git a/lib/Data/ICal/Property.pm b/lib/Data/ICal/Property.pm
index 29c56ef..642e608 100644
--- a/lib/Data/ICal/Property.pm
+++ b/lib/Data/ICal/Property.pm
@@ -86,32 +86,33 @@ __PACKAGE__->mk_accessors(qw(key value _parameters vcal10));
 
 sub parameters {
     my $self = shift;
-    
+
     if (@_) {
-        my $params = shift;
+        my $params     = shift;
         my $new_params = {};
-        while (my ($k, $v) = each %$params) {
-            $new_params->{uc $k} = $v;
-        } 
+        while ( my ( $k, $v ) = each %$params ) {
+            $new_params->{ uc $k } = $v;
+        }
         $self->_parameters($new_params);
-    } 
+    }
 
     return $self->_parameters;
-} 
+}
 
 my %ENCODINGS = (
-    'QUOTED-PRINTABLE' => { encode => sub { 
-                                my $dec = shift ||'';
-                                $dec =~ s/\n/\r\n/g;
-                                return MIME::QuotedPrint::encode($dec, '');
-                            },
-                            decode => sub {
-                                my $dec = MIME::QuotedPrint::decode(shift ||'');
-                                $dec =~ s/\r\n/\n/g;
-                                return $dec;
-                            }
-                        },
-); 
+    'QUOTED-PRINTABLE' => {
+        encode => sub {
+            my $dec = shift || '';
+            $dec =~ s/\n/\r\n/g;
+            return MIME::QuotedPrint::encode( $dec, '' );
+        },
+        decode => sub {
+            my $dec = MIME::QuotedPrint::decode( shift || '' );
+            $dec =~ s/\r\n/\n/g;
+            return $dec;
+            }
+    },
+);
 
 =head2 decoded_value
 
@@ -123,16 +124,16 @@ specified or recognized, just returns the raw value.
 =cut
 
 sub decoded_value {
-    my $self = shift;
-    my $value = $self->value;
-    my $encoding = uc($self->parameters->{'ENCODING'}||"");
+    my $self     = shift;
+    my $value    = $self->value;
+    my $encoding = uc( $self->parameters->{'ENCODING'} || "" );
 
-    if ($ENCODINGS{$encoding}) {
+    if ( $ENCODINGS{$encoding} ) {
         return $ENCODINGS{$encoding}{'decode'}->($value);
     } else {
         return $value;
-    } 
-} 
+    }
+}
 
 =head2 encode $encoding
 
@@ -148,19 +149,19 @@ recognized.
 =cut
 
 sub encode {
-    my $self = shift;
+    my $self     = shift;
     my $encoding = uc shift;
 
     my $decoded_value = $self->decoded_value;
 
-    if (not defined $encoding) {
+    if ( not defined $encoding ) {
         $self->value($decoded_value);
         delete $self->parameters->{'ENCODING'};
-    } elsif ($ENCODINGS{$encoding}) {
+    } elsif ( $ENCODINGS{$encoding} ) {
         $self->value( $ENCODINGS{$encoding}{'encode'}->($decoded_value) );
         $self->parameters->{'ENCODING'} = $encoding;
-    } 
-} 
+    }
+}
 
 =head2 as_string ARGS
 
@@ -187,20 +188,22 @@ which used C<\x0a>.
 =cut
 
 sub as_string {
-    my $self   = shift;
-    my %args   = ( 
+    my $self = shift;
+    my %args = (
         fold => 1,
         crlf => Data::ICal::Entry->CRLF,
         @_
     );
-    my $string = uc( $self->key )
+    my $string
+        = uc( $self->key )
         . $self->_parameters_as_string . ":"
-        . $self->_value_as_string( $self->key ) . $args{crlf};
+        . $self->_value_as_string( $self->key )
+        . $args{crlf};
 
   # Assumption: the only place in an iCalendar that needs folding are property
   # lines
     if ( $args{'fold'} ) {
-        return $self->_fold($string, $args{crlf});
+        return $self->_fold( $string, $args{crlf} );
     } else {
         return $string;
     }
@@ -221,11 +224,11 @@ mode.
 =cut
 
 sub _value_as_string {
-    my $self = shift;
-    my $key = shift;
-    my $value = defined($self->value()) ? $self->value() : '';
-    
-    unless ($self->vcal10) {
+    my $self  = shift;
+    my $key   = shift;
+    my $value = defined( $self->value() ) ? $self->value() : '';
+
+    unless ( $self->vcal10 ) {
         $value =~ s/\\/\\\\/gs;
         $value =~ s/;/\\;/gs unless lc($key) eq 'rrule';
         $value =~ s/,/\\,/gs unless lc($key) eq 'rrule';
@@ -252,7 +255,8 @@ sub _parameters_as_string {
     my $out  = '';
     for my $name ( sort keys %{ $self->parameters } ) {
         my $value = $self->parameters->{$name};
-        $out .= ';'
+        $out
+            .= ';'
             . $name . '='
             . $self->_quoted_parameter_values(
             ref $value ? @$value : $value );
@@ -313,19 +317,21 @@ sub _fold {
     my $string = shift;
     my $crlf   = shift;
 
-    my $quoted_printable = $self->vcal10 && 
-        uc($self->parameters->{'ENCODING'}||'') eq 'QUOTED-PRINTABLE';
+    my $quoted_printable = $self->vcal10
+        && uc( $self->parameters->{'ENCODING'} || '' ) eq 'QUOTED-PRINTABLE';
 
     if ($quoted_printable) {
-        # In old vcal, quoted-printable properties have different folding rules.
-        # But some interop tests suggest it's wiser just to not fold for vcal 1.0
-        # at all (in quoted-printable).
+
+     # In old vcal, quoted-printable properties have different folding rules.
+     # But some interop tests suggest it's wiser just to not fold for vcal 1.0
+     # at all (in quoted-printable).
     } else {
         my $pos = 0;
+
         # Walk through the value, looking to replace 75 characters at
         # a time.  We assign to pos() to update where to pick up for
         # the next match.
-        while ($string =~ s/\G(.{75})(?=.)/$1$crlf /) {
+        while ( $string =~ s/\G(.{75})(?=.)/$1$crlf / ) {
             $pos += 75 + length($crlf);
             pos($string) = $pos;
         }

commit 2a6db733d217022103caa927f569e164b860fc9d
Author: Alex Vandiver <alex at chmrr.net>
Date:   Thu Jul 9 23:58:20 2009 -0400

    Version 0.15_02 releng

diff --git a/Changes b/Changes
index 02e0a5c..cfc9898 100644
--- a/Changes
+++ b/Changes
@@ -1,7 +1,15 @@
 Revision history for Data-ICal
 
-0.15_01
+0.15_02
     * Use \r\n as the newline character, per RFC 3445
+    * Escaping of \ was being done incorrectly, and tested incorrectly
+    * Remove a useless and incorrect "escape code"
+    * Mention Data::ICal::DateTime
+    * Update copyright
+    * POD cleanup
+    * Update README from POD
+    * POD nits; mostly reflowing and whitespace fixes
+    * Perltidy
 
 0.15
     * Escaping fixes
diff --git a/META.yml b/META.yml
index b4b55db..3f8907e 100644
--- a/META.yml
+++ b/META.yml
@@ -29,4 +29,4 @@ requires:
   Text::vFile::asData: 0
 resources:
   license: http://dev.perl.org/licenses/
-version: 0.15_01
+version: 0.15_02
diff --git a/SIGNATURE b/SIGNATURE
index d2b43ec..a98264c 100644
--- a/SIGNATURE
+++ b/SIGNATURE
@@ -14,11 +14,11 @@ not run its Makefile.PL or Build.PL.
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 4d8d3956bfb087e8040b6f7c882eb483fd3be841 Changes
+SHA1 26abceeaca786d8f86da9e43e9799aed0fa4858e Changes
 SHA1 5431e81bc6604fb7a108c0616e0f841c7f790739 MANIFEST
-SHA1 5934ccd98073ccf2eaacb0b9e7ec6708cc322e32 META.yml
+SHA1 6d8ead09247ede26a2d2cfc7f34052da3123b61f META.yml
 SHA1 2e091ae7e52799ba1f315134ce2a2d2bfd703ce0 Makefile.PL
-SHA1 d9f0e46f1abb63475a9d382938debf95ec586612 README
+SHA1 ec8bde7d78141c610ceeb9f8f74d48dfca294406 README
 SHA1 53368d91c157d1932b76db94854288903ae7ec59 doc/rfc2445.txt
 SHA1 1ca8755782cececa8cb19deddbcbe03be8e73cfc examples/ical2html.pl
 SHA1 6cc7c33dbf3e1635f38ac2acc983c410cd0da679 inc/Module/AutoInstall.pm
@@ -32,22 +32,22 @@ SHA1 c45b2672d8ae49d710343f39f68d00c28cba4b43 inc/Module/Install/Makefile.pm
 SHA1 82e172b951d97f74315af04cb7b909afa546fc07 inc/Module/Install/Metadata.pm
 SHA1 1b1de77b3187dfbbd6de905e539ff1393c1aa6a0 inc/Module/Install/Win32.pm
 SHA1 c1c96fa424457d79caaaf9af61037e6f984e71dc inc/Module/Install/WriteAll.pm
-SHA1 10a1c59679fcde45004fa4553e14e26c3ce8c408 lib/Data/ICal.pm
-SHA1 b0c862c2744d0a5bf27d161473f302a0c6cb5a61 lib/Data/ICal/Entry.pm
-SHA1 1aba295f69f55ef58fcf20d4a509222fe4cf02f0 lib/Data/ICal/Entry/Alarm/Audio.pm
-SHA1 edc21a5cd2c17e1892a2ab12dd2c8dc31011bb48 lib/Data/ICal/Entry/Alarm/Display.pm
-SHA1 3003fb0bba35562d27f94498f4487f7ba1810a39 lib/Data/ICal/Entry/Alarm/Email.pm
-SHA1 deba9d6f1f57d9d8910a22297fd9dfe4ef485d37 lib/Data/ICal/Entry/Alarm/Procedure.pm
-SHA1 5faece543b6869f0d12d3180624eac7670994f7b lib/Data/ICal/Entry/Event.pm
-SHA1 b9d7ac15e1c7ef7b1aa8c49f9663e1533ede6b3f lib/Data/ICal/Entry/FreeBusy.pm
-SHA1 8bec9e8cde6196dbad40738c85d55b0ca0171aa2 lib/Data/ICal/Entry/Journal.pm
-SHA1 f8a94d3181e20d6422a1ad0294685852824df982 lib/Data/ICal/Entry/TimeZone.pm
-SHA1 c094381b7739eea4a663acdd4f9af8572a19ad48 lib/Data/ICal/Entry/TimeZone/Daylight.pm
-SHA1 fc807da3b247c7b054e971efe6cd0ffc20c741ca lib/Data/ICal/Entry/TimeZone/Standard.pm
-SHA1 3b6856f5ec5951e0fb3250059aa3f40e75b03427 lib/Data/ICal/Entry/Todo.pm
-SHA1 33bbd7763ed43de307d515ffc8ceec411bfbcfc6 lib/Data/ICal/Property.pm
+SHA1 1c734f8c61191a4202772ccc4356f2fe12353ab5 lib/Data/ICal.pm
+SHA1 79a9c4a645ecfa18da000d0547e3e45d9def0b44 lib/Data/ICal/Entry.pm
+SHA1 f0cc8271b2e60eec93e87bd05dd462943b13f489 lib/Data/ICal/Entry/Alarm/Audio.pm
+SHA1 bff66b1c333f650c9f0547cf22eb37926f47592c lib/Data/ICal/Entry/Alarm/Display.pm
+SHA1 0b7a52987c20ff10eb2d5cd3749b490ccc29b5f8 lib/Data/ICal/Entry/Alarm/Email.pm
+SHA1 2f541e922a7ef4c8c568052384b8d0581f8704cc lib/Data/ICal/Entry/Alarm/Procedure.pm
+SHA1 2f9f1fc543f3790b5658bba21deb22fb50c7151e lib/Data/ICal/Entry/Event.pm
+SHA1 3db110b20d7305b13a88989fb76036bca9558f0b lib/Data/ICal/Entry/FreeBusy.pm
+SHA1 e664c1a273a10b050d45a3a3ef53dd41c33231c6 lib/Data/ICal/Entry/Journal.pm
+SHA1 19e11a8dd9d32eb2d3ba70420ad7ffd641094282 lib/Data/ICal/Entry/TimeZone.pm
+SHA1 46b0edc6769e166efc32caf47c6f63a9b3e5ecd4 lib/Data/ICal/Entry/TimeZone/Daylight.pm
+SHA1 25715bf3c06276c0d846abd43c107c0ef4b39455 lib/Data/ICal/Entry/TimeZone/Standard.pm
+SHA1 1bc5a7853c0c1cc087a2fd49eba3d1339553b931 lib/Data/ICal/Entry/Todo.pm
+SHA1 fff2b51bdec2af95b0a28308fd772c7872dbd10d lib/Data/ICal/Property.pm
 SHA1 371dc48be4670c99ffa5f732e7d7584465e39edc t/00.load.t
-SHA1 6b8f28b38ce0ce159265f288153d94dea7ba97ac t/01.simplegen.t
+SHA1 d2bad4f3a458ac4baeed129ce30a2f0463106eb7 t/01.simplegen.t
 SHA1 0ef26a49106e23a1a99e77f48b18e94a002ca350 t/02.linewrap.t
 SHA1 7aec87bcc3d62d762a2ec4adfaf120016fa1e3e0 t/03.unknown-props.t
 SHA1 1b8e8dde570944000c11b1ac7bdfe44bcdda96ab t/04.mandatory-props.t
@@ -66,7 +66,7 @@ SHA1 0190346d7072d458c8a10a45c19f86db641dcc48 t/pod.t
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.11 (GNU/Linux)
 
-iEYEARECAAYFAkpWpysACgkQMflWJZZAbqDWDwCfSCcYDKqpc1H+VLMbegjq+MeX
-GSQAoLx8LnoVLzzD0rrgwMc8WwlXY95a
-=6yRD
+iEYEARECAAYFAkpWvCsACgkQMflWJZZAbqBZMgCdGBi4KgZn1mC4pZRce/8QIVuk
+gCEAoJNv6NQaMGoW6EZjA2BmHop4+6Pi
+=fcsn
 -----END PGP SIGNATURE-----
diff --git a/lib/Data/ICal.pm b/lib/Data/ICal.pm
index 3067920..6b6b279 100644
--- a/lib/Data/ICal.pm
+++ b/lib/Data/ICal.pm
@@ -7,7 +7,7 @@ use base qw/Data::ICal::Entry/;
 use Class::ReturnValue;
 use Text::vFile::asData;
 
-our $VERSION = '0.15_01';
+our $VERSION = '0.15_02';
 
 use Carp;
 

-----------------------------------------------------------------------



More information about the Bps-public-commit mailing list