Fix tree-sitter static build: FFI scanner, grammar tags, boot order

ober

ef8602bca4f2e7eeaf7bf490a70a5e9b584e5ada

diff --git a/Dockerfile b/Dockerfile
index 2aa16c6..d95e253 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -194,6 +194,7 @@ RUN git clone --depth 1 --branch v${TS_VERSION} \
       https://github.com/tree-sitter/tree-sitter /tmp/tree-sitter && \
     cd /tmp/tree-sitter && \
     cc -c -O2 -Ilib/include lib/src/lib.c -o lib/src/lib.o && \
+    mkdir -p /opt/tree-sitter-lib && \
     ar rcs /opt/tree-sitter-lib/libtree-sitter.a lib/src/lib.o && \
     mkdir -p /opt/tree-sitter-include/tree_sitter && \
     cp lib/include/tree_sitter/api.h /opt/tree-sitter-include/tree_sitter/ && \
@@ -204,7 +205,7 @@ RUN mkdir -p /opt/tree-sitter-grammars && \
     build_grammar() { \
       name=$1; repo=$2; tag=$3; subdir=${4:-.}; \
       git clone --depth 1 --branch "$tag" \
-        "https://github.com/$repo" /tmp/ts-$name 2>/dev/null && \
+        "https://github.com/$repo" /tmp/ts-$name && \
       cd /tmp/ts-$name/$subdir && \
       SRC_DIR=src && \
       gcc -c -O2 -I/opt/tree-sitter-include -I$SRC_DIR \
@@ -219,7 +220,7 @@ RUN mkdir -p /opt/tree-sitter-grammars && \
       cd / && rm -rf /tmp/ts-$name; \
     } && \
     build_grammar c          tree-sitter/tree-sitter-c          v0.23.5 && \
-    build_grammar cpp        tree-sitter/tree-sitter-cpp        v0.23.6 && \
+    build_grammar cpp        tree-sitter/tree-sitter-cpp        v0.23.4 && \
     build_grammar python     tree-sitter/tree-sitter-python     v0.23.6 && \
     build_grammar javascript tree-sitter/tree-sitter-javascript v0.23.1 && \
     build_grammar rust       tree-sitter/tree-sitter-rust       v0.23.3 && \
@@ -231,7 +232,7 @@ RUN mkdir -p /opt/tree-sitter-grammars && \
     build_grammar css        tree-sitter/tree-sitter-css        v0.23.2 && \
     build_grammar html       tree-sitter/tree-sitter-html       v0.23.2 && \
     build_grammar lua        tree-sitter-grammars/tree-sitter-lua v0.3.0 && \
-    build_grammar scheme     6cdh/tree-sitter-scheme            master && \
+    build_grammar scheme     6cdh/tree-sitter-scheme            main && \
     echo "Grammars built:" && ls /opt/tree-sitter-grammars/
 
 # ── Phase 6: Gerbil/Chez dependencies ──────────────────────────────────
