void _gtk_source_language_define_language_styles (GtkSourceLanguage *lang) { static const gchar *alias[][2] = { {"Base-N Integer", "def:base-n-integer"}, {"Character", "def:character"}, {"Comment", "def:comment"}, {"Function", "def:function"}, {"Decimal", "def:decimal"}, {"Floating Point", "def:floating-point"}, {"Keyword", "def:keyword"}, {"Preprocessor", "def:preprocessor"}, {"String", "def:string"}, {"Specials", "def:specials"}, {"Data Type", "def:type"}, {NULL, NULL}}; gint i = 0; GtkSourceLanguageManager *lm; GtkSourceLanguage *def_lang; while (alias[i][0] != NULL) { GtkSourceStyleInfo *info; info = _gtk_source_style_info_new (alias[i][0], alias[i][1]); g_hash_table_insert (lang->priv->styles, g_strdup (alias[i][0]), info); ++i; } /* We translate String to def:string, but def:string is mapped-to * def:constant in def.lang, so we got to take style mappings from def.lang */ lm = _gtk_source_language_get_language_manager (lang); def_lang = gtk_source_language_manager_get_language (lm, "def"); if (def_lang != NULL) { force_styles (def_lang); g_hash_table_foreach (def_lang->priv->styles, (GHFunc) copy_style_info, lang->priv->styles); } }
static void parse_style (ParserState *parser_state) { gchar *id; xmlChar *name, *map_to; xmlChar *tmp; gchar *lang_id = NULL; g_return_if_fail (parser_state->error == NULL); tmp = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "id"); if (id_is_decorated ((gchar*) tmp, NULL)) id = g_strdup ((gchar*) tmp); else id = decorate_id (parser_state, (gchar*) tmp); xmlFree (tmp); name = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "_name"); if (name != NULL) { gchar *tmp2 = _gtk_source_language_translate_string (parser_state->language, (gchar*) name); tmp = xmlStrdup (BAD_CAST tmp2); xmlFree (name); name = tmp; g_free (tmp2); } else { name = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "name"); } map_to = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "map-to"); if (map_to != NULL && !id_is_decorated ((gchar*) map_to, &lang_id)) { g_set_error (&parser_state->error, PARSER_ERROR, PARSER_ERROR_MALFORMED_MAP_TO, "the map-to attribute '%s' for the style '%s' lacks the prefix", map_to, id); } if (parser_state->error == NULL && lang_id != NULL && lang_id[0] == 0) { g_free (lang_id); lang_id = NULL; } if (parser_state->error == NULL && lang_id != NULL && !lang_id_is_already_loaded (parser_state, lang_id)) { parse_language_with_id (parser_state, lang_id); } DEBUG (g_message ("style %s (%s) to be mapped to '%s'", name, id, map_to ? (char*) map_to : "(null)")); if (map_to != NULL && g_hash_table_lookup (parser_state->styles_mapping, map_to) == NULL) { g_warning ("in file %s: style '%s' not defined", parser_state->filename, map_to); } if (parser_state->error == NULL) { GtkSourceStyleInfo *info; /* Remember the style name only if the style has been defined in * the lang file we are parsing */ if (g_str_has_prefix (id, parser_state->language_decoration)) info = _gtk_source_style_info_new ((gchar *) name, (gchar *) map_to); else info = _gtk_source_style_info_new (NULL, (gchar *) map_to); g_hash_table_insert (parser_state->styles_mapping, g_strdup (id), info); } g_free (lang_id); g_free (id); xmlFree (name); xmlFree (map_to); }
GtkSourceStyleInfo * _gtk_source_style_info_copy (GtkSourceStyleInfo *info) { g_return_val_if_fail (info != NULL, NULL); return _gtk_source_style_info_new (info->name, info->map_to); }