/* Use powers of 2 */
typedef enum {
- TAG_FLAG_NONE = 0,
+ TAG_FLAG_NONE = 0,
/* Operations are synced to maildir, if possible.
*/
- TAG_FLAG_MAILDIR_SYNC = (1 << 0),
+ TAG_FLAG_MAILDIR_SYNC = (1 << 0),
/* Remove all tags from message before applying list.
*/
- TAG_FLAG_REMOVE_ALL = (1 << 1),
+ TAG_FLAG_REMOVE_ALL = (1 << 1),
/* Don't try to avoid database operations. Useful when we
* know that message passed needs these operations.
*/
- TAG_FLAG_PRE_OPTIMIZED = (1 << 2),
+ TAG_FLAG_PRE_OPTIMIZED = (1 << 2),
/* Accept strange tags that might be user error;
* intended for use by notmuch-restore.
*/
- TAG_FLAG_BE_GENEROUS = (1 << 3)
+ TAG_FLAG_BE_GENEROUS = (1 << 3)
} tag_op_flag_t;
* skipped lines are positive.
*/
typedef enum {
- TAG_PARSE_OUT_OF_MEMORY = -1,
+ TAG_PARSE_OUT_OF_MEMORY = -1,
- /* Line parsed successfuly. */
- TAG_PARSE_SUCCESS = 0,
+ /* Line parsed successfully. */
+ TAG_PARSE_SUCCESS = 0,
/* Line has a syntax error */
- TAG_PARSE_INVALID = 1,
+ TAG_PARSE_INVALID = 1,
/* Line was blank or a comment */
- TAG_PARSE_SKIPPED = 2
+ TAG_PARSE_SKIPPED = 2
} tag_parse_status_t;
tag_op_flag_t flags,
char **query_str, tag_op_list_t *ops);
+
+
+/* Parse a command line of the following format:
+ *
+ * +<tag>|-<tag> [...] [--] <search-terms>
+ *
+ * Output Parameters:
+ * ops contains a list of tag operations
+ * query_str the search terms.
+ *
+ * The ops argument is not cleared.
+ */
+
+tag_parse_status_t
+parse_tag_command_line (void *ctx, int argc, char **argv,
+ char **query_str, tag_op_list_t *ops);
+
+/*
+ * Test tags for some forbidden cases.
+ *
+ * Relax the checks if 'remove' is true to allow removal of previously
+ * added forbidden tags.
+ *
+ * return: NULL if OK,
+ * explanatory message otherwise.
+ */
+const char *
+illegal_tag (const char *tag, bool remove);
+
/*
* Create an empty list of tag operations
*
tag_op_list_create (void *ctx);
/*
- * Add a tag operation (delete iff remove == TRUE) to a list.
+ * Add a tag operation (delete iff remove == true) to a list.
* The list is expanded as necessary.
*/
int
tag_op_list_append (tag_op_list_t *list,
const char *tag,
- notmuch_bool_t remove);
+ bool remove);
/*
* Apply a list of tag operations, in order, to a given message.
* Is the i'th tag operation a remove?
*/
-notmuch_bool_t
+bool
tag_op_list_isremove (const tag_op_list_t *list, size_t i);
#endif