Function: markdown-ts--code-block-ts-language
markdown-ts--code-block-ts-language is a byte-compiled function
defined in markdown-ts-mode.el.gz.
Signature
(markdown-ts--code-block-ts-language NODE)
Documentation
Convert NODE to a language for the code block.
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/markdown-ts-mode.el.gz
(defun markdown-ts--code-block-ts-language (node)
"Convert NODE to a language for the code block."
(let* ((lang (intern (treesit-node-text node)))
(mode (markdown-ts--code-block-language-mode lang))
(ts-language (alist-get lang markdown-ts--code-block-languages))
(non-ts-language (alist-get lang markdown-ts--code-block-non-ts-modes)))
(cond
((fboundp mode)
(cond
;; Return known treesit language.
(ts-language ts-language)
;; Return nil for known non-treesit language for font-lock.
(non-ts-language nil)
;; Markdown itself needs two parsers (markdown +
;; markdown-inline), so treesit embedding (which creates only
;; one) cannot fully fontify it. Route through the non-ts
;; path so the temp buffer runs the full mode with both
;; parsers.
((provided-mode-derived-p mode 'markdown-ts-mode)
(unless (assq lang markdown-ts--code-block-non-ts-modes)
(push (cons lang mode) markdown-ts--code-block-non-ts-modes))
nil)
(t
(let* ((configuration (markdown-ts--harvest-mode-treesit-configuration
mode))
(ts-language (plist-get configuration :language)))
(cond
((and ts-language
(plist-get configuration :font-lock))
(markdown-ts--configure-current-buffer configuration)
(unless (assq lang markdown-ts--code-block-languages)
(push (cons lang ts-language) markdown-ts--code-block-languages))
ts-language)
;; Otherwise, classify mode as non-tree-sitter.
(t
(unless (assq lang markdown-ts--code-block-non-ts-modes)
(push (cons lang mode) markdown-ts--code-block-non-ts-modes))
nil))))))
(t nil))))