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 */ |