- Fixed bug #1006, #1024, which caused words like the German 'im' and 'des' in
  a description to be expanded into 'imask' and 'description' (thanks to
  Louis-Claude Canon and Martin U).
- Promoted Louis-Claude Canon in the AUTHORS file, added Martin U.
This commit is contained in:
Paul Beckingham 2012-07-04 16:05:42 -04:00
parent 416cb40e3d
commit d16f434899
4 changed files with 25 additions and 14 deletions

View file

@ -10,6 +10,7 @@ contributions of the following people:
Dirk Deimeke (Technical Advisor & Marketing) Dirk Deimeke (Technical Advisor & Marketing)
Wim Schuermann (Contributing Author) Wim Schuermann (Contributing Author)
Owen Clarke (Contributing Author) Owen Clarke (Contributing Author)
Louis-Claude Canon (Contributing Author)
The following submitted code, packages or analysis, and deserve special thanks: The following submitted code, packages or analysis, and deserve special thanks:
@ -71,7 +72,6 @@ The following submitted code, packages or analysis, and deserve special thanks:
Sam Stuck Sam Stuck
Christoph Robbert Christoph Robbert
Oleksii Tsai Oleksii Tsai
Louis-Claude Canon
Jörg Plate Jörg Plate
Thanks to the following, who submitted detailed bug reports and excellent Thanks to the following, who submitted detailed bug reports and excellent
@ -143,4 +143,5 @@ suggestions:
Nicholas Rabenau Nicholas Rabenau
Bruno Bigras Bruno Bigras
Hyde Stevenson Hyde Stevenson
Martin U

View file

@ -82,6 +82,9 @@ Bugs
+ Fixed bug #990, which prevents color precedence to be applied correctly for + Fixed bug #990, which prevents color precedence to be applied correctly for
tagged tasks. tagged tasks.
+ Fixed bug #1001, which caused a segv (thanks to Bryce Harrington). + Fixed bug #1001, which caused a segv (thanks to Bryce Harrington).
+ Fixed bug #1006, #1024, which caused words like the German 'im' and 'des' in
a description to be expanded into 'imask' and 'description' (thanks to
Louis-Claude Canon and Martin U).
+ Fixed bug #1008, which failed to remove tasks with the special tag '+nocal' + Fixed bug #1008, which failed to remove tasks with the special tag '+nocal'
from the calendar report output with 'calendar.details=full' set (thanks to from the calendar report output with 'calendar.details=full' set (thanks to
Bryan Kam). Bryan Kam).

1
NEWS
View file

@ -7,6 +7,7 @@ New Features in taskwarrior 2.0.1
opportunity to work on a task. opportunity to work on a task.
- All tasks may now be given an 'until' date, after which they will expire - All tasks may now be given an 'until' date, after which they will expire
and are deleted. and are deleted.
- User defined attributes.
Please refer to the ChangeLog file for full details. There are too many to Please refer to the ChangeLog file for full details. There are too many to
list here. list here.

View file

@ -1301,12 +1301,13 @@ bool A3::is_attr (Nibbler& n, Arg& arg)
{ {
n.save (); n.save ();
std::string name; std::string name;
std::string canonical;
std::string value; std::string value;
// If there is a valid attribute name. // If there is a valid attribute name.
if (n.getName (name) && if (n.getName (name) &&
name.length () && name.length () &&
is_attribute (name, name)) is_attribute (name, canonical))
{ {
if (n.skip (':')) if (n.skip (':'))
{ {
@ -1326,13 +1327,13 @@ bool A3::is_attr (Nibbler& n, Arg& arg)
return false; return false;
*/ */
arg._raw = name + ':' + value; arg._raw = canonical + ':' + value;
arg._category = Arg::cat_attr; arg._category = Arg::cat_attr;
// Most attributes are standard, some are pseudo-attributes, such as // Most attributes are standard, some are pseudo-attributes, such as
// 'limit:page', which is not represented by a column object, and // 'limit:page', which is not represented by a column object, and
// therefore not stored. // therefore not stored.
std::map<std::string, Column*>::iterator i = context.columns.find (name); std::map<std::string, Column*>::iterator i = context.columns.find (canonical);
if (i != context.columns.end ()) if (i != context.columns.end ())
arg._type = Arg::type_id (i->second->type ()); arg._type = Arg::type_id (i->second->type ());
else else
@ -1353,6 +1354,7 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
{ {
n.save (); n.save ();
std::string name; std::string name;
std::string canonical;
std::string modifier; std::string modifier;
std::string value; std::string value;
// time_t date; // time_t date;
@ -1360,7 +1362,7 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
// If there is a valid attribute name. // If there is a valid attribute name.
if (n.getName (name) && if (n.getName (name) &&
name.length () && name.length () &&
is_attribute (name, name)) is_attribute (name, canonical))
{ {
if (n.skip ('.')) if (n.skip ('.'))
{ {
@ -1395,8 +1397,8 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
return false; return false;
*/ */
arg._raw = name + '.' + modifier + ':' + value; arg._raw = canonical + '.' + modifier + ':' + value;
Column* col = context.columns[name]; Column* col = context.columns[canonical];
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo; arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
arg._category = Arg::cat_attmod; arg._category = Arg::cat_attmod;
return true; return true;
@ -1472,6 +1474,7 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
{ {
n.save (); n.save ();
std::string name; std::string name;
std::string canonical;
int id; int id;
std::string uuid; std::string uuid;
@ -1505,8 +1508,9 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
n.skip ('.') && n.skip ('.') &&
n.getName (name) && n.getName (name) &&
name.length () && name.length () &&
is_attribute (name, name)) is_attribute (name, canonical))
{ {
name = canonical;
result = format (id) + '.' + name; result = format (id) + '.' + name;
arg._raw = result; arg._raw = result;
Column* col = context.columns[name]; Column* col = context.columns[name];
@ -1522,8 +1526,9 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
n.skip ('.') && n.skip ('.') &&
n.getName (name) && n.getName (name) &&
name.length () && name.length () &&
is_attribute (name, name)) is_attribute (name, canonical))
{ {
name = canonical;
arg._raw = uuid + '.' + name; arg._raw = uuid + '.' + name;
Column* col = context.columns[name]; Column* col = context.columns[name];
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo; arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
@ -1536,12 +1541,13 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
// Attribute. // Attribute.
if (n.getName (name) && if (n.getName (name) &&
name.length () && name.length () &&
is_attribute (name, name)) is_attribute (name, canonical))
{ {
if (name != "limit") if (name != "limit")
{ {
arg._raw = name; arg._raw = name;
Column* col = context.columns[name]; arg._value = canonical;
Column* col = context.columns[canonical];
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo; arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
arg._category = Arg::cat_dom; arg._category = Arg::cat_dom;
return true; return true;