コード例 #1
0
ファイル: table-allgui.c プロジェクト: Gnucash/gnucash
const char *
gnc_table_get_entry (Table *table, VirtualLocation virt_loc)
{
    TableGetEntryHandler entry_handler;
    const char *entry;
    BasicCell *cell;

    cell = gnc_table_get_cell (table, virt_loc);
    if (!cell || !cell->cell_name)
        return "";

    if (virt_cell_loc_equal (table->current_cursor_loc.vcell_loc,
                             virt_loc.vcell_loc))
    {
        CellIOFlags io_flags;

        io_flags = gnc_table_get_io_flags (table, virt_loc);

        if (io_flags & XACC_CELL_ALLOW_INPUT)
            return cell->value;
    }

    entry_handler = gnc_table_model_get_entry_handler (table->model,
                    cell->cell_name);
    if (!entry_handler) return "";

    entry = entry_handler (virt_loc, TRUE, NULL,
                           table->model->handler_user_data);
    if (!entry)
        entry = "";

    return entry;
}
コード例 #2
0
ファイル: table-allgui.c プロジェクト: Gnucash/gnucash
static const char *
gnc_table_get_entry_internal (Table *table, VirtualLocation virt_loc,
                              gboolean *conditionally_changed)
{
    TableGetEntryHandler entry_handler;
    const char *cell_name;
    const char *entry;

    cell_name = gnc_table_get_cell_name (table, virt_loc);

    entry_handler = gnc_table_model_get_entry_handler (table->model, cell_name);
    if (!entry_handler) return "";

    entry = entry_handler (virt_loc, FALSE,
                           conditionally_changed,
                           table->model->handler_user_data);
    if (!entry)
        entry = "";

    return entry;
}
コード例 #3
0
ファイル: po_parse_template.c プロジェクト: amery/clip-angelo
int
po_parse_template(FILE * in, char *filename, char *start, char *stop,
		  void *par, int (*entry_handler) (void *par, char *filename, int line, char *txt), int (*norm_handler) (void *par, char *txt, int len))
{
   int ch, s0, p0;

   int sl, pl, pos = 0;

   ExtractState state;

   int mline = 0;

   int line = 0;

   int ret = 0;

   Buf buf;

   memset(&buf, 0, sizeof(Buf));

   sl = strlen(start);
   pl = strlen(stop);
   s0 = start[0];
   p0 = stop[0];

	state = E_Norm_of_ExtractState;

   for (;;)
   {
      ch = fgetc(in);
      if (ch == EOF)
	 return ferror(in);
      if (ch == '\n')
	 ++line;
    again:
      switch (state)
      {
			case E_Norm_of_ExtractState:
	 if (ch == s0)
	 {
		 state = E_Start_of_ExtractState;
	    pos = 1;
	    continue;
	 }
	 else
	 {
	    if (norm_handler)
	    {
	       char b = ch;

	       ret = norm_handler(par, &b, 1);
	       if (ret)
		  goto end;
	    }
	 }
	 break;
			case E_Start_of_ExtractState:
	 if (pos == sl)
	 {
		 state = E_Msg_of_ExtractState;
	    pos = 0;
		 buf.end_of_Buf = 0;
	    mline = line;
	    goto again;
	 }
	 if (ch != start[pos++])
	 {
		 state = E_Norm_of_ExtractState;
	    if (norm_handler)
	    {
	       ret = norm_handler(par, start, pos - 1);
	       if (ret)
		  goto end;
	       goto again;
	    }
	    continue;
	 }
	 break;
			case E_Msg_of_ExtractState:
	 if (ch == p0)
	 {
		 state = E_Stop_of_ExtractState;
	    pos = 1;
	    continue;
	 }
	 put_Buf(&buf, ch);
	 break;
			case E_Stop_of_ExtractState:
	 if (pos == pl)
	 {
		 state = E_Norm_of_ExtractState;
	    put_Buf(&buf, 0);

	    if (entry_handler)
	    {
			 ret = entry_handler(par, filename, mline, buf.ptr_of_Buf);
	       if (ret)
		  goto end;
	    }

	    buf.end_of_Buf = 0;
	    goto again;
	 }
	 if (ch != stop[pos])
	 {
	    int i;

	    for (i = 0; i < pos; ++i)
	       put_Buf(&buf, stop[i]);

		 state = E_Msg_of_ExtractState;
	    goto again;
	 }
	 pos++;
	 break;
      }
   }
 end:
    free(buf.ptr_of_Buf);
   return ret;
}