diff --git a/src/args.cpp b/src/args.cpp index 7392cc6c4..98edf74a5 100644 --- a/src/args.cpp +++ b/src/args.cpp @@ -26,7 +26,7 @@ #include #include -#include +#include Context context; @@ -35,188 +35,181 @@ int main (int argc, const char** argv) { try { - Parser parser; - parser.initialize (argc, argv); - parser.findOverrides (); + CLI cli; + cli.initialize (argc, argv); + cli.findOverrides (); // Read-only commands. - parser.entity ("cmd", "active"); parser.entity ("readcmd", "active"); - parser.entity ("cmd", "all"); parser.entity ("readcmd", "all"); - parser.entity ("cmd", "blocked"); parser.entity ("readcmd", "blocked"); - parser.entity ("cmd", "blocking"); parser.entity ("readcmd", "blocking"); - parser.entity ("cmd", "burndown.daily"); parser.entity ("readcmd", "burndown.daily"); - parser.entity ("cmd", "burndown.monthly"); parser.entity ("readcmd", "burndown.monthly"); - parser.entity ("cmd", "burndown.weekly"); parser.entity ("readcmd", "burndown.weekly"); - parser.entity ("cmd", "calc"); parser.entity ("readcmd", "calc"); - parser.entity ("cmd", "calendar"); parser.entity ("readcmd", "calendar"); - parser.entity ("cmd", "colors"); parser.entity ("readcmd", "colors"); - parser.entity ("cmd", "columns"); parser.entity ("readcmd", "columns"); - parser.entity ("cmd", "completed"); parser.entity ("readcmd", "completed"); - parser.entity ("cmd", "config"); parser.entity ("readcmd", "config"); - parser.entity ("cmd", "count"); parser.entity ("readcmd", "count"); - parser.entity ("cmd", "diagnostics"); parser.entity ("readcmd", "diagnostics"); - parser.entity ("cmd", "execute"); parser.entity ("readcmd", "execute"); - parser.entity ("cmd", "export"); parser.entity ("readcmd", "export"); - parser.entity ("cmd", "ghistory.annual"); parser.entity ("readcmd", "ghistory.annual"); - parser.entity ("cmd", "ghistory.monthly"); parser.entity ("readcmd", "ghistory.monthly"); - parser.entity ("cmd", "help"); parser.entity ("readcmd", "help"); - parser.entity ("cmd", "history.annual"); parser.entity ("readcmd", "history.annual"); - parser.entity ("cmd", "history.monthly"); parser.entity ("readcmd", "history.monthly"); - parser.entity ("cmd", "ids"); parser.entity ("readcmd", "ids"); - parser.entity ("cmd", "information"); parser.entity ("readcmd", "information"); - parser.entity ("cmd", "list"); parser.entity ("readcmd", "list"); - parser.entity ("cmd", "logo"); parser.entity ("readcmd", "logo"); - parser.entity ("cmd", "long"); parser.entity ("readcmd", "long"); - parser.entity ("cmd", "ls"); parser.entity ("readcmd", "ls"); - parser.entity ("cmd", "minimal"); parser.entity ("readcmd", "minimal"); - parser.entity ("cmd", "newest"); parser.entity ("readcmd", "newest"); - parser.entity ("cmd", "next"); parser.entity ("readcmd", "next"); - parser.entity ("cmd", "oldest"); parser.entity ("readcmd", "oldest"); - parser.entity ("cmd", "overdue"); parser.entity ("readcmd", "overdue"); - parser.entity ("cmd", "projects"); parser.entity ("readcmd", "projects"); - parser.entity ("cmd", "ready"); parser.entity ("readcmd", "ready"); - parser.entity ("cmd", "recurring"); parser.entity ("readcmd", "recurring"); - parser.entity ("cmd", "reports"); parser.entity ("readcmd", "reports"); - parser.entity ("cmd", "show"); parser.entity ("readcmd", "show"); - parser.entity ("cmd", "stats"); parser.entity ("readcmd", "stats"); - parser.entity ("cmd", "summary"); parser.entity ("readcmd", "summary"); - parser.entity ("cmd", "tags"); parser.entity ("readcmd", "tags"); - parser.entity ("cmd", "timesheet"); parser.entity ("readcmd", "timesheet"); - parser.entity ("cmd", "udas"); parser.entity ("readcmd", "udas"); - parser.entity ("cmd", "unblocked"); parser.entity ("readcmd", "unblocked"); - parser.entity ("cmd", "uuids"); parser.entity ("readcmd", "uuids"); - parser.entity ("cmd", "version"); parser.entity ("readcmd", "version"); - parser.entity ("cmd", "waiting"); parser.entity ("readcmd", "waiting"); + cli.entity ("cmd", "active"); cli.entity ("readcmd", "active"); + cli.entity ("cmd", "all"); cli.entity ("readcmd", "all"); + cli.entity ("cmd", "blocked"); cli.entity ("readcmd", "blocked"); + cli.entity ("cmd", "blocking"); cli.entity ("readcmd", "blocking"); + cli.entity ("cmd", "burndown.daily"); cli.entity ("readcmd", "burndown.daily"); + cli.entity ("cmd", "burndown.monthly"); cli.entity ("readcmd", "burndown.monthly"); + cli.entity ("cmd", "burndown.weekly"); cli.entity ("readcmd", "burndown.weekly"); + cli.entity ("cmd", "calc"); cli.entity ("readcmd", "calc"); + cli.entity ("cmd", "calendar"); cli.entity ("readcmd", "calendar"); + cli.entity ("cmd", "colors"); cli.entity ("readcmd", "colors"); + cli.entity ("cmd", "columns"); cli.entity ("readcmd", "columns"); + cli.entity ("cmd", "completed"); cli.entity ("readcmd", "completed"); + cli.entity ("cmd", "config"); cli.entity ("readcmd", "config"); + cli.entity ("cmd", "count"); cli.entity ("readcmd", "count"); + cli.entity ("cmd", "diagnostics"); cli.entity ("readcmd", "diagnostics"); + cli.entity ("cmd", "execute"); cli.entity ("readcmd", "execute"); + cli.entity ("cmd", "export"); cli.entity ("readcmd", "export"); + cli.entity ("cmd", "ghistory.annual"); cli.entity ("readcmd", "ghistory.annual"); + cli.entity ("cmd", "ghistory.monthly"); cli.entity ("readcmd", "ghistory.monthly"); + cli.entity ("cmd", "help"); cli.entity ("readcmd", "help"); + cli.entity ("cmd", "history.annual"); cli.entity ("readcmd", "history.annual"); + cli.entity ("cmd", "history.monthly"); cli.entity ("readcmd", "history.monthly"); + cli.entity ("cmd", "ids"); cli.entity ("readcmd", "ids"); + cli.entity ("cmd", "information"); cli.entity ("readcmd", "information"); + cli.entity ("cmd", "list"); cli.entity ("readcmd", "list"); + cli.entity ("cmd", "logo"); cli.entity ("readcmd", "logo"); + cli.entity ("cmd", "long"); cli.entity ("readcmd", "long"); + cli.entity ("cmd", "ls"); cli.entity ("readcmd", "ls"); + cli.entity ("cmd", "minimal"); cli.entity ("readcmd", "minimal"); + cli.entity ("cmd", "newest"); cli.entity ("readcmd", "newest"); + cli.entity ("cmd", "next"); cli.entity ("readcmd", "next"); + cli.entity ("cmd", "oldest"); cli.entity ("readcmd", "oldest"); + cli.entity ("cmd", "overdue"); cli.entity ("readcmd", "overdue"); + cli.entity ("cmd", "projects"); cli.entity ("readcmd", "projects"); + cli.entity ("cmd", "ready"); cli.entity ("readcmd", "ready"); + cli.entity ("cmd", "recurring"); cli.entity ("readcmd", "recurring"); + cli.entity ("cmd", "reports"); cli.entity ("readcmd", "reports"); + cli.entity ("cmd", "show"); cli.entity ("readcmd", "show"); + cli.entity ("cmd", "stats"); cli.entity ("readcmd", "stats"); + cli.entity ("cmd", "summary"); cli.entity ("readcmd", "summary"); + cli.entity ("cmd", "tags"); cli.entity ("readcmd", "tags"); + cli.entity ("cmd", "timesheet"); cli.entity ("readcmd", "timesheet"); + cli.entity ("cmd", "udas"); cli.entity ("readcmd", "udas"); + cli.entity ("cmd", "unblocked"); cli.entity ("readcmd", "unblocked"); + cli.entity ("cmd", "uuids"); cli.entity ("readcmd", "uuids"); + cli.entity ("cmd", "version"); cli.entity ("readcmd", "version"); + cli.entity ("cmd", "waiting"); cli.entity ("readcmd", "waiting"); // Write commands. - parser.entity ("cmd", "add"); parser.entity ("writecmd", "add"); - parser.entity ("cmd", "annotate"); parser.entity ("writecmd", "annotate"); - parser.entity ("cmd", "append"); parser.entity ("writecmd", "append"); - parser.entity ("cmd", "delete"); parser.entity ("writecmd", "delete"); - parser.entity ("cmd", "denotate"); parser.entity ("writecmd", "denotate"); - parser.entity ("cmd", "done"); parser.entity ("writecmd", "done"); - parser.entity ("cmd", "duplicate"); parser.entity ("writecmd", "duplicate"); - parser.entity ("cmd", "edit"); parser.entity ("writecmd", "edit"); - parser.entity ("cmd", "import"); parser.entity ("writecmd", "import"); - parser.entity ("cmd", "log"); parser.entity ("writecmd", "log"); - parser.entity ("cmd", "modify"); parser.entity ("writecmd", "modify"); - parser.entity ("cmd", "prepend"); parser.entity ("writecmd", "prepend"); - parser.entity ("cmd", "start"); parser.entity ("writecmd", "start"); - parser.entity ("cmd", "stop"); parser.entity ("writecmd", "stop"); - parser.entity ("cmd", "synchronize"); parser.entity ("writecmd", "synchronize"); - parser.entity ("cmd", "undo"); parser.entity ("writecmd", "undo"); + cli.entity ("cmd", "add"); cli.entity ("writecmd", "add"); + cli.entity ("cmd", "annotate"); cli.entity ("writecmd", "annotate"); + cli.entity ("cmd", "append"); cli.entity ("writecmd", "append"); + cli.entity ("cmd", "delete"); cli.entity ("writecmd", "delete"); + cli.entity ("cmd", "denotate"); cli.entity ("writecmd", "denotate"); + cli.entity ("cmd", "done"); cli.entity ("writecmd", "done"); + cli.entity ("cmd", "duplicate"); cli.entity ("writecmd", "duplicate"); + cli.entity ("cmd", "edit"); cli.entity ("writecmd", "edit"); + cli.entity ("cmd", "import"); cli.entity ("writecmd", "import"); + cli.entity ("cmd", "log"); cli.entity ("writecmd", "log"); + cli.entity ("cmd", "modify"); cli.entity ("writecmd", "modify"); + cli.entity ("cmd", "prepend"); cli.entity ("writecmd", "prepend"); + cli.entity ("cmd", "start"); cli.entity ("writecmd", "start"); + cli.entity ("cmd", "stop"); cli.entity ("writecmd", "stop"); + cli.entity ("cmd", "synchronize"); cli.entity ("writecmd", "synchronize"); + cli.entity ("cmd", "undo"); cli.entity ("writecmd", "undo"); // Helper commands. - parser.entity ("cmd", "_aliases"); parser.entity ("readcmd", "_aliases"); parser.entity ("helper", "_aliases"); - parser.entity ("cmd", "_columns"); parser.entity ("readcmd", "_columns"); parser.entity ("helper", "_columns"); - parser.entity ("cmd", "_commands"); parser.entity ("readcmd", "_commands"); parser.entity ("helper", "_commands"); - parser.entity ("cmd", "_config"); parser.entity ("readcmd", "_config"); parser.entity ("helper", "_config"); - parser.entity ("cmd", "_get"); parser.entity ("readcmd", "_get"); parser.entity ("helper", "_get"); - parser.entity ("cmd", "_ids"); parser.entity ("readcmd", "_ids"); parser.entity ("helper", "_ids"); - parser.entity ("cmd", "_projects"); parser.entity ("readcmd", "_projects"); parser.entity ("helper", "_projects"); - parser.entity ("cmd", "_show"); parser.entity ("readcmd", "_show"); parser.entity ("helper", "_show"); - parser.entity ("cmd", "_tags"); parser.entity ("readcmd", "_tags"); parser.entity ("helper", "_tags"); - parser.entity ("cmd", "_udas"); parser.entity ("readcmd", "_udas"); parser.entity ("helper", "_udas"); - parser.entity ("cmd", "_urgency"); parser.entity ("readcmd", "_urgency"); parser.entity ("helper", "_urgency"); - parser.entity ("cmd", "_uuids"); parser.entity ("readcmd", "_uuids"); parser.entity ("helper", "_uuids"); - parser.entity ("cmd", "_version"); parser.entity ("readcmd", "_version"); parser.entity ("helper", "_version"); - parser.entity ("cmd", "_zshcommands"); parser.entity ("readcmd", "_zshcommands"); parser.entity ("helper", "_zshcommands"); - parser.entity ("cmd", "_zshids"); parser.entity ("readcmd", "_zshids"); parser.entity ("helper", "_zshids"); - parser.entity ("cmd", "_zshuuids"); parser.entity ("readcmd", "_zshuuids"); parser.entity ("helper", "_zshuuids"); + cli.entity ("cmd", "_aliases"); cli.entity ("readcmd", "_aliases"); cli.entity ("helper", "_aliases"); + cli.entity ("cmd", "_columns"); cli.entity ("readcmd", "_columns"); cli.entity ("helper", "_columns"); + cli.entity ("cmd", "_commands"); cli.entity ("readcmd", "_commands"); cli.entity ("helper", "_commands"); + cli.entity ("cmd", "_config"); cli.entity ("readcmd", "_config"); cli.entity ("helper", "_config"); + cli.entity ("cmd", "_get"); cli.entity ("readcmd", "_get"); cli.entity ("helper", "_get"); + cli.entity ("cmd", "_ids"); cli.entity ("readcmd", "_ids"); cli.entity ("helper", "_ids"); + cli.entity ("cmd", "_projects"); cli.entity ("readcmd", "_projects"); cli.entity ("helper", "_projects"); + cli.entity ("cmd", "_show"); cli.entity ("readcmd", "_show"); cli.entity ("helper", "_show"); + cli.entity ("cmd", "_tags"); cli.entity ("readcmd", "_tags"); cli.entity ("helper", "_tags"); + cli.entity ("cmd", "_udas"); cli.entity ("readcmd", "_udas"); cli.entity ("helper", "_udas"); + cli.entity ("cmd", "_urgency"); cli.entity ("readcmd", "_urgency"); cli.entity ("helper", "_urgency"); + cli.entity ("cmd", "_uuids"); cli.entity ("readcmd", "_uuids"); cli.entity ("helper", "_uuids"); + cli.entity ("cmd", "_version"); cli.entity ("readcmd", "_version"); cli.entity ("helper", "_version"); + cli.entity ("cmd", "_zshcommands"); cli.entity ("readcmd", "_zshcommands"); cli.entity ("helper", "_zshcommands"); + cli.entity ("cmd", "_zshids"); cli.entity ("readcmd", "_zshids"); cli.entity ("helper", "_zshids"); + cli.entity ("cmd", "_zshuuids"); cli.entity ("readcmd", "_zshuuids"); cli.entity ("helper", "_zshuuids"); // Attributes (columns). - parser.entity ("attribute", "depends"); - parser.entity ("attribute", "description"); - parser.entity ("attribute", "due"); - parser.entity ("attribute", "end"); - parser.entity ("attribute", "entry"); - parser.entity ("attribute", "id"); - parser.entity ("attribute", "imask"); - parser.entity ("attribute", "mask"); - parser.entity ("attribute", "modified"); - parser.entity ("attribute", "parent"); - parser.entity ("attribute", "priority"); - parser.entity ("attribute", "project"); - parser.entity ("attribute", "recur"); - parser.entity ("attribute", "scheduled"); - parser.entity ("attribute", "start"); - parser.entity ("attribute", "status"); - parser.entity ("attribute", "tags"); - parser.entity ("attribute", "until"); - parser.entity ("attribute", "urgency"); - parser.entity ("attribute", "uuid"); - parser.entity ("attribute", "wait"); + cli.entity ("attribute", "depends"); + cli.entity ("attribute", "description"); + cli.entity ("attribute", "due"); + cli.entity ("attribute", "end"); + cli.entity ("attribute", "entry"); + cli.entity ("attribute", "id"); + cli.entity ("attribute", "imask"); + cli.entity ("attribute", "mask"); + cli.entity ("attribute", "modified"); + cli.entity ("attribute", "parent"); + cli.entity ("attribute", "priority"); + cli.entity ("attribute", "project"); + cli.entity ("attribute", "recur"); + cli.entity ("attribute", "scheduled"); + cli.entity ("attribute", "start"); + cli.entity ("attribute", "status"); + cli.entity ("attribute", "tags"); + cli.entity ("attribute", "until"); + cli.entity ("attribute", "urgency"); + cli.entity ("attribute", "uuid"); + cli.entity ("attribute", "wait"); // Pseudo-attributes. - parser.entity ("pseudo", "limit"); + cli.entity ("pseudo", "limit"); // UDAs. - parser.entity ("attribute", "duration"); - parser.entity ("uda", "duration"); + cli.entity ("attribute", "duration"); + cli.entity ("uda", "duration"); // Modifiers. - parser.entity ("modifier", "above"); - parser.entity ("modifier", "after"); - parser.entity ("modifier", "any"); - parser.entity ("modifier", "before"); - parser.entity ("modifier", "below"); - parser.entity ("modifier", "contains"); - parser.entity ("modifier", "endswith"); - parser.entity ("modifier", "equals"); - parser.entity ("modifier", "has"); - parser.entity ("modifier", "hasnt"); - parser.entity ("modifier", "is"); - parser.entity ("modifier", "isnt"); - parser.entity ("modifier", "left"); - parser.entity ("modifier", "none"); - parser.entity ("modifier", "not"); - parser.entity ("modifier", "noword"); - parser.entity ("modifier", "over"); - parser.entity ("modifier", "right"); - parser.entity ("modifier", "startswith"); - parser.entity ("modifier", "under"); - parser.entity ("modifier", "word"); + cli.entity ("modifier", "above"); + cli.entity ("modifier", "after"); + cli.entity ("modifier", "any"); + cli.entity ("modifier", "before"); + cli.entity ("modifier", "below"); + cli.entity ("modifier", "contains"); + cli.entity ("modifier", "endswith"); + cli.entity ("modifier", "equals"); + cli.entity ("modifier", "has"); + cli.entity ("modifier", "hasnt"); + cli.entity ("modifier", "is"); + cli.entity ("modifier", "isnt"); + cli.entity ("modifier", "left"); + cli.entity ("modifier", "none"); + cli.entity ("modifier", "not"); + cli.entity ("modifier", "noword"); + cli.entity ("modifier", "over"); + cli.entity ("modifier", "right"); + cli.entity ("modifier", "startswith"); + cli.entity ("modifier", "under"); + cli.entity ("modifier", "word"); // Operators. - parser.entity ("operator", "^"); - parser.entity ("operator", "!"); - parser.entity ("operator", "_neg_"); - parser.entity ("operator", "_pos_"); - parser.entity ("operator", "_hastag_"); - parser.entity ("operator", "_notag_"); - parser.entity ("operator", "*"); - parser.entity ("operator", "/"); - parser.entity ("operator", "%"); - parser.entity ("operator", "+"); - parser.entity ("operator", "-"); - parser.entity ("operator", "<="); - parser.entity ("operator", ">="); - parser.entity ("operator", ">"); - parser.entity ("operator", "<"); - parser.entity ("operator", "="); - parser.entity ("operator", "=="); - parser.entity ("operator", "!="); - parser.entity ("operator", "~"); - parser.entity ("operator", "!~"); - parser.entity ("operator", "and"); - parser.entity ("operator", "or"); - parser.entity ("operator", "xor"); - parser.entity ("operator", "("); - parser.entity ("operator", ")"); + cli.entity ("operator", "^"); + cli.entity ("operator", "!"); + cli.entity ("operator", "_neg_"); + cli.entity ("operator", "_pos_"); + cli.entity ("operator", "_hastag_"); + cli.entity ("operator", "_notag_"); + cli.entity ("operator", "*"); + cli.entity ("operator", "/"); + cli.entity ("operator", "%"); + cli.entity ("operator", "+"); + cli.entity ("operator", "-"); + cli.entity ("operator", "<="); + cli.entity ("operator", ">="); + cli.entity ("operator", ">"); + cli.entity ("operator", "<"); + cli.entity ("operator", "="); + cli.entity ("operator", "=="); + cli.entity ("operator", "!="); + cli.entity ("operator", "~"); + cli.entity ("operator", "!~"); + cli.entity ("operator", "and"); + cli.entity ("operator", "or"); + cli.entity ("operator", "xor"); + cli.entity ("operator", "("); + cli.entity ("operator", ")"); - parser.findBinary (); - parser.findCommand (); - parser.findUUIDList (); - parser.findIdSequence (); - parser.injectDefaults (); + cli.analyze (); - Tree* tree = parser.parse (); - if (tree) - std::cout << tree->dump (); - - std::cout << "\n" + std::cout << cli.dump () + << "\n" << " \033[1;37;42mFILTER\033[0m " - << parser.getFilterExpression () + << cli.getFilter () << "\n"; }