void designer_widget_node_aux_load_callback (designer_node_t *node, lisp_object_t *obj, gpointer user_data) { lisp_object_t *x = lisp_proplist_lookup_symbol(obj, ":x"); lisp_object_t *y = lisp_proplist_lookup_symbol(obj, ":y"); g_assert(lisp_number_p(x) && lisp_number_p(y)); designer_widget_move_node(GTK_WIDGET(user_data), node, lisp_real(x), lisp_real(y)); }
VALUE build_py_sexpr(lisp_object_t* cur) { if (lisp_cons_p(cur)) { VALUE lst = rb_ary_new(); while (cur) { rb_ary_push(lst, build_py_sexpr(lisp_car(cur))); cur = lisp_cdr(cur); } return lst; } else if (lisp_string_p(cur)) { return rb_str_new2(lisp_string(cur)); } else if (lisp_symbol_p(cur)) { return ID2SYM(rb_intern(lisp_symbol(cur))); } else if (lisp_integer_p(cur)) { return INT2NUM(lisp_integer(cur)); } else if (lisp_real_p(cur)) { return rb_float_new(lisp_real(cur)); } else if (lisp_boolean_p(cur)) { if (lisp_boolean(cur)) return Qtrue; else return Qfalse; } else { return Qnil; } }