static void update_source_file(TMSourceFile *source_file, guchar* text_buf, gsize buf_size, gboolean use_buffer, gboolean update_workspace) { #ifdef TM_DEBUG g_message("Source file updating based on source file %s", source_file->file_name); #endif if (update_workspace) { /* tm_source_file_parse() deletes the tag objects - remove the tags from * workspace while they exist and can be scanned */ tm_tags_remove_file_tags(source_file, theWorkspace->tags_array); tm_tags_remove_file_tags(source_file, theWorkspace->typename_array); } tm_source_file_parse(source_file, text_buf, buf_size, use_buffer); tm_tags_sort(source_file->tags_array, file_tags_sort_attrs, FALSE, TRUE); if (update_workspace) { #ifdef TM_DEBUG g_message("Updating workspace from source file"); #endif tm_workspace_merge_tags(&theWorkspace->tags_array, source_file->tags_array); merge_extracted_tags(&(theWorkspace->typename_array), source_file->tags_array, TM_GLOBAL_TYPE_MASK); } #ifdef TM_DEBUG else g_message("Skipping workspace update because update_workspace is %s", update_workspace?"TRUE":"FALSE"); #endif }
/** Removes a source file from the workspace if it exists. This function also removes the tags belonging to this file from the workspace. To completely free the TMSourceFile pointer call tm_source_file_free() on it. @param source_file Pointer to the source file to be removed. */ void tm_workspace_remove_source_file(TMSourceFile *source_file) { guint i; g_return_if_fail(source_file != NULL); for (i=0; i < theWorkspace->source_files->len; ++i) { if (theWorkspace->source_files->pdata[i] == source_file) { tm_tags_remove_file_tags(source_file, theWorkspace->tags_array); tm_tags_remove_file_tags(source_file, theWorkspace->typename_array); g_ptr_array_remove_index_fast(theWorkspace->source_files, i); return; } } }