r1186 - in packages: . libdate-simple-perl
libdate-simple-perl/branches libdate-simple-perl/branches/upstream
libdate-simple-perl/branches/upstream/current
libdate-simple-perl/branches/upstream/current/lib
libdate-simple-perl/branches/upstream/current/lib/Date
libdate-simple-perl/branches/upstream/current/lib/Date/Simple
libdate-simple-perl/branches/upstream/current/t
Edward Betts
edward at costa.debian.org
Sun Jul 17 08:08:46 UTC 2005
Author: edward
Date: 2005-06-20 15:13:19 +0000 (Mon, 20 Jun 2005)
New Revision: 1186
Added:
packages/libdate-simple-perl/
packages/libdate-simple-perl/branches/
packages/libdate-simple-perl/branches/upstream/
packages/libdate-simple-perl/branches/upstream/current/
packages/libdate-simple-perl/branches/upstream/current/COPYING
packages/libdate-simple-perl/branches/upstream/current/ChangeLog
packages/libdate-simple-perl/branches/upstream/current/MANIFEST
packages/libdate-simple-perl/branches/upstream/current/MANIFEST.SKIP
packages/libdate-simple-perl/branches/upstream/current/META.yml
packages/libdate-simple-perl/branches/upstream/current/Makefile.PL
packages/libdate-simple-perl/branches/upstream/current/README
packages/libdate-simple-perl/branches/upstream/current/Simple.xs
packages/libdate-simple-perl/branches/upstream/current/lib/
packages/libdate-simple-perl/branches/upstream/current/lib/Date/
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple.pm
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/D8.pm
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/Fmt.pm
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/ISO.pm
packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/NoXS.pm
packages/libdate-simple-perl/branches/upstream/current/t/
packages/libdate-simple-perl/branches/upstream/current/t/date.t
packages/libdate-simple-perl/tags/
Log:
[svn-inject] Installing original source of libdate-simple-perl
Added: packages/libdate-simple-perl/branches/upstream/current/COPYING
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/COPYING 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/COPYING 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Property changes on: packages/libdate-simple-perl/branches/upstream/current/COPYING
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/ChangeLog
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/ChangeLog 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/ChangeLog 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,85 @@
+2004-12-18 Yves Orton <demerphq at hotmail.com>
+
+ * YO -- Version number kick to 3.02, doc fix. Patch merge.
+
+2004-11-27 John Tobey <jtobey at john-edwin-tobey.org>
+
+ * Simple.xs (is_leap_year): Fixed math for dates before
+ 1900-03-01. Thanks to Anil Natha for finding the bug.
+
+ * t/date.t: Added day_of_week tests.
+
+
+2004-04-02 Yves Orton <demerphq at hotmail.com>
+
+ * lib/Date/Simple.pm ($VERSION): Version 3.
+ Added formatting support and as_iso() XS method.
+ Switched to using Test::More instead of Test.
+ Prereqs expanded to include Test::More and Scalar::Util
+ Both are standard distro in later perls.
+
+ * Makefile.pl: Dont mess with filenames xs is true.
+
+2002-12-06 John Tobey <jtobey at john-edwin-tobey.org>
+
+ * lib/Date/Simple.pm ($VERSION): Version 2.04.
+
+ * lib/Date/Simple.pm (use overload): Overload more operators: ==
+ != eq ne
+ (_inval): Stylistic changes.
+ (_new): New sub, built from the old 'new'. Accept YYYYMMDD
+ strings without hyphens. Return undef rather than dying on
+ unrecognized format. ('new' still dies for compatibility.)
+ (date): Use '_new'. Avoid use of 'eval' and $@.
+ (new): Use '_new'.
+ (pod): Update docs.
+
+ * lib/Date/Simple/NoXS.pm (_eq): New sub.
+ (_ne): New sub.
+
+ * Simple.xs (is_object): New function.
+ (new_for_cmp): New function.
+ (_add): Use is_object().
+ (_subtract): Use is_object().
+ (_compare): Use is_object() and new_for_cmp().
+ (_eq): New sub.
+ (_ne): New sub.
+
+ * t/date.t: Test new equality operators.
+
+ * README: Regenerated from lib/Date/Simple.pm.
+
+2002-03-11 John Tobey <jtobey at john-edwin-tobey.org>
+
+ * lib/Date/Simple.pm ($VERSION): Version 2.03.
+
+ * t/date.t: Remove a locale dependency. Thanks to ASSAD Arnaud
+ for the fix.
+
+2001-10-02 John Tobey <jtobey at john-edwin-tobey.org>
+
+ * lib/Date/Simple.pm ($VERSION): Version 2.02.
+
+ * Simple.xs (days_in_month): avoid crash due to reversed args.
+
+2001-08-27 John Tobey <jtobey at john-edwin-tobey.org>
+
+ * lib/Date/Simple.pm: Version 2.01.
+
+ * t/date.t: Test today() fix.
+
+ * lib/Date/Simple.pm (today): Replace use of deleted function.
+
+ * Version 2.00.
+
+ * Added functional interface (date, d8, ymd).
+
+ * Load POSIX module only when needed.
+
+ * Crunch numbers in C if compiler found. (Install with 'perl
+ Makefile.PL noxs' to select the pure Perl implementation.)
+
+ * Can calculate the day of the week.
+
+ * Reduced dependence on time_t, most functions work for dates up
+ to 9999.
Property changes on: packages/libdate-simple-perl/branches/upstream/current/ChangeLog
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/MANIFEST 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/MANIFEST 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,14 @@
+MANIFEST
+MANIFEST.SKIP
+Makefile.PL
+t/date.t
+lib/Date/Simple.pm
+lib/Date/Simple/Fmt.pm
+lib/Date/Simple/ISO.pm
+lib/Date/Simple/D8.pm
+lib/Date/Simple/NoXS.pm
+README
+COPYING
+Simple.xs
+ChangeLog
+META.yml Module meta-data (added by MakeMaker)
Property changes on: packages/libdate-simple-perl/branches/upstream/current/MANIFEST
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/MANIFEST.SKIP
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/MANIFEST.SKIP 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/MANIFEST.SKIP 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1 @@
+\bCVS\b
Property changes on: packages/libdate-simple-perl/branches/upstream/current/MANIFEST.SKIP
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/META.yml 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/META.yml 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,12 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: Date-Simple
+version: 3.02
+version_from: lib/Date/Simple.pm
+installdirs: site
+requires:
+ Scalar::Util:
+ Test::More:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
Property changes on: packages/libdate-simple-perl/branches/upstream/current/META.yml
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/Makefile.PL 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/Makefile.PL 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,44 @@
+use ExtUtils::MakeMaker;
+
+$xs = 1;
+ at noxs = ();
+if (@ARGV && $ARGV[0] eq 'noxs') {
+ shift (@ARGV);
+ print "Disabling XS code.\n";
+ # Attempt to disable the C code in three ways, since MakeMaker
+ # documentation is unclear. Set 'XS' to an empty hash. Set 'C'
+ # to an empty array. As a last resort, strip Simple.* from
+ # the constants section.
+ # XXX Maybe it would be more robust to simply delete or disguise
+ # Simple.xs. But normally packages don't modify their own files.
+ $xs = 0;
+ @noxs = ('XS' => {}, 'C' => []);
+}
+else {
+ print "Enabling XS code.\n";
+ print "If you get errors, run `make distclean'\n";
+ print "and try again using `perl Makefile.PL noxs'.\n";
+}
+
+WriteMakefile(
+ 'NAME' => 'Date::Simple',
+ 'VERSION_FROM' => 'lib/Date/Simple.pm',
+ 'PREREQ_PM' => {
+ 'Test::More' => undef,
+ 'Scalar::Util' => undef,
+ },
+ @noxs,
+);
+
+package MY;
+
+sub constants {
+ my ($self) = @_;
+ my $ret = $self->SUPER::constants;
+ unless ($::xs) {
+ $ret =~ s/Simple.(pm|pod)/SimpleFoo.$1/g;
+ $ret =~ s/Simple\.\S+//gs;
+ $ret =~ s/SimpleFoo/Simple/g;
+ }
+ return $ret;
+}
Property changes on: packages/libdate-simple-perl/branches/upstream/current/Makefile.PL
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/README
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/README 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/README 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,278 @@
+NAME
+ Date::Simple - a simple date object
+
+SYNOPSIS
+ use Date::Simple ('date', 'today');
+
+ # Difference in days between two dates:
+ $diff = date('2001-08-27') - date('1977-10-05');
+
+ # Offset $n days from now:
+ $date = today() + $n;
+ print "$date\n"; # uses ISO 8601 format (YYYY-MM-DD)
+
+ use Date::Simple ();
+ my $date = Date::Simple->new('1972-01-17');
+ my $year = $date->year;
+ my $month = $date->month;
+ my $day = $date->day;
+
+ use Date::Simple (':all');
+ my $date2 = ymd($year, $month, $day);
+ my $date3 = d8('19871218');
+ my $today = today();
+ my $tomorrow = $today + 1;
+ if ($tomorrow->year != $today->year) {
+ print "Today is New Year's Eve!\n";
+ }
+
+ if ($today > $tomorrow) {
+ die "warp in space-time continuum";
+ }
+
+ print "Today is ";
+ print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur')
+ [$today->day_of_week]);
+ print "day.\n";
+
+ # you can also do this:
+ ($date cmp "2001-07-01")
+ # and this
+ ($date <=> [2001, 7, 1])
+
+INSTALLATION
+
+ If your system has the "make" program or a clone:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+ If you lack "make", copy the "lib/Date" directory to your module
+ directory (run "perl -V:sitelib" to find it).
+
+ If "make test" fails, perhaps it means your system can't compile C
+ code. Try:
+
+ make distclean
+ perl Makefile.PL noxs
+ make
+ make test
+ make install
+
+ This will use the pure-Perl implementation.
+
+DESCRIPTION
+ Dates are complex enough without times and timezones. This module may be
+ used to create simple date objects. It handles:
+
+ Validation.
+ Reject 1999-02-29 but accept 2000-02-29.
+
+ Interval arithmetic.
+ How many days were between two given dates? What date comes N days
+ after today?
+
+ Day-of-week calculation.
+ What day of the week is a given date?
+
+ It does not deal with hours, minutes, seconds, and time zones.
+
+ A date is uniquely identified by year, month, and day integers within
+ valid ranges. This module will not allow the creation of objects for
+ invalid dates. Attempting to create an invalid date will return undef.
+ Month numbering starts at 1 for January, unlike in C and Java. Years are
+ 4-digit.
+
+ Gregorian dates up to year 9999 are handled correctly, but we rely on
+ Perl's builtin "localtime" function when the current date is requested.
+ On some platforms, "localtime" may be vulnerable to rollovers such as
+ the Unix "time_t" wraparound of 18 January 2038.
+
+ Overloading is used so you can compare or subtract two dates using
+ standard numeric operators such as "==", and the sum of a date object
+ and an integer is another date object.
+
+ Date::Simple objects are immutable. After assigning "$date1" to
+ "$date2", no change to "$date1" can affect "$date2". This means, for
+ example, that there is nothing like a "set_year" operation, and
+ "$date++" assigns a new object to "$date".
+
+ This module contains various undocumented functions. They may not be
+ available on all platforms and are likely to change or disappear in
+ future releases. Please let the author know if you think any of them
+ should be public.
+
+CONSTRUCTORS
+ Several functions take a string or numeric representation and generate a
+ corresponding date object. The most general is "new", whose argument
+ list may be empty (returning the current date), a string in format
+ YYYY-MM-DD or YYYYMMDD, a list or arrayref of year, month, and day
+ number, or an existing date object.
+
+ Date::Simple->new ([ARG, ...])
+ date ([ARG, ...])
+ my $date = Date::Simple->new('1972-01-17');
+
+ The "new" method will return a date object if the values passed in
+ specify a valid date. (See above.) If an invalid date is passed, the
+ method returns undef. If the argument is invalid in form as opposed
+ to numeric range, "new" dies.
+
+ The "date" function provides the same functionality but must be
+ imported or qualified as "Date::Simple::date". (To import all public
+ functions, do "use Date::Simple (':all');".) This function returns
+ undef on all invalid input, rather than dying in some cases like
+ "new".
+
+ today()
+ Returns the current date according to "localtime".
+
+ Caution: To get tomorrow's date (or any fixed offset from today), do
+ not use "today + 1". Perl parses this as "today(+1)". You need to
+ put empty parentheses after the function: "today() + 1".
+
+ ymd (YEAR, MONTH, DAY)
+ Returns a date object with the given year, month, and day numbers.
+ If the arguments do not specify a valid date, undef is returned.
+
+ Example:
+
+ use Date::Simple ('ymd');
+ $pbd = ymd(1987, 12, 18);
+
+ d8 (STRING)
+ Parses STRING as "YYYYMMDD" and returns the corresponding date
+ object, or undef if STRING has the wrong format or specifies an
+ invalid date.
+
+ Example:
+
+ use Date::Simple ('d8');
+ $doi = d8('17760704');
+
+ Mnemonic: The string matches "/\d{8}/". Also, "d8" spells "date", if
+ 8 is expanded phonetically.
+
+INSTANCE METHODS
+ DATE->next
+ my $tomorrow = $today->next;
+
+ Returns an object representing tomorrow.
+
+ DATE->prev
+ my $yesterday = $today->prev;
+
+ Returns an object representing yesterday.
+
+ DATE->year
+ my $year = $date->year;
+
+ Return the year of DATE as an integer.
+
+ DATE->month
+ my $month = $date->month;
+
+ Return the month of DATE as an integer from 1 to 12.
+
+ DATE->day
+ my $day = $date->day;
+
+ Return the DATE's day of the month as an integer from 1 to 31.
+
+ DATE->day_of_week
+ Return a number representing DATE's day of the week from 0 to 6,
+ where 0 means Sunday.
+
+ DATE->as_ymd
+ my ($year, $month, $day) = $date->as_ymd;
+
+ Returns a list of three numbers: year, month, and day.
+
+ DATE->as_d8
+ Returns the "d8" representation (see "d8"), like
+ "$date->format("%Y%m%d")".
+
+ DATE->format (STRING)
+ DATE->strftime (STRING)
+ These functions are equivalent. Return a string representing the
+ date, in the format specified. If you don't pass a parameter, an ISO
+ 8601 formatted date is returned.
+
+ my $change_date = $date->format("%d %b %y");
+ my $iso_date1 = $date->format("%Y-%m-%d");
+ my $iso_date2 = $date->format;
+
+ The formatting parameter is similar to one you would pass to
+ strftime(3). This is because we actually do pass it to strftime to
+ format the date. This may result in differing behavior across
+ platforms and locales and may not even work everywhere.
+
+OPERATORS
+ Some operators can be used with Date::Simple instances. If one side of
+ an expression is a date object, and the operator expects two date
+ objects, the other side is interpreted as "date(ARG)", so an array
+ reference or ISO 8601 string will work.
+
+ DATE + NUMBER
+ DATE - NUMBER
+ You can construct a new date offset by a number of days using the
+ "+" and "-" operators.
+
+ DATE1 - DATE2
+ You can subtract two dates to find the number of days between them.
+
+ DATE1 == DATE2
+ DATE1 < DATE2
+ DATE1 <=> DATE2
+ DATE1 cmp DATE2
+ etc.
+ You can compare two dates using the arithmetic or string comparison
+ operators. Equality tests ("==" and "eq") return false when one of
+ the expressions can not be converted to a date. Other comparison
+ tests die in such cases. This is intentional, because in a sense,
+ all non-dates are not "equal" to all dates, but in no sense are they
+ "greater" or "less" than dates.
+
+ DATE += NUMBER
+ DATE -= NUMBER
+ You can increment or decrement a date by a number of days using the
+ += and -= operators. This actually generates a new date object and
+ is equivalent to "$date = $date + $number".
+
+ "$date"
+ You can interpolate a date instance directly into a string, in the
+ format specified by ISO 8601 (eg: 2000-01-17).
+
+UTILITIES
+ leap_year (YEAR)
+ Returns true if YEAR is a leap year.
+
+ days_in_month (YEAR, MONTH)
+ Returns the number of days in MONTH, YEAR.
+
+AUTHOR
+ Marty Pauley <marty at kasei.com>
+ John Tobey <jtobey at john-edwin-tobey.org>
+
+COPYRIGHT
+ Copyright (C) 2001 Kasei
+ Copyright (C) 2001,2002 John Tobey.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of either:
+
+ a) the GNU General Public License;
+ either version 2 of the License, or (at your option) any later
+ version. You should have received a copy of the GNU General
+ Public License along with this program; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ b) the Perl Artistic License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
Property changes on: packages/libdate-simple-perl/branches/upstream/current/README
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/Simple.xs
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/Simple.xs 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/Simple.xs 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,555 @@
+#define PERL_POLLUTE
+
+#include <EXTERN.h>
+#include <perl.h>
+#include <XSUB.h>
+
+
+static UV dim[14]
+ = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28 };
+static IV tweak[12]
+ = { 1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 16 };
+static IV cum_days[12]
+ = { -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333 };
+
+static bool
+is_leap_year (IV y)
+{
+ return (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0));
+}
+
+static IV
+days_in_month (IV month, IV year)
+{
+ IV ret = dim [ month - 1 ];
+ if (ret == 0)
+ ret = is_leap_year (year) ? 29 : 28;
+ return ret;
+}
+
+/* Compute the number of days since 1970. */
+static bool
+ymd_to_days (IV y, IV m, IV d, IV* days)
+{
+ IV x;
+ IV nonleap_days;
+ IV leap_days_4;
+ IV leap_holes_100;
+ IV leap_days_400;
+
+ if (m < 1 || m > 12 || d < 1 || (d > 28 && d > days_in_month (m, y)))
+ return FALSE;
+
+ x = (m <= 2 ? y - 1 : y);
+ nonleap_days = d + cum_days [m - 1] + 365 * (y - 1970);
+
+ leap_days_4 = (x - 1968) >> 2;
+ if (x >= 1900)
+ leap_holes_100 = (x - 1900) / 100;
+ else
+ leap_holes_100 = - (1999 - x) / 100;
+ if (x >= 1600)
+ leap_days_400 = (x - 1600) / 400;
+ else
+ leap_days_400 = - (1999 - x) / 400;
+
+ *days = nonleap_days + leap_days_4 - leap_holes_100 + leap_days_400;
+ return TRUE;
+}
+
+/* Compute year, month, and day given days_since_1970. */
+static void
+days_to_ymd (IV days, IV ymd[3])
+{
+ IV year;
+ IV month, day, quot;
+
+ /* Shift frame of reference from 1 Jan 1970 to (the imaginary)
+ 1 Mar 0AD. */
+ days += 719468;
+
+ /* Do the math. */
+
+ quot = days / 146097;
+ days -= 146097 * quot;
+ year = 400 * quot;
+
+ if (days == 146096)
+ {
+ /* Handle 29 Feb 2000, 2400, ... */
+ year += 400;
+ month = 2;
+ day = 29;
+ }
+ else
+ {
+ quot = days / 36524;
+ days -= 36524 * quot;
+ year += 100 * quot;
+
+ quot = days / 1461;
+ days -= 1461 * quot;
+ year += 4 * quot;
+
+ if (days == 1460)
+ {
+ year += 4;
+ month = 2;
+ day = 29;
+ }
+ else
+ {
+ quot = days / 365;
+ days -= 365 * quot;
+ year += quot;
+
+ quot = days / 32;
+ days -= 32 * quot;
+ month = quot;
+
+ day = days + tweak [month];
+ days = dim [month + 2];
+
+ if (day > days)
+ {
+ day -= days;
+ month += 1;
+ }
+ if (month > 9)
+ {
+ month -= 9;
+ year += 1;
+ }
+ else
+ month += 3;
+ }
+ }
+ ymd[0] = year;
+ ymd[1] = month;
+ ymd[2] = day;
+}
+
+static bool
+d8_to_days (SV* d8, IV* days)
+{
+ char buf[5];
+ STRLEN len;
+ char* p;
+
+ p = SvPV(d8, len);
+ if (len == 8)
+ {
+ while (len > 0)
+ {
+ if (!isDIGIT(p[len - 1]))
+ break;
+ len--;
+ }
+ if (len != 0)
+ return FALSE;
+ }
+ else
+ return FALSE;
+
+ return ymd_to_days(10*(10*(10*(p[0]-'0')+p[1]-'0')+p[2]-'0')+p[3]-'0',
+ 10*(p[4]-'0')+p[5]-'0', 10*(p[6]-'0')+p[7]-'0',
+ days);
+}
+
+static SV*
+days_to_date (IV days, SV* pkg)
+{
+ char* pack=0;
+ if (SvROK (pkg)) {
+ HV* stash;
+ stash=SvSTASH(SvRV(pkg));
+ return sv_bless( newRV_noinc (newSViv (days)), stash );
+ } else if (SvTRUE(pkg)) {
+ pack=SvPV_nolen(pkg);
+ }
+ return sv_bless( newRV_noinc (newSViv (days)),
+ gv_stashpv (pack == 0 ? "Date::Simple" : pack, 1));
+}
+
+static int
+is_object (SV* sv)
+{
+ return (SvROK (sv) && SvTYPE (SvRV (sv)) == SVt_PVMG);
+}
+
+static SV*
+new_for_cmp (SV* left, SV* right, int croak_on_fail)
+{
+ dSP;
+ SV* ret;
+
+ /* Comparing date with non-date.
+ Try to convert the right side to a date. */
+ EXTEND (sp, 2);
+ PUSHMARK(sp);
+ PUSHs (left);
+ PUSHs (right);
+ PUTBACK;
+ perl_call_method (croak_on_fail ? "new" : "_new", G_SCALAR);
+ SPAGAIN;
+ ret = POPs;
+ if (croak_on_fail && ! is_object (ret))
+ {
+ PUSHMARK(sp);
+ PUSHs (left);
+ PUSHs (right);
+ PUTBACK;
+ perl_call_pv ("Date::Simple::_inval", G_VOID);
+ SPAGAIN;
+ }
+ return ret;
+}
+
+MODULE = Date::Simple PACKAGE = Date::Simple
+
+SV*
+_ymd(obj_or_class, y, m, d)
+ SV* obj_or_class
+ IV y
+ IV m
+ IV d
+ CODE:
+ {
+ IV days;
+ if (ymd_to_days (y, m, d, &days))
+ RETVAL = days_to_date (days, obj_or_class);
+ else
+ XSRETURN_UNDEF;
+ }
+ OUTPUT:
+ RETVAL
+
+SV*
+_d8(obj_or_class, d8)
+ SV* obj_or_class
+ SV* d8
+ CODE:
+ {
+ IV days;
+ if (d8_to_days (d8, &days))
+ RETVAL = days_to_date (days, obj_or_class);
+ else
+ XSRETURN_UNDEF;
+ }
+ OUTPUT:
+ RETVAL
+
+bool
+leap_year(y)
+ IV y
+ CODE:
+ {
+ RETVAL = is_leap_year (y);
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+days_in_month(y, m)
+ IV y
+ IV m
+ CODE:
+ {
+ if (m < 1 || m > 12)
+ croak ("days_in_month: month out of range (%d)",
+ (int) m);
+ RETVAL = days_in_month (m, y);
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+validate(ysv, m, d)
+ SV* ysv
+ IV m
+ IV d
+ CODE:
+ {
+ IV y;
+ y = SvIV (ysv);
+ if ((IV) SvNV (ysv) != y)
+ RETVAL = 0;
+ else if (m < 1 || m > 12)
+ RETVAL = 0;
+ else if (d < 1 || d > days_in_month (m, y))
+ RETVAL = 0;
+ else
+ RETVAL = 1;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+ymd_to_days(y, m, d)
+ IV y
+ IV m
+ IV d
+ CODE:
+ {
+ IV days;
+ if (! ymd_to_days (y, m, d, &days))
+ XSRETURN_UNDEF;
+ else
+ XSRETURN_IV (days);
+ }
+
+SV*
+days_since_1970(date)
+ SV* date
+ CODE:
+ {
+ if (SvROK(date))
+ RETVAL = SvREFCNT_inc (SvRV(date));
+ else
+ XSRETURN_UNDEF;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+days_to_ymd(days)
+ IV days
+ PPCODE:
+ {
+ IV ymd[3];
+ days_to_ymd (days, ymd);
+ EXTEND (sp, 3);
+ PUSHs (sv_2mortal (newSViv (ymd[0])));
+ PUSHs (sv_2mortal (newSViv (ymd[1])));
+ PUSHs (sv_2mortal (newSViv (ymd[2])));
+ }
+
+IV
+year(date)
+ SV* date
+ CODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ RETVAL = ymd[0];
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+month(date)
+ SV* date
+ CODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ RETVAL = ymd[1];
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+day(date)
+ SV* date
+ CODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ RETVAL = ymd[2];
+ }
+ OUTPUT:
+ RETVAL
+
+
+
+SV*
+as_iso(date, ...)
+ SV* date
+ CODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ RETVAL = newSVpvf ("%04d-%02d-%02d", ymd[0] % 10000,
+ ymd[1], ymd[2]);
+ }
+ OUTPUT:
+ RETVAL
+
+
+SV*
+as_d8(date, ...)
+ SV* date
+ CODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ RETVAL = newSVpvf ("%04d%02d%02d", ymd[0] % 10000,
+ ymd[1], ymd[2]);
+ }
+ OUTPUT:
+ RETVAL
+
+void
+as_ymd(date)
+ SV* date
+ PPCODE:
+ {
+ IV ymd[3];
+ if (! SvROK (date))
+ XSRETURN_EMPTY;
+
+ days_to_ymd (SvIV (SvRV (date)), ymd);
+ EXTEND (sp, 3);
+ PUSHs (sv_2mortal (newSViv (ymd[0])));
+ PUSHs (sv_2mortal (newSViv (ymd[1])));
+ PUSHs (sv_2mortal (newSViv (ymd[2])));
+ }
+
+SV*
+_add(date, diff, ...)
+ SV* date
+ IV diff
+ CODE:
+ {
+ IV days;
+
+ if (! is_object (date))
+ XSRETURN_UNDEF;
+
+ days = SvIV (SvRV (date)) + diff;
+ RETVAL = sv_bless (newRV_noinc (newSViv (days)),
+ SvSTASH (SvRV (date)));
+ }
+ OUTPUT:
+ RETVAL
+
+SV*
+_subtract(left, right, reverse)
+ SV* left
+ SV* right
+ SV* reverse
+ CODE:
+ {
+ if (! is_object (left))
+ XSRETURN_UNDEF;
+
+ if (SvTRUE (reverse))
+ croak ("Can't subtract a date from a non-date");
+
+ if (SvROK (right))
+ {
+ IV diff = SvIV (SvRV (left)) - SvIV (SvRV (right));
+ RETVAL = newSViv (diff);
+ }
+ else
+ {
+ IV days = SvIV (SvRV (left)) - SvIV (right);
+ RETVAL = sv_bless (newRV_noinc (newSViv (days)),
+ SvSTASH (SvRV (left)));
+ }
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+_compare(left, right, reverse)
+ SV* left
+ SV* right
+ bool reverse
+ CODE:
+ {
+ IV diff;
+
+ if (! is_object (left))
+ XSRETURN_UNDEF;
+
+ if (! is_object (right))
+ right = new_for_cmp (left, right, 1);
+
+ diff = SvIV (SvRV (left)) - SvIV (SvRV (right));
+ RETVAL = diff > 0 ? 1 : (diff < 0 ? -1 : 0);
+
+ if (reverse)
+ RETVAL = -RETVAL;
+ }
+ OUTPUT:
+ RETVAL
+
+SV*
+_eq(left, right, reverse)
+ SV* left
+ SV* right
+ bool reverse
+ CODE:
+ {
+ if (! is_object (left))
+ XSRETURN_UNDEF;
+
+ if (! is_object (right))
+ right = new_for_cmp (left, right, 0);
+
+ if (! is_object (right))
+ XSRETURN_NO;
+
+ if (SvIV (SvRV (left)) == SvIV (SvRV (right)))
+ XSRETURN_YES;
+ else
+ XSRETURN_NO;
+ }
+ OUTPUT:
+ RETVAL
+
+SV*
+_ne(left, right, reverse)
+ SV* left
+ SV* right
+ bool reverse
+ CODE:
+ {
+ if (! is_object (left))
+ XSRETURN_UNDEF;
+
+ if (! is_object (right))
+ right = new_for_cmp (left, right, 0);
+
+ if (! is_object (right))
+ XSRETURN_YES;
+
+ if (SvIV (SvRV (left)) == SvIV (SvRV (right)))
+ XSRETURN_NO;
+ else
+ XSRETURN_YES;
+ }
+ OUTPUT:
+ RETVAL
+
+IV
+day_of_week(date)
+ SV* date
+ CODE:
+ {
+ IV days;
+ if (! SvROK (date))
+ XSRETURN_UNDEF;
+
+ RETVAL = (SvIV (SvRV (date)) + 4) % 7;
+ if (RETVAL < 0)
+ RETVAL += 7;
+ }
+ OUTPUT:
+ RETVAL
Property changes on: packages/libdate-simple-perl/branches/upstream/current/Simple.xs
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/D8.pm
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/D8.pm 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/D8.pm 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,42 @@
+package Date::Simple::D8;
+use Date::Simple 3;
+use base qw/Date::Simple/;
+use overload '""' => 'as_d8'; #sub { $_[0]-> };
+
+*EXPORT = *Date::Simple::EXPORT;
+*EXPORT_OK = *Date::Simple::EXPORT_OK;
+*EXPORT_TAGS = *Date::Simple::EXPORT_TAGS;
+
+sub d8 { __PACKAGE__->_d8(@_) }
+sub today { __PACKAGE__->_today(@_) }
+sub ymd { __PACKAGE__->_ymd(@_) }
+1;
+
+=head1 NAME
+
+Date::Simple::D8 - Sub class of Date::Simple with eight digit date style formatting
+as default.
+
+=head1 SYNOPSIS
+
+ use Date::Simple::D8;
+
+=head1 DESCRIPTION
+
+This module changes the default stringification behaviour of Date::Simple objects to
+use the as_d8() method instead.
+
+=item Date::Simple::D8->new ([ARG, ...])
+
+=item date_d8 ([ARG, ...])
+
+Identical to Date::Simple except that uses the D8 style formatting ('%Y%m%d') for
+overloaded stringification or when not providing a format argument to the format()
+method.
+
+=head1 SEE ALSO
+
+L<Date::Simple> for full documentation.
+
+=cut
+
Property changes on: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/D8.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/Fmt.pm
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/Fmt.pm 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/Fmt.pm 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,52 @@
+package Date::Simple::Fmt;
+use Date::Simple 3;
+use base qw/Date::Simple/;
+use overload '""' => '_format' ;
+
+*EXPORT = *Date::Simple::EXPORT;
+*EXPORT_OK = *Date::Simple::EXPORT_OK;
+*EXPORT_TAGS = *Date::Simple::EXPORT_TAGS;
+
+sub d8 { __PACKAGE__->_d8(@_) }
+sub today { __PACKAGE__->_today(@_) }
+sub ymd { __PACKAGE__->_ymd(@_) }
+
+sub new {
+ my ($class,$fmt, at args)=@_;
+ my $self=$class->SUPER::new(@args);
+ $self->default_format($fmt);
+ $self
+}
+
+sub _format { shift->format() }
+
+1;
+
+=head1 NAME
+
+Date::Simple::Fmt - Sub class of Date::Simple with per object level formatting for
+overloaded stringification.
+
+=head1 SYNOPSIS
+
+ use Date::Simple::Fmt;
+
+=head1 DESCRIPTION
+
+This module changes the default stringification behaviour of Date::Simple objects to
+use the format() method instead. It also changes the behaviour of the constructor.
+
+=item Date::Simple::Fmt->new (FMT, [ARG, ...])
+
+=item date_fmt (FMT, [ARG, ...])
+
+Follows the same rules as for the equivelent method (new) and subroutine (date) in
+Date::Simple except that the first argument is expected to be the default format for
+the newly created object. It is this format that will be used when using overloaded
+stringification or when not providing a format argument to the format() method.
+
+=head1 SEE ALSO
+
+L<Date::Simple> for full documentation.
+
+=cut
Property changes on: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/Fmt.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/ISO.pm
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/ISO.pm 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/ISO.pm 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,37 @@
+package Date::Simple::ISO;
+use Date::Simple 3;
+use base qw/Date::Simple/;
+use overload '""' => 'as_iso'; #sub { $_[0]->as_iso };
+
+*EXPORT = *Date::Simple::EXPORT;
+*EXPORT_OK = *Date::Simple::EXPORT_OK;
+*EXPORT_TAGS = *Date::Simple::EXPORT_TAGS;
+
+sub d8 { __PACKAGE__->_d8(@_) }
+sub today { __PACKAGE__->_today(@_) }
+sub ymd { __PACKAGE__->_ymd(@_) }
+
+1;
+
+=head1 NAME
+
+Date::Simple::ISO - Sub class of Date::Simple
+
+=head1 SYNOPSIS
+
+ use Date::Simple::ISO;
+
+=head1 DESCRIPTION
+
+This module is entirely identical to Date::Simple. It is included for completness
+and self documenting sake. IMO it is preferable to say
+
+ my $obj=Date::Simple::ISO->new(...);
+
+As this makes the implicit formatting of the object clear.
+
+=head1 SEE ALSO
+
+L<Date::Simple> for full documentation.
+
+=cut
Property changes on: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/ISO.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/NoXS.pm
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/NoXS.pm 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/NoXS.pm 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,206 @@
+# Date::Simple::NoXS - used internally by Date::Simple.
+
+use strict;
+
+package Date::Simple;
+
+sub _ymd {
+ my ($o, at args)=@_;
+ my $c=ref($o)||$o;
+ my $days = ymd_to_days(@args);
+ return undef unless defined ($days);
+ return (bless (\$days, $c));
+}
+
+sub _d8 {
+ my ($o,$d8) = @_;
+ my @ymd = $d8 =~ m/^(\d{4})(\d\d)(\d\d)$/ or return undef;
+ return $o->_ymd(@ymd);
+}
+
+# Precise integer arithmetic functions unfortunately missing from
+# Perl's core:
+
+sub _divmod {
+ my ($quot, $int);
+
+ $quot = $_[0] / $_[1];
+ $int = int($quot);
+ $int -= 1 if $int > $quot;
+ $_[0] %= $_[1];
+ return $int;
+};
+
+sub _div {
+ my ($quot, $int);
+
+ $quot = $_[0] / $_[1];
+ $int = int($quot);
+ return $int - 1 if $int > $quot;
+ return $int;
+};
+
+sub leap_year {
+ my $y = shift;
+ return (($y%4==0) and ($y%400==0 or $y%100!=0)) || 0;
+}
+
+my @days_in_month = (
+ [0,31,28,31,30,31,30,31,31,30,31,30,31],
+ [0,31,29,31,30,31,30,31,31,30,31,30,31],
+);
+
+sub days_in_month ($$) {
+ my ($y,$m) = @_;
+ return $days_in_month[leap_year($y)][$m];
+}
+
+sub validate ($$$) {
+ my ($y, $m, $d)= @_;
+ # any +ve integral year is valid
+ return 0 if $y != abs int $y;
+ return 0 unless 1 <= $m and $m <= 12;
+ return 0 unless 1 <= $d and $d <= $days_in_month[leap_year($y)][$m];
+ return 1;
+}
+
+# Given a year, month, and day, return the canonical day number.
+# That is the number of days since 1 January 1970, negative if earlier.
+sub ymd_to_days {
+ my ($Y, $M, $D) = @_;
+ my ($days, $x);
+
+ if ($M < 1 || $M > 12 || $D < 1 ||
+ ($D > 28 && $D > days_in_month($Y, $M)))
+ {
+ return undef;
+ }
+
+ $days = $D +
+ (undef, -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333)[$M];
+ $days += 365 * ($Y - 1970);
+ $x = ($M <= 2 ? $Y-1 : $Y);
+ $days += _div (($x - 1968), 4);
+ $days -= _div (($x - 1900), 100);
+ $days += _div (($x - 1600), 400);
+ return $days;
+}
+
+sub days_since_1970 { ${$_[0]} }
+
+# Given a canonical day number (days since 1 Jan 1970), return the
+# year, month, and day.
+sub days_to_ymd {
+ my ($days) = @_;
+ my ($year, $mnum, $mday, $tmp);
+
+ # Shift frame of reference from 1 Jan 1970 to (the imaginary) 1 Mar 0AD.
+ $tmp = $days + 719468;
+
+ # Do the math.
+ $year = 400 * _divmod ($tmp, 146097);
+ if ($tmp == 146096) {
+ # Handle 29 Feb 2000, 2400, ...
+ $year += 400;
+ $mnum = 2;
+ $mday = 29;
+ } else {
+ $year += 100 * _divmod ($tmp, 36524);
+ $year += 4 * _divmod ($tmp, 1461);
+ if ($tmp == 1460) {
+ $year += 4;
+ $mnum = 2;
+ $mday = 29;
+ } else {
+ $year += _divmod ($tmp, 365);
+ $mnum = _divmod ($tmp, 31);
+ $mday = $tmp + (1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5)[$mnum];
+ $tmp = (31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28)[$mnum];
+ if ($mday > $tmp) {
+ $mday -= $tmp;
+ $mnum += 1;
+ }
+ if ($mnum > 9) {
+ $mnum -= 9;
+ $year += 1;
+ } else {
+ $mnum += 3;
+ }
+ }
+ }
+ return ($year, $mnum, $mday);
+}
+
+sub as_ymd { return days_to_ymd (${$_[0]}); }
+sub as_d8 { return sprintf ("%04d%02d%02d", &as_ymd); }
+sub as_iso { return sprintf ("%04d-%02d-%02d", &as_ymd); }
+
+sub year { return (&as_ymd) [0]; }
+sub month { return (&as_ymd) [1]; }
+sub day { return (&as_ymd) [2]; }
+
+sub day_of_week {
+ return ((${$_[0]} + 4) % 7);
+}
+
+#------------------------------------------------------------------------------
+# the following methods are called by the overloaded operators, so they should
+# not normally be called directly.
+#------------------------------------------------------------------------------
+
+sub _add {
+ my ($date, $diff) = @_;
+
+ if ($diff !~ /^-?\d+$/) {
+ Carp::croak ("Date interval must be an integer");
+ }
+ return (bless (\ ($$date + $diff), ref($date)));
+}
+
+sub _subtract {
+ my ($left, $right, $reverse) = @_;
+
+ if ($reverse) {
+ Carp::croak ("Can't subtract a date from a non-date");
+ }
+ if (ref($right) eq '' && $right =~ /^-?\d+$/) {
+ return (bless (\ ($$left - $right), ref($left)));
+ }
+ return ($$left - $$right);
+}
+
+sub _compare {
+ my ($left, $right, $reverse) = @_;
+
+ $right = $left->new($right) || _inval ($left, $right);
+ return ($reverse ? $$right <=> $$left : $$left <=> $$right);
+}
+
+sub _eq {
+ my ($left, $right) = @_;
+ return (($right = $left->_new($right)) && $$right == $$left);
+}
+
+sub _ne {
+ return (!&_eq);
+}
+
+1;
+
+=head1 NAME
+
+Date::Simple::NoXS - Pure Perl support for Date::Simple.
+
+=head1 SYNOPSIS
+
+ use Date::Simple;
+
+=head1 DESCRIPTION
+
+Used internally by Date::Simple.
+
+=head1 SEE ALSO
+
+L<Date::Simple>.
+
+=cut
Property changes on: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple/NoXS.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple.pm
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple.pm 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple.pm 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,632 @@
+# Date::Simple - a simple date object
+
+package Date::Simple;
+BEGIN {
+ $VERSION = '3.02';
+}
+use Exporter ();
+ at ISA = ('Exporter');
+ at EXPORT_OK = qw(
+ today ymd d8 leap_year days_in_month
+ date date_fmt date_d8 date_iso
+ );
+%EXPORT_TAGS = ('all' => \@EXPORT_OK);
+
+# Try to load the C code. If that fails, fall back to Date::Simple::NoXS.
+if (! defined (&_add)) {
+ my $err=$Date::Simple::NoXS;
+ unless ($err) {
+ # Use DynaLoader instead of XSLoader for pre-5.005.
+ local ($@);
+ local @ISA = ('DynaLoader');
+ require DynaLoader;
+ eval { __PACKAGE__->bootstrap ($VERSION); };
+ $err = $@;
+ }
+ if ($err) {
+ $Date::Simple::NoXs=1;
+ require Date::Simple::NoXS;
+ }
+}
+
+use strict;
+use Carp ();
+use overload
+ '+' => '_add',
+ '-' => '_subtract',
+ '==' => '_eq',
+ '!=' => '_ne',
+ '<=>' => '_compare',
+ 'eq' => '_eq',
+ 'ne' => '_ne',
+ 'cmp' => '_compare',
+ 'bool' => sub { 1 },
+ '""' => 'as_iso';
+
+use Scalar::Util qw(refaddr reftype);
+use warnings::register;
+require Date::Simple::Fmt;
+require Date::Simple::ISO;
+require Date::Simple::D8;
+
+sub d8 { __PACKAGE__->_d8(@_) }
+sub today { __PACKAGE__->_today(@_) }
+sub ymd { __PACKAGE__->_ymd(@_) }
+
+sub _today {
+ my ($y, $m, $d) = (localtime) [5, 4, 3];
+ $y += 1900;
+ $m += 1;
+ return $_[0]->_ymd ($y, $m, $d);
+}
+
+sub _inval {
+ my ($first);
+ $first = shift;
+ Carp::croak ("Invalid ".(ref($first)||$first)." constructor args: ('"
+ .join("', '", @_)."')");
+}
+
+sub _new {
+ my ($that, @ymd) = @_;
+
+ my $class = ref ($that) || $that;
+
+ if ( @ymd == 1 ) {
+ my $x = $ymd[0];
+ if (ref $x and reftype($x) eq 'ARRAY') {
+ @ymd = @$x;
+ }
+ elsif (UNIVERSAL::isa ($x, __PACKAGE__)) {
+ return ($x);
+ }
+ elsif ($x =~ /^(\d\d\d\d)-(\d\d)-(\d\d)$/
+ || $x =~ /^(\d\d\d\d)(\d\d)(\d\d)$/)
+ {
+ @ymd = ($1, $2, $3);
+ }
+ else {
+ return (undef);
+ }
+ } # we fall through here...
+
+ # note we can end up here is they pass in [] as the date
+ return $class->_today() unless @ymd;
+
+ # to get here, we had one arg which was split,
+ # or 3 in the first place
+ if ( @ymd == 3 ) {
+ my $days = ymd_to_days (@ymd);
+ return undef if ! defined ($days);
+ return (bless (\$days, $class));
+ }
+
+ $class->_inval(@ymd);
+}
+
+sub date { scalar __PACKAGE__->_new( @_ ) }
+
+sub date_fmt {
+ my $format=shift;
+ my $obj=Date::Simple::Fmt->_new(@_);
+ $obj->default_format($format)
+ if $obj;
+ $obj;
+}
+
+sub date_d8 { scalar Date::Simple::D8->_new(@_) }
+sub date_iso { scalar Date::Simple::ISO->_new(@_) }
+
+# Same as date() but it's a method and croaks on error if called with
+# one arg.
+sub new {
+ my ($class,$date);
+
+ $date = &_new;
+ if (! $date && scalar (@_) == 1) {
+ Carp::croak ("'" . shift() . "' is not a valid ISO formated date");
+ }
+ return ($date);
+}
+
+sub next { return ($_[0] + 1); }
+sub prev { return ($_[0] - 1); }
+
+sub _gmtime {
+ my ($y, $m, $d) = days_to_ymd (${$_[0]});
+ $y -= 1900;
+ $m -= 1;
+ return (0, 0, 0, $d, $m, $y);
+}
+
+
+BEGIN {
+ our $Standard_Format="%Y-%m-%d";
+ my %fmts=( # Inside out parameter
+ 'Date::Simple' => $Standard_Format,
+ 'Date::Simple::ISO' => $Standard_Format,
+ 'Date::Simple::D8' => "%Y%m%d",
+ 'Date::Simple::Fmt' => $Standard_Format,
+ );
+
+ sub format {
+ my ($self,$format)=@_;
+
+ $format= $fmts{refaddr($self)||''} || $fmts{ref($self)} || $Standard_Format
+ if @_==1;
+
+ return "$self" unless defined ($format);
+ require POSIX;
+ local $ENV{TZ} = 'UTC+0';
+ return POSIX::strftime ($format, _gmtime ($self));
+ }
+
+ sub strftime { &format }
+ sub as_str { &format }
+
+
+ sub default_format {
+ my ($self,$val)=@_;
+
+ my $o=refaddr($self) || $self;
+
+ if (@_>1) {
+ $fmts{$o}=$val;
+ warnings::warnif "Setting class specific date format '$o' to".
+ "'" .(defined $val ? $val : 'undef')."'"
+ unless ref $self;
+ }
+
+ return $fmts{$o}||$Standard_Format;
+ }
+
+ sub DESTROY {
+ delete $fmts{refaddr $_[0]};
+ }
+}
+
+1;
+
+
+
+=head1 NAME
+
+Date::Simple - a simple date object
+
+=head1 SYNOPSIS
+
+ use Date::Simple ('date', 'today');
+
+ # Difference in days between two dates:
+ $diff = date('2001-08-27') - date('1977-10-05');
+
+ # Offset $n days from now:
+ $date = today() + $n;
+ print "$date\n"; # uses ISO 8601 format (YYYY-MM-DD)
+
+ use Date::Simple ();
+ my $date = Date::Simple->new('1972-01-17');
+ my $year = $date->year;
+ my $month = $date->month;
+ my $day = $date->day;
+
+ use Date::Simple (':all');
+ my $date2 = ymd($year, $month, $day);
+ my $date3 = d8('19871218');
+ my $today = today();
+ my $tomorrow = $today + 1;
+ if ($tomorrow->year != $today->year) {
+ print "Today is New Year's Eve!\n";
+ }
+
+ if ($today > $tomorrow) {
+ die "warp in space-time continuum";
+ }
+
+ print "Today is ";
+ print(('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur')
+ [$today->day_of_week]);
+ print "day.\n";
+
+ # you can also do this:
+ ($date cmp "2001-07-01")
+ # and this
+ ($date <=> [2001, 7, 1])
+
+=begin text
+
+INSTALLATION
+
+ If your system has the "make" program or a clone:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+ If you lack "make", copy the "lib/Date" directory to your module
+ directory (run "perl -V:sitelib" to find it).
+
+ If "make test" fails, perhaps it means your system can't compile C
+ code. Try:
+
+ make distclean
+ perl Makefile.PL noxs
+ make
+ make test
+ make install
+
+ This will use the pure-Perl implementation.
+
+=end text
+
+=head1 DESCRIPTION
+
+Dates are complex enough without times and timezones. This module may
+be used to create simple date objects. It handles:
+
+=over 4
+
+=item Validation.
+
+Reject 1999-02-29 but accept 2000-02-29.
+
+=item Interval arithmetic.
+
+How many days were between two given dates? What date comes N days
+after today?
+
+=item Day-of-week calculation.
+
+What day of the week is a given date?
+
+=item Transparent date formatting.
+
+How should a date object be formatted.
+
+=back
+
+It does B<not> deal with hours, minutes, seconds, and time zones.
+
+A date is uniquely identified by year, month, and day integers within
+valid ranges. This module will not allow the creation of objects for
+invalid dates. Attempting to create an invalid date will return
+undef. Month numbering starts at 1 for January, unlike in C and Java.
+Years are 4-digit.
+
+Gregorian dates up to year 9999 are handled correctly, but we rely on
+Perl's builtin C<localtime> function when the current date is
+requested. On some platforms, C<localtime> may be vulnerable to
+rollovers such as the Unix C<time_t> wraparound of 18 January 2038.
+
+Overloading is used so you can compare or subtract two dates using
+standard numeric operators such as C<==>, and the sum of a date object
+and an integer is another date object.
+
+Date::Simple objects are immutable. After assigning C<$date1> to
+C<$date2>, no change to C<$date1> can affect C<$date2>. This means,
+for example, that there is nothing like a C<set_year> operation, and
+C<$date++> assigns a new object to C<$date>.
+
+This module contains various undocumented functions. They may not be
+available on all platforms and are likely to change or disappear in
+future releases. Please let the author know if you think any of them
+should be public.
+
+=head2 Controlling output format.
+
+As of version 3.0 new ways of controlling the output formats of Date::Simple
+objects has been provided. However Date::Simple has traditionally provided
+few ways of stringification, a primary one via the format() method and another
+primary one via direct stringification. However the later is currently
+implemented as an XS routine and the former is implemented through a perl routine.
+This means that using format() is more expensive than stringification and
+that the stringification format is class specific.
+
+In order to alleviate some of these problems a new mechanism has been introduced
+to Date::Simple that allows for a per object level format default. In addition
+a set of utility classes that have different stringification overloads provided.
+These classes are simple subclasses of Date::Simple and beside the default format()
+and the overloaded stringification behaviour are identical to Date::Simple. In fact
+one is totally identical to Date::Simple and is provided mostly for completeness.
+
+The classes included are:
+
+=over 4
+
+=item Date::Simple::ISO
+
+Identical to Date::Simple in every respect but name.
+
+=item Date::Simple::D8
+
+Uses the D8 format (%Y%m%d) as the default format for printing. Uses XS for the
+overloaded stringification.
+
+=item Date::Simple::Fmt
+
+Uses the perl implemented format() as the default stringification mechanism. The first
+argument to the constructor is expected to be the format to use for the object.
+
+=back
+
+B<NOTE> its important to remember that the primary difference between the behaviour
+of objects of the different classes is how they are stringified when quoted, and what
+date format is used by default when the format() method is called. Nothing else differs.
+
+=head1 CONSTRUCTORS
+
+Several functions take a string or numeric representation and generate
+a corresponding date object. The most general is C<new>, whose
+argument list may be empty (returning the current date), a string in
+format YYYY-MM-DD or YYYYMMDD, a list or arrayref of year, month, and
+day number, or an existing date object.
+
+=over 4
+
+=item Date::Simple->new ([ARG, ...])
+
+=item date ([ARG, ...])
+
+ my $date = Date::Simple->new('1972-01-17');
+
+The C<new> method will return a date object if the values passed in
+specify a valid date. (See above.) If an invalid date is passed, the
+method returns undef. If the argument is invalid in form as opposed
+to numeric range, C<new> dies.
+
+The C<date> function provides the same functionality but must be
+imported or qualified as C<Date::Simple::date>. (To import all public
+functions, do C<use Date::Simple (':all');>.) This function returns
+undef on all invalid input, rather than dying in some cases like
+C<new>.
+
+=item date_fmt (FMT,[ARG, ...])
+
+Equivelent to C<date> but creates a Date::Simple::Fmt object instead. The
+format is expected to be a valid POSIX::strftime format string.
+
+=item date_iso ([ARG, ...])
+
+Identical to C<date> but creates a Date::Simple::ISO object instead.
+
+=item date_d8 ([ARG, ...])
+
+Equivelent to C<date> but creates a Date::Simple::D8 object instead.
+
+=item today()
+
+Returns the current date according to C<localtime>.
+
+B<Caution:> To get tomorrow's date (or any fixed offset from today),
+do not use C<today + 1>. Perl parses this as C<today(+1)>. You need
+to put empty parentheses after the function: C<today() + 1>.
+
+=item ymd (YEAR, MONTH, DAY)
+
+Returns a date object with the given year, month, and day numbers. If
+the arguments do not specify a valid date, undef is returned.
+
+Example:
+
+ use Date::Simple ('ymd');
+ $pbd = ymd(1987, 12, 18);
+
+=item d8 (STRING)
+
+Parses STRING as "YYYYMMDD" and returns the corresponding date object,
+or undef if STRING has the wrong format or specifies an invalid date.
+
+Example:
+
+ use Date::Simple ('d8');
+ $doi = d8('17760704');
+
+Mnemonic: The string matches C</\d{8}/>. Also, "d8" spells "date", if
+8 is expanded phonetically.
+
+=back
+
+=head1 INSTANCE METHODS
+
+=over 4
+
+=item DATE->next
+
+ my $tomorrow = $today->next;
+
+Returns an object representing tomorrow.
+
+=item DATE->prev
+
+ my $yesterday = $today->prev;
+
+Returns an object representing yesterday.
+
+=item DATE->year
+
+ my $year = $date->year;
+
+Return the year of DATE as an integer.
+
+=item DATE->month
+
+ my $month = $date->month;
+
+Return the month of DATE as an integer from 1 to 12.
+
+=item DATE->day
+
+ my $day = $date->day;
+
+Return the DATE's day of the month as an integer from 1 to 31.
+
+=item DATE->day_of_week
+
+Return a number representing DATE's day of the week from 0 to 6, where
+0 means Sunday.
+
+=item DATE->as_ymd
+
+ my ($year, $month, $day) = $date->as_ymd;
+
+Returns a list of three numbers: year, month, and day.
+
+=item DATE->as_d8
+
+Returns the "d8" representation (see C<d8>), like
+C<$date-E<gt>format("%Y%m%d")>.
+
+=item DATE->as_iso
+
+Returns the ISO 8601 representation of the date (eg '2004-01-01'),
+like C<$date-E<gt>format("%Y-%m-%d")>. This is in fact the default
+overloaded stringification mechanism and is provided mostly so
+other subclasses with different overloading can still do fast
+ISO style date output.
+
+=item DATE->as_str ([STRING])
+
+=item DATE->format ([STRING])
+
+=item DATE->strftime ([STRING])
+
+These functions are equivalent. Return a string representing the
+date, in the format specified. If you don't pass a parameter, the default
+date format for the object is used if one has been specified, otherwise
+uses the default date format for the class the object is a member of, or as
+a last fallback uses the $Date::Simple::Standard_Format which is changeable,
+but probably shouldn't be modified. See C<default_format> for details.
+
+ my $change_date = $date->format("%d %b %y");
+ my $iso_date1 = $date->format("%Y-%m-%d");
+ my $iso_date2 = $date->format;
+
+The formatting parameter is similar to one you would pass to
+strftime(3). This is because we actually do pass it to strftime to
+format the date. This may result in differing behavior across
+platforms and locales and may not even work everywhere.
+
+=item DATE->default_format ([FORMAT])
+
+This method sets or gets the default_format for the DATE object or class
+that it is called on.
+
+=back
+
+=head1 OPERATORS
+
+Some operators can be used with Date::Simple instances. If one side
+of an expression is a date object, and the operator expects two date
+objects, the other side is interpreted as C<date(ARG)>, so an array
+reference or ISO 8601 string will work.
+
+=over 4
+
+=item DATE + NUMBER
+
+=item DATE - NUMBER
+
+You can construct a new date offset by a number of days using the C<+>
+and C<-> operators.
+
+=item DATE1 - DATE2
+
+You can subtract two dates to find the number of days between them.
+
+=item DATE1 == DATE2
+
+=item DATE1 < DATE2
+
+=item DATE1 <=> DATE2
+
+=item DATE1 cmp DATE2
+
+=item etc.
+
+You can compare two dates using the arithmetic or string comparison
+operators. Equality tests (C<==> and C<eq>) return false when one of
+the expressions can not be converted to a date. Other comparison
+tests die in such cases. This is intentional, because in a sense, all
+non-dates are not "equal" to all dates, but in no sense are they
+"greater" or "less" than dates.
+
+=item DATE += NUMBER
+
+=item DATE -= NUMBER
+
+You can increment or decrement a date by a number of days using the +=
+and -= operators. This actually generates a new date object and is
+equivalent to C<$date = $date + $number>.
+
+=item "$date"
+
+You can interpolate a date instance directly into a string, in the
+format specified by ISO 8601 (eg: 2000-01-17) for Date::Simple and
+Date::Simple::ISO, for Date::Simple::D8 this is the same as calling
+as_d8() on the object, and for Date::Simple::Fmt this is the same as
+calling format() on the object.
+
+=back
+
+=head1 UTILITIES
+
+=over 4
+
+=item leap_year (YEAR)
+
+Returns true if YEAR is a leap year.
+
+=item days_in_month (YEAR, MONTH)
+
+Returns the number of days in MONTH, YEAR.
+
+=back
+
+=over 4
+
+=item leap_year (YEAR)
+
+Returns true if YEAR is a leap year.
+
+=item days_in_month (YEAR, MONTH)
+
+Returns the number of days in MONTH, YEAR.
+
+=back
+
+
+=head1 AUTHOR
+
+ Marty Pauley <marty at kasei.com>
+ John Tobey <jtobey at john-edwin-tobey.org>
+ Yves Orton <demerphq at hotmail.com>
+
+=head1 COPYRIGHT
+
+ Copyright (C) 2001 Kasei.
+ Copyright (C) 2001,2002 John Tobey.
+ Copyright (C) 2004 Yves Orton.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of either:
+
+ a) the GNU General Public License;
+ either version 2 of the License, or (at your option) any later
+ version. You should have received a copy of the GNU General
+ Public License along with this program; see the file COPYING.
+ If not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ b) the Perl Artistic License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+=head1 SEE ALSO
+
+L<Date::Simple::Fmt> L<Date::Simple::ISO> L<Date::Simple::D8>
+and of course L<perl>
+
+=cut
Property changes on: packages/libdate-simple-perl/branches/upstream/current/lib/Date/Simple.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libdate-simple-perl/branches/upstream/current/t/date.t
===================================================================
--- packages/libdate-simple-perl/branches/upstream/current/t/date.t 2005-06-18 02:26:11 UTC (rev 1185)
+++ packages/libdate-simple-perl/branches/upstream/current/t/date.t 2005-06-20 15:13:19 UTC (rev 1186)
@@ -0,0 +1,258 @@
+#!/usr/bin/perl -w
+use strict;
+use Test::More tests=>227;
+
+use Date::Simple;
+
+#------------------------------------------------------------------------------
+# Check validate method
+#------------------------------------------------------------------------------
+use strict;
+use warnings;
+
+my $d;
+
+#1
+ok($d=Date::Simple->new(2000, 12, 25));
+ok(not Date::Simple->new(2000, 13, 25));
+ok(not Date::Simple->new(2000, 0, 25));
+ok(not Date::Simple->new(2000, 12, 32));
+ok(not Date::Simple->new(2000, 12, 0));
+ok($d=Date::Simple->new(1996, 02, 29));
+ok(not Date::Simple->new(1900, 02, 29));
+
+#8
+ok($d=Date::Simple->new('2000-12-25'));
+ok(not Date::Simple->new('2000-13-25'));
+ok(not Date::Simple->new('2000-00-25'));
+ok(not Date::Simple->new('2000-12-32'));
+ok(not Date::Simple->new('2000-12-00'));
+ok($d=Date::Simple->new('1996-02-29'));
+ok(not Date::Simple->new('1900-02-29'));
+
+#------------------------------------------------------------------------------
+# Check new method with parameters
+#------------------------------------------------------------------------------
+
+#15
+ok(not Date::Simple->new(2000, 2, 30));
+ok($d = Date::Simple->new(2000, 2, 28));
+ok(my $d2 = Date::Simple->new('2000-02-28'));
+
+#18
+is($d, $d2);
+is(2000, $d->year);
+is(2, $d->month);
+is(28, $d->day);
+
+ok("$d" eq "2000-02-28");
+
+#------------------------------------------------------------------------------
+# Date arithmetic
+#------------------------------------------------------------------------------
+#23
+ok($d += 7);
+is("$d", "2000-03-06");
+
+ok($d -= 14);
+is("$d", "2000-02-21");
+
+is($d cmp "2001-07-01", -1,'cmp check');
+is($d <=> [2001, 7, 1], -1,'<=> check');
+
+ok($d2 = $d + 7);
+is("$d2", "2000-02-28");
+
+#31
+is($d2->prev, "2000-02-27");
+is($d2->next, "2000-02-29");
+
+is($d2-$d, 7);
+
+is( ($d + 0), $d);
+is( ($d + -3), ($d - 3));
+is( ($d - -3), ($d + 3));
+
+#------------------------------------------------------------------------------
+# try again with another date
+#------------------------------------------------------------------------------
+
+ok($d = Date::Simple->new('1998-02-28'));
+
+ok(1998 == $d->year);
+ok(2 == $d->month);
+ok(28 == $d->day);
+
+ok($d += 7);
+is("$d", "1998-03-07");
+
+ok($d -= 14);
+is("$d", "1998-02-21");
+
+ok($d2 = $d + 7);
+is("$d2", "1998-02-28");
+
+is($d2->prev, "1998-02-27");
+is($d2->next, "1998-03-01");
+
+ok($d = Date::Simple->new('1972-01-17'));
+is($d->year, 1972);
+is($d->month, 1);
+is($d->day, 17);
+
+is($d->format, '1972-01-17');
+# Don't assume much about how this locale spells 'Jan'.
+ok($d->format('%d %b %Y') =~ m/17 \D+ 1972/);
+is($d->format('Foo'), 'Foo');
+
+use Date::Simple ('date', 'd8');
+
+$d = Date::Simple->new(1996, 10, 13);
+ok ($d == Date::Simple->new ([1996, 10, 13]));
+ok ($d > date(1996, 10, 12));
+ok (date('1996-10-12') <= $d);
+is (Date::Simple->new(2000, 3, 12) - d8(19690219), 11344);
+
+ok ($d = Date::Simple->new (2000, 2, 12));
+ok ($d = $d + 17);
+is ($d->strftime("%Y %m %d"), "2000 02 29");
+$d += 1;
+is ($d->as_d8, "20000301");
+is ($d - Date::Simple::ymd (2000, 2, 12), 18);
+is (($d - 18)->format("%Y %m %d"), "2000 02 12");
+
+is (Date::Simple::ymd(1966,10,15)->day_of_week, 6);
+is (Date::Simple::ymd(2401,3,1)->day_of_week, 4);
+is (Date::Simple::ymd(2401,2,28)->day_of_week, 3);
+is (Date::Simple::ymd(2400,3,1)->day_of_week, 3);
+is (Date::Simple::ymd(2400,2,29)->day_of_week, 2);
+is (Date::Simple::ymd(2400,2,28)->day_of_week, 1);
+is (Date::Simple::ymd(2101,3,1)->day_of_week, 2);
+is (Date::Simple::ymd(2101,2,28)->day_of_week, 1);
+is (Date::Simple::ymd(2100,3,1)->day_of_week, 1);
+is (Date::Simple::ymd(2100,2,28)->day_of_week, 0);
+is (Date::Simple::ymd(2001,3,1)->day_of_week, 4);
+is (Date::Simple::ymd(2001,2,28)->day_of_week, 3);
+is (Date::Simple::ymd(2000,3,1)->day_of_week, 3);
+is (Date::Simple::ymd(2000,2,29)->day_of_week, 2);
+is (Date::Simple::ymd(2000,2,28)->day_of_week, 1);
+is (Date::Simple::ymd(1901,3,1)->day_of_week, 5);
+is (Date::Simple::ymd(1901,2,28)->day_of_week, 4);
+is (Date::Simple::ymd(1900,3,1)->day_of_week, 4);
+is (Date::Simple::ymd(1900,2,28)->day_of_week, 3);
+is (Date::Simple::ymd(1801,3,1)->day_of_week, 0);
+is (Date::Simple::ymd(1801,2,28)->day_of_week, 6);
+is (Date::Simple::ymd(1800,3,1)->day_of_week, 6);
+is (Date::Simple::ymd(1800,2,28)->day_of_week, 5);
+is (Date::Simple::ymd(1701,3,1)->day_of_week, 2);
+is (Date::Simple::ymd(1701,2,28)->day_of_week, 1);
+is (Date::Simple::ymd(1700,3,1)->day_of_week, 1);
+is (Date::Simple::ymd(1700,2,28)->day_of_week, 0);
+is (Date::Simple::ymd(1601,3,1)->day_of_week, 4);
+is (Date::Simple::ymd(1601,2,28)->day_of_week, 3);
+is (Date::Simple::ymd(1600,3,1)->day_of_week, 3);
+is (Date::Simple::ymd(1600,2,29)->day_of_week, 2);
+is (Date::Simple::ymd(1600,2,28)->day_of_week, 1);
+
+foreach (
+ [1969, 2,19, 1],
+ [1975, 6,14, 1],
+ [1999, 0, 1, 0],
+ [1999, 1, 1, 1],
+ [1999, 2,28, 1],
+ [1999, 2,29, 0],
+ [1999, 4,31, 0],
+ [1999, 4,30, 1],
+ [1999, 8, 1, 1],
+ [1999, 8,31, 1], # produced '1999 09 00' due to buggy POSIX.xs
+ # in perl 5.005_63 and 5.5.560.
+ [1999, 8,32, 0],
+ [1999,12,31, 1],
+ [1999,13, 1, 0],
+ [2000, 1, 1, 1],
+ [2000, 2,12, 1],
+ [2000, 2,28, 1],
+ [2000, 2,29, 1],
+ [2000, 3, 1, 1],
+ [2001, 2,29, 0],
+ [2004, 2,29, 1],
+ [2100, 2,29, 0],
+ )
+{
+ $d = Date::Simple->new(@$_[0,1,2]);
+ is (($d ? 1 : 0), $$_[3]);
+ if ($$_[3]) {
+ is ($d->year, $$_[0]);
+ is ($d->month, $$_[1]);
+ is ($d->day, $$_[2]);
+ is ($d->strftime("%Y %m %d"), sprintf("%04d %02d %02d", @$_[0,1,2]));
+ is (join (' ', $d->as_ymd),
+ join (' ', Date::Simple::days_to_ymd (Date::Simple::ymd_to_days
+ (@$_[0,1,2]))));
+ }
+}
+
+ok (Date::Simple::today());
+is (Date::Simple::days_in_month(2001,10), 31);
+
+ok (d8 ('20021206') == 20021206);
+ok (d8 ('20021206') eq '20021206');
+ok (d8 ('20021206') eq '2002-12-06');
+ok (d8 ('20021206') ne 'bla');
+ok (d8 ('20021206') != 123);
+
+ $d = Date::Simple->new ('1972-04-28');
+my $d8 = Date::Simple::D8->new ('1972-04-28');
+my $iso = Date::Simple::ISO->new ('1972-04-28');
+my $fmt = Date::Simple::Fmt->new ('%d-%m-%Y','1972-04-28');
+
+isa_ok($d,'Date::Simple');
+isa_ok($d8,'Date::Simple::D8');
+isa_ok($iso,'Date::Simple::ISO');
+isa_ok($fmt,'Date::Simple::Fmt');
+
+is ("$d", '1972-04-28','Normal overloaded stringify');
+is ("$d8", '19720428' ,'D8 overloaded stringify');
+is ("$iso", '1972-04-28','ISO overloaded stringify');
+is ("$fmt", '28-04-1972','Fmt overloaded stringify');
+
+is ($d->as_str, '1972-04-28','Normal as_str');
+is ($d8->as_str, '19720428' ,'D8 as_str');
+is ($iso->as_str, '1972-04-28','ISO as_str');
+is ($fmt->as_str, '28-04-1972','Fmt as_str');
+
+is ($d->as_d8, '19720428','Normal as_d8');
+is ($d8->as_d8, '19720428','D8 as_d8');
+is ($iso->as_d8, '19720428','ISO as_d8');
+is ($fmt->as_d8, '19720428','Fmt as_d8');
+
+is ($d->as_iso, '1972-04-28','Normal as_iso');
+is ($d8->as_iso, '1972-04-28','D8 as_iso');
+is ($iso->as_iso, '1972-04-28','ISO as_iso');
+is ($fmt->as_iso, '1972-04-28','Fmt as_iso');
+
+is ($d->as_str('<%Y><%m><%d>'), '<1972><04><28>','Normal as_str(FMT)');
+is ($d8->as_str('<%Y><%m><%d>'), '<1972><04><28>','D8 as_str(FMT)');
+is ($iso->as_str('<%Y><%m><%d>'), '<1972><04><28>','ISO as_str(FMT)');
+is ($fmt->as_str('<%Y><%m><%d>'), '<1972><04><28>','Fmt as_str(FMT)');
+
+$d = Date::Simple->new();
+$d8 = Date::Simple::D8->new();
+$iso = Date::Simple::ISO->new();
+$fmt = Date::Simple::Fmt->new('%d-%m-%Y');
+
+isa_ok($d,'Date::Simple');
+isa_ok($d8,'Date::Simple::D8');
+isa_ok($fmt,'Date::Simple::Fmt');
+isa_ok($iso,'Date::Simple::ISO');
+
+my ($Y, $M, $D) = (localtime) [5, 4, 3];
+$Y += 1900;
+$M += 1;
+$_=sprintf "%02d",$_ for $M,$D;
+
+is ("$d", "$Y-$M-$D",'Normal overloaded stringify');
+is ("$d8", "$Y$M$D" ,'D8 overloaded stringify');
+is ("$iso", "$Y-$M-$D",'ISO overloaded stringify');
+is ("$fmt", "$D-$M-$Y",'Fmt overloaded stringify');
+
Property changes on: packages/libdate-simple-perl/branches/upstream/current/t/date.t
___________________________________________________________________
Name: svn:executable
+
More information about the Pkg-perl-cvs-commits
mailing list