Takuro Ashie
makei****@users*****
2006年 11月 27日 (月) 10:26:01 JST
Index: tomoe/lib/tomoe-dict.c diff -u tomoe/lib/tomoe-dict.c:1.83 tomoe/lib/tomoe-dict.c:1.84 --- tomoe/lib/tomoe-dict.c:1.83 Sun Nov 26 16:34:52 2006 +++ tomoe/lib/tomoe-dict.c Mon Nov 27 10:26:00 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.83 2006/11/26 07:34:52 makeinu Exp $ + * $Id: tomoe-dict.c,v 1.84 2006/11/27 01:26:00 makeinu Exp $ */ #include <stdio.h> @@ -445,6 +445,7 @@ gboolean in_dict; gboolean in_literal; gboolean in_stroke; + gboolean in_readings; gboolean in_reading; gboolean in_meta; @@ -464,8 +465,6 @@ gpointer user_data, GError **error) { -#warning FIXME: need error check - ParseData *data = user_data; if (!strcmp ("tomoe_dictionary", element_name)) { @@ -480,36 +479,46 @@ return; } + if (!data->in_dict) + return; + if (!strcmp ("character", element_name)) { data->chr = tomoe_char_new (); return; } if (!strcmp ("literal", element_name)) { + g_return_if_fail (data->chr); data->in_literal = TRUE; return; } if (!strcmp ("strokelist", element_name)) { + g_return_if_fail (data->chr); data->writing = tomoe_writing_new (); return; } if (!strcmp ("s", element_name)) { + g_return_if_fail (data->writing); data->in_stroke = TRUE; return; } if (!strcmp ("readings", element_name)) { + g_return_if_fail (data->chr); + data->in_readings = TRUE; return; } if (!strcmp ("r", element_name)) { + g_return_if_fail (data->in_readings); data->in_reading = TRUE; return; } if (!strcmp ("meta", element_name)) { + g_return_if_fail (data->chr); data->in_meta = TRUE; return; } @@ -564,6 +573,7 @@ } if (!strcmp ("readings", element_name)) { + data->in_readings = FALSE; return; } @@ -630,6 +640,7 @@ if (data->in_reading && data->chr) { TomoeReading *reading; + #warning FIXME: detect reading type? reading = tomoe_reading_new (TOMOE_READING_INVALID, text); tomoe_char_add_reading (data->chr, reading); @@ -681,16 +692,17 @@ f = fopen (priv->filename, "rb"); g_return_val_if_fail (f, FALSE); - data.dict = dict; - data.priv = priv; - data.in_dict = FALSE; - data.in_literal = FALSE; - data.in_stroke = FALSE; - data.in_reading = FALSE; - data.chr = NULL; - data.writing = NULL; - data.key = NULL; - data.value = NULL; + data.dict = dict; + data.priv = priv; + data.in_dict = FALSE; + data.in_literal = FALSE; + data.in_stroke = FALSE; + data.in_readings = FALSE; + data.in_reading = FALSE; + data.chr = NULL; + data.writing = NULL; + data.key = NULL; + data.value = NULL; context = g_markup_parse_context_new (&parser, 0, &data, NULL);