Skip to content

Commit

Permalink
#44 Avoid cl-loop in native fontification of source blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
Tobias Zawada authored and Tobias Zawada committed Feb 1, 2024
1 parent f935779 commit 9e6f3d5
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions adoc-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -1991,12 +1991,18 @@ LANG is a string, and the returned major mode is a symbol."
(intern (concat lang "-mode"))
(intern (concat (downcase lang) "-mode")))))

(defmacro adoc-cond-let (cond binding &rest body)
"Let-bind BINDING when COND is fulfilled at compile-time.
Execute BODY like `progn'."
(declare (debug (form (&rest (symbolp form)) body)) (indent 2))
`(let ,(when (eval cond) binding)
,@body))
(defun adoc-map-intervals (fun property &optional beg end object)
"Apply FUN to all intervals of PROPERTY in OBJECT in the region from BEG to END."
(unless object (setq object (current-buffer)))
(unless beg (setq beg (point-min)))
(unless end (setq end (point-max)))
(let (end-interval)
(while
(progn
(setq end-interval (next-single-property-change beg property object end))
(funcall fun beg end-interval)
(setq beg end-interval)
(null (= end-interval end))))))

;; Based on `org-src-font-lock-fontify-block' from org-src.el.
(defun adoc-fontify-code-block-natively (lang start-block end-block start-src end-src)
Expand Down Expand Up @@ -2025,15 +2031,14 @@ START-SRC and END-SRC delimit the actual source code."
(insert string))
(unless (eq major-mode lang-mode) (funcall lang-mode))
(font-lock-ensure)
(adoc-cond-let (version< emacs-version "30.0") (int)
(cl-loop for int being the intervals property 'face
for pos = (car int)
for next = (cdr int)
for val = (get-text-property pos 'face)
when val do
(put-text-property
(+ start-src (1- pos)) (1- (+ start-src next)) 'face
val adoc-buffer))))
(adoc-map-intervals
(lambda (pos next)
(let ((val (get-text-property pos 'face)))
(when val
(put-text-property
(+ start-src (1- pos)) (1- (+ start-src next)) 'face
val adoc-buffer))))
'face))
(add-text-properties start-block start-src '(face adoc-meta-face))
(add-text-properties end-src end-block '(face adoc-meta-face))
(add-text-properties
Expand Down

0 comments on commit 9e6f3d5

Please sign in to comment.