diff --git a/build-binary-qt.ss b/build-binary-qt.ss
index 1f3ab01..ded1bbb 100644
--- a/build-binary-qt.ss
+++ b/build-binary-qt.ss
@@ -380,13 +380,17 @@
          ;;   define-foreign name "c-name"  — jsh macro (C name is the second string)
          (gen-cmd
            (format
-             "{ { cat ~a ~a; find ~a ~a ~a lib/jerboa-emacs lib/jerboa vendor -name '*.sls' -o -name '*.ss' | xargs cat 2>/dev/null; cat ~a/jerboa-coreutils/top.sls 2>/dev/null; } | \
+             "{ { cat ~a ~a; find ~a ~a/jerboa ~a/chez-scintilla lib/jerboa-emacs lib/jerboa vendor -name '*.sls' -o -name '*.ss' | xargs cat 2>/dev/null; cat ~a/jerboa-coreutils/top.sls 2>/dev/null; } | \
 sed 's/;;.*//' | grep -oE '(foreign-procedure|foreign-entry\\?) \"[^\"]*\"' | sed 's/.* \"//;s/\"//'; \
 { cat ~a ~a; } | sed 's/;;.*//' | grep -o 'define-optional-ffi [^ ]* \"[^\"]*\"' | sed 's/.*define-optional-ffi [^ ]* \"//;s/\"//'; \
 find ~a -name '*.sls' -o -name '*.ss' | \
-  xargs grep -oh 'define-foreign [^ ]* \"[^\"]*\"' 2>/dev/null | \
-  sed 's/.*define-foreign [^ ]* \"//;s/\".*//'; } | \
-sort -u | grep -v '^$' | grep -v '^_NSGetExecutablePath$' | grep -v '^io_uring_' > /tmp/ffi_syms.txt && \
+  xargs cat 2>/dev/null | tr '\\n' ' ' | \
+  grep -oE 'define-foreign [^ ]+ +\"[^\"]+\"' | \
+  sed 's/.*define-foreign [^ ]* *\"//;s/\".*//'; } | \
+sort -u | grep -v '^$' | grep -v '^_NSGetExecutablePath$' | grep -v '^io_uring_' | \
+grep -v '^jerboa_' | grep -v '^SSL_' | grep -v '^TLS_' | grep -v '^EVP_' | \
+grep -v '^CRYPTO_' | grep -v '^PKCS5_' | grep -v '^RAND_' | \
+grep -v '^QRcode_' | grep -v '^embed_encrypt$' | grep -v '^embed_random_bytes$' > /tmp/ffi_syms.txt && \
 awk '\
 BEGIN{ print \"/* Auto-generated — do not edit */\"; \
        print \"#include \\\"scheme.h\\\"\"; print \"\"; } \
diff --git a/src/jerboa-emacs/treesitter.ss b/src/jerboa-emacs/treesitter.ss
index cf7205d..dddf2e3 100644
--- a/src/jerboa-emacs/treesitter.ss
+++ b/src/jerboa-emacs/treesitter.ss
@@ -38,10 +38,17 @@
 
 (import :std/sugar
         :std/srfi/13
-        :chez-scintilla/constants
         :jerboa-emacs/core
         :jerboa-emacs/qt/sci-shim)
 
+;; Scintilla styling constants (avoid chez-scintilla/constants dep for boot order)
+(define SCI_STARTSTYLING 2032)
+(define SCI_SETSTYLING   2033)
+(define SCI_STYLESETFORE 2051)
+(define SCI_STYLESETBACK 2052)
+(define SCI_STYLESETBOLD 2053)
+(define SCI_STYLESETITALIC 2054)
+
 ;;;============================================================================
 ;;; Load the C shim shared library
 ;;;============================================================================
@@ -346,11 +353,7 @@
     ((java)             "java")
     ((css)              "css")
     ((xml)              "html")
-    ((yaml)             "yaml")
-    ((toml)             "toml")
     ((lua)              "lua")
-    ((sql)              "sql")
-    ((markdown)         "markdown")
     (else #f)))
 
 ;;;============================================================================
diff --git a/support/treesitter_shim.c b/support/treesitter_shim.c
index a7f04f2..5a6f9a5 100644
--- a/support/treesitter_shim.c
+++ b/support/treesitter_shim.c
@@ -34,11 +34,7 @@ extern const TSLanguage *tree_sitter_ruby(void);
 extern const TSLanguage *tree_sitter_java(void);
 extern const TSLanguage *tree_sitter_css(void);
 extern const TSLanguage *tree_sitter_html(void);
-extern const TSLanguage *tree_sitter_yaml(void);
-extern const TSLanguage *tree_sitter_toml(void);
 extern const TSLanguage *tree_sitter_lua(void);
-extern const TSLanguage *tree_sitter_sql(void);
-extern const TSLanguage *tree_sitter_markdown(void);
 extern const TSLanguage *tree_sitter_scheme(void);
 
 /* Embedded highlight queries (generated by embed_queries.py) */
@@ -63,11 +59,7 @@ const TSLanguage *ts_shim_language_get(const char *name) {
     if (strcmp(name, "java") == 0)       return tree_sitter_java();
     if (strcmp(name, "css") == 0)        return tree_sitter_css();
     if (strcmp(name, "html") == 0)       return tree_sitter_html();
-    if (strcmp(name, "yaml") == 0)       return tree_sitter_yaml();
-    if (strcmp(name, "toml") == 0)       return tree_sitter_toml();
     if (strcmp(name, "lua") == 0)        return tree_sitter_lua();
-    if (strcmp(name, "sql") == 0)        return tree_sitter_sql();
-    if (strcmp(name, "markdown") == 0)   return tree_sitter_markdown();
     if (strcmp(name, "scheme") == 0)     return tree_sitter_scheme();
     return NULL;
 }