Revision history for Perl extension DateTime::Format::Natural.

0.69 Sat Mar 15 13:44:03 CET 2008

 - Validation of arguments is now handled by Params::Validate.

0.68_01 Thu Mar 13 22:13:26 CET 2008

 - Undo for trailing newlines to be printed when initially
   checking the arguments for validity and some invalid ones are
   encountered. Furthermore, add quoting to the error message.

0.68 Sun Feb 17 14:19:07 CET 2008

 - Added 'prefer_future' test-file.

 - Added Test::MockTime to the dependency list in Build.PL.

 - Restructured documentation.

0.67 Fri Feb  8 01:04:38 CET 2008

 - Extended parser to accept a formatted date and time string.
   [suggested by Shawn M. Moore <>]

0.66 Tue Jan 15 12:04:06 CET 2008

 - Merged development version to stable.

0.65_01 Tue Jan  8 14:13:18 CET 2008

 - Convey less filename information for all test-files (removed
   'en' suffixes), because they needlessly clutter the test output.
   Considering that the grammar is pluggable, we could still move language
   specific tests into subdirs, once multiple language grammars should be

0.65 Fri Dec 28 18:49:40 CET 2007

 - Localized $_ while constructing the format separator.
   [rt #31968 - Shawn M. Moore <>]

0.64 Mon Dec 24 16:19:37 CET 2007

 - Improved the options parsing within scripts/dateparse (by
   introducing a subroutine to set default values independently).

0.63 Thu Dec 20 15:50:07 CET 2007

 - Merged development version to stable.

 - Renamed time_zone test-file (added 'en' suffix).

0.62_03 Thu Dec 13 20:53:11 CET 2007

 - Replaced remaining tabs within the entire source with
   regular spaces (4).

0.62_02 Thu Dec 13 12:12:06 CET 2007

 - Localized $1 within the grammar parser (i.e., the method _process())
   before examining whether a regular expression succeeded and if it did,
   check whether it did capture some content and save it on the "regex-stack".

 - Enhanced the diagnostic printed when faulty grammar types are encountered.

 - Changed a type definition from 'SCALAR' to 'REGEXP' within

0.62_01 Tue Dec 11 13:28:31 CET 2007

 - No "functional" changes, merely "cosmetic" ones.

0.62 Mon Dec  3 21:06:05 CET 2007

 - Added support for abbreviated week-/monthnames when 'prefer_future'
   option is enabled. [rt #31254 - Shawn M. Moore <>]

 - Deprecated export of subs within Lang/ to Lang/
   (the ISA relationship is sufficient).

0.61 Sat Nov 24 10:32:31 CET 2007

 - Improved code efficiency a bit & removed some dead code.

0.60 Tue Nov 20 16:59:24 CET 2007

 - Implemented better timezone handling and added according tests.
   [rt #30765 - Shawn M. Moore <>]

0.59 Thu Nov 15 23:54:25 CET 2007

 - Made the 'prefer_future' parameter a bit more context-sensitive
   with regard to incremental of the current year.
   [rt #30763 - Shawn M. Moore <>]

 - Updated the "SEE ALSO" sections within the documentation
   to refer back to the main package.

0.58 Thu Nov  1 19:54:41 CET 2007

 - Deprecated broken 'debug' parameter to parse_datetime*().

 - Fixed some parameters within scripts/dateparse which were
   erroneously declarated.

0.57 Thu Oct 25 21:21:56 CEST 2007

 - Added tests for durations (i.e., the method parse_datetime_duration()).

0.56 Sat Oct 20 20:02:24 CEST 2007

 - Extended grammar to reflect some suggestions.
   [rt #30147 - Jason May <>]

0.55 Wed Oct 17 15:24:25 CEST 2007

 - Changed behavior of the 'prefer_future' option concerning weekdays.
   [rt #29068 - Jesse Vincent <>]

0.54 Fri Oct  5 23:30:28 CEST 2007

 - Added Term::ReadLine support to 'dateparse'.

 - Updated t/* to ensure that all results are being marked successful.

 - Fixed formatted dates, which never succeeded previously.

0.53 Sun Sep 30 13:55:11 CEST 2007

 - Added grammar definitions & according tests for "[day] at [daytime]".

 - Internally documented the grammar layout.

 - Replaced %s with %d for sprintf() format-strings.
   [Jonny Schulz <>]

0.52 Sat Sep 29 17:02:40 CEST 2007

 - Removed all mentions of german language support within the
   documentation and the code.

 - Extended documentation to explain the grammar a bit.

0.51 Thu Sep 27 17:12:49 CEST 2007

 - Removed no longer necessary 'use_ok()' test for the german language
   metadata. [rt #29651 - Andreas J. König <>]

0.50 Thu Sep 27 00:39:08 CEST 2007

 - Major redo of flexible language metadata handling.

0.40 Sun Sep 23 17:34:48 CEST 2007

 - Empty the marked tokens list on each instance of parse_datetime()/

0.39 Sun Sep  9 00:41:30 CEST 2007

 - Improved handling of dates when no format-string was provided
   or was unsuitable. [rt #29227 - Shawn M. Moore <>]

 - Implemented mechanisms to mark tokens when processed and added
   an according getter method for multiple tokens.

0.38_01 Tue Sep  4 18:10:48 CEST 2007

 - Undone use'ing constant with a hashref provided (breaks on
   older versions of Perl [testers #598724 - David Cantrell <>]).

0.38 Wed Aug 29 22:07:00 CEST 2007

 - Redone code formatting.

0.37 Sun Aug 19 11:33:05 CEST 2007

 - Fixed the parsing of unambigious dates such as "next [month]" &
   "last [month]" while the 'prefer_future' option is enabled.

 - Explicitly call methods within the superclass with 'SUPER::'.

 - Documented the 'prefer_future' switch in scripts/dateparse.

0.36 Thu Jun  7 13:42:35 CEST 2007

 - Fixed version numbers which were treated as floating point numbers,
   not as v-string. [rt #27350 - Andres J. König <>]

 - Fixed _set_datetime() which failed whenever a 31st day didn't exist
   in the current month. [rt #27360 - Chia-liang Kao <>]

 - Reversed the order of the day/month/year setter calls within
   parse_datetime(). [mike <>]

 - Added a 'prefer_future' option to turn ambigious weekdays/months
   to their futuristic equivalents - implemented by counting how often
   an unit was being modified by the appropriate setter call within the
   Base class. [Shawn M. Moore <>]

 - Extended the test-suite to include more exhaustive tests and accordingly
   updated the EXAMPLES in the language metadata classes.

 - Introduced the public method trace() which will show which methods were
   called within the Base class and how often certain units were modified
   by according Datetime setter calls.

0.35 Wed May 23 21:00:39 CEST 2007

 - Implemented next [monthname] & last [monthname] parsing and
   added according tests. [Shawn M. Moore <>]

 - Added tests for the constant daytime values.

 - Albeit it's unlikely that someone will ever subclass Lang/,
   a bug in the statement involving bless() within the constructor has
   been fixed (ref($class) 'check' must come first, otherwise subclassing
   is impossible).

 - scripts/dateparse is now being installed.

0.34 Sun May 20 17:09:09 CEST 2007

 - Hopefully fixed "Type of arg 1 to List::MoreUtils::any must be block
   or sub {} (not list)" errors.

 - Added _init_check() which is being called by _init() to validate
   the options passed to the constructor new().

0.33 Sat May 19 03:08:29 CEST 2007

 - Got mostly rid of the "no warnings 'uninitialized'" statements and
   ensured that no undefined values will be encountered by introducing
   an according token accessor which will return either a reference to
   an existing token or to a defined string (in case a token does not
   yield any defined value).

 - Disallowed 'am/pm' for german language metadata since they're
   not known to a native german speaker assuming it is referred
   to the german language itself. [Urs Stotz <]

 - Introduced two methods, success() and error(). Former indicates
   whether the parsing of a date/time string succeeded or not; latter
   provides the error string if former one should fail. Furthermore,
   the entire system is now reliant upon both of them and doesn't
   croak any longer if parsing should fail.

 - Added according getter/setter/unsetter accessors for the internal
   error and failure attributes.

0.32 Thu May 10 23:52:00 CEST 2007

 - Replaced some conditional variables with early return statements.

 - Introcuded Date::Calc's check_date() and check_time() to assure
   for integrity of date/time values submitted to according setter

 - Wrapped check_date() and check_time() in subs which croak upon
   error and supply the type of value and the actual value in the
   message delivered to the caller, otherwise return true.

 - Separated datetime_parse_duration() logic from datetime_parse()
   and added according documentation [Cory Watson <>]

0.31 Sun May  6 02:57:13 CEST 2007

 - Replaced undef on hash elements within Natural/ with delete.

 - Changed 'time_zone' parameter's value in calls to DateTime->now()
   with 'floating' instead of 'local'. This should function as fix
   to failures reported on MSWin & Cygwin platforms according to
   [Dave Rolsky <>].

 - Due to an unlocalized signal warning handler, uninitialized
   warnings in code which either required/use'd DateTime::Format::Natural
   were being supressed. The handler has been commented out (and left in
   for debugging/development purpose) and replaced by an according
   'no warnings' statements in both & Natural/

0.30 Sun Apr 29 02:33:16 CEST 2007

 - Fixed some spurious date results assumptions in t/01-parse_en.t
   and t/02-parse_de.t which were caused by a bug.

 - Extended documentation to include options pertaining to method
   calls within the documentation in listed form.

 - Added functionality to change the default values for specific
   daytimes. Furthermore, according testcases have been added.

0.29 Mon Apr 16 22:00:27 CEST 2007

 - Support for parsing seconds and minutes in ago stanzas
   [Tuomas Jormola <>]

 - Added according testcases to the testsuite for parsing
   seconds and minutes in ago stanzas.

 - Modified scripts/ to return a absolute time
   with precision in seconds.

0.28 Wed Apr 11 01:44:49 CEST 2007

 - Moved timespan separator definition to language metadata
   base classes.

 - scripts/ language chosen always defaulted
   to 'en' irrespective whether another one has been chosen
   or not. Changed it to only fallback to the default language
   ('en') if no other one has been provided.

 - Added t/03-parse_format.t to the testsuite which tests datestrings
   with various differing format strings.
0.27 Tue Apr 10 22:19:15 CEST 2007

 - Mentioning Tatsuhiko Miyagawa as the inspiration source in
   the documentation's Credits section.

 - Implemented a simple timespan calculation, provided the natural
   dates are separated by the literal token 'to' (case-insensitive).
   [Mark Stosberg <>]

0.26 Wed Mar 14 13:15:07 CET 2007

 - The constructor accepts now an optional 'format' parameter specifying
   in which format numeric dates should be parsed (either / or - may be
   used to separate the units). [mike <>]

0.25 Sun Mar 11 23:02:45 CET 2007

 - Separated the logic within parse_datetime() to _process()
   and according internal subroutines.

 - Commented the majority of functions within

 - Introduced List::MoreUtils' any() & none() functions;
   deprecated use of 'no warnings' statement which need
   arose by accessing indexes of @{$self->{tokens}} where
   no members were present.

 - Created TODO file with pending items.

0.24 Wed Jan 17 22:51:51 CET 2007

 - Introduced a warning handler to silence the warnings about
   undefined values when pattern matching, subtracting and
   performing string comparisons in Natural/

 - Merged the "frontend" scripts to a single one taking
   optionally a language argument indicating the country
   code among other arguments.

 - Made 01-parse_en.t's & 02-parse_de.t's code more readable
   by adding some more separating lines.

 - Moved 'our' declarations in & towards the top.

0.23 Tue Jan 16 19:51:50 CET 2007

 - The language metadata classes have an AUTOLOAD handler & __new
   constructor automatically exported to their namespaces. Because
   some local fiddling with AUTOLOAD and dynamic variable lookup is
   done, a bunch of symbolic references are created on-the-fly.

0.22 Tue Jan 16 02:58:15 CET 2007

 - Previously four digits were occasionally interpreted as year
   and as well as time based upon context. Disambiguated usage
   as year (applies to all Lang:: classes) and fixed all test
   cases were bogus return values from parse_datetime() have
   been expected in order to have no tests fail.

 - Bound the temporary disablement of strictness for references
   to a tighter scope (applies to all Lang:: classes).

0.21 Tue Nov 28 09:31:20 CET 2006

 - Corrected the classes names provided to use_ok() in 00-load.t.

0.20 Tue Nov 28 01:44:46 CET 2006

 - Optimised the regular expressions used in the AUTOLOAD routine
   in the language classes.

0.19 Mon Nov 27 20:06:17 CET 2006

 - Added to & an AUTOLOAD handler for each of them.
   The subroutine called prefixed with two underscores will be
   translated to an according variable name without underscores.
   The parameter to the subroutine will function as variable
   lookup key.

0.18 Sun Nov 26 17:35:17 CET 2006

 - Fixed all occurences of the global weekday hash by adding the
   missing key "{data}" to the variable lookup.

0.17 Sun Nov 26 16:50:14 CET 2006

 - Encapsulated the metadata within the language packages in an
   object which class gets subclassed from
   [Tatsuhiko Miyagawa <>]

0.16 Sat Nov 25 18:09:48 CET 2006

 - Added missing '1;' to the documentation of Authoring.pod.

 - Changed strings in Authoring.pod to be italic.

 - The testsuite now contains a german aquivalent of the english
   parsing test.

0.15 Sam Nov 25 16:49:22 CET 2006

 - Added DateTime::Format::Natural::Lang::Authoring documentation.

0.14 Sat Nov 25 14:34:33 CET 2006

 - Corrected broken package definition.

0.13 Sat Nov 25 04:14:54 CET 2006

 - Separated data from logic by keeping all regular expressions in
   separate packages.

 - Language support for german has been included.

0.12 Fri Nov 24 20:36:37 CET 2006

 - Added some basic tests to the testsuite which exercice
   converting natural format strings to an according datetime object.

 - Enhanced the collection of valid strings that are translated.

0.11 Fri Nov 24 02:15:30 CET 2006

 - Refactored the code where duplicated chunks were available.

 - Evaluated whether the current listed expressions pass the parsing.

0.10 Thu Nov 23 01:14:44 CET 2006

 - Substituted additions/subtractions where possible with the
   appropriate DateTime method calls.

 - An Exception is thrown if no valid input has been given.
   [Tatsuhiko Miyagawa <>]

0.09 Sun Nov 19 14:38:24 CET 2006

 - Date strings with slashes are now being split and assigned
   to the appropriate variables.

 - Moved the initialization of object data into a sub.
   Same procedure for the code chunk returning a datetime object.

0.08 Sun Nov 19 12:30:24 CET 2006

 - Code is now object-oriented.

0.07 Sat Oct 28 17:16:53 CEST 2006

 - Replaced all tabs in with regular spaces (4).

0.06 Wed Oct 25 20:24:38 CEST 2006

 - Substituted exporting functions with an object-oriented constructor.
   parse_datetime() is now called as a method.
   [Dave Rolsky <>]

 - parse_datetime() takes either a datestring or an options hash.
   [Dave Rolsky <>]

0.05 Wed Oct 25 11:27:26 CEST 2006

 - Moved from namespace DateTime::Natural::Parse to DateTime::From::Natural::EN
   [Dave Rolsky <>]

 - Renamed natural_parse() to parse_datestring().

0.04 Wed Oct 25 00:17:01 CEST 2006

 - Updated the code to process some "complex" input.

 - Actualized the documentation accordingly.

0.03 Tue Oct 24 01:25:03 CEST 2006

 - Appended the i(ncasesensitive) Modifier to a few regular expressions.

 - Fixed the broken newlines for the example documentation.

0.02 Mon Oct 23 23:22:41 CEST 2006

 - DateTime has been added to the dependencies list.

 - natural_parse() returns a DateTime object [Clayton L. Scott <>]

 - Extended documentation to include some example human readable time strings.

0.01 Sun Oct 22 22:15:54 CEST 2006

 - Initial version.