dav/tags.h

changeset 400
90c6bfa94fa2
parent 390
26998dc980f9
child 414
ea50585ec9d9
equal deleted inserted replaced
399:a985a587787f 400:90c6bfa94fa2
37 37
38 #ifdef __cplusplus 38 #ifdef __cplusplus
39 extern "C" { 39 extern "C" {
40 #endif 40 #endif
41 41
42
43 /* OFF must be zero, other constants are arbitrary */
44 #define DAV_SYNC_TAGFILTER_OFF 0
45 #define DAV_SYNC_TAGFILTER_AND 1
46 #define DAV_SYNC_TAGFILTER_OR 2
47 #define DAV_SYNC_TAGFILTER_ONE 3
48 #define DAV_SYNC_TAGFILTER_NONE 4
49
42 typedef struct DavTag { 50 typedef struct DavTag {
43 char *name; 51 char *name;
44 char *color; 52 char *color;
45 } DavTag; 53 } DavTag;
54
55 /**
56 * filter ::= operator? , (tag_list | ("(" , filter , ")")+)
57 * tag_list ::= tag , ("," tag)*
58 * operator ::= "&" | "|" | "1" | "0"
59 */
60 typedef struct SyncTagFilter SyncTagFilter;
61
62 struct SyncTagFilter {
63 int mode;
64 UcxList* tags;
65 size_t subfilter_count;
66 SyncTagFilter** subfilters;
67 };
46 68
47 void free_dav_tag(DavTag* tag); 69 void free_dav_tag(DavTag* tag);
48 70
49 int compare_tagname(DavTag* left, DavTag* right, void* ignorecase); 71 int compare_tagname(DavTag* left, DavTag* right, void* ignorecase);
50 72
58 DavXmlNode* create_xml_taglist(UcxList *tags); 80 DavXmlNode* create_xml_taglist(UcxList *tags);
59 81
60 UcxList* parse_macos_taglist(const char *buf, size_t length); 82 UcxList* parse_macos_taglist(const char *buf, size_t length);
61 UcxBuffer* create_macos_taglist(UcxList *tags); 83 UcxBuffer* create_macos_taglist(UcxList *tags);
62 84
85
86 /* ----------- ----------- tag filter ---------------------- */
87
88 SyncTagFilter* parse_tagfilter_string(const char* filterstring);
89 void free_tagfilter(SyncTagFilter* filter);
90
91 int matches_tagfilter(UcxList *dav_tags, SyncTagFilter *tagfilter);
92
63 #ifdef __cplusplus 93 #ifdef __cplusplus
64 } 94 }
65 #endif 95 #endif
66 96
67 #endif /* TAGS_H */ 97 #endif /* TAGS_H */

mercurial