From 6fea4d9d2b3cbe24bb760bbdeda5fefa3c74033b Mon Sep 17 00:00:00 2001 From: Marijn van Vliet Date: Wed, 30 Jun 2010 19:03:06 +0000 Subject: [PATCH] Defined a base style git-svn-id: http://lassie.dyndns-server.com/svn/gargoyle-gtk@281 ddfedd41-794f-dd11-ae45-00112f111e67 --- libchimara/input.c | 4 +- libchimara/strio.c | 15 ++++--- libchimara/style.c | 109 +++++++++++++++++++++++++++++---------------- 3 files changed, 81 insertions(+), 47 deletions(-) diff --git a/libchimara/input.c b/libchimara/input.c index 648f44f..16673c9 100644 --- a/libchimara/input.c +++ b/libchimara/input.c @@ -495,7 +495,7 @@ on_line_input_key_press_event(GtkWidget *widget, GdkEventKey *event, winid_t win gtk_text_buffer_get_end_iter(buffer, &end); g_signal_handler_block(buffer, win->insert_text_handler); - gtk_text_buffer_insert_with_tags_by_name(buffer, &end, win->history_pos->data, -1, "input", NULL); + gtk_text_buffer_insert_with_tags_by_name(buffer, &end, win->history_pos->data, -1, "default", "input", NULL); g_signal_handler_unblock(buffer, win->insert_text_handler); return TRUE; } @@ -912,7 +912,7 @@ force_line_input_from_queue(winid_t win, event_t *event) /* Insert the forced input into the window */ gtk_text_buffer_get_end_iter(buffer, &end); gchar *text_to_insert = g_strconcat(text, "\n", NULL); - gtk_text_buffer_insert_with_tags_by_name(buffer, &end, text_to_insert, -1, "input", NULL); + gtk_text_buffer_insert_with_tags_by_name(buffer, &end, text_to_insert, -1, "default", "input", NULL); chars_written = finish_text_buffer_line_input(win, TRUE); } else if(win->type == wintype_TextGrid) diff --git a/libchimara/strio.c b/libchimara/strio.c index 218adb2..b1df8ae 100644 --- a/libchimara/strio.c +++ b/libchimara/strio.c @@ -48,15 +48,16 @@ flush_window_buffer(winid_t win) gtk_text_buffer_get_end_iter(buffer, &iter); GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer); + GtkTextTag *default_tag = gtk_text_tag_table_lookup(tags, "default"); GtkTextTag *style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->style); GtkTextTag *glk_style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->glk_style); if(win->window_stream->hyperlink_mode) { GtkTextTag *link_style_tag = gtk_text_tag_table_lookup(tags, "hyperlink"); GtkTextTag *link_tag = win->current_hyperlink->tag; - gtk_text_buffer_insert_with_tags(buffer, &iter, win->buffer->str, -1, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &iter, win->buffer->str, -1, default_tag, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); } else { - gtk_text_buffer_insert_with_tags(buffer, &iter, win->buffer->str, -1, style_tag, glk_style_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &iter, win->buffer->str, -1, default_tag, style_tag, glk_style_tag, NULL); } ChimaraGlk *glk = CHIMARA_GLK(gtk_widget_get_ancestor(win->widget, CHIMARA_TYPE_GLK)); @@ -86,15 +87,16 @@ flush_window_buffer(winid_t win) gtk_text_buffer_delete(buffer, &start, &end); GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer); + GtkTextTag *default_tag = gtk_text_tag_table_lookup(tags, "default"); GtkTextTag *style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->style); GtkTextTag *glk_style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->glk_style); if(win->window_stream->hyperlink_mode) { GtkTextTag *link_style_tag = gtk_text_tag_table_lookup(tags, "hyperlink"); GtkTextTag *link_tag = win->current_hyperlink->tag; - gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), available_space, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), available_space, default_tag, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); } else { - gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), available_space, style_tag, glk_style_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), available_space, default_tag, style_tag, glk_style_tag, NULL); } chars_left -= available_space; @@ -108,15 +110,16 @@ flush_window_buffer(winid_t win) gtk_text_buffer_delete(buffer, &start, &end); GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer); + GtkTextTag *default_tag = gtk_text_tag_table_lookup(tags, "default"); GtkTextTag *style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->style); GtkTextTag *glk_style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->glk_style); if(win->window_stream->hyperlink_mode) { GtkTextTag *link_style_tag = gtk_text_tag_table_lookup(tags, "hyperlink"); GtkTextTag *link_tag = win->current_hyperlink->tag; - gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), -1, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), -1, default_tag, style_tag, glk_style_tag, link_style_tag, link_tag, NULL); } else { - gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), -1, style_tag, glk_style_tag, NULL); + gtk_text_buffer_insert_with_tags(buffer, &start, win->buffer->str + (length - chars_left), -1, default_tag, style_tag, glk_style_tag, NULL); } } diff --git a/libchimara/style.c b/libchimara/style.c index a466cdd..0aa4db2 100644 --- a/libchimara/style.c +++ b/libchimara/style.c @@ -39,6 +39,7 @@ glk_set_style(glui32 styl) } static const gchar* TAG_NAMES[] = { + "default", "normal", "emphasized", "preformatted", @@ -238,12 +239,17 @@ style_init(ChimaraGlk *glk) PangoFontDescription *monospace_font_desc = pango_font_description_from_string("Monospace"); /* Initialise the default styles for a text grid */ - tag = gtk_text_tag_new("normal"); + tag = gtk_text_tag_new("default"); g_object_set(tag, "font-desc", monospace_font_desc, NULL); + g_hash_table_insert(default_text_grid_styles, "default", tag); + + tag = gtk_text_tag_new("normal"); + //g_object_set(tag, "font-desc", monospace_font_desc, NULL); g_hash_table_insert(default_text_grid_styles, "normal", tag); tag = gtk_text_tag_new("emphasized"); - g_object_set(tag, "font-desc", monospace_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + g_object_set(tag, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); g_hash_table_insert(default_text_grid_styles, "emphasized", tag); tag = gtk_text_tag_new("preformatted"); @@ -251,35 +257,40 @@ style_init(ChimaraGlk *glk) g_hash_table_insert(default_text_grid_styles, "preformatted", tag); tag = gtk_text_tag_new("header"); - g_object_set(tag, "font-desc", monospace_font_desc, "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_grid_styles, "header", tag); tag = gtk_text_tag_new("subheader"); - g_object_set(tag, "font-desc", monospace_font_desc, "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_grid_styles, "subheader", tag); tag = gtk_text_tag_new("alert"); - g_object_set(tag, "font-desc", monospace_font_desc, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_grid_styles, "alert", tag); tag = gtk_text_tag_new("note"); - g_object_set(tag, "font-desc", monospace_font_desc, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_grid_styles, "note", tag); tag = gtk_text_tag_new("block-quote"); - g_object_set(tag, "font-desc", monospace_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + g_object_set(tag, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); g_hash_table_insert(default_text_grid_styles, "block-quote", tag); tag = gtk_text_tag_new("input"); - g_object_set(tag, "font-desc", monospace_font_desc, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, NULL); g_hash_table_insert(default_text_grid_styles, "input", tag); tag = gtk_text_tag_new("user1"); - g_object_set(tag, "font-desc", monospace_font_desc, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, NULL); g_hash_table_insert(default_text_grid_styles, "user1", tag); tag = gtk_text_tag_new("user2"); - g_object_set(tag, "font-desc", monospace_font_desc, NULL); + //g_object_set(tag, "font-desc", monospace_font_desc, NULL); g_hash_table_insert(default_text_grid_styles, "user2", tag); tag = gtk_text_tag_new("hyperlink"); @@ -287,12 +298,17 @@ style_init(ChimaraGlk *glk) g_hash_table_insert(default_text_grid_styles, "hyperlink", tag); /* Initialise the default styles for a text buffer */ - tag = gtk_text_tag_new("normal"); + tag = gtk_text_tag_new("default"); g_object_set(tag, "font-desc", default_font_desc, NULL); + g_hash_table_insert(default_text_buffer_styles, "default", tag); + + tag = gtk_text_tag_new("normal"); + //g_object_set(tag, "font-desc", default_font_desc, NULL); g_hash_table_insert(default_text_buffer_styles, "normal", tag); tag = gtk_text_tag_new("emphasized"); - g_object_set(tag, "font-desc", default_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + g_object_set(tag, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); g_hash_table_insert(default_text_buffer_styles, "emphasized", tag); tag = gtk_text_tag_new("preformatted"); @@ -300,39 +316,45 @@ style_init(ChimaraGlk *glk) g_hash_table_insert(default_text_buffer_styles, "preformatted", tag); tag = gtk_text_tag_new("header"); - g_object_set(tag, "font-desc", default_font_desc, "size-points", 18.0, "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "size-points", 18.0, "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "size-points", 18.0, "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_buffer_styles, "header", tag); tag = gtk_text_tag_new("subheader"); - g_object_set(tag, "font-desc", default_font_desc, "size-points", 14.0, "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "size-points", 14.0, "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "size-points", 14.0, "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_buffer_styles, "subheader", tag); tag = gtk_text_tag_new("alert"); - g_object_set(tag, "font-desc", default_font_desc, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "foreground", "#aa0000", "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_buffer_styles, "alert", tag); tag = gtk_text_tag_new("note"); - g_object_set(tag, "font-desc", default_font_desc, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); + g_object_set(tag, "foreground", "#aaaa00", "weight", PANGO_WEIGHT_BOLD, NULL); g_hash_table_insert(default_text_buffer_styles, "note", tag); tag = gtk_text_tag_new("block-quote"); - g_object_set(tag, "font-desc", default_font_desc, "justification", GTK_JUSTIFY_CENTER, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "justification", GTK_JUSTIFY_CENTER, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); + g_object_set(tag, "justification", GTK_JUSTIFY_CENTER, "style", PANGO_STYLE_ITALIC, "style-set", TRUE, NULL); g_hash_table_insert(default_text_buffer_styles, "block-quote", tag); tag = gtk_text_tag_new("input"); - g_object_set(tag, "font-desc", default_font_desc, NULL); + //g_object_set(tag, "font-desc", default_font_desc, NULL); g_hash_table_insert(default_text_buffer_styles, "input", tag); tag = gtk_text_tag_new("user1"); - g_object_set(tag, "font-desc", default_font_desc, NULL); + //g_object_set(tag, "font-desc", default_font_desc, NULL); g_hash_table_insert(default_text_buffer_styles, "user1", tag); tag = gtk_text_tag_new("user2"); - g_object_set(tag, "font-desc", default_font_desc, NULL); + //g_object_set(tag, "font-desc", default_font_desc, NULL); g_hash_table_insert(default_text_buffer_styles, "user2", tag); tag = gtk_text_tag_new("hyperlink"); - g_object_set(tag, "font-desc", default_font_desc, "foreground", "#0000ff", "underline", PANGO_UNDERLINE_SINGLE, "underline-set", TRUE, NULL); + //g_object_set(tag, "font-desc", default_font_desc, "foreground", "#0000ff", "underline", PANGO_UNDERLINE_SINGLE, "underline-set", TRUE, NULL); + g_object_set(tag, "foreground", "#0000ff", "underline", PANGO_UNDERLINE_SINGLE, "underline-set", TRUE, NULL); g_hash_table_insert(default_text_buffer_styles, "hyperlink", tag); GtkTextTag *pager_tag = gtk_text_tag_new("pager"); @@ -446,29 +468,38 @@ style_accept_style_selector(GScanner *scanner, ChimaraGlk *glk) field = g_strdup(value.v_identifier); - if( !style_accept(scanner, '.') ) - return FALSE; + /* Parse the tag name to change */ + if( g_scanner_peek_next_token(scanner) == '{') { + style_accept(scanner, '{'); + if( !strcmp(field, "buffer") ) + current_tag = g_hash_table_lookup(priv->styles->text_buffer, "default"); + else + current_tag = g_hash_table_lookup(priv->styles->text_grid, "default"); + } else { + if( !style_accept(scanner, '.') ) + return FALSE; - token = g_scanner_get_next_token(scanner); - value = g_scanner_cur_value(scanner); + token = g_scanner_get_next_token(scanner); + value = g_scanner_cur_value(scanner); - if(token != G_TOKEN_IDENTIFIER) { - g_scanner_error(scanner, "CSS Error: style selector expected"); - return FALSE; - } + if(token != G_TOKEN_IDENTIFIER) { + g_scanner_error(scanner, "CSS Error: style selector expected"); + return FALSE; + } - if( !strcmp(field, "buffer") ) - current_tag = g_hash_table_lookup(priv->styles->text_buffer, value.v_identifier); - else - current_tag = g_hash_table_lookup(priv->styles->text_grid, value.v_identifier); + if( !strcmp(field, "buffer") ) + current_tag = g_hash_table_lookup(priv->styles->text_buffer, value.v_identifier); + else + current_tag = g_hash_table_lookup(priv->styles->text_grid, value.v_identifier); - if(current_tag == NULL) { - g_scanner_error(scanner, "CSS Error: invalid style identifier"); - return FALSE; - } + if(current_tag == NULL) { + g_scanner_error(scanner, "CSS Error: invalid style identifier"); + return FALSE; + } - if( !style_accept(scanner, '{') ) - return FALSE; + if( !style_accept(scanner, '{') ) + return FALSE; + } while( g_scanner_peek_next_token(scanner) != '}') { if( !style_accept_style_hint(scanner, current_tag) ) -- 2.30.2