branch: externals/jinx
commit 3bdda6b2bbcd2cc2363e639033a14cdb7511f0d2
Author: Daniel Mendler <m...@daniel-mendler.de>
Commit: Daniel Mendler <m...@daniel-mendler.de>

    Module initialization: Print a message for outdated Enchant (Fix #111)
---
 CHANGELOG.org |  2 +-
 jinx-mod.c    | 17 +++++++++++++----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.org b/CHANGELOG.org
index 60b4aedd51..048435f031 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -12,7 +12,7 @@
 - Add =jinx-correct-nearest=, =jinx-correct-all= and =jinx-correct-word= 
commands. The
   command =jinx-correct= dispatches to one of those commands depending on the
   prefix argument.
-- Require libenchant 2.3.1 or newer.
+- Recommend libenchant 2.3.1 or newer. Print a message if Enchant is outdated.
 
 * Version 0.9 (2023-07-02)
 
diff --git a/jinx-mod.c b/jinx-mod.c
index 959ed38289..408a72caf6 100644
--- a/jinx-mod.c
+++ b/jinx-mod.c
@@ -145,9 +145,15 @@ static emacs_value jinx_add(emacs_env* env, ptrdiff_t 
jinx_unused(nargs),
 static emacs_value jinx_wordchars(emacs_env* env, ptrdiff_t jinx_unused(nargs),
                                   emacs_value args[], void* jinx_unused(data)) 
{
     EnchantDict* dict = env->get_user_ptr(env, args[0]);
-    return dict
-           ? jinx_str(env, enchant_dict_get_extra_word_characters(dict))
-           : Qnil;
+    if (dict) {
+        // Enchant older than 2.3.1 sometimes does not return UTF-8
+        // See https://github.com/AbiWord/enchant/blob/master/NEWS
+        emacs_value str = jinx_str(env, 
enchant_dict_get_extra_word_characters(dict));
+        if (env->non_local_exit_check(env) == emacs_funcall_exit_return)
+            return str;
+        env->non_local_exit_clear(env);
+    }
+    return Qnil;
 }
 
 static emacs_value jinx_suggest(emacs_env* env, ptrdiff_t jinx_unused(nargs),
@@ -174,7 +180,10 @@ int emacs_module_init(struct emacs_runtime *runtime) {
     int v0, v1, v2;
     if (sscanf(enchant_get_version(), "%d.%d.%d", &v0, &v1, &v2) != 3 ||
         v0 * 10000 + v1 * 100 + v2 < 20301)
-        return 3; // Require Enchant 2.3.1 or newer
+        env->funcall(env, env->intern(env, "message"), 1,
+                     (emacs_value[]){
+                         jinx_str(env, "Jinx: Enchant 2.3.1 or newer is 
recommended")
+                     });
     Qt = env->make_global_ref(env, env->intern(env, "t"));
     Qnil = env->make_global_ref(env, env->intern(env, "nil"));
     jinx_defun(env, "jinx--mod-suggest", 2, 2, jinx_suggest);

Reply via email to