gboolean tm_source_file_parse(TMSourceFile *source_file) { const char *file_name; gboolean status = TRUE; int passCount = 0; if ((NULL == source_file) || (NULL == source_file->work_object.file_name)) { g_warning("Attempt to parse NULL file"); return FALSE; } file_name = source_file->work_object.file_name; if (NULL == LanguageTable) { initializeParsing(); installLanguageMapDefaults(); if (NULL == TagEntryFunction) TagEntryFunction = tm_source_file_tags; if (NULL == TagEntrySetArglistFunction) TagEntrySetArglistFunction = tm_source_file_set_tag_arglist; } current_source_file = source_file; if (LANG_AUTO == source_file->lang) source_file->lang = getFileLanguage (file_name); if (source_file->lang < 0 || ! LanguageTable [source_file->lang]->enabled) return status; while ((TRUE == status) && (passCount < 3)) { if (source_file->work_object.tags_array) tm_tags_array_free(source_file->work_object.tags_array, FALSE); if (fileOpen (file_name, source_file->lang)) { if (LanguageTable [source_file->lang]->parser != NULL) { LanguageTable [source_file->lang]->parser (); fileClose (); break; } else if (LanguageTable [source_file->lang]->parser2 != NULL) status = LanguageTable [source_file->lang]->parser2 (passCount); fileClose (); } else { g_warning("%s: Unable to open %s", G_STRFUNC, file_name); return FALSE; } ++ passCount; } return status; }
static boolean setSourceFileName (vString *const fileName) { boolean result = FALSE; if (getFileLanguage (vStringValue (fileName)) != LANG_IGNORE) { vString *pathName; if (isAbsolutePath (vStringValue (fileName)) || File.path == NULL) pathName = vStringNewCopy (fileName); else pathName = combinePathAndFile ( vStringValue (File.path), vStringValue (fileName)); setSourceFileParameters (pathName); result = TRUE; } return result; }
static boolean setSourceFileName (vString *const fileName) { const langType language = getFileLanguage (vStringValue (fileName)); boolean result = FALSE; if (language != LANG_IGNORE) { vString *pathName; if (isAbsolutePath (vStringValue (fileName)) || File.path == NULL) pathName = vStringNewCopy (fileName); else { char *tmp = combinePathAndFile ( vStringValue (File.path), vStringValue (fileName)); pathName = vStringNewOwn (tmp); } setSourceFileParameters (pathName, language); result = TRUE; } return result; }
static void setSourceFileParameters (vString *const fileName) { if (File.source.name != NULL) vStringDelete (File.source.name); File.source.name = fileName; if (File.source.tagPath != NULL) eFree (File.source.tagPath); if (! Option.tagRelative || isAbsolutePath (vStringValue (fileName))) File.source.tagPath = eStrdup (vStringValue (fileName)); else File.source.tagPath = relativeFilename (vStringValue (fileName), TagFile.directory); if (vStringLength (fileName) > TagFile.max.file) TagFile.max.file = vStringLength (fileName); File.source.isHeader = isIncludeFile (vStringValue (fileName)); File.source.language = getFileLanguage (vStringValue (fileName)); }
gboolean tm_source_file_buffer_parse(TMSourceFile *source_file, guchar* text_buf, gint buf_size) { const char *file_name; gboolean status = TRUE; if ((NULL == source_file) || (NULL == source_file->work_object.file_name)) { g_warning("Attempt to parse NULL file"); return FALSE; } if ((NULL == text_buf) || (0 == buf_size)) { g_warning("Attempt to parse a NULL text buffer"); } file_name = source_file->work_object.file_name; if (NULL == LanguageTable) { initializeParsing(); installLanguageMapDefaults(); if (NULL == TagEntryFunction) TagEntryFunction = tm_source_file_tags; if (NULL == TagEntrySetArglistFunction) TagEntrySetArglistFunction = tm_source_file_set_tag_arglist; } current_source_file = source_file; if (LANG_AUTO == source_file->lang) source_file->lang = getFileLanguage (file_name); if (source_file->lang == LANG_IGNORE) { #ifdef TM_DEBUG g_warning("ignoring %s (unknown language)\n", file_name); #endif } else if (! LanguageTable [source_file->lang]->enabled) { #ifdef TM_DEBUG g_warning("ignoring %s (language disabled)\n", file_name); #endif } else { int passCount = 0; while ((TRUE == status) && (passCount < 3)) { if (source_file->work_object.tags_array) tm_tags_array_free(source_file->work_object.tags_array, FALSE); if (bufferOpen (text_buf, buf_size, file_name, source_file->lang)) { if (LanguageTable [source_file->lang]->parser != NULL) { LanguageTable [source_file->lang]->parser (); bufferClose (); break; } else if (LanguageTable [source_file->lang]->parser2 != NULL) status = LanguageTable [source_file->lang]->parser2 (passCount); bufferClose (); } else { g_warning("Unable to open %s", file_name); return FALSE; } ++ passCount; } return TRUE; } return status; }