diff options
author | Tim Janik <timj@gtk.org> | 1998-06-30 11:05:20 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 1998-06-30 11:05:20 +0000 |
commit | b483ca4b9765c3fb39e1af170b35786679f216bc (patch) | |
tree | 43653843787ec98f56ad0e1d7df92e1dcfbda3e0 | |
parent | 80b0b3ea05c4575911f37fa5ad66d7deeaef0ad6 (diff) | |
download | gtk+-b483ca4b9765c3fb39e1af170b35786679f216bc.tar.gz |
code overhaul for simplicity and more descriptive error messages.
Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org>
* gtk/gtkrc.c: code overhaul for simplicity and more descriptive
error messages.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 5 | ||||
-rw-r--r-- | gtk/gtkrc.c | 621 | ||||
-rw-r--r-- | gtk/testgtkrc | 1 | ||||
-rw-r--r-- | tests/testgtkrc | 1 |
10 files changed, 321 insertions, 337 deletions
@@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 0163d85b38..a546612c8c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Tue Jun 30 12:45:19 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkrc.c: code overhaul for simplicity and more descriptive + error messages. + Tue Jun 30 09:24:40 1998 Tim Janik <timj@gtk.org> * gtk/gtkaccelgroup.c (gtk_accelerator_parse): parse "<Release>" diff --git a/gtk/gtkrc.c b/gtk/gtkrc.c index f7f6c1d4b1..1d9d59eb36 100644 --- a/gtk/gtkrc.c +++ b/gtk/gtkrc.c @@ -45,25 +45,10 @@ enum { TOKEN_STYLE, TOKEN_TEXT, TOKEN_WIDGET, - TOKEN_WIDGET_CLASS + TOKEN_WIDGET_CLASS, + TOKEN_LAST }; -enum { - PARSE_OK, - PARSE_ERROR, - PARSE_SYNTAX, - PARSE_DONE -}; - -enum { - PARSE_START, - PARSE_COMMENT, - PARSE_STRING, - PARSE_SYMBOL, - PARSE_NUMBER -}; - - typedef struct _GtkRcStyle GtkRcStyle; typedef struct _GtkRcSet GtkRcSet; typedef struct _GtkRcNode GtkRcNode; @@ -115,34 +100,32 @@ static void gtk_rc_parse_file (const gchar *filename, static void gtk_rc_parse_any (const gchar *input_name, gint input_fd, const gchar *input_string); -static gint gtk_rc_parse_statement (GScanner *scanner); -static gint gtk_rc_parse_style (GScanner *scanner); -static gint gtk_rc_parse_style_option (GScanner *scanner, - GtkRcStyle *rc_style); -static gint gtk_rc_parse_base (GScanner *scanner, +static guint gtk_rc_parse_statement (GScanner *scanner); +static guint gtk_rc_parse_style (GScanner *scanner); +static guint gtk_rc_parse_base (GScanner *scanner, GtkStyle *style); -static gint gtk_rc_parse_bg (GScanner *scanner, +static guint gtk_rc_parse_bg (GScanner *scanner, GtkStyle *style); -static gint gtk_rc_parse_fg (GScanner *scanner, +static guint gtk_rc_parse_fg (GScanner *scanner, GtkStyle *style); -static gint gtk_rc_parse_text (GScanner *scanner, +static guint gtk_rc_parse_text (GScanner *scanner, GtkStyle *style); -static gint gtk_rc_parse_bg_pixmap (GScanner *scanner, +static guint gtk_rc_parse_bg_pixmap (GScanner *scanner, GtkRcStyle *rc_style); -static gint gtk_rc_parse_font (GScanner *scanner, +static guint gtk_rc_parse_font (GScanner *scanner, GtkRcStyle *rc_style); -static gint gtk_rc_parse_fontset (GScanner *scanner, +static guint gtk_rc_parse_fontset (GScanner *scanner, GtkRcStyle *rc_style); -static gint gtk_rc_parse_state (GScanner *scanner, +static guint gtk_rc_parse_state (GScanner *scanner, GtkStateType *state); -static gint gtk_rc_parse_color (GScanner *scanner, +static guint gtk_rc_parse_color (GScanner *scanner, GdkColor *color); -static gint gtk_rc_parse_pixmap_path (GScanner *scanner); +static guint gtk_rc_parse_pixmap_path (GScanner *scanner); static void gtk_rc_parse_pixmap_path_string (gchar *pix_path); static char* gtk_rc_find_pixmap_in_path (GScanner *scanner, gchar *pixmap_file); -static gint gtk_rc_parse_widget_style (GScanner *scanner); -static gint gtk_rc_parse_widget_class_style (GScanner *scanner); +static guint gtk_rc_parse_widget_style (GScanner *scanner); +static guint gtk_rc_parse_widget_class_style (GScanner *scanner); static void gtk_rc_clear_hash_node (gpointer key, gpointer data, gpointer user_data); @@ -195,7 +178,7 @@ static GScannerConfig gtk_rc_scanner_config = static struct { gchar *name; - gint token; + guint token; } symbols[] = { { "include", TOKEN_INCLUDE }, { "ACTIVE", TOKEN_ACTIVE }, @@ -218,8 +201,8 @@ static struct static guint nsymbols = sizeof (symbols) / sizeof (symbols[0]); static GHashTable *rc_style_ht = NULL; -static GSList *widget_sets = NULL; -static GSList *widget_class_sets = NULL; +static GSList *gtk_rc_sets_widget = NULL; +static GSList *gtk_rc_sets_widget_class = NULL; #define GTK_RC_MAX_PIXMAP_PATHS 128 static gchar *pixmap_path[GTK_RC_MAX_PIXMAP_PATHS]; @@ -369,7 +352,7 @@ gtk_rc_clear_styles (void) g_hash_table_destroy (rc_style_ht); rc_style_ht = NULL; - tmp_list = widget_sets; + tmp_list = gtk_rc_sets_widget; while (tmp_list) { GtkRcSet *rc_set; @@ -380,10 +363,10 @@ gtk_rc_clear_styles (void) tmp_list = tmp_list->next; } - g_slist_free (widget_sets); - widget_sets = NULL; + g_slist_free (gtk_rc_sets_widget); + gtk_rc_sets_widget = NULL; - tmp_list = widget_class_sets; + tmp_list = gtk_rc_sets_widget_class; while (tmp_list) { GtkRcSet *rc_set; @@ -394,8 +377,8 @@ gtk_rc_clear_styles (void) tmp_list = tmp_list->next; } - g_slist_free (widget_class_sets); - widget_class_sets = NULL; + g_slist_free (gtk_rc_sets_widget_class); + gtk_rc_sets_widget_class = NULL; gtk_rc_init (); } @@ -450,13 +433,13 @@ gtk_rc_get_style (GtkWidget *widget) { GtkRcStyle *rc_style; - if (widget_sets) + if (gtk_rc_sets_widget) { gchar *path, *path_reversed; guint path_length; gtk_widget_path (widget, &path_length, &path, &path_reversed); - rc_style = gtk_rc_styles_match (widget_sets, path_length, path, path_reversed); + rc_style = gtk_rc_styles_match (gtk_rc_sets_widget, path_length, path, path_reversed); g_free (path); g_free (path_reversed); @@ -464,13 +447,13 @@ gtk_rc_get_style (GtkWidget *widget) return gtk_rc_style_init (rc_style, gtk_widget_get_colormap (widget)); } - if (widget_class_sets) + if (gtk_rc_sets_widget_class) { gchar *path, *path_reversed; guint path_length; gtk_widget_class_path (widget, &path_length, &path, &path_reversed); - rc_style = gtk_rc_styles_match (widget_class_sets, path_length, path, path_reversed); + rc_style = gtk_rc_styles_match (gtk_rc_sets_widget_class, path_length, path, path_reversed); g_free (path); g_free (path_reversed); @@ -505,7 +488,7 @@ gtk_rc_add_widget_name_style (GtkStyle *style, gtk_pattern_spec_init (&rc_set->pspec, pattern); rc_set->rc_style = rc_style; - widget_sets = g_slist_append (widget_sets, rc_set); + gtk_rc_sets_widget = g_slist_append (gtk_rc_sets_widget, rc_set); } void @@ -532,7 +515,7 @@ gtk_rc_add_widget_class_style (GtkStyle *style, gtk_pattern_spec_init (&rc_set->pspec, pattern); rc_set->rc_style = rc_style; - widget_class_sets = g_slist_append (widget_class_sets, rc_set); + gtk_rc_sets_widget_class = g_slist_append (gtk_rc_sets_widget_class, rc_set); } static void @@ -558,38 +541,62 @@ gtk_rc_parse_any (const gchar *input_name, g_scanner_input_text (scanner, input_string, strlen (input_string)); } + scanner->input_name = input_name; + g_scanner_freeze_symbol_table (scanner); for (i = 0; i < nsymbols; i++) g_scanner_add_symbol (scanner, symbols[i].name, GINT_TO_POINTER (symbols[i].token)); + g_scanner_thaw_symbol_table (scanner); done = FALSE; while (!done) { - gint return_val; - - return_val = gtk_rc_parse_statement (scanner); - - switch (return_val) + if (g_scanner_peek_next_token (scanner) == G_TOKEN_EOF) + done = TRUE; + else { - case PARSE_OK: - break; - default: - if (scanner->next_token != G_TOKEN_NONE) - g_scanner_get_next_token (scanner); + guint expected_token; - if (input_string) - g_warning ("rc string parse error: line %d", - scanner->line); - else - g_warning ("rc file parse error: \"%s\" line %d", - input_name, - scanner->line); - /* fall through */ - case PARSE_DONE: - done = TRUE; - break; + expected_token = gtk_rc_parse_statement (scanner); + + if (expected_token != G_TOKEN_NONE) + { + gchar *symbol_name; + gchar *msg; + + msg = NULL; + if (expected_token > TOKEN_INVALID && + expected_token < TOKEN_LAST) + { + for (i = 0; i < nsymbols; i++) + if (symbols[i].token == expected_token) + msg = symbols[i].name; + if (msg) + msg = g_strconcat ("e.g. `", msg, "'", NULL); + } + if (scanner->token > TOKEN_INVALID && + scanner->token < TOKEN_LAST) + { + symbol_name = "???"; + for (i = 0; i < nsymbols; i++) + if (symbols[i].token == scanner->token) + symbol_name = symbols[i].name; + } + else + symbol_name = NULL; + g_scanner_unexp_token (scanner, + expected_token, + NULL, + "keyword", + symbol_name, + msg, + TRUE); + g_free (msg); + done = TRUE; + } } } + g_scanner_destroy (scanner); } @@ -730,66 +737,61 @@ gtk_rc_style_init (GtkRcStyle *rc_style, GdkColormap *cmap) return style; } -static gint +static guint gtk_rc_parse_statement (GScanner *scanner) { - gint token; - gint error; + guint token; token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF) - return PARSE_DONE; - if (token == TOKEN_INCLUDE) + switch (token) { - g_scanner_get_next_token (scanner); + case TOKEN_INCLUDE: token = g_scanner_get_next_token (scanner); + if (token != TOKEN_INCLUDE) + return TOKEN_INCLUDE; + token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; gtk_rc_parse_file (scanner->value.v_string, FALSE); + return G_TOKEN_NONE; + + case TOKEN_STYLE: + return gtk_rc_parse_style (scanner); - return PARSE_OK; + case TOKEN_PIXMAP_PATH: + return gtk_rc_parse_pixmap_path (scanner); + + case TOKEN_WIDGET: + return gtk_rc_parse_widget_style (scanner); + + case TOKEN_WIDGET_CLASS: + return gtk_rc_parse_widget_class_style (scanner); + + default: + g_scanner_get_next_token (scanner); + return /* G_TOKEN_SYMBOL */ TOKEN_STYLE; } - - error = gtk_rc_parse_style (scanner); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_pixmap_path (scanner); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_widget_style (scanner); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_widget_class_style (scanner); - - return error; } -static gint +static guint gtk_rc_parse_style (GScanner *scanner) { GtkRcStyle *rc_style; GtkRcStyle *parent_style; - gint token; - gint error; + guint token; gint insert; gint i; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_STYLE) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_STYLE) + return TOKEN_STYLE; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; insert = FALSE; rc_style = g_hash_table_lookup (rc_style_ht, scanner->value.v_string); @@ -822,7 +824,7 @@ gtk_rc_parse_style (GScanner *scanner) gtk_style_unref (rc_style->proto_style); g_free (rc_style); } - return PARSE_ERROR; + return G_TOKEN_STRING; } parent_style = g_hash_table_lookup (rc_style_ht, scanner->value.v_string); @@ -870,23 +872,58 @@ gtk_rc_parse_style (GScanner *scanner) gtk_style_unref (rc_style->proto_style); g_free (rc_style); } - return PARSE_ERROR; + return G_TOKEN_LEFT_CURLY; } - while (1) + token = g_scanner_peek_next_token (scanner); + while (token != G_TOKEN_RIGHT_CURLY) { - error = gtk_rc_parse_style_option (scanner, rc_style); - if (error == PARSE_SYNTAX) - break; - if (error == PARSE_ERROR) + switch (token) + { + case TOKEN_BASE: + token = gtk_rc_parse_base (scanner, rc_style->proto_style); + break; + case TOKEN_BG: + token = gtk_rc_parse_bg (scanner, rc_style->proto_style); + break; + case TOKEN_FG: + token = gtk_rc_parse_fg (scanner, rc_style->proto_style); + break; + case TOKEN_TEXT: + token = gtk_rc_parse_text (scanner, rc_style->proto_style); + break; + case TOKEN_BG_PIXMAP: + token = gtk_rc_parse_bg_pixmap (scanner, rc_style); + break; + case TOKEN_FONT: + token = gtk_rc_parse_font (scanner, rc_style); + break; + case TOKEN_FONTSET: + token = gtk_rc_parse_fontset (scanner, rc_style); + break; + default: + g_scanner_get_next_token (scanner); + token = G_TOKEN_RIGHT_CURLY; + break; + } + + if (token != G_TOKEN_NONE) { if (insert) { + if (rc_style->fontset_name) + g_free (rc_style->fontset_name); + if (rc_style->font_name) + g_free (rc_style->font_name); + for (i = 0; i < 5; i++) + if (rc_style->bg_pixmap_name[i]) + g_free (rc_style->bg_pixmap_name[i]); gtk_style_unref (rc_style->proto_style); g_free (rc_style); } - return error; + return token; } + token = g_scanner_peek_next_token (scanner); } token = g_scanner_get_next_token (scanner); @@ -896,7 +933,7 @@ gtk_rc_parse_style (GScanner *scanner) { if (rc_style->fontset_name) g_free (rc_style->fontset_name); - else if (rc_style->font_name) + if (rc_style->font_name) g_free (rc_style->font_name); for (i = 0; i < 5; i++) @@ -906,194 +943,126 @@ gtk_rc_parse_style (GScanner *scanner) gtk_style_unref (rc_style->proto_style); g_free (rc_style); } - return PARSE_ERROR; + return G_TOKEN_RIGHT_CURLY; } if (insert) g_hash_table_insert (rc_style_ht, rc_style->name, rc_style); - return PARSE_OK; -} - -static gint -gtk_rc_parse_style_option (GScanner *scanner, - GtkRcStyle *rc_style) -{ - gint token; - gint error; - - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - - error = gtk_rc_parse_base (scanner, rc_style->proto_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_bg (scanner, rc_style->proto_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_fg (scanner, rc_style->proto_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_text (scanner, rc_style->proto_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_bg_pixmap (scanner, rc_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_font (scanner, rc_style); - if (error != PARSE_SYNTAX) - return error; - - error = gtk_rc_parse_fontset (scanner, rc_style); - - return error; + return G_TOKEN_NONE; } -static gint +static guint gtk_rc_parse_base (GScanner *scanner, GtkStyle *style) { GtkStateType state; - gint token; - gint error; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_BASE) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_BASE) + return TOKEN_BASE; - error = gtk_rc_parse_state (scanner, &state); - if (error != PARSE_OK) - return error; + token = gtk_rc_parse_state (scanner, &state); + if (token != G_TOKEN_NONE) + return token; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; - - error = gtk_rc_parse_color (scanner, &style->base[state]); + return G_TOKEN_EQUAL_SIGN; - return error; + return gtk_rc_parse_color (scanner, &style->base[state]); } -static gint +static guint gtk_rc_parse_bg (GScanner *scanner, GtkStyle *style) { GtkStateType state; - gint token; - gint error; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_BG) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_BG) + return TOKEN_BG; - error = gtk_rc_parse_state (scanner, &state); - if (error != PARSE_OK) - return error; + token = gtk_rc_parse_state (scanner, &state); + if (token != G_TOKEN_NONE) + return token; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; + return G_TOKEN_EQUAL_SIGN; - error = gtk_rc_parse_color (scanner, &style->bg[state]); - - return error; + return gtk_rc_parse_color (scanner, &style->bg[state]); } -static gint +static guint gtk_rc_parse_fg (GScanner *scanner, GtkStyle *style) { GtkStateType state; - gint token; - gint error; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_FG) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_FG) + return TOKEN_FG; - error = gtk_rc_parse_state (scanner, &state); - if (error != PARSE_OK) - return error; + token = gtk_rc_parse_state (scanner, &state); + if (token != G_TOKEN_NONE) + return token; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; - - error = gtk_rc_parse_color (scanner, &style->fg[state]); + return G_TOKEN_EQUAL_SIGN; - return error; + return gtk_rc_parse_color (scanner, &style->fg[state]); } -static gint +static guint gtk_rc_parse_text (GScanner *scanner, GtkStyle *style) { GtkStateType state; - gint token; - gint error; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_TEXT) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_TEXT) + return TOKEN_TEXT; - error = gtk_rc_parse_state (scanner, &state); - if (error != PARSE_OK) - return error; + token = gtk_rc_parse_state (scanner, &state); + if (token != G_TOKEN_NONE) + return token; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; + return G_TOKEN_EQUAL_SIGN; - error = gtk_rc_parse_color (scanner, &style->text[state]); - - return error; + return gtk_rc_parse_color (scanner, &style->text[state]); } -static gint +static guint gtk_rc_parse_bg_pixmap (GScanner *scanner, GtkRcStyle *rc_style) { GtkStateType state; - gint token; - gint error; + guint token; gchar *pixmap_file; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_BG_PIXMAP) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_BG_PIXMAP) + return TOKEN_BG_PIXMAP; - error = gtk_rc_parse_state (scanner, &state); - if (error != PARSE_OK) - return error; + token = gtk_rc_parse_state (scanner, &state); + if (token != G_TOKEN_NONE) + return token; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; + return G_TOKEN_EQUAL_SIGN; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; if (strcmp (scanner->value.v_string, "<parent>")) pixmap_file = gtk_rc_find_pixmap_in_path (scanner, scanner->value.v_string); @@ -1107,10 +1076,10 @@ gtk_rc_parse_bg_pixmap (GScanner *scanner, rc_style->bg_pixmap_name[state] = pixmap_file; } - return PARSE_OK; + return G_TOKEN_NONE; } -static char* +static gchar* gtk_rc_find_pixmap_in_path (GScanner *scanner, gchar *pixmap_file) { @@ -1139,128 +1108,123 @@ gtk_rc_find_pixmap_in_path (GScanner *scanner, return NULL; } -static gint +static guint gtk_rc_parse_font (GScanner *scanner, GtkRcStyle *rc_style) { - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_FONT) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_FONT) + return TOKEN_FONT; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; + return G_TOKEN_EQUAL_SIGN; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; if (rc_style->font_name) g_free (rc_style->font_name); rc_style->font_name = g_strdup (scanner->value.v_string); - return PARSE_OK; + return G_TOKEN_NONE; } -static gint +static guint gtk_rc_parse_fontset (GScanner *scanner, GtkRcStyle *rc_style) { - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_FONTSET) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_FONTSET) + return TOKEN_FONTSET; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_EQUAL_SIGN) - return PARSE_ERROR; + return G_TOKEN_EQUAL_SIGN; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; if (rc_style->fontset_name) g_free (rc_style->fontset_name); rc_style->fontset_name = g_strdup (scanner->value.v_string); - return PARSE_OK; + return G_TOKEN_NONE; } -static gint +static guint gtk_rc_parse_state (GScanner *scanner, GtkStateType *state) { - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != G_TOKEN_LEFT_BRACE) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != G_TOKEN_LEFT_BRACE) + return G_TOKEN_LEFT_BRACE; token = g_scanner_get_next_token (scanner); - if (token == TOKEN_ACTIVE) - *state = GTK_STATE_ACTIVE; - else if (token == TOKEN_INSENSITIVE) - *state = GTK_STATE_INSENSITIVE; - else if (token == TOKEN_NORMAL) - *state = GTK_STATE_NORMAL; - else if (token == TOKEN_PRELIGHT) - *state = GTK_STATE_PRELIGHT; - else if (token == TOKEN_SELECTED) - *state = GTK_STATE_SELECTED; - else - return PARSE_ERROR; + switch (token) + { + case TOKEN_ACTIVE: + *state = GTK_STATE_ACTIVE; + break; + case TOKEN_INSENSITIVE: + *state = GTK_STATE_INSENSITIVE; + break; + case TOKEN_NORMAL: + *state = GTK_STATE_NORMAL; + break; + case TOKEN_PRELIGHT: + *state = GTK_STATE_PRELIGHT; + break; + case TOKEN_SELECTED: + *state = GTK_STATE_SELECTED; + break; + default: + return /* G_TOKEN_SYMBOL */ TOKEN_NORMAL; + } token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_RIGHT_BRACE) - return PARSE_ERROR; + return G_TOKEN_RIGHT_BRACE; - return PARSE_OK; + return G_TOKEN_NONE; } -static gint +static guint gtk_rc_parse_color (GScanner *scanner, GdkColor *color) { - gint token; - gint token_int; - gint length; - gint temp; - gchar buf[9]; - gint i, j; - - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; + guint token; + token = g_scanner_get_next_token (scanner); switch (token) { - case G_TOKEN_LEFT_CURLY: - token = g_scanner_get_next_token (scanner); + gint token_int; + gint length; + gint temp; + gchar buf[9]; + gint i, j; + case G_TOKEN_LEFT_CURLY: token = g_scanner_get_next_token (scanner); if (token == G_TOKEN_INT) token_int = scanner->value.v_int; else if (token == G_TOKEN_FLOAT) token_int = scanner->value.v_float * 65535.0; else - return PARSE_ERROR; + return G_TOKEN_FLOAT; color->red = CLAMP (token_int, 0, 65535); token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_COMMA) - return PARSE_ERROR; + return G_TOKEN_COMMA; token = g_scanner_get_next_token (scanner); if (token == G_TOKEN_INT) @@ -1268,12 +1232,12 @@ gtk_rc_parse_color (GScanner *scanner, else if (token == G_TOKEN_FLOAT) token_int = scanner->value.v_float * 65535.0; else - return PARSE_ERROR; + return G_TOKEN_FLOAT; color->green = CLAMP (token_int, 0, 65535); token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_COMMA) - return PARSE_ERROR; + return G_TOKEN_COMMA; token = g_scanner_get_next_token (scanner); if (token == G_TOKEN_INT) @@ -1281,23 +1245,21 @@ gtk_rc_parse_color (GScanner *scanner, else if (token == G_TOKEN_FLOAT) token_int = scanner->value.v_float * 65535.0; else - return PARSE_ERROR; + return G_TOKEN_FLOAT; color->blue = CLAMP (token_int, 0, 65535); token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_RIGHT_CURLY) - return PARSE_ERROR; - break; + return G_TOKEN_RIGHT_CURLY; + return G_TOKEN_NONE; case G_TOKEN_STRING: - token = g_scanner_get_next_token (scanner); - if (scanner->value.v_string[0] != '#') - return PARSE_ERROR; + return G_TOKEN_STRING; length = strlen (scanner->value.v_string) - 1; if (((length % 3) != 0) || (length > 12)) - return PARSE_ERROR; + return G_TOKEN_STRING; length /= 3; for (i = 0, j = 1; i < length; i++, j++) @@ -1339,38 +1301,29 @@ gtk_rc_parse_color (GScanner *scanner, color->green *= 16; color->blue *= 16; } - break; - - case G_TOKEN_ERROR: - return PARSE_ERROR; + return G_TOKEN_NONE; default: - return PARSE_SYNTAX; + return G_TOKEN_STRING; } - - return PARSE_OK; } -static gint +static guint gtk_rc_parse_pixmap_path (GScanner *scanner) { - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_PIXMAP_PATH) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_PIXMAP_PATH) + return TOKEN_PIXMAP_PATH; token = g_scanner_get_next_token (scanner); - if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; gtk_rc_parse_pixmap_path_string (scanner->value.v_string); - return PARSE_OK; + return G_TOKEN_NONE; } static void @@ -1410,22 +1363,19 @@ gtk_rc_parse_pixmap_path_string (gchar *pix_path) g_free (buf); } -static gint +static guint gtk_rc_parse_widget_style (GScanner *scanner) { GtkRcSet *rc_set; - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_WIDGET) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_WIDGET) + return TOKEN_WIDGET; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; rc_set = g_new (GtkRcSet, 1); gtk_pattern_spec_init (&rc_set->pspec, scanner->value.v_string); @@ -1435,7 +1385,7 @@ gtk_rc_parse_widget_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return TOKEN_STYLE; } token = g_scanner_get_next_token (scanner); @@ -1443,7 +1393,7 @@ gtk_rc_parse_widget_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return G_TOKEN_STRING; } rc_set->rc_style = gtk_rc_style_find (scanner->value.v_string); @@ -1451,30 +1401,27 @@ gtk_rc_parse_widget_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return G_TOKEN_STRING; } - widget_sets = g_slist_append (widget_sets, rc_set); + gtk_rc_sets_widget = g_slist_append (gtk_rc_sets_widget, rc_set); - return PARSE_OK; + return G_TOKEN_NONE; } -static gint +static guint gtk_rc_parse_widget_class_style (GScanner *scanner) { GtkRcSet *rc_set; - gint token; + guint token; - token = g_scanner_peek_next_token (scanner); - if (token == G_TOKEN_EOF || token == G_TOKEN_ERROR) - return PARSE_ERROR; - if (token != TOKEN_WIDGET_CLASS) - return PARSE_SYNTAX; token = g_scanner_get_next_token (scanner); + if (token != TOKEN_WIDGET_CLASS) + return TOKEN_WIDGET_CLASS; token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_STRING) - return PARSE_ERROR; + return G_TOKEN_STRING; rc_set = g_new (GtkRcSet, 1); gtk_pattern_spec_init (&rc_set->pspec, scanner->value.v_string); @@ -1484,7 +1431,7 @@ gtk_rc_parse_widget_class_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return G_TOKEN_STRING; } token = g_scanner_get_next_token (scanner); @@ -1492,7 +1439,7 @@ gtk_rc_parse_widget_class_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return G_TOKEN_STRING; } rc_set->rc_style = gtk_rc_style_find (scanner->value.v_string); @@ -1500,12 +1447,12 @@ gtk_rc_parse_widget_class_style (GScanner *scanner) { gtk_pattern_spec_free_segs (&rc_set->pspec); g_free (rc_set); - return PARSE_ERROR; + return G_TOKEN_STRING; } - widget_class_sets = g_slist_append (widget_class_sets, rc_set); + gtk_rc_sets_widget_class = g_slist_append (gtk_rc_sets_widget_class, rc_set); - return PARSE_OK; + return G_TOKEN_NONE; } /* diff --git a/gtk/testgtkrc b/gtk/testgtkrc index 7f5646cc37..a44970bf7a 100644 --- a/gtk/testgtkrc +++ b/gtk/testgtkrc @@ -11,6 +11,7 @@ # widget_class <widget_class_set> style <style_name> # testgtkrc2 introduces the green color in the button list + include "testgtkrc2" pixmap_path "." diff --git a/tests/testgtkrc b/tests/testgtkrc index 7f5646cc37..a44970bf7a 100644 --- a/tests/testgtkrc +++ b/tests/testgtkrc @@ -11,6 +11,7 @@ # widget_class <widget_class_set> style <style_name> # testgtkrc2 introduces the green color in the button list + include "testgtkrc2" pixmap_path "." |