Defined a base style
authorrodin <rodin@ddfedd41-794f-dd11-ae45-00112f111e67>
Wed, 30 Jun 2010 19:03:06 +0000 (19:03 +0000)
committerrodin <rodin@ddfedd41-794f-dd11-ae45-00112f111e67>
Wed, 30 Jun 2010 19:03:06 +0000 (19:03 +0000)
libchimara/input.c
libchimara/strio.c
libchimara/style.c

index 648f44f03ae0a16c880071d433ec0093844ad123..16673c977bc19fb04c81ffb8b32bf14248cda422 100644 (file)
@@ -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)
index 218adb2a92868b54ae3963cb261d6dad7261cbb9..b1df8ae570a712d7bf111f05115abdff1b549a60 100644 (file)
@@ -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);
                        }
                }
                
index a466cdd5c09a72efa27ad7c8cd13952a017c76b2..0aa4db282bccbcc031d3d4f9dccae2a6450d6b96 100644 (file)
@@ -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) )