X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=tag-util.h;h=bbe54d9990f9bac7e30f9b0d1b679d69ee7c1680;hp=99b0fa0b41636dc162214f16aa9b0a0888bfa0c4;hb=HEAD;hpb=fb50cc41fe6f508118697d65a44e8f742a466ca0 diff --git a/tag-util.h b/tag-util.h index 99b0fa0b..411e8cae 100644 --- a/tag-util.h +++ b/tag-util.h @@ -8,25 +8,25 @@ typedef struct _tag_op_list_t tag_op_list_t; /* 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; @@ -34,16 +34,16 @@ typedef enum { * 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; @@ -72,6 +72,35 @@ parse_tag_line (void *ctx, char *line, tag_op_flag_t flags, char **query_str, tag_op_list_t *ops); + + +/* Parse a command line of the following format: + * + * +|- [...] [--] + * + * 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 * @@ -82,20 +111,19 @@ tag_op_list_t * 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 (void *ctx, - tag_op_list_t *list, +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. * - * Flags can be bitwise ORed; see enum above for possibilies. + * Flags can be bitwise ORed; see enum above for possibilities. */ notmuch_status_t @@ -129,7 +157,7 @@ tag_op_list_tag (const tag_op_list_t *list, size_t i); * 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