- Added regex support to substirutions.
- Fixed bug that prevented 1.9.4 from shipping with regexes. If the
description is "aXXaaXXa", and the substitution is /XX/.../ then the
first substitutions changes the length of the string to "a...aaXXa"
and therefore invalidates the index for the second match, and makes
this change: "a...a...Xa". The fix is to keep a running 'skew' count
of the difference in 'from' and 'to' length, to adjust the match
indexes.
- Moved the helper deltaSubstitutions function into the Task object,
which makes more sense.
- Cleaned up output composition for CmdAdd.
- Eliminated #ifdef FEATURE_REGEX. They are here to stay.
- Implemented add and log commands using new infrastructure.
- Relaxed restriction about creating completed tasks with no dependencies.
- Localized CmdAdd.cpp CmdLog.cpp.
- Implemented Command::modify_task to apply command line arguments to a
specified task.
- Implemented Command::apply_defaults to apply various initial values to
a specified task, such as entry date.
- Refactored column objects to contain a ::validate method, for the
validation of incoming data.
- Context.columns is now a vector of one of each column object,
indexed by attribute name, for validation purposes.
- Implemented RegX class to maintain a separate compile, and match
method, thereby allowing efficient re-use of the regex. This is
critical to Expression::eval, where an identical regex might be
applied to every task.
- Obsoleted rx.{h,cpp}, which combined the compile and match steps
into a single call, and is therefore not efficient when used in
the context of filtering.
- Fixed some unit tests that weren't building. Now they do. They
don't work of course (don't be silly) but that's a problem for
another day.
- Modified all code that relies on rx.h to use RegX.h.
- DOM::get now returns the input name by default, rather than "", which
was the cause of many filter elements not working.
- Modified Variant to have no private data, which means fewer copies of
Variants and less code.
- Eliminated Variant::operator^ - not needed.
- Filter processing short-circuits if there is no filter.
- Variant code was not only incomplete, but very broken. It should not have
been used. It still doesn't handle dates and durations.
- Converted all logical and relational Variant operators to return Boolean
values.
- Stack size is now checked for every operator.
- All operators implemented (without any advanced special case handling) except
%, ~ and !~.
- Added lazy DOM expansion at the last possible moment.
- Implemented Expression::create_variant to create appropriate Variant instances
based on categorized and inferred type.
- Removed Variant math functions. No point.
- Debug code left in place for now.
- Command line arguments are now handled a little differently. Each
argument is subjected to further splitting, to break up expressions
early in the process, prior to categorization.
- Patterns are now treated as quoted string, where the quote character
is /.
- Output from the query command is now optionally surrounded by [ ... ]
to make this a syntactically correct JSON document. This is off by
default.
- Updated documents.
- Reordered operator table so that longer operators match first, thus
disambiguating between ! and !=.
- Eliminated Expression::expand_expression.
- Modified Nibbler to know what a DOM reference looks like.
- Removed alpha equivalent operators (lt, le, gt, ge, not, eq, ne) because
these are common in descriptions (French: le, ne).
- Modified Arguments and Nibbler unit tests.
- Support and documentation for rc.patterns, which enables/disables
support for /pattern/ command line arguments.
- Support and documentation for rc.expressions, which enables/disables
support for command line expressions.
- Now canonicalizes attribute names.
- Now canonicalizes modifier names.
- New colorization (temporary) that colors all Arguments::dump output
green when processed.
- New distinction between 'old' and 'new' style command lines. Old style
is "pro:A +foo pri.not:M" with implicit "and" operators. New style
includes operators but does not include "+foo" and "/foo/".
- Many tokens are converted directly to primitive types (int, number,
string) when no further processing is required.
- Restored CmdShow to functionality, and linearized the list of supported
configuration variables, for easier insertion.
- Modified arguments.t.cpp unit tests.
- Corrected interpretation of integers outside the location of a
sequence as a word.
- Corrected interpretation of uuids outside the location of a
sequence as a word.
- Removed the last uses of 'foreach'. What remains is only code that
is being obsoleted, and therefore there is no need to clean that up.
- The definition of 'foreach' in util.h must remain until last.