mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
new flag G_MARKUP_PREFIX_ERROR_POSITION to cause the parser to prepend
006-11-15 Ryan Lortie <desrt@desrt.ca> * docs/reference/glib/tmpl/markup.sgml: * glib/gmarkup.h: * glib/gmarkup.c: new flag G_MARKUP_PREFIX_ERROR_POSITION to cause the parser to prepend location information (ie: "Error on line %d, char %d:") to errors generated by the GMarkupParser callbacks. Closes #496046. svn path=/trunk/; revision=5860
This commit is contained in:
parent
f2a5aa6700
commit
1e2c77ecbc
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2006-11-15 Ryan Lortie <desrt@desrt.ca>
|
||||||
|
|
||||||
|
* docs/reference/glib/tmpl/markup.sgml:
|
||||||
|
* glib/gmarkup.h:
|
||||||
|
* glib/gmarkup.c: new flag G_MARKUP_PREFIX_ERROR_POSITION to cause the
|
||||||
|
parser to prepend location information (ie: "Error on line %d, char
|
||||||
|
%d:") to errors generated by the GMarkupParser callbacks.
|
||||||
|
|
||||||
|
Closes #496046.
|
||||||
|
|
||||||
2006-11-15 Ryan Lortie <desrt@desrt.ca>
|
2006-11-15 Ryan Lortie <desrt@desrt.ca>
|
||||||
|
|
||||||
* docs/reference/glib/glib-sections.txt:
|
* docs/reference/glib/glib-sections.txt:
|
||||||
|
@ -102,7 +102,7 @@ Error codes returned by markup parsing.
|
|||||||
@G_MARKUP_ERROR_PARSE: document was ill-formed
|
@G_MARKUP_ERROR_PARSE: document was ill-formed
|
||||||
@G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser functions; element wasn't known
|
@G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser functions; element wasn't known
|
||||||
@G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser functions; attribute wasn't known
|
@G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser functions; attribute wasn't known
|
||||||
@G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser functions; something was wrong with contents of the document, e.g. invalid attribute value
|
@G_MARKUP_ERROR_INVALID_POSITION: error should be set by #GMarkupParser functions; something was wrong with contents of the document, e.g. invalid attribute value
|
||||||
|
|
||||||
<!-- ##### MACRO G_MARKUP_ERROR ##### -->
|
<!-- ##### MACRO G_MARKUP_ERROR ##### -->
|
||||||
<para>
|
<para>
|
||||||
@ -124,6 +124,11 @@ Flags that affect the behaviour of the parser.
|
|||||||
the parser. Instead, the content of the section (without the
|
the parser. Instead, the content of the section (without the
|
||||||
<literal><![CDATA[</literal> and <literal>]]></literal>) is
|
<literal><![CDATA[</literal> and <literal>]]></literal>) is
|
||||||
passed to the @text function. This flag was added in GLib 2.12.
|
passed to the @text function. This flag was added in GLib 2.12.
|
||||||
|
@G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup
|
||||||
|
itself have line/column information prefixed to them to let the
|
||||||
|
caller know the location of the error. When this flag is set the
|
||||||
|
location information is also prefixed to errors generated by the
|
||||||
|
#GMarkupParser implementation functions.
|
||||||
|
|
||||||
<!-- ##### STRUCT GMarkupParseContext ##### -->
|
<!-- ##### STRUCT GMarkupParseContext ##### -->
|
||||||
<para>
|
<para>
|
||||||
|
@ -221,20 +221,34 @@ set_error (GMarkupParseContext *context,
|
|||||||
s = g_strdup_vprintf (format, args);
|
s = g_strdup_vprintf (format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
tmp_error = g_error_new (G_MARKUP_ERROR,
|
tmp_error = g_error_new_literal (G_MARKUP_ERROR, code, s);
|
||||||
code,
|
|
||||||
_("Error on line %d char %d: %s"),
|
|
||||||
context->line_number,
|
|
||||||
context->char_number,
|
|
||||||
s);
|
|
||||||
|
|
||||||
g_free (s);
|
g_free (s);
|
||||||
|
|
||||||
|
g_prefix_error (&tmp_error,
|
||||||
|
_("Error on line %d char %d: "),
|
||||||
|
context->line_number,
|
||||||
|
context->char_number);
|
||||||
|
|
||||||
mark_error (context, tmp_error);
|
mark_error (context, tmp_error);
|
||||||
|
|
||||||
g_propagate_error (error, tmp_error);
|
g_propagate_error (error, tmp_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
propagate_error (GMarkupParseContext *context,
|
||||||
|
GError **dest,
|
||||||
|
GError *src)
|
||||||
|
{
|
||||||
|
if (context->flags & G_MARKUP_PREFIX_ERROR_POSITION)
|
||||||
|
g_prefix_error (&src,
|
||||||
|
_("Error on line %d char %d: "),
|
||||||
|
context->line_number,
|
||||||
|
context->char_number);
|
||||||
|
|
||||||
|
mark_error (context, src);
|
||||||
|
|
||||||
|
g_propagate_error (dest, src);
|
||||||
|
}
|
||||||
|
|
||||||
/* To make these faster, we first use the ascii-only tests, then check
|
/* To make these faster, we first use the ascii-only tests, then check
|
||||||
* for the usual non-alnum name-end chars, and only then call the
|
* for the usual non-alnum name-end chars, and only then call the
|
||||||
@ -1347,10 +1361,7 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
|
|||||||
context->attr_values[0] == NULL);
|
context->attr_values[0] == NULL);
|
||||||
|
|
||||||
if (tmp_error != NULL)
|
if (tmp_error != NULL)
|
||||||
{
|
propagate_error (context, error, tmp_error);
|
||||||
mark_error (context, tmp_error);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1500,10 +1511,7 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
|
|||||||
context->start = context->iter;
|
context->start = context->iter;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
propagate_error (context, error, tmp_error);
|
||||||
mark_error (context, tmp_error);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
truncate_partial (context);
|
truncate_partial (context);
|
||||||
@ -1613,10 +1621,7 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
|
|||||||
context->tag_stack);
|
context->tag_stack);
|
||||||
|
|
||||||
if (tmp_error)
|
if (tmp_error)
|
||||||
{
|
propagate_error (context, error, tmp_error);
|
||||||
mark_error (context, tmp_error);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (close_name);
|
g_free (close_name);
|
||||||
@ -1700,10 +1705,7 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
|
|||||||
context->start = context->iter; /* could begin text */
|
context->start = context->iter; /* could begin text */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
propagate_error (context, error, tmp_error);
|
||||||
mark_error (context, tmp_error);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -48,7 +48,8 @@ GQuark g_markup_error_quark (void);
|
|||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
|
G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
|
||||||
G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1
|
G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1,
|
||||||
|
G_MARKUP_PREFIX_ERROR_POSITION = 1 << 2
|
||||||
} GMarkupParseFlags;
|
} GMarkupParseFlags;
|
||||||
|
|
||||||
typedef struct _GMarkupParseContext GMarkupParseContext;
|
typedef struct _GMarkupParseContext GMarkupParseContext;
|
||||||
|
Loading…
Reference in New Issue
Block a user