[gtksourceview] languagemanager: allow setting path to default RNG schema



commit ec688f54d7fdfa8012c09d761661bc4d6ec61a9f
Author: Christian Hergert <chergert redhat com>
Date:   Mon Sep 5 14:33:32 2022 -0700

    languagemanager: allow setting path to default RNG schema
    
    This is useful so that we can use a particular path when running tests out
    of tree (which ensures we are testing changes) versus when running
    installed tests using the installation prefix (even if that is not in the
    search path).

 gtksourceview/gtksourcelanguagemanager-private.h |  2 +-
 gtksourceview/gtksourcelanguagemanager.c         | 29 +++++++++++++++++++++---
 2 files changed, 27 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourcelanguagemanager-private.h 
b/gtksourceview/gtksourcelanguagemanager-private.h
index c9ea600c..40cf620d 100644
--- a/gtksourceview/gtksourcelanguagemanager-private.h
+++ b/gtksourceview/gtksourcelanguagemanager-private.h
@@ -23,7 +23,7 @@
 
 G_BEGIN_DECLS
 
-G_GNUC_INTERNAL
 GtkSourceLanguageManager *_gtk_source_language_manager_peek_default (void);
+void                      _gtk_source_language_manager_set_rng_file (const char *rng_file);
 
 G_END_DECLS
diff --git a/gtksourceview/gtksourcelanguagemanager.c b/gtksourceview/gtksourcelanguagemanager.c
index 89921f77..e406bb64 100644
--- a/gtksourceview/gtksourcelanguagemanager.c
+++ b/gtksourceview/gtksourcelanguagemanager.c
@@ -42,9 +42,10 @@
  * given file name and content type.
  */
 
-#define RNG_SCHEMA_FILE   "language2.rng"
-#define LANGUAGE_DIR      "language-specs"
-#define LANG_FILE_SUFFIX  ".lang"
+#define RNG_SCHEMA_FILE          "language2.rng"
+#define LANGUAGE_DIR             "language-specs"
+#define LANG_FILE_SUFFIX         ".lang"
+#define FALLBACK_RNG_SCHEMA_FILE PACKAGE_DATADIR "/language-specs/" RNG_SCHEMA_FILE
 
 enum {
        PROP_0,
@@ -67,6 +68,7 @@ struct _GtkSourceLanguageManager
 
 static GtkSourceLanguageManager *default_instance;
 static GParamSpec *properties[N_PROPS];
+static const char *default_rng_file = FALLBACK_RNG_SCHEMA_FILE;
 
 G_DEFINE_TYPE (GtkSourceLanguageManager, gtk_source_language_manager, G_TYPE_OBJECT)
 
@@ -369,6 +371,19 @@ gtk_source_language_manager_get_search_path (GtkSourceLanguageManager *lm)
        return (const gchar * const *)lm->lang_dirs;
 }
 
+void
+_gtk_source_language_manager_set_rng_file (const char *rng_file)
+{
+       if (rng_file == NULL)
+       {
+               default_rng_file = FALLBACK_RNG_SCHEMA_FILE;
+       }
+       else
+       {
+               default_rng_file = g_intern_string (rng_file);
+       }
+}
+
 /**
  * _gtk_source_language_manager_get_rng_file:
  * @lm: a #GtkSourceLanguageManager.
@@ -401,6 +416,14 @@ _gtk_source_language_manager_get_rng_file (GtkSourceLanguageManager *lm)
 
                        g_free (file);
                }
+
+               if (lm->rng_file == NULL)
+               {
+                       if (g_file_test (default_rng_file, G_FILE_TEST_EXISTS))
+                       {
+                               lm->rng_file = g_strdup (default_rng_file);
+                       }
+               }
        }
 
        return lm->rng_file;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]