mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
- Updated ideas with recurrence design
This commit is contained in:
parent
cc9235033f
commit
3f21a0fe4d
2 changed files with 67 additions and 3 deletions
50
ideas.txt
50
ideas.txt
|
@ -1,6 +1,9 @@
|
||||||
Real Parsing
|
Real Parsing
|
||||||
define grammar for command line
|
define grammar for command line
|
||||||
implement flex/bison parser
|
implement flex/bison parser
|
||||||
|
new grammar includes:
|
||||||
|
- task delete <ID> [<ID> ...]
|
||||||
|
- task done <ID> [<ID> ...]
|
||||||
|
|
||||||
User-Defined Reports
|
User-Defined Reports
|
||||||
report.xxx=id,project(2+),priority(1-),description
|
report.xxx=id,project(2+),priority(1-),description
|
||||||
|
@ -14,4 +17,51 @@ Test Suite
|
||||||
debug=on to cause all cout to be csv
|
debug=on to cause all cout to be csv
|
||||||
regression tests for every bug, command, feature
|
regression tests for every bug, command, feature
|
||||||
|
|
||||||
|
Recurrence
|
||||||
|
- new T::status recurring (stored as R)
|
||||||
|
- new user-specifiable attributes - recur:<duration> [until:<date>]
|
||||||
|
- duration:
|
||||||
|
daily, day, 1d
|
||||||
|
Nd
|
||||||
|
weekly, 1w
|
||||||
|
Nw
|
||||||
|
biweekly
|
||||||
|
monthly, 1m
|
||||||
|
bimonthly
|
||||||
|
Nm
|
||||||
|
quarterly, 1q
|
||||||
|
Nq
|
||||||
|
biannual, biyearly
|
||||||
|
annual, yearly, 1y
|
||||||
|
Na, Ny
|
||||||
|
- recur: without due: => Error
|
||||||
|
- until: without recur: => Error
|
||||||
|
- New file format (version 3): supports status R, recur:, until:, base:, range:
|
||||||
|
- on TDB.gc, adjust base: and compress range: for T::status == recurring
|
||||||
|
- all recurring tasks are removed from lists by T::*pendingT, and a synthetic
|
||||||
|
addendum is generated
|
||||||
|
- when a recurring task is completed, range: is updated, and a synthetic
|
||||||
|
task is added to completed.data that retains the attributes of the root
|
||||||
|
|
||||||
|
- Scenario:
|
||||||
|
# Today = 6/22/2008
|
||||||
|
% task add Friday due:6/15/2008 recur:weekly until 8/1/2008
|
||||||
|
# task must generate a base and range
|
||||||
|
# base:6/15/2008
|
||||||
|
# range:-------
|
||||||
|
# ^6/15
|
||||||
|
# ^6/22
|
||||||
|
# ^6/29
|
||||||
|
# ^7/6
|
||||||
|
# ^7/13
|
||||||
|
# ^7/20
|
||||||
|
# ^7/27
|
||||||
|
% task ls
|
||||||
|
1 Friday 6/15/2008 .lte. today (overdue)
|
||||||
|
2 Friday 6/22/2008 .lte. today (due)
|
||||||
|
3 Friday 6/29/2008 one recurrence
|
||||||
|
4 Friday 7/6/2008 (not shown)
|
||||||
|
5 Friday 7/13/2008 (not shown)
|
||||||
|
6 Friday 7/20/2008 (not shown)
|
||||||
|
7 Friday 7/27/2008 (not shown)
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,10 @@ static const char* attributes[] =
|
||||||
"entry",
|
"entry",
|
||||||
"start",
|
"start",
|
||||||
"end",
|
"end",
|
||||||
|
"recur",
|
||||||
|
"until",
|
||||||
|
"base",
|
||||||
|
"range",
|
||||||
"",
|
"",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -201,7 +205,7 @@ bool validDate (std::string& date, Config& conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
static bool validPriority (std::string& input)
|
static bool validPriority (const std::string& input)
|
||||||
{
|
{
|
||||||
if (input != "H" &&
|
if (input != "H" &&
|
||||||
input != "M" &&
|
input != "M" &&
|
||||||
|
@ -215,7 +219,10 @@ static bool validPriority (std::string& input)
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
static bool validAttribute (std::string& name, std::string& value, Config& conf)
|
static bool validAttribute (
|
||||||
|
std::string& name,
|
||||||
|
std::string& value,
|
||||||
|
Config& conf)
|
||||||
{
|
{
|
||||||
guess ("attribute", attributes, name);
|
guess ("attribute", attributes, name);
|
||||||
|
|
||||||
|
@ -254,7 +261,7 @@ static bool validId (const std::string& input)
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
static bool validTag (std::string& input)
|
static bool validTag (const std::string& input)
|
||||||
{
|
{
|
||||||
if ((input[0] == '-' || input[0] == '+') &&
|
if ((input[0] == '-' || input[0] == '+') &&
|
||||||
input.length () > 1)
|
input.length () > 1)
|
||||||
|
@ -310,6 +317,13 @@ static bool validSubstitution (
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool validDuration (const std::string& input)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Token Distinguishing characteristic
|
// Token Distinguishing characteristic
|
||||||
// ------- -----------------------------
|
// ------- -----------------------------
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue