- Created A3.{h,cpp} which will be a simpler, lightweight version of
Arguments.{h,cpp} that does less, but does it better.
- Created E9.{h,cpp} which will be a better implementation of
Expression.{h,cpp} that does less, but does it better.
- Integrated A3 into Context::initialize, and Arguments and A3 will
coexist until A3 surpasses Arguments.
- Eliminated the . prefix for DOM references to the current task - it is
unnatural to state ".due < today".
- Prioritized parsing dates ahead of integers, which were masking all
dates.
- Implemented Nibbler::getWord.
- Re-implemented Nibbler::getDOM.
- Modified DOM addressed for context-based attributes from "due" to ".due",
the help disambiguate DOM references in expressions. There is now a
consistency:
<id>.due Task-specific
.due Contextual
<uuid>.due General
- Implemented associated unit tests.
- Commented out troublesome "distance_from_command" code.
- Commented out DOM diagnostics, for now.
- Commented out TDB2 diagnostics, for now.
- Category "seq" arguments are now assigned type "exp".
- All type "exp" arguments are now tokenized.
- Broke out expression handling into two distinct flavors: filter
and expression. Filters need lots of preparation and mapping,
which includes implicit 'AND' operators, expansion of syntactic
sugar like /pattern/ etc and evaluate to a Boolean. Expressions
are simpler wiht less preparation, and evaluate to a Variant.
- Implemented CmdAdd.cpp and CmdLog.cpp using TDB2.
- Implemented simple append writes in TDB2.
- Modified CmdImport to accept and parse JSON.
- Added more const-ness in DOM, Expression and Task, to allow TDB2::get_tasks
to return a const vector ref, which is a Very Good Thing.
- Corrected usage for the export command.
- Implemented Task::urgency as a call to Task::urgency_c, which is a const
overload to allow urgency calculations (without caching) for const Task
objects.
- Removed obolete code from TDB.
- Added lots of diagnostic output for TDB2 - it's annoying, but will be
gone soon.
- Added mention in CmdHelp of the new <filter> and <modifications>
syntax elements. Needs more.
- Added Command::filter overload which uses TDB2. Not in use yet.
- Removed DOM caching, which appears to be a problem.
- Added 'id' and 'uuid' to DOM::get, which were missing, and therefore
caused all filters with sequences to fail.
- Modified CmdInfo to load all tasks, until TDB2 is here.
- 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 /.
- 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.
- Fixed some compiler warnings.
- Added DOM detection of primitives: int, double, string.
- Began implementation of DOM task access.
- Implemented support for .startswith, .endswith, .word and .noword.
- Removed obsolete subst.t.cpp.
- Implemented an operator lookup table with type, associativity and
precedence.
- Implemented Expression::to_postfix that generates a postfix
expression list using a Dijkstra Shunt.
- Began Expression::toInfix to upgrade old-style filters to infix
algebraic filters.
- Added operator support to Arguments::categorize.
- Modified CmdCustom.cpp as a read-only command guinea-pig for the
new argument processing.
- Implemented Arguments::extract_read_only_filter to isolate the
arguments that pertain to read-only command filters
- Implemented Arguments::extract_write_filter to isolate the arguments
that pertain to write command filters.
- Implemented Arguments::extract_modifications to isolate the arguments
that pertain to write command modifications.
- Created stubbed Expression object.
- Began integration of Expression and Arguments into commands/CmdCustom.