PolizElem* PolizVar::EvaluateFun(PolizItem **stack) const { PolizElem *operand1 = Pop(stack); PolizVarAddr *i1 = dynamic_cast<PolizVarAddr*>(operand1); if (!i1) throw PolizExNotVarAddr(operand1); int value = 0; bool t = search_var(i1->Get()->name, &value); if (!t) { printf("s= %s\n", i1->Get()->name); throw PolizExNoVar(operand1); } return new PolizInt(value); }
void search(list *head) { list *temp; temp = findtable(head); if (!temp) { puts("테이블이 없습니다."); } else { if (!search_var(temp->head)) { } } }
Node* create_node(int type) { Node* node = malloc(sizeof(Node)); node->type = type; if (type == NOMBRE) node->val = atof(yytext); if (type == VARIABLE) { node->var = search_var(yytext); if (node->var == NULL) { node->var = create_var((char*)_strdup(yytext)); push_var(node->var); } } return node; }
static char *isdollars(int *i, char *str) { int v; char *tmp; char *result; v = *i + 1; while (ft_isalpha(str[v]) && str[v]) ++v; result = search_var(g_var, ft_strsub(str, *i + 1, (v - *i - 1))); *i = v - 1; if (str[*i]) { while (str[*i] != ' ' && str[*i]) ++*i; tmp = ft_strsub(str, v, (*i - v)); result = ft_strjoin(result, tmp); ft_free(tmp); } return (result); }
gboolean gtksnippets_inplaceparser_activate(GtkSnippetsInPlaceParser *self, const gchar* content) { gtksnippets_inplaceparser_deactivate(self); GtkTextBuffer * buffer = gtk_text_view_get_buffer(self->priv->view); GtkTextMark *insert = gtk_text_buffer_get_insert(buffer); /*TODO remove this gsnippets-parser dependency*/ if (gsnippets_parser_count_vars(content) <= 0) { GtkTextIter cur; gtk_text_buffer_get_iter_at_mark(buffer,&cur,insert); gchar *indent = _compute_line_indentation(self->priv->view,&cur); gchar *indent_text = _get_text_with_indent(content, indent); g_free(indent); gtk_text_buffer_insert_at_cursor(buffer,indent_text,-1); g_free(indent_text); gtk_text_view_scroll_mark_onscreen(self->priv->view,insert); return FALSE; } GtkTextIter start_iter; gtk_text_buffer_get_iter_at_mark(buffer,&start_iter,insert); GtkTextMark *start_mark = gtk_text_buffer_create_mark(buffer, SNIPPET_START_MARK, &start_iter, TRUE); GtkTextMark *end_text_mark = gtk_text_buffer_create_mark(buffer, SNIPPET_END_MARK, &start_iter, FALSE); GtkTextMark *end_mark; gchar *indent = _compute_line_indentation(self->priv->view,&start_iter); gchar *indent_text = _get_text_with_indent(content, indent); g_free(indent); gtk_text_buffer_insert_at_cursor(buffer,indent_text,-1); g_free(indent_text); gtk_text_view_scroll_mark_onscreen(self->priv->view,end_text_mark); gsnippets_func_manager_register_func("cursor", gsnippets_func_empty, self); /* Searching variables */ GtkSnippetsGtvVar *var; var = search_var(self,buffer,start_mark,end_text_mark); while(var!=NULL) { end_mark = gtksnippets_gtv_var_get_end_mark(var); store_var(self,var); var = search_var(self,buffer,end_mark,end_text_mark); } /*Sorting varables by index*/ self->priv->vars = g_list_sort(self->priv->vars, sort_variables); self->priv->active = TRUE; active_next_var(self); /*The first var is not handled by cursor-changed. We must set moving to FALSE*/ self->priv->moving = FALSE; g_signal_connect(self->priv->view,"key-press-event",G_CALLBACK(view_key_press_cb),self); g_signal_connect_after(buffer,"insert-text",G_CALLBACK(view_insert_text_cb),self); g_signal_connect_after(buffer,"delete-range",G_CALLBACK(buffer_delete_range_cb),self); g_signal_connect_after(buffer,"mark-set",G_CALLBACK(buffer_mark_set_cb),self); g_signal_emit (G_OBJECT (self), signals[PARSER_START], 0); return TRUE; }
static GtkSnippetsGtvVar* search_var(GtkSnippetsInPlaceParser *self, GtkTextBuffer *buffer,GtkTextMark *init_mark, GtkTextMark *limit_mark) { GtkSnippetsGtvVar *var = NULL; GtkTextMark *start_mark, *end_mark, *temp_mark; gchar *definition; const gchar *default_value; GtkTextIter start, end, temp_iter; GtkTextIter pos, limit; GError *error = NULL; gtk_text_buffer_get_iter_at_mark(buffer,&pos, init_mark); gtk_text_buffer_get_iter_at_mark(buffer,&limit, limit_mark); gboolean found = gtk_text_iter_forward_search(&pos, "${", GTK_TEXT_SEARCH_VISIBLE_ONLY, &start, NULL, &limit); if (found) { temp_iter = start; gtk_text_iter_forward_to_line_end(&temp_iter); found = gtk_text_iter_forward_search(&start, "}", GTK_TEXT_SEARCH_VISIBLE_ONLY, &end, NULL, &temp_iter); if (found) { gtk_text_iter_forward_char(&end); start_mark = gtk_text_buffer_create_mark(buffer, NULL, &start, TRUE); end_mark = gtk_text_buffer_create_mark(buffer, NULL, &end, FALSE); gtk_text_iter_forward_chars(&start,2); gtk_text_iter_forward_chars(&end,-1); definition = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); var = gtksnippets_gtv_var_new(definition, self->priv->view, start_mark, end_mark, VAR_TAG_NAME, VAR_ERROR_TAG_NAME); g_free(definition); default_value = gsnippets_variable_get_default_value(GSNIPPETS_VARIABLE(var)); if (default_value==NULL) default_value = gsnippets_variable_get_name(GSNIPPETS_VARIABLE(var)); gtk_text_buffer_begin_user_action(buffer); gtksnippets_gtv_var_set_text(var, default_value, &error); gtk_text_buffer_end_user_action(buffer); if (error != NULL) { g_warning("Error parsing variable: %s",error->message); g_error_free(error); } } else { /* If there is ${ but not } in the line, we must to search a new variable because if we return NULL, it is the end of the search */ gtk_text_iter_forward_chars(&start,2); temp_mark = gtk_text_buffer_create_mark(buffer, NULL, &start, TRUE); gtk_text_buffer_move_mark(buffer,temp_mark,&start); var = search_var(self,buffer,temp_mark,limit_mark); gtk_text_buffer_delete_mark(buffer,temp_mark); } } return var; }