CamelSExp

CamelSExp

Synopsis

struct              CamelSExp;
struct              CamelSExpSymbol;
struct              CamelSExpResult;
struct              CamelSExpTerm;
enum                CamelSExpResultType;
CamelSExpResult     (*CamelSExpFunc)                    (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpResult **argv,
                                                         gpointer data);
CamelSExpResult     (*CamelSExpIFunc)                   (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpTerm **argv,
                                                         gpointer data);
enum                CamelSExpTermType;
CamelSExp *         camel_sexp_new                      (void);
void                camel_sexp_add_function             (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name,
                                                         CamelSExpFunc func,
                                                         gpointer data);
void                camel_sexp_add_ifunction            (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name,
                                                         CamelSExpIFunc func,
                                                         gpointer data);
void                camel_sexp_add_variable             (CamelSExp *sexp,
                                                         guint scope,
                                                         gchar *name,
                                                         CamelSExpTerm *value);
void                camel_sexp_remove_symbol            (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name);
gint                camel_sexp_set_scope                (CamelSExp *sexp,
                                                         guint scope);
void                camel_sexp_input_text               (CamelSExp *sexp,
                                                         const gchar *text,
                                                         gint len);
void                camel_sexp_input_file               (CamelSExp *sexp,
                                                         gint fd);
gint                camel_sexp_parse                    (CamelSExp *sexp);
CamelSExpResult *   camel_sexp_eval                     (CamelSExp *sexp);
CamelSExpResult *   camel_sexp_term_eval                (CamelSExp *sexp,
                                                         CamelSExpTerm *term);
CamelSExpResult *   camel_sexp_result_new               (CamelSExp *sexp,
                                                         gint type);
void                camel_sexp_result_free              (CamelSExp *sexp,
                                                         CamelSExpResult *term);
void                camel_sexp_resultv_free             (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpResult **argv);
void                camel_sexp_encode_bool              (GString *string,
                                                         gboolean v_bool);
void                camel_sexp_encode_string            (GString *string,
                                                         const gchar *v_string);
void                camel_sexp_fatal_error              (CamelSExp *sexp,
                                                         const gchar *why,
                                                         ...);
const gchar *       camel_sexp_error                    (CamelSExp *sexp);
CamelSExpTerm *     camel_sexp_parse_value              (CamelSExp *sexp);
gboolean            camel_sexp_evaluate_occur_times     (CamelSExp *sexp,
                                                         time_t *start,
                                                         time_t *end);

Object Hierarchy

  GObject
   +----CamelSExp

Description

Details

struct CamelSExp

struct CamelSExp;

Since 3.4


struct CamelSExpSymbol

struct CamelSExpSymbol {
	gint type;		/* TERM_FUNC or TERM_VAR */
	gchar *name;
	gpointer data;
	union {
		CamelSExpFunc func;
		CamelSExpIFunc ifunc;
	} f;
};

Since 3.4


struct CamelSExpResult

struct CamelSExpResult {
	CamelSExpResultType 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;
};

Since 3.4


struct CamelSExpTerm

struct CamelSExpTerm {
	CamelSExpTermType type;
	union {
		gchar *string;
		gint number;
		gint boolean;
		time_t time;
		struct {
			CamelSExpSymbol *sym;
			CamelSExpTerm **terms;
			gint termcount;
		} func;
		CamelSExpSymbol *var;
	} value;
};

Since 3.4


enum CamelSExpResultType

typedef enum {
	CAMEL_SEXP_RES_ARRAY_PTR, /* type is a ptrarray, what it points to is implementation dependant */
	CAMEL_SEXP_RES_INT,		/* type is a number */
	CAMEL_SEXP_RES_STRING,		/* type is a pointer to a single string */
	CAMEL_SEXP_RES_BOOL,		/* boolean type */
	CAMEL_SEXP_RES_TIME,		/* time_t type */
	CAMEL_SEXP_RES_UNDEFINED /* unknown type */
} CamelSExpResultType;

CAMEL_SEXP_RES_ARRAY_PTR

CAMEL_SEXP_RES_INT

CAMEL_SEXP_RES_STRING

CAMEL_SEXP_RES_BOOL

CAMEL_SEXP_RES_TIME

CAMEL_SEXP_RES_UNDEFINED

Since 3.4


CamelSExpFunc ()

CamelSExpResult     (*CamelSExpFunc)                    (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpResult **argv,
                                                         gpointer data);

Since 3.4


CamelSExpIFunc ()

CamelSExpResult     (*CamelSExpIFunc)                   (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpTerm **argv,
                                                         gpointer data);

Since 3.4


enum CamelSExpTermType

typedef enum {
	CAMEL_SEXP_TERM_INT, /* integer literal */
	CAMEL_SEXP_TERM_BOOL, /* boolean literal */
	CAMEL_SEXP_TERM_STRING, /* string literal */
	CAMEL_SEXP_TERM_TIME, /* time_t literal (number of seconds past the epoch) */
	CAMEL_SEXP_TERM_FUNC, /* normal function, arguments are evaluated before calling */
	CAMEL_SEXP_TERM_IFUNC, /* immediate function, raw terms are arguments */
	CAMEL_SEXP_TERM_VAR /* variable reference */
} CamelSExpTermType;

CAMEL_SEXP_TERM_INT

CAMEL_SEXP_TERM_BOOL

CAMEL_SEXP_TERM_STRING

CAMEL_SEXP_TERM_TIME

CAMEL_SEXP_TERM_FUNC

CAMEL_SEXP_TERM_IFUNC

CAMEL_SEXP_TERM_VAR

Since 3.4


camel_sexp_new ()

CamelSExp *         camel_sexp_new                      (void);

Since 3.4


camel_sexp_add_function ()

void                camel_sexp_add_function             (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name,
                                                         CamelSExpFunc func,
                                                         gpointer data);

Since 3.4


camel_sexp_add_ifunction ()

void                camel_sexp_add_ifunction            (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name,
                                                         CamelSExpIFunc func,
                                                         gpointer data);

Since 3.4


camel_sexp_add_variable ()

void                camel_sexp_add_variable             (CamelSExp *sexp,
                                                         guint scope,
                                                         gchar *name,
                                                         CamelSExpTerm *value);

Since 3.4


camel_sexp_remove_symbol ()

void                camel_sexp_remove_symbol            (CamelSExp *sexp,
                                                         guint scope,
                                                         const gchar *name);

Since 3.4


camel_sexp_set_scope ()

gint                camel_sexp_set_scope                (CamelSExp *sexp,
                                                         guint scope);

Since 3.4


camel_sexp_input_text ()

void                camel_sexp_input_text               (CamelSExp *sexp,
                                                         const gchar *text,
                                                         gint len);

Since 3.4


camel_sexp_input_file ()

void                camel_sexp_input_file               (CamelSExp *sexp,
                                                         gint fd);

Since 3.4


camel_sexp_parse ()

gint                camel_sexp_parse                    (CamelSExp *sexp);

Since 3.4


camel_sexp_eval ()

CamelSExpResult *   camel_sexp_eval                     (CamelSExp *sexp);

Since 3.4


camel_sexp_term_eval ()

CamelSExpResult *   camel_sexp_term_eval                (CamelSExp *sexp,
                                                         CamelSExpTerm *term);

Since 3.4


camel_sexp_result_new ()

CamelSExpResult *   camel_sexp_result_new               (CamelSExp *sexp,
                                                         gint type);

Since 3.4


camel_sexp_result_free ()

void                camel_sexp_result_free              (CamelSExp *sexp,
                                                         CamelSExpResult *term);

Since 3.4


camel_sexp_resultv_free ()

void                camel_sexp_resultv_free             (CamelSExp *sexp,
                                                         gint argc,
                                                         CamelSExpResult **argv);

Since 3.4


camel_sexp_encode_bool ()

void                camel_sexp_encode_bool              (GString *string,
                                                         gboolean v_bool);

Encode a bool into an s-expression string. Bools are encoded using #t #f syntax.

Since 3.4


camel_sexp_encode_string ()

void                camel_sexp_encode_string            (GString *string,
                                                         const gchar *v_string);

Add a c string v_string to the s-expression stored in the gstring s. Quotes are added, and special characters are escaped appropriately.

string :

Destination string.

v_string :

String expression.

Since 3.4


camel_sexp_fatal_error ()

void                camel_sexp_fatal_error              (CamelSExp *sexp,
                                                         const gchar *why,
                                                         ...);

Since 3.4


camel_sexp_error ()

const gchar *       camel_sexp_error                    (CamelSExp *sexp);

Since 3.4


camel_sexp_parse_value ()

CamelSExpTerm *     camel_sexp_parse_value              (CamelSExp *sexp);

Since 3.4


camel_sexp_evaluate_occur_times ()

gboolean            camel_sexp_evaluate_occur_times     (CamelSExp *sexp,
                                                         time_t *start,
                                                         time_t *end);