Exemple #1
0
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))
      {

      }
   }
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}