notmuch-mutt: replace shell pipeline with internal pipe processing
[notmuch] / tag-util.h
index 99b0fa0b41636dc162214f16aa9b0a0888bfa0c4..411e8cae2a6daff907ddfd0405316ad1e54480c2 100644 (file)
@@ -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:
+ *
+ * +<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
  *
@@ -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