AnjutaToken* mkp_project_get_variable_token (MkpProject *project, AnjutaToken *variable) { guint length; const gchar *string; gchar *name; MkpVariable *var; length = anjuta_token_get_length (variable); string = anjuta_token_get_string (variable); if ((length == 0) || (string == NULL)) return NULL; if (string[1] == '(') { name = g_strndup (string + 2, length - 3); } else { name = g_strndup (string + 1, 1); } var = g_hash_table_lookup (project->variables, name); g_free (name); return var != NULL ? var->value : NULL; }
/** * anjuta_token_stream_read: * @stream: a #AnjutaTokenStream object. * @buffer: a character buffer to fill with token data. * @max_size: the size of the buffer. * * Read token from the input stream and write the content as a C string in the * buffer passed as argument. * * Return value: The number of characters written in the buffer. */ gint anjuta_token_stream_read (AnjutaTokenStream *stream, gchar *buffer, gsize max_size) { gint result = 0; if (stream->token != NULL) { gsize length = anjuta_token_get_length (stream->token); if ((anjuta_token_get_type (stream->token) >= ANJUTA_TOKEN_PARSED) || (stream->pos >= length)) { for (;;) { /* Last token */ if (stream->token== stream->last) return 0; if (anjuta_token_get_type (stream->token) >= ANJUTA_TOKEN_PARSED) { stream->token = anjuta_token_next (stream->token); } else { stream->token = anjuta_token_next (stream->token); } if ((stream->token == NULL) || (anjuta_token_get_type (stream->token) == ANJUTA_TOKEN_EOV)) { /* Last token */ return 0; } else if ((anjuta_token_get_length (stream->token) != 0) && (anjuta_token_get_type (stream->token) < ANJUTA_TOKEN_PARSED)) { /* Find some data */ stream->pos = 0; length = anjuta_token_get_length (stream->token); break; } } } if (stream->pos < length) { const gchar *start = anjuta_token_get_string (stream->token); length -= stream->pos; if (length > max_size) length = max_size; memcpy (buffer, start + stream->pos, length); stream->pos += length; result = length; } } return result; }