static int set_page(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { const char *str; switch(t->type) { default: glw_set(ec->w, GLW_ATTRIB_PAGE_BY_ID, NULL, NULL); break; case TOKEN_CSTRING: glw_set(ec->w, GLW_ATTRIB_PAGE_BY_ID, t->t_cstring, NULL); break; case TOKEN_RSTRING: case TOKEN_LINK: str = rstr_get(t->t_rstring); glw_set(ec->w, GLW_ATTRIB_PAGE_BY_ID, str, NULL); break; case TOKEN_INT: glw_set(ec->w, GLW_ATTRIB_PAGE, t->t_int, NULL); break; case TOKEN_FLOAT: glw_set(ec->w, GLW_ATTRIB_PAGE, (int)t->t_float, NULL); break; } return 0; }
static int set_propref(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { if(t->type == TOKEN_VOID) { glw_set(ec->w, a->attrib, NULL, NULL); return 0; } if(t->type != TOKEN_PROPERTY_REF) return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a property ref, got %s", a->name, token2name(t)); glw_set(ec->w, a->attrib, t->t_prop, NULL); return 0; }
static int set_args(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { if(t->type == TOKEN_PROPERTY_OWNER || t->type == TOKEN_PROPERTY_REF) glw_set(ec->w, GLW_ATTRIB_ARGS, t->t_prop, NULL); return 0; }
static int set_transition_effect(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; if(t->type != TOKEN_IDENTIFIER || (v = str2val(rstr_get(t->t_rstring), transitiontab)) < 0) return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); glw_set(ec->w, GLW_ATTRIB_TRANSITION_EFFECT, v, NULL); return 0; }
static int set_args(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { if(t->type != TOKEN_PROPERTY_OWNER && t->type != TOKEN_PROPERTY_REF) return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a property, got %s", a->name, token2name(t)); glw_set(ec->w, GLW_ATTRIB_ARGS, t->t_prop, NULL); return 0; }
static int set_int(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; switch(t->type) { case TOKEN_CSTRING: v = atoi(t->t_cstring); break; case TOKEN_RSTRING: case TOKEN_LINK: v = atoi(rstr_get(t->t_rstring)); break; case TOKEN_FLOAT: v = t->t_float; break; case TOKEN_INT: v = t->t_int; break; case TOKEN_VOID: v = 0; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a scalar, got %s", a->name, token2name(t)); } void (*fn)(struct glw *w, int v) = a->fn; if(fn) fn(ec->w, v); else glw_set(ec->w, a->attrib, v, NULL); return 0; }