Functions
e_sexp_new ()
ESExp *
e_sexp_new (void
);
e_sexp_ref()
#define e_sexp_ref(f) g_object_ref (f)
e_sexp_unref()
#define e_sexp_unref(f) g_object_unref (f)
e_sexp_add_function ()
void
e_sexp_add_function (ESExp *f
,
gint scope
,
const gchar *name
,
ESExpFunc *func
,
gpointer data
);
e_sexp_add_ifunction ()
void
e_sexp_add_ifunction (ESExp *f
,
gint scope
,
const gchar *name
,
ESExpIFunc *func
,
gpointer data
);
e_sexp_add_variable ()
void
e_sexp_add_variable (ESExp *f
,
gint scope
,
gchar *name
,
ESExpTerm *value
);
e_sexp_remove_symbol ()
void
e_sexp_remove_symbol (ESExp *f
,
gint scope
,
const gchar *name
);
e_sexp_set_scope ()
gint
e_sexp_set_scope (ESExp *f
,
gint scope
);
e_sexp_input_text ()
void
e_sexp_input_text (ESExp *f
,
const gchar *text
,
gint len
);
e_sexp_input_file ()
void
e_sexp_input_file (ESExp *f
,
gint fd
);
e_sexp_parse ()
gint
e_sexp_parse (ESExp *f
);
e_sexp_term_eval ()
ESExpResult *
e_sexp_term_eval (struct _ESExp *f
,
struct _ESExpTerm *t
);
e_sexp_result_new ()
ESExpResult *
e_sexp_result_new (struct _ESExp *f
,
gint type
);
e_sexp_result_free ()
void
e_sexp_result_free (struct _ESExp *f
,
struct _ESExpResult *t
);
e_sexp_resultv_free ()
void
e_sexp_resultv_free (struct _ESExp *f
,
gint argc
,
struct _ESExpResult **argv
);
e_sexp_encode_bool ()
void
e_sexp_encode_bool (GString *s
,
gboolean state
);
Encode a bool into an s-expression s
. Bools are
encoded using #t #f syntax.
e_sexp_encode_string ()
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.
e_sexp_fatal_error ()
void
e_sexp_fatal_error (struct _ESExp *f
,
const gchar *why
,
...
);
e_sexp_error ()
const gchar *
e_sexp_error (struct _ESExp *f
);
e_sexp_evaluate_occur_times ()
gboolean
e_sexp_evaluate_occur_times (ESExp *f
,
time_t *start
,
time_t *end
);
Types and Values
struct ESExpResult
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;
};
struct ESExpSymbol
struct ESExpSymbol {
gint type; /* ESEXP_TERM_FUNC or ESEXP_TERM_VAR */
gchar *name;
gpointer data;
union {
ESExpFunc *func;
ESExpIFunc *ifunc;
} f;
};
struct ESExpTerm
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
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;
};
struct ESExpClass
struct ESExpClass {
#ifdef E_SEXP_IS_G_OBJECT
GObjectClass parent_class;
#else
gint dummy;
#endif
};