diff --git a/src/Context.cpp b/src/Context.cpp index 03d85458a..56db73fed 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -437,7 +437,7 @@ void Context::parse ( // Tags to include begin with '+'. else if (arg->length () > 1 && (*arg)[0] == '+' && - validTag (*arg)) + noSpaces (*arg)) { debug ("parse tag addition '" + *arg + "'"); if (foundSequence) @@ -454,7 +454,7 @@ void Context::parse ( // Tags to remove begin with '-'. else if (arg->length () > 1 && (*arg)[0] == '-' && - validTag (*arg)) + noSpaces (*arg)) { debug ("parse tag removal '" + *arg + "'"); if (foundSequence) diff --git a/src/Makefile.am b/src/Makefile.am index 8a47a7985..8f5e4ce67 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,8 +3,8 @@ task_SOURCES = Att.cpp Cmd.cpp Config.cpp Context.cpp Date.cpp Duration.cpp \ Filter.cpp Grid.cpp Keymap.cpp Location.cpp Nibbler.cpp \ Record.cpp Sequence.cpp StringTable.cpp Subst.cpp Task.cpp \ TDB.cpp Table.cpp Timer.cpp Permission.cpp color.cpp edit.cpp \ - command.cpp import.cpp interactive.cpp valid.cpp recur.cpp \ - report.cpp custom.cpp rules.cpp main.cpp text.cpp util.cpp \ + command.cpp import.cpp interactive.cpp recur.cpp report.cpp \ + custom.cpp rules.cpp main.cpp text.cpp util.cpp \ Att.h Cmd.h Config.h Context.h Date.h Duration.h Filter.h \ Grid.h Keymap.h Location.h Nibbler.h Record.h Sequence.h \ StringTable.h Subst.h Task.h TDB.h Table.h Timer.h \ diff --git a/src/custom.cpp b/src/custom.cpp index b38692268..b56278ac9 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -47,6 +47,7 @@ #endif extern Context context; +static std::vector customReports; //////////////////////////////////////////////////////////////////////////////// // This report will eventually become the one report that many others morph into @@ -550,4 +551,65 @@ std::string runCustomReport ( return out.str (); } -/////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +void validReportColumns (const std::vector & columns) +{ + std::vector bad; + + std::vector ::const_iterator it; + for (it = columns.begin (); it != columns.end (); ++it) + if (*it != "id" && + *it != "uuid" && + *it != "project" && + *it != "priority" && + *it != "entry" && + *it != "start" && + *it != "end" && + *it != "due" && + *it != "age" && + *it != "age_compact" && + *it != "active" && + *it != "tags" && + *it != "recur" && + *it != "recurrence_indicator" && + *it != "tag_indicator" && + *it != "description_only" && + *it != "description" && + *it != "wait") + bad.push_back (*it); + + if (bad.size ()) + { + std::string error; + join (error, ", ", bad); + throw std::string ("Unrecognized column name: ") + error; + } +} + +//////////////////////////////////////////////////////////////////////////////// +void validSortColumns ( + const std::vector & columns, + const std::vector & sortColumns) +{ + std::vector bad; + std::vector ::const_iterator sc; + for (sc = sortColumns.begin (); sc != sortColumns.end (); ++sc) + { + std::vector ::const_iterator co; + for (co = columns.begin (); co != columns.end (); ++co) + if (sc->substr (0, sc->length () - 1) == *co) + break; + + if (co == columns.end ()) + bad.push_back (*sc); + } + + if (bad.size ()) + { + std::string error; + join (error, ", ", bad); + throw std::string ("Sort column is not part of the report: ") + error; + } +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/main.h b/src/main.h index cb3b07bb0..3ae62b1c5 100644 --- a/src/main.h +++ b/src/main.h @@ -39,11 +39,6 @@ #include "color.h" #include "../auto.h" -// valid.cpp -void validReportColumns (const std::vector &); -void validSortColumns (const std::vector &, const std::vector &); -bool validTag (const std::string&); - // task.cpp void gatherNextTasks (std::vector &); void onChangeCallback (); @@ -104,6 +99,8 @@ std::string handleCustomReport (const std::string&); std::string runCustomReport (const std::string&, const std::string&, const std::string&, const std::string&, const std::string&, std::vector &); +void validReportColumns (const std::vector &); +void validSortColumns (const std::vector &, const std::vector &); // rules.cpp void initializeColorRules (); diff --git a/src/tests/Makefile b/src/tests/Makefile index efeea7499..ca9e62919 100644 --- a/src/tests/Makefile +++ b/src/tests/Makefile @@ -3,12 +3,12 @@ PROJECT = t.t tdb.t date.t duration.t t.benchmark.t text.t autocomplete.t \ cmd.t util.t CFLAGS = -I. -I.. -Wall -pedantic -ggdb3 -fno-rtti LFLAGS = -L/usr/local/lib -lncurses -OBJECTS = ../TDB.o ../Task.o ../valid.o ../text.o ../Date.o ../Table.o \ - ../Duration.o ../util.o ../Config.o ../Sequence.o ../Att.o ../Cmd.o \ - ../Record.o ../StringTable.o ../Subst.o ../Nibbler.o ../Location.o \ - ../Filter.o ../Context.o ../Keymap.o ../command.o ../interactive.o \ - ../report.o ../Grid.o ../color.o ../rules.o ../recur.o ../custom.o \ - ../import.o ../edit.o ../Timer.o ../Permission.o +OBJECTS = ../TDB.o ../Task.o ../text.o ../Date.o ../Table.o ../Duration.o \ + ../util.o ../Config.o ../Sequence.o ../Att.o ../Cmd.o ../Record.o \ + ../StringTable.o ../Subst.o ../Nibbler.o ../Location.o ../Filter.o \ + ../Context.o ../Keymap.o ../command.o ../interactive.o ../report.o \ + ../Grid.o ../color.o ../rules.o ../recur.o ../custom.o ../import.o \ + ../edit.o ../Timer.o ../Permission.o all: $(PROJECT) diff --git a/src/valid.cpp b/src/valid.cpp deleted file mode 100644 index 7083c30e3..000000000 --- a/src/valid.cpp +++ /dev/null @@ -1,118 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// task - a command line task list manager. -// -// Copyright 2006 - 2009, Paul Beckingham. -// All rights reserved. -// -// This program is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free Software -// Foundation; either version 2 of the License, or (at your option) any later -// version. -// -// This program is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -// details. -// -// You should have received a copy of the GNU General Public License along with -// this program; if not, write to the -// -// Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, -// Boston, MA -// 02110-1301 -// USA -// -//////////////////////////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include - -#include "Context.h" -#include "Date.h" -#include "Duration.h" -#include "text.h" -#include "util.h" -#include "color.h" - -extern Context context; - -// TODO Relocate inside Context. -static std::vector customReports; - -//////////////////////////////////////////////////////////////////////////////// -bool validTag (const std::string& input) -{ - if ((input[0] == '-' || input[0] == '+') && - input.length () > 1 && - noSpaces (input)) - return true; - - return false; -} - -//////////////////////////////////////////////////////////////////////////////// -void validReportColumns (const std::vector & columns) -{ - std::vector bad; - - std::vector ::const_iterator it; - for (it = columns.begin (); it != columns.end (); ++it) - if (*it != "id" && - *it != "uuid" && - *it != "project" && - *it != "priority" && - *it != "entry" && - *it != "start" && - *it != "end" && - *it != "due" && - *it != "age" && - *it != "age_compact" && - *it != "active" && - *it != "tags" && - *it != "recur" && - *it != "recurrence_indicator" && - *it != "tag_indicator" && - *it != "description_only" && - *it != "description" && - *it != "wait") - bad.push_back (*it); - - if (bad.size ()) - { - std::string error; - join (error, ", ", bad); - throw std::string ("Unrecognized column name: ") + error; - } -} - -//////////////////////////////////////////////////////////////////////////////// -void validSortColumns ( - const std::vector & columns, - const std::vector & sortColumns) -{ - std::vector bad; - std::vector ::const_iterator sc; - for (sc = sortColumns.begin (); sc != sortColumns.end (); ++sc) - { - std::vector ::const_iterator co; - for (co = columns.begin (); co != columns.end (); ++co) - if (sc->substr (0, sc->length () - 1) == *co) - break; - - if (co == columns.end ()) - bad.push_back (*sc); - } - - if (bad.size ()) - { - std::string error; - join (error, ", ", bad); - throw std::string ("Sort column is not part of the report: ") + error; - } -} - -//////////////////////////////////////////////////////////////////////////////// -