## ESExp

ESExp

## Functions

ESExp * | e_sexp_new ()
#define | e_sexp_ref()
#define | e_sexp_unref()
void | e_sexp_add_function ()
void | e_sexp_add_ifunction ()
void | e_sexp_add_variable ()
void | e_sexp_remove_symbol ()
gint | e_sexp_set_scope ()
void | e_sexp_input_text ()
void | e_sexp_input_file ()
gint | e_sexp_parse ()
ESExpResult * | e_sexp_eval ()
ESExpResult * | e_sexp_term_eval ()
ESExpResult * | e_sexp_result_new ()
void | e_sexp_result_free ()
void | e_sexp_resultv_free ()
void | e_sexp_encode_bool ()
void | e_sexp_encode_string ()
void | e_sexp_fatal_error ()
const gchar * | e_sexp_error ()
ESExpTerm * | e_sexp_parse_value ()
gboolean | e_sexp_evaluate_occur_times ()

## Types and Values

enum | ESExpResultType
struct | ESExpResult
enum | ESExpTermType
struct | ESExpSymbol
struct | ESExpTerm
struct | ESExp
struct | ESExpClass

## Description

## 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_eval ()

    ESExpResult *
    e_sexp_eval (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.

#### Parameters

s | A GString to append to |
state | The boolean value |

### 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.

#### Parameters

s | Destination string. |
string | String expression. |

### 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_parse_value ()

    ESExpTerm *
    e_sexp_parse_value (ESExp *f);

Since 2.28

### e_sexp_evaluate_occur_times ()

    gboolean
    e_sexp_evaluate_occur_times (ESExp *f,
                                 time_t *start,
                                 time_t *end);

## Types and Values

### enum ESExpResultType

#### Members

ESEXP_RES_ARRAY_PTR |  |
ESEXP_RES_INT |  |
ESEXP_RES_STRING |  |
ESEXP_RES_BOOL |  |
ESEXP_RES_TIME |  |
ESEXP_RES_UNDEFINED |  |

### 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;
    };

### enum ESExpTermType

#### Members

ESEXP_TERM_INT |  |
ESEXP_TERM_BOOL |  |
ESEXP_TERM_STRING |  |
ESEXP_TERM_TIME |  |
ESEXP_TERM_FUNC |  |
ESEXP_TERM_IFUNC |  |
ESEXP_TERM_VAR |  |

### 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
    };