GtkSourceEngine * _gtk_source_language_create_engine (GtkSourceLanguage *language) { GtkSourceContextEngine *ce = NULL; GtkSourceContextData *ctx_data; ctx_data = gtk_source_language_parse_file (language); if (ctx_data != NULL) { ce = _gtk_source_context_engine_new (ctx_data); _gtk_source_context_data_unref (ctx_data); } return ce ? GTK_SOURCE_ENGINE (ce) : NULL; }
/* returns new reference, which _must_ be unref'ed */ static GtkSourceContextData * gtk_source_language_parse_file (GtkSourceLanguage *language) { if (language->priv->ctx_data == NULL) { gboolean success = FALSE; GtkSourceContextData *ctx_data; if (language->priv->language_manager == NULL) { g_critical ("_gtk_source_language_create_engine() is called after " "language manager was finalized"); } else { ctx_data = _gtk_source_context_data_new (language); switch (language->priv->version) { case GTK_SOURCE_LANGUAGE_VERSION_1_0: g_warning ("The language definition format version 1 " "(for syntax highlighting) is no longer " "supported by GtkSourceView >= 4.0. " "Please use version 2."); break; case GTK_SOURCE_LANGUAGE_VERSION_2_0: success = _gtk_source_language_file_parse_version2 (language, ctx_data); break; default: g_assert_not_reached (); } if (!success) _gtk_source_context_data_unref (ctx_data); else language->priv->ctx_data = ctx_data; } } else { _gtk_source_context_data_ref (language->priv->ctx_data); } return language->priv->ctx_data; }
/* returns new reference, which _must_ be unref'ed */ static GtkSourceContextData * gtk_source_language_parse_file (GtkSourceLanguage *language) { if (language->priv->ctx_data == NULL) { gboolean success = FALSE; GtkSourceContextData *ctx_data; if (language->priv->language_manager == NULL) { g_critical ("_gtk_source_language_create_engine() is called after " "language manager was finalized"); } else { ctx_data = _gtk_source_context_data_new (language); switch (language->priv->version) { case GTK_SOURCE_LANGUAGE_VERSION_1_0: success = _gtk_source_language_file_parse_version1 (language, ctx_data); break; case GTK_SOURCE_LANGUAGE_VERSION_2_0: success = _gtk_source_language_file_parse_version2 (language, ctx_data); break; default: g_assert_not_reached (); } if (!success) _gtk_source_context_data_unref (ctx_data); else language->priv->ctx_data = ctx_data; } } else { _gtk_source_context_data_ref (language->priv->ctx_data); } return language->priv->ctx_data; }
static gboolean force_styles (GtkSourceLanguage *language) { /* To be sure to have the list of styles we need to parse lang file * as if we were to create an engine. In the future we can improve * this by parsing styles only. */ if (!language->priv->styles_loaded && language->priv->ctx_data == NULL) { GtkSourceContextData *ctx_data; ctx_data = gtk_source_language_parse_file (language); if (ctx_data == NULL) return FALSE; language->priv->styles_loaded = TRUE; _gtk_source_context_data_unref (ctx_data); } return TRUE; }