|  |  |  | Evolution-Data-Server Manual: Utilities (libedataserver) |  | 
|---|---|---|---|---|
| Top | Description | ||||
enum ESExpResultType; struct ESExpResult; enum ESExpTermType; struct ESExpSymbol; struct ESExpTerm; struct ESExp; ESExp * e_sexp_new (void); #define e_sexp_ref (f) #define e_sexp_unref (f) void e_sexp_add_function (ESExp *f,gint scope,const gchar *name,ESExpFunc *func,gpointer data); void e_sexp_add_ifunction (ESExp *f,gint scope,const gchar *name,ESExpIFunc *func,gpointer data); void e_sexp_add_variable (ESExp *f,gint scope,gchar *name,ESExpTerm *value); void e_sexp_remove_symbol (ESExp *f,gint scope,const gchar *name); gint e_sexp_set_scope (ESExp *f,gint scope); void e_sexp_input_text (ESExp *f,const gchar *text,gint len); void e_sexp_input_file (ESExp *f,gint fd); gint e_sexp_parse (ESExp *f); ESExpResult * e_sexp_eval (ESExp *f); ESExpResult * e_sexp_term_eval (struct _ESExp *f,struct _ESExpTerm *t); ESExpResult * e_sexp_result_new (struct _ESExp *f,gint type); void e_sexp_result_free (struct _ESExp *f,struct _ESExpResult *t); void e_sexp_resultv_free (struct _ESExp *f,gint argc,struct _ESExpResult **argv); void e_sexp_encode_bool (GString *s,gboolean state); void e_sexp_encode_string (GString *s,const gchar *string); void e_sexp_fatal_error (struct _ESExp *f,const gchar *why,...); const gchar * e_sexp_error (struct _ESExp *f); ESExpTerm * e_sexp_parse_value (ESExp *f); gboolean e_sexp_evaluate_occur_times (ESExp *f,time_t *start,time_t *end);
typedef enum {
	ESEXP_RES_ARRAY_PTR=0, /* type is a ptrarray, what it points to is implementation dependant */
	ESEXP_RES_INT,		/* type is a number */
	ESEXP_RES_STRING, /* type is a pointer to a single string */
	ESEXP_RES_BOOL,		/* boolean type */
	ESEXP_RES_TIME,		/* time_t type */
	ESEXP_RES_UNDEFINED /* unknown type */
} ESExpResultType;
struct ESExpResult {
	ESExpResultType type;
	union {
		GPtrArray *ptrarray;
		gint number;
		gchar *string;
		gint boolean;
		time_t time;
	} value;
	gboolean time_generator;
	time_t occuring_start;
	time_t occuring_end;
};
typedef enum {
	ESEXP_TERM_INT = 0, /* integer literal */
	ESEXP_TERM_BOOL, /* boolean literal */
	ESEXP_TERM_STRING, /* string literal */
	ESEXP_TERM_TIME, /* time_t literal (number of seconds past the epoch) */
	ESEXP_TERM_FUNC, /* normal function, arguments are evaluated before calling */
	ESEXP_TERM_IFUNC, /* immediate function, raw terms are arguments */
	ESEXP_TERM_VAR		/* variable reference */
} ESExpTermType;
struct ESExpSymbol {
	gint type;		/* ESEXP_TERM_FUNC or ESEXP_TERM_VAR */
	gchar *name;
	gpointer data;
	union {
		ESExpFunc *func;
		ESExpIFunc *ifunc;
	} f;
};
struct ESExpTerm {
	ESExpTermType type;
	union {
		gchar *string;
		gint number;
		gint boolean;
		time_t time;
		struct {
			struct _ESExpSymbol *sym;
			struct _ESExpTerm **terms;
			gint termcount;
		} func;
		struct _ESExpSymbol *var;
	} value;
};
struct ESExp {
#ifdef E_SEXP_IS_G_OBJECT
	GObject parent_object;
#else
	gint refcount;
#endif
	GScanner *scanner; /* for parsing text version */
	ESExpTerm *tree; /* root of expression tree */
	/* private stuff */
	jmp_buf failenv;
	gchar *error;
	GSList *operators;
	/* TODO: may also need a pool allocator for term strings, so we dont lose them
	 * in error conditions? */
	struct _EMemChunk *term_chunks;
	struct _EMemChunk *result_chunks;
};
void e_sexp_add_function (ESExp *f,gint scope,const gchar *name,ESExpFunc *func,gpointer data);
void e_sexp_add_ifunction (ESExp *f,gint scope,const gchar *name,ESExpIFunc *func,gpointer data);
void e_sexp_add_variable (ESExp *f,gint scope,gchar *name,ESExpTerm *value);
void e_sexp_resultv_free (struct _ESExp *f,gint argc,struct _ESExpResult **argv);
void e_sexp_encode_bool (GString *s,gboolean state);
Encode a bool into an s-expression s.  Bools are
encoded using #t #f syntax.
void e_sexp_encode_string (GString *s,const gchar *string);
Add a c string string to the s-expression stored in
the gstring s.  Quotes are added, and special characters
are escaped appropriately.
| 
 | Destination string. | 
| 
 | String expression. | 
gboolean e_sexp_evaluate_occur_times (ESExp *f,time_t *start,time_t *end);