Made filters eat error messages without filename
This commit is contained in:
parent
2673b1c93a
commit
51f7bb846d
@ -1,9 +1,13 @@
|
||||
[filter]
|
||||
id = bison
|
||||
name = Bison
|
||||
patterns = /(?P<file>[^:]+):(?P<line>\d+)\.(\d+|\d+\-\d+):/ stderr
|
||||
e/(?P<file>[^:]+):(?P<line>\d+)\.(\d+|\d+\-\d+):/
|
||||
|
||||
[filter]
|
||||
id = latex
|
||||
name = LaTeX
|
||||
patterns = /^l\.(?P<line>\d+)/
|
||||
o/^l\.(?P<line>\d+)/
|
||||
o/^LaTeX Warning: Reference .* on page .* undefined on input line (?P<line>\d+)\./
|
||||
o/^\! LaTeX Error: .*/
|
||||
o/^Overfull \\[vh]box .* detected at line (?P<line>\d+)/
|
||||
o/^Overfull \\[vh]box .* in paragraph at lines (?P<line>\d+)/
|
||||
|
@ -225,7 +225,7 @@ run_in_pane (MooCommandExe *cmd,
|
||||
/* XXX */
|
||||
if (!moo_cmd_view_running (MOO_CMD_VIEW (output)))
|
||||
{
|
||||
MooOutputFilter *filter;
|
||||
MooOutputFilter *filter = NULL;
|
||||
|
||||
cmd_line = make_cmd (cmd, ctx);
|
||||
g_return_if_fail (cmd_line != NULL);
|
||||
@ -234,7 +234,15 @@ run_in_pane (MooCommandExe *cmd,
|
||||
moo_edit_window_present_output (window);
|
||||
gtk_widget_grab_focus (output);
|
||||
|
||||
filter = cmd->priv->filter ? moo_command_filter_create (cmd->priv->filter) : NULL;
|
||||
if (cmd->priv->filter)
|
||||
filter = moo_command_filter_create (cmd->priv->filter);
|
||||
|
||||
if (filter)
|
||||
{
|
||||
const char *fn = MOO_IS_EDIT (doc) ? moo_edit_get_filename (MOO_EDIT (doc)) : NULL;
|
||||
moo_output_filter_set_active_file (filter, fn);
|
||||
}
|
||||
|
||||
moo_cmd_view_set_filter (MOO_CMD_VIEW (output), filter);
|
||||
|
||||
moo_cmd_view_run_command_full (MOO_CMD_VIEW (output),
|
||||
@ -243,6 +251,7 @@ run_in_pane (MooCommandExe *cmd,
|
||||
|
||||
if (filter)
|
||||
g_object_unref (filter);
|
||||
|
||||
g_free (cmd_line);
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
struct _MooOutputFilterPrivate {
|
||||
MooLineView *view;
|
||||
char *working_dir;
|
||||
char *filename;
|
||||
MooEditWindow *window;
|
||||
};
|
||||
|
||||
@ -44,6 +45,7 @@ moo_output_filter_finalize (GObject *object)
|
||||
MooOutputFilter *filter = MOO_OUTPUT_FILTER (object);
|
||||
|
||||
g_free (filter->priv->working_dir);
|
||||
g_free (filter->priv->filename);
|
||||
|
||||
G_OBJECT_CLASS (moo_output_filter_parent_class)->finalize (object);
|
||||
}
|
||||
@ -59,7 +61,7 @@ moo_output_filter_activate (MooOutputFilter *filter,
|
||||
|
||||
if (data)
|
||||
{
|
||||
moo_output_filter_open_file (filter, data);
|
||||
moo_output_filter_open_file_line (filter, data);
|
||||
moo_file_line_data_free (data);
|
||||
}
|
||||
}
|
||||
@ -268,10 +270,8 @@ moo_file_line_data_new (const char *file,
|
||||
{
|
||||
MooFileLineData *data;
|
||||
|
||||
g_return_val_if_fail (file != NULL, NULL);
|
||||
|
||||
data = g_new0 (MooFileLineData, 1);
|
||||
data->file = g_strdup (file);
|
||||
data->file = file && file[0] ? g_strdup (file) : NULL;
|
||||
data->line = line;
|
||||
data->character = character;
|
||||
|
||||
@ -305,6 +305,28 @@ moo_file_line_data_free (MooFileLineData *data)
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_output_filter_get_active_file (MooOutputFilter *filter)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_OUTPUT_FILTER (filter), NULL);
|
||||
return filter->priv->filename;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_output_filter_set_active_file (MooOutputFilter *filter,
|
||||
const char *filename)
|
||||
{
|
||||
char *tmp;
|
||||
|
||||
g_return_if_fail (MOO_IS_OUTPUT_FILTER (filter));
|
||||
|
||||
tmp = filter->priv->filename;
|
||||
filter->priv->filename = g_strdup (filename);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
moo_output_filter_get_working_dir (MooOutputFilter *filter)
|
||||
{
|
||||
@ -331,23 +353,26 @@ moo_output_filter_get_window (MooOutputFilter *filter)
|
||||
|
||||
|
||||
void
|
||||
moo_output_filter_open_file (MooOutputFilter *filter,
|
||||
moo_output_filter_open_file_line (MooOutputFilter *filter,
|
||||
MooFileLineData *data)
|
||||
{
|
||||
const char *filename;
|
||||
const char *path = NULL;
|
||||
char *freeme = NULL;
|
||||
|
||||
g_return_if_fail (MOO_IS_OUTPUT_FILTER (filter));
|
||||
g_return_if_fail (data != NULL);
|
||||
g_return_if_fail (data->file != NULL);
|
||||
|
||||
if (g_path_is_absolute (data->file))
|
||||
filename = data->file ? data->file : filter->priv->filename;
|
||||
g_return_if_fail (filename != NULL);
|
||||
|
||||
if (g_path_is_absolute (filename))
|
||||
{
|
||||
path = data->file;
|
||||
path = filename;
|
||||
}
|
||||
else if (filter->priv->working_dir)
|
||||
{
|
||||
freeme = g_build_filename (filter->priv->working_dir, data->file, NULL);
|
||||
freeme = g_build_filename (filter->priv->working_dir, filename, NULL);
|
||||
path = freeme;
|
||||
}
|
||||
|
||||
@ -365,7 +390,7 @@ moo_output_filter_open_file (MooOutputFilter *filter,
|
||||
}
|
||||
else
|
||||
{
|
||||
_moo_message ("could not find file '%s'", data->file);
|
||||
_moo_message ("could not find file '%s'", filename);
|
||||
}
|
||||
|
||||
g_free (freeme);
|
||||
|
@ -87,12 +87,15 @@ void moo_output_filter_cmd_start (MooOutputFilter *filter,
|
||||
gboolean moo_output_filter_cmd_exit (MooOutputFilter *filter,
|
||||
int status);
|
||||
|
||||
const char *moo_output_filter_get_active_file (MooOutputFilter *filter);
|
||||
void moo_output_filter_set_active_file (MooOutputFilter *filter,
|
||||
const char *filename);
|
||||
const char *moo_output_filter_get_working_dir (MooOutputFilter *filter);
|
||||
void moo_output_filter_set_window (MooOutputFilter *filter,
|
||||
gpointer window);
|
||||
gpointer moo_output_filter_get_window (MooOutputFilter *filter);
|
||||
|
||||
void moo_output_filter_open_file (MooOutputFilter *filter,
|
||||
void moo_output_filter_open_file_line (MooOutputFilter *filter,
|
||||
MooFileLineData *data);
|
||||
|
||||
|
||||
|
@ -27,7 +27,6 @@
|
||||
#define KEY_BUILTIN "builtin"
|
||||
#define KEY_NAME "name"
|
||||
#define KEY_ENABLED "enabled"
|
||||
#define KEY_PATTERNS "patterns"
|
||||
|
||||
|
||||
typedef struct {
|
||||
@ -103,7 +102,10 @@ parse_file_line (const char *file,
|
||||
{
|
||||
MooFileLineData *data;
|
||||
|
||||
if (!file || !file[0])
|
||||
file = file && *file ? file : NULL;
|
||||
line = line && *line ? line : NULL;
|
||||
|
||||
if (!file && !line)
|
||||
return NULL;
|
||||
|
||||
data = moo_file_line_data_new (file, -1, -1);
|
||||
@ -116,7 +118,6 @@ parse_file_line (const char *file,
|
||||
static void
|
||||
process_result (const char *text,
|
||||
EggRegex *regex,
|
||||
MooOutputTextType type,
|
||||
MooLineView *view)
|
||||
{
|
||||
char *file, *line, *character;
|
||||
@ -128,8 +129,7 @@ process_result (const char *text,
|
||||
line = egg_regex_fetch_named (regex, "line", text);
|
||||
character = egg_regex_fetch_named (regex, "character", text);
|
||||
|
||||
tag = moo_line_view_lookup_tag (view, type == MOO_OUTPUT_STDOUT ?
|
||||
MOO_CMD_VIEW_STDOUT : MOO_CMD_VIEW_STDERR);
|
||||
tag = moo_line_view_lookup_tag (view, MOO_CMD_VIEW_STDERR);
|
||||
line_no = moo_line_view_write_line (view, text, -1, tag);
|
||||
|
||||
data = parse_file_line (file, line, character);
|
||||
@ -164,8 +164,7 @@ process_line (MooOutputFilterSimple *filter,
|
||||
if (!egg_regex_match (regex->re, text, 0))
|
||||
continue;
|
||||
|
||||
process_result (text, regex->re, type,
|
||||
moo_output_filter_get_view (MOO_OUTPUT_FILTER(filter)));
|
||||
process_result (text, regex->re, moo_output_filter_get_view (MOO_OUTPUT_FILTER(filter)));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -440,9 +439,6 @@ _moo_output_filter_info_unref (MooOutputFilterInfo *info)
|
||||
/* Loading and saving
|
||||
*/
|
||||
|
||||
#define CHAR_IS_SPACE(c) ((c) == ' ' || (c) == '\t')
|
||||
#define CHAR_IS_SEPARATOR(c) ((c) == ',' || (c) == ';')
|
||||
|
||||
static gboolean
|
||||
parse_patterns (MooOutputFilterInfo *info,
|
||||
const char *string,
|
||||
@ -463,13 +459,37 @@ parse_patterns (MooOutputFilterInfo *info,
|
||||
gunichar delim;
|
||||
char *pattern_start, *pattern_end;
|
||||
MooOutputPatternInfo *pattern_info;
|
||||
MooOutputTextType type;
|
||||
|
||||
while (*string && CHAR_IS_SPACE (*string))
|
||||
string++;
|
||||
while (*string)
|
||||
{
|
||||
gunichar c = g_utf8_get_char (string);
|
||||
|
||||
if (c != ',' && c != ';' && !g_unichar_isspace (c))
|
||||
break;
|
||||
|
||||
string = g_utf8_next_char (string);
|
||||
}
|
||||
|
||||
if (!*string)
|
||||
break;
|
||||
|
||||
switch (*string++)
|
||||
{
|
||||
case 'o':
|
||||
type = MOO_OUTPUT_STDOUT;
|
||||
break;
|
||||
case 'e':
|
||||
type = MOO_OUTPUT_STDERR;
|
||||
break;
|
||||
case 'a':
|
||||
type = MOO_OUTPUT_ALL;
|
||||
break;
|
||||
default:
|
||||
g_warning ("output type missing: '%s'", string - 1);
|
||||
goto error;
|
||||
}
|
||||
|
||||
delim = g_utf8_get_char (string);
|
||||
pattern_start = g_utf8_next_char (string);
|
||||
pattern_end = g_utf8_strchr (pattern_start, -1, delim);
|
||||
@ -482,27 +502,10 @@ parse_patterns (MooOutputFilterInfo *info,
|
||||
|
||||
pattern_info = g_new0 (MooOutputPatternInfo, 1);
|
||||
pattern_info->pattern = g_strndup (pattern_start, pattern_end - pattern_start);
|
||||
pattern_info->type = MOO_OUTPUT_ALL;
|
||||
pattern_info->type = type;
|
||||
patterns = g_slist_prepend (patterns, pattern_info);
|
||||
|
||||
string = g_utf8_next_char (pattern_end);
|
||||
|
||||
while (*string && CHAR_IS_SPACE (*string))
|
||||
string++;
|
||||
|
||||
if (!strncmp (string, "stdout", strlen ("stdout")))
|
||||
{
|
||||
pattern_info->type = MOO_OUTPUT_STDOUT;
|
||||
string += strlen ("stdout");
|
||||
}
|
||||
else if (!strncmp (string, "stderr", strlen ("stderr")))
|
||||
{
|
||||
pattern_info->type = MOO_OUTPUT_STDERR;
|
||||
string += strlen ("stderr");
|
||||
}
|
||||
|
||||
if (CHAR_IS_SEPARATOR (*string))
|
||||
string++;
|
||||
}
|
||||
|
||||
info->n_patterns = g_slist_length (patterns);
|
||||
@ -556,12 +559,12 @@ parse_item (MooKeyFileItem *item,
|
||||
if (info->deleted || info->builtin)
|
||||
return info;
|
||||
|
||||
pattern_string = moo_key_file_item_steal (item, KEY_PATTERNS);
|
||||
pattern_string = moo_key_file_item_steal_content (item);
|
||||
|
||||
if (!parse_patterns (info, pattern_string, file))
|
||||
{
|
||||
_moo_output_filter_info_unref (info);
|
||||
return NULL;
|
||||
info = NULL;
|
||||
}
|
||||
|
||||
g_free (pattern_string);
|
||||
|
Loading…
x
Reference in New Issue
Block a user