- Addressed bug #804 by allowing rc.hyphenate to control whether hyphens are
inserted when long lines are broken. This may help prevent xterm from
mis-parsing URLs in task annotations, when wrapped (thanks to Yann Davin).
- Added unit tests.
- Duration were parsed as <int><unit> in A3, whereas <number><unit> is
correct.
- Added Nibbler::str method for internal access.
- Nibbler::save, ::restore now return positions. Useful for extracting
substrings.
- Modified countdown.t to use the (now) correct units for durations.
- When a date attribute is updated, the expression may have evaluated to
a duration, which at this point is simply a number. If it is below a
certain threshold (5y) then it is considered a duration and added to
'now', otherwise it is considered a date.
- Change the was performance measurements are taken. This in preparation
to automated daily perf charts, leading to efforts to speed up certain
operations.
- If a file (pending.data) is open and locked, trying to open it again
caused an error, whereas is now does nothing and reports success.
- Corrected timing info in Command::filter.
- Restored the <name>.<modifier>[:=]<value> syntax that was reduced
to just <name>.<modifier>:<value> to make parsing easier. Now that
A3 is more sophisticated, we can have our sugar back.
- Converted the 'cal' command to TDB2.
- Reinstated command line handling for 'cal' command, but realized there
is a conflict with filters. Filtering disabled for 'cal' until a good
solution is found.
- Converted recur.cpp to use TDB2, which eliminates the file locking
problems that occur when both TDB and TDB2 are in use at the same time.
This will cause other issues until all commands are converted to TDB2.
- Converted CmdCustom to use TDB2, which means that for the first time,
2.0 is now optimizing data load based on filter characteristics. This
means that "task list" and "task next" etc are now *fast*.
- Improved diagnostics for TDB2, for debugging.
- Made locking an integral part of the File object, so that a client
may now call File::lock multiple times with no effect beyond the first
call. This simplifies situations like the 'cal' command that must scan
for recurrence changes, modify tasks, then optionally run a second
report, all without locking issues.
- I had forgotten to remove the unit tests for the ~ inversion modifier.
This feature, though well implemented, is removed because enhancements
to filtering are going to be added to the new expressions. Attribute
modifiers will continue to be supported, but not enhanced beyond 1.9.4
functionality..
- Added logic to detect whether the unit tests were being run with output
attached to a TTY or not, and adjust the expected lines of output
accordingly. The !TTY case is the important one.
- The command line construct "tags.none:" is translated into the expression
"tags = ''", but instead of '=' I had entered '=='. Force of C/C++/Perl
habit.
- Removed two unit tests for data file syntax that is no longer
supported, namely unquoted values.
Supported: status:"pending"
Not supported: status:pending
- TDB2::load_lines was splitting the text on \n, but because the last
line contains \n, there was an additional blank line. This is what
split_minimal is for.
- split_minimal contained a copy/paste bug that added the extra line
if the input was non-trivial, instead of if the remainder was non-
trivial.
- Fixed incorrect unit test accordingly.
- When parsing duration literals, look-ahead now prevents an ordinal
such as '31st' (August 31st) from being interpreted as two tokens
'31s' (duration) and 't' (word). This is the same fix that was
applied to A3::is_number. I'll be there are more that I missed.
- Quoting problem. To prevent the shell from stripping quotes, the
command line must include \" ... \", but in a Perl string, that
needs to be \\" ... \\". Silly mistake.
- Annotation timestamps are now incremented until unique. This prevents
rapid, successive annotations colliding. The kind that occur during
unit tests and when using UI wrapper programs.
- Removed 'sleep' commands in unit tests that were added to circumvent
this. This speeds up the test suite somewhat.
- When HAVE_SRANDOM is undefined in 1.9.4, the timeval struct can be omitted
causing a compile error. Patch received, but not applied to 2.0.0 branch
because that code has been rewritten already (thanks to Paolo Almeida).
- Task is no longer a map of string to Att. Att is itself a name/
value pair, so the name was redundant. Task is now a map of string
to string. This brings the obsoletion of Att much closer.
- Implemented the import command, which only suports JSON. It is
the basis for all other import formats, which will be implemented
as external scripts.