$darkmode
Libical API Documentation 4.0 STABLE VERSION Visit the v3.0 documentation
icalrecur.h
Go to the documentation of this file.
1 /*======================================================================
2  FILE: icalrecur.h
3  CREATOR: eric 20 March 2000
4 
5  SPDX-FileCopyrightText: 2000, Eric Busboom <eric@civicknowledge.com>
6  SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0
7 ========================================================================*/
8 
65 #ifndef ICALRECUR_H
66 #define ICALRECUR_H
67 
68 #include "libical_ical_export.h"
69 #include "icalarray.h"
70 #include "icaltime.h"
71 
72 #include <stdbool.h>
73 
74 /*
75  * Recurrence enumerations
76  */
77 
85 {
95 
100 {
110 
115 {
121 
126 {
140 
141 /*
142  * Recurrence enumerations conversion routines.
143  */
144 
156 LIBICAL_ICAL_EXPORT icalrecurrencetype_frequency icalrecur_string_to_freq(const char *str);
157 
168 LIBICAL_ICAL_EXPORT const char *icalrecur_freq_to_string(icalrecurrencetype_frequency kind);
169 
181 LIBICAL_ICAL_EXPORT icalrecurrencetype_skip icalrecur_string_to_skip(const char *str);
182 
193 LIBICAL_ICAL_EXPORT const char *icalrecur_skip_to_string(icalrecurrencetype_skip kind);
194 
205 LIBICAL_ICAL_EXPORT const char *icalrecur_weekday_to_string(icalrecurrencetype_weekday kind);
206 
218 LIBICAL_ICAL_EXPORT icalrecurrencetype_weekday icalrecur_string_to_weekday(const char *str);
219 
224 //@cond PRIVATE
225 /* See RFC 5545 Section 3.3.10, RECUR Value, and RFC 7529
226  * for an explanation of the values and fields in struct icalrecurrencetype.
227  *
228  * The maximums below are based on lunisolar leap years (13 months)
229  */
230 #define ICAL_BY_SECOND_SIZE 62 /* 0 to 60 */
231 #define ICAL_BY_MINUTE_SIZE 61 /* 0 to 59 */
232 #define ICAL_BY_HOUR_SIZE 25 /* 0 to 23 */
233 #define ICAL_BY_MONTH_SIZE 14 /* 1 to 13 */
234 #define ICAL_BY_MONTHDAY_SIZE 32 /* 1 to 31 */
235 #define ICAL_BY_WEEKNO_SIZE 56 /* 1 to 55 */
236 #define ICAL_BY_YEARDAY_SIZE 386 /* 1 to 385 */
237 #define ICAL_BY_SETPOS_SIZE ICAL_BY_YEARDAY_SIZE /* 1 to N */
238 #define ICAL_BY_DAY_SIZE (7 * (ICAL_BY_WEEKNO_SIZE - 1) + 1) /* 1 to N */
239 
240 typedef struct {
241  short *data;
242  short size;
243 } icalrecurrence_by_data;
244 //@endcond
245 
252  int refcount;
253 
256 
259 
261  int count;
262 
264  short interval;
265 
268 
286  icalrecurrence_by_data by[ICAL_BY_NUM_PARTS];
287 
289  char *rscale;
290 
293 };
294 
302 LIBICAL_ICAL_EXPORT struct icalrecurrencetype *icalrecurrencetype_new(void);
303 
309 LIBICAL_ICAL_EXPORT void icalrecurrencetype_ref(struct icalrecurrencetype *recur);
310 
319 LIBICAL_ICAL_EXPORT void icalrecurrencetype_unref(struct icalrecurrencetype *recur);
320 
327 LIBICAL_ICAL_EXPORT icalarray *icalrecurrencetype_rscale_supported_calendars(void);
328 
338 LIBICAL_ICAL_EXPORT struct icalrecurrencetype *icalrecurrencetype_clone(struct icalrecurrencetype *r);
339 
350 LIBICAL_ICAL_EXPORT bool icalrecur_resize_by(icalrecurrence_by_data *by, short size);
351 
352 /*
353  * Routines to decode the day values of the by[ICAL_BY_DAY] array
354  */
355 
366 LIBICAL_ICAL_EXPORT enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day);
367 
377 LIBICAL_ICAL_EXPORT int icalrecurrencetype_day_position(short day);
378 
404 LIBICAL_ICAL_EXPORT short icalrecurrencetype_encode_day(enum icalrecurrencetype_weekday weekday,
405  int position);
406 
416 LIBICAL_ICAL_EXPORT bool icalrecurrencetype_month_is_leap(short month);
417 
427 LIBICAL_ICAL_EXPORT int icalrecurrencetype_month_month(short month);
428 
448 LIBICAL_ICAL_EXPORT short icalrecurrencetype_encode_month(int month, bool is_leap);
449 
450 /*
451  * Recurrence rule parser
452  */
453 
462 LIBICAL_ICAL_EXPORT struct icalrecurrencetype *icalrecurrencetype_new_from_string(const char *str);
463 
474 LIBICAL_ICAL_EXPORT char *icalrecurrencetype_as_string(struct icalrecurrencetype *recur);
475 
486 LIBICAL_ICAL_EXPORT char *icalrecurrencetype_as_string_r(struct icalrecurrencetype *recur);
487 
488 /*
489  * Recurrence iteration routines
490  */
491 
492 typedef struct icalrecur_iterator_impl icalrecur_iterator;
493 
505 LIBICAL_ICAL_EXPORT icalrecur_iterator *icalrecur_iterator_new(struct icalrecurrencetype *rule,
506  struct icaltimetype dtstart);
507 
520 LIBICAL_ICAL_EXPORT bool icalrecur_iterator_set_start(icalrecur_iterator *impl,
521  struct icaltimetype start);
522 
533 LIBICAL_ICAL_EXPORT bool icalrecur_iterator_set_end(icalrecur_iterator *impl,
534  struct icaltimetype end);
535 
559 LIBICAL_ICAL_EXPORT bool icalrecur_iterator_set_range(icalrecur_iterator *impl,
560  struct icaltimetype from,
561  struct icaltimetype to);
562 
571 LIBICAL_ICAL_EXPORT struct icaltimetype icalrecur_iterator_next(icalrecur_iterator *);
572 
582 LIBICAL_ICAL_EXPORT struct icaltimetype icalrecur_iterator_prev(icalrecur_iterator *impl);
583 
589 LIBICAL_ICAL_EXPORT void icalrecur_iterator_free(icalrecur_iterator *impl);
590 
610 LIBICAL_ICAL_EXPORT bool icalrecur_expand_recurrence(const char *rule, icaltime_t start,
611  int count, icaltime_t *array);
612 
617 {
623 
633 
640 LIBICAL_ICAL_EXPORT void ical_set_invalid_rrule_handling_setting(
641  ical_invalid_rrule_handling newSetting);
642 
643 #endif /* ICALRECUR_H */
bool icalrecur_iterator_set_start(icalrecur_iterator *impl, struct icaltimetype start)
Definition: icalrecur.c:4105
icalrecurrencetype_frequency
Definition: icalrecur.h:84
icalarray * icalrecurrencetype_rscale_supported_calendars(void)
Definition: icalrecur.c:2009
bool icalrecur_iterator_set_end(icalrecur_iterator *impl, struct icaltimetype end)
Definition: icalrecur.c:4130
icalrecurrencetype_weekday
Definition: icalrecur.h:99
icalrecurrencetype_skip
Definition: icalrecur.h:114
struct icaltimetype icalrecur_iterator_next(icalrecur_iterator *)
Definition: icalrecur.c:3694
icalrecurrence_by_data by[ICAL_BY_NUM_PARTS]
Definition: icalrecur.h:286
void icalrecurrencetype_unref(struct icalrecurrencetype *recur)
Definition: icalrecur.c:790
struct icalrecurrencetype * icalrecurrencetype_new(void)
Definition: icalrecur.c:743
bool icalrecur_expand_recurrence(const char *rule, icaltime_t start, int count, icaltime_t *array)
Definition: icalrecur.c:4259
Defines the data structure for representing date-times.
icalrecurrencetype_frequency freq
Definition: icalrecur.h:255
int icalrecurrencetype_month_month(short month)
Definition: icalrecur.c:4249
const char * icalrecur_weekday_to_string(icalrecurrencetype_weekday kind)
Definition: icalrecur.c:271
bool icalrecurrencetype_month_is_leap(short month)
Definition: icalrecur.c:4244
void ical_set_invalid_rrule_handling_setting(ical_invalid_rrule_handling newSetting)
Definition: icalrecur.c:4316
struct icalrecurrencetype * icalrecurrencetype_new_from_string(const char *str)
Definition: icalrecur.c:869
bool icalrecur_resize_by(icalrecurrence_by_data *by, short size)
Definition: icalrecur.c:306
void icalrecur_iterator_free(icalrecur_iterator *impl)
Definition: icalrecur.c:2451
icalrecurrencetype_weekday week_start
Definition: icalrecur.h:267
icalrecurrencetype_byrule
Definition: icalrecur.h:125
icalrecurrencetype_skip skip
Definition: icalrecur.h:292
struct icaltimetype icalrecur_iterator_prev(icalrecur_iterator *impl)
Definition: icalrecur.c:3811
bool icalrecur_iterator_set_range(icalrecur_iterator *impl, struct icaltimetype from, struct icaltimetype to)
Definition: icalrecur.c:4141
void icalrecurrencetype_ref(struct icalrecurrencetype *recur)
Definition: icalrecur.c:782
enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day)
Definition: icalrecur.c:4221
struct icalrecurrencetype * icalrecurrencetype_clone(struct icalrecurrencetype *r)
Definition: icalrecur.c:832
icalrecurrencetype_weekday icalrecur_string_to_weekday(const char *str)
Definition: icalrecur.c:284
short icalrecurrencetype_encode_day(enum icalrecurrencetype_weekday weekday, int position)
Definition: icalrecur.c:4237
int icalrecurrencetype_day_position(short day)
Definition: icalrecur.c:4226
struct icaltimetype until
Definition: icalrecur.h:258
const char * icalrecur_freq_to_string(icalrecurrencetype_frequency kind)
Definition: icalrecur.c:213
ical_invalid_rrule_handling
Definition: icalrecur.h:616
short icalrecurrencetype_encode_month(int month, bool is_leap)
Definition: icalrecur.c:4254
ical_invalid_rrule_handling ical_get_invalid_rrule_handling_setting(void)
Definition: icalrecur.c:4295
An array of arbitrarily-sized elements which grows dynamically as elements are added.
icalrecur_iterator * icalrecur_iterator_new(struct icalrecurrencetype *rule, struct icaltimetype dtstart)
Definition: icalrecur.c:2323
char * icalrecurrencetype_as_string_r(struct icalrecurrencetype *recur)
Definition: icalrecur.c:1061
const char * icalrecur_skip_to_string(icalrecurrencetype_skip kind)
Definition: icalrecur.c:246
icalrecurrencetype_skip icalrecur_string_to_skip(const char *str)
Definition: icalrecur.c:234
icalrecurrencetype_frequency icalrecur_string_to_freq(const char *str)
Definition: icalrecur.c:201
char * icalrecurrencetype_as_string(struct icalrecurrencetype *recur)
Definition: icalrecur.c:1052