SF.net SVN: geany:[2985] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Sep 23 11:37:21 UTC 2008
Revision: 2985
http://geany.svn.sourceforge.net/geany/?rev=2985&view=rev
Author: ntrel
Date: 2008-09-23 11:37:20 +0000 (Tue, 23 Sep 2008)
Log Message:
-----------
Remove ParseData::dir argument as it's not necessary for parsing;
instead, use function make_absolute().
Refactor msgwin_parse_compiler_error_line().
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/msgwindow.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-09-23 11:25:23 UTC (rev 2984)
+++ trunk/ChangeLog 2008-09-23 11:37:20 UTC (rev 2985)
@@ -4,6 +4,10 @@
Move adding a lexer notes to 'Syntax highlighting' section; mention
adding the LINK_LEXER command manually.
Some minor edits (reST section grouping).
+ * src/msgwindow.c:
+ Remove ParseData::dir argument as it's not necessary for parsing;
+ instead, use function make_absolute().
+ Refactor msgwin_parse_compiler_error_line().
2008-09-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/msgwindow.c
===================================================================
--- trunk/src/msgwindow.c 2008-09-23 11:25:23 UTC (rev 2984)
+++ trunk/src/msgwindow.c 2008-09-23 11:37:20 UTC (rev 2985)
@@ -53,12 +53,12 @@
typedef struct
{
const gchar *string; /* line data */
- const gchar *dir; /* working directory when string was generated */
const gchar *pattern; /* pattern to split the error message into some fields */
guint min_fields; /* used to detect errors after parsing */
guint line_idx; /* idx of the field where the line is */
gint file_idx; /* idx of the field where the filename is or -1 */
-} ParseData;
+}
+ParseData;
MessageWindow msgwindow;
@@ -615,6 +615,25 @@
}
+static void make_absolute(gchar **filename, const gchar *dir)
+{
+ guint skip_dot_slash = 0; /* number of characters to skip at the beginning of the filename */
+
+ if (*filename == NULL)
+ return;
+
+ /* skip some characters at the beginning of the filename, at the moment only "./"
+ * can be extended if other "trash" is known */
+ if (strncmp(*filename, "./", 2) == 0)
+ skip_dot_slash = 2;
+
+ /* add directory */
+ if (! utils_is_absolute_path(*filename))
+ setptr(*filename, g_strconcat(dir, G_DIR_SEPARATOR_S,
+ *filename + skip_dot_slash, NULL));
+}
+
+
/* try to parse the file and line number where the error occured described in line
* and when something useful is found, it stores the line number in *line and the
* relevant file with the error in *filename.
@@ -624,12 +643,11 @@
{
gchar *end = NULL;
gchar **fields;
- guint skip_dot_slash = 0; /* number of characters to skip at the beginning of the filename */
*filename = NULL;
*line = -1;
- g_return_if_fail(data->dir != NULL && data->string != NULL);
+ g_return_if_fail(data->string != NULL);
fields = g_strsplit_set(data->string, data->pattern, data->min_fields);
@@ -660,42 +678,18 @@
return;
}
- /* skip some characters at the beginning of the filename, at the moment only "./"
- * can be extended if other "trash" is known */
- if (strncmp(fields[data->file_idx], "./", 2) == 0) skip_dot_slash = 2;
-
- /* get the build directory to get the path to look for other files */
- if (! utils_is_absolute_path(fields[data->file_idx]))
- *filename = g_strconcat(data->dir, G_DIR_SEPARATOR_S,
- fields[data->file_idx] + skip_dot_slash, NULL);
- else
- *filename = g_strdup(fields[data->file_idx]);
-
+ *filename = g_strdup(fields[data->file_idx]);
g_strfreev(fields);
}
-/* try to parse the file and line number where the error occured described in string
- * and when something useful is found, it stores the line number in *line and the
- * relevant file with the error in *filename.
- * *line will be -1 if no error was found in string.
- * *filename must be freed unless it is NULL. */
-void msgwin_parse_compiler_error_line(const gchar *string, const gchar *dir, gchar **filename, gint *line)
+void parse_compiler_error_line(const gchar *string,
+ gchar **filename, gint *line)
{
- ParseData data = {NULL, NULL, NULL, 0, 0, 0};
+ ParseData data = {NULL, NULL, 0, 0, 0};
data.string = string;
- data.dir = build_info.dir;
- *filename = NULL;
- *line = -1;
-
- if (dir != NULL)
- data.dir = dir;
-
- g_return_if_fail(build_info.dir != NULL || dir != NULL);
- if (string == NULL) return;
-
switch (build_info.file_type_id)
{
case GEANY_FILETYPES_PHP:
@@ -852,6 +846,29 @@
}
+/* try to parse the file and line number where the error occured described in string
+ * and when something useful is found, it stores the line number in *line and the
+ * relevant file with the error in *filename.
+ * *line will be -1 if no error was found in string.
+ * *filename must be freed unless it is NULL. */
+void msgwin_parse_compiler_error_line(const gchar *string, const gchar *dir,
+ gchar **filename, gint *line)
+{
+ *filename = NULL;
+ *line = -1;
+
+ if (string == NULL)
+ return;
+
+ if (dir == NULL)
+ dir = build_info.dir;
+ g_return_if_fail(dir != NULL);
+
+ parse_compiler_error_line(string, filename, line);
+ make_absolute(filename, dir);
+}
+
+
gboolean msgwin_goto_messages_file_line()
{
GtkTreeIter iter;
@@ -904,17 +921,18 @@
*filename = NULL;
*line = -1;
- if (string == NULL || msgwindow.find_in_files_dir == NULL) return;
+ if (string == NULL || msgwindow.find_in_files_dir == NULL)
+ return;
/* conflict:3:conflicting types for `foo' */
data.string = string;
- data.dir = msgwindow.find_in_files_dir;
data.pattern = ":";
data.min_fields = 3;
data.line_idx = 1;
data.file_idx = 0;
parse_file_line(&data, filename, line);
+ make_absolute(filename, msgwindow.find_in_files_dir);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list