Takuro Ashie
makei****@users*****
2006年 11月 27日 (月) 14:52:21 JST
Index: tomoe/lib/tomoe-dict.c diff -u tomoe/lib/tomoe-dict.c:1.96 tomoe/lib/tomoe-dict.c:1.97 --- tomoe/lib/tomoe-dict.c:1.96 Mon Nov 27 14:36:14 2006 +++ tomoe/lib/tomoe-dict.c Mon Nov 27 14:52:21 2006 @@ -21,7 +21,7 @@ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA * - * $Id: tomoe-dict.c,v 1.96 2006/11/27 05:36:14 makeinu Exp $ + * $Id: tomoe-dict.c,v 1.97 2006/11/27 05:52:21 makeinu Exp $ */ #include <stdio.h> @@ -478,6 +478,14 @@ g_free (s); } +static gint +get_line_number (GMarkupParseContext *context) +{ + gint line; + g_markup_parse_context_get_position (context, &line, NULL); + return line; +} + static void start_element_handler (GMarkupParseContext *context, const gchar *element_name, @@ -502,7 +510,8 @@ } if (!data->in_dict) { - set_parse_error (error, "Invalid root element %s", element_name); + set_parse_error (error, "Invalid root element %s of %s.", + element_name, data->priv->filename); return; } @@ -511,14 +520,19 @@ return; } + if (!data->chr) { + set_parse_error (error, "Invalid element %s at %d of %s.", + element_name, get_line_number (context), + data->priv->filename); + return; + } + if (!strcmp ("code-point", element_name)) { - g_return_if_fail (data->chr); data->in_codepoint = TRUE; return; } if (!strcmp ("strokes", element_name)) { - g_return_if_fail (data->chr); data->writing = tomoe_writing_new (); return; } @@ -553,7 +567,6 @@ } if (!strcmp ("readings", element_name)) { - g_return_if_fail (data->chr); data->in_readings = TRUE; return; } @@ -579,13 +592,11 @@ } if (!strcmp ("meta", element_name)) { - g_return_if_fail (data->chr); data->in_meta = TRUE; return; } if (data->in_meta) { - g_return_if_fail (data->chr); g_free (data->key); g_free (data->value); data->key = g_strdup (element_name); @@ -673,7 +684,6 @@ ParseData *data = user_data; if (data->in_codepoint) { - g_return_if_fail (data->chr); tomoe_char_set_code (data->chr, text); return; } @@ -681,16 +691,12 @@ if (data->in_reading) { TomoeReading *reading; - g_return_if_fail (data->chr); - reading = tomoe_reading_new (data->reading_type, text); tomoe_char_add_reading (data->chr, reading); g_object_unref (reading); } if (data->in_meta) { - g_return_if_fail (data->chr); - g_free (data->value); data->value = g_strdup (text); }