Function: web-mode-fontify-block

web-mode-fontify-block is a natively compiled function defined in web-mode.el.

Signature

(web-mode-fontify-block REG-BEG REG-END)

Source Code

;; Defined in /nix/store/2qgnz1rp30nzfz6w0apx4kdm14if1bbs-emacs-packages-deps/share/emacs/site-lisp/elpa/web-mode-20260831.219/web-mode.el
(defun web-mode-fontify-block (reg-beg reg-end)
  (when web-mode-trace
    (message "fontify-block: reg-beg(%S) reg-end(%S) engine(%S) keywords(%S)"
             reg-beg reg-end web-mode-engine (not (null web-mode-engine-font-lock-keywords))))

  (let (sub1 sub2 sub3 continue char keywords token-type face beg end (buffer (current-buffer)))

    ;; NOTE: required for blocks inside tag attrs
    ;; NOTE: ajout de face dans la liste pour sucharger la couleur définie par
    ;;       un prealable web-mode-fontity-part (2022-12-25 #1230)
    (remove-list-of-text-properties reg-beg reg-end '(font-lock-face face))
    ;;(message "reg-beg=%S reg-end=%S" reg-beg reg-end)

    (goto-char reg-beg)

    (when (null web-mode-engine-font-lock-keywords)
      (setq sub1 (buffer-substring-no-properties
                  reg-beg (+ reg-beg 1))
            sub2 (buffer-substring-no-properties
                  reg-beg (+ reg-beg 2))
            sub3 (buffer-substring-no-properties
                  reg-beg (+ reg-beg (if (>= (point-max) (+ reg-beg 3)) 3 2))))
      )

    (cond

      ((and (get-text-property reg-beg 'block-beg)
            (eq (get-text-property reg-beg 'block-token) 'comment))
       (put-text-property reg-beg reg-end 'font-lock-face 'web-mode-comment-face)
       ) ;comment block

      (web-mode-engine-font-lock-keywords
       (setq keywords web-mode-engine-font-lock-keywords))

      ((string= web-mode-engine "django")
       (cond
         ((string= sub2 "{{")
          (setq keywords web-mode-django-expr-font-lock-keywords))
         ((string= sub2 "{%")
          (setq keywords web-mode-django-code-font-lock-keywords))
         ((string= sub1 "#")
          (setq keywords web-mode-django-code-font-lock-keywords))
         )) ;django

      ((string= web-mode-engine "mako")
       (cond
         ((member sub3 '("<% " "<%\n" "<%!"))
          (setq keywords web-mode-mako-block-font-lock-keywords))
         ((eq (aref sub2 0) ?\%)
          (setq keywords web-mode-mako-block-font-lock-keywords))
         ((member sub2 '("<%" "</"))
          (setq keywords web-mode-mako-tag-font-lock-keywords))
         ((member sub2 '("${"))
          (setq keywords web-mode-uel-font-lock-keywords))
         )) ;mako

      ((string= web-mode-engine "mason")
       ;;(message "%S %S" sub2 sub3)
       (cond
         ((member sub3 '("<% " "<%\n" "<&|"))
          (setq keywords web-mode-mason-code-font-lock-keywords))
         ((eq (aref sub2 0) ?\%)
          (setq keywords web-mode-mason-code-font-lock-keywords))
         ((and (or (string= sub2 "<%") (string= sub3 "</%"))
               (not (member sub3 '("<%c" "<%i" "<%p"))))
          (setq keywords web-mode-mason-block-font-lock-keywords))
         (t
          (setq keywords web-mode-mason-code-font-lock-keywords))
         )) ;mason

      ((string= web-mode-engine "jsp")
       (cond
         ((string= sub3 "<%@")
          (setq keywords web-mode-directive-font-lock-keywords))
         ((member sub2 '("${" "#{"))
          (setq keywords web-mode-uel-font-lock-keywords))
         ((string= sub2 "<%")
          (setq keywords web-mode-jsp-font-lock-keywords))
         )) ;jsp

      ((string= web-mode-engine "asp")
       (cond
         ((or (string= sub2 "<%")
              (not (string= sub1 "<")))
          (setq keywords web-mode-asp-font-lock-keywords))
         (t
          (setq keywords web-mode-engine-tag-font-lock-keywords))
         )) ;asp

      ((string= web-mode-engine "clip")
       (setq keywords web-mode-engine-tag-font-lock-keywords)
       ) ;clip

      ((string= web-mode-engine "perl")
       (setq keywords web-mode-engine-tag-font-lock-keywords)
       ) ;perl

      ((string= web-mode-engine "aspx")
       (cond
         ((string= sub3 "<%@")
          (setq keywords web-mode-directive-font-lock-keywords))
         ((string= sub3 "<%$")
          (setq keywords web-mode-expression-font-lock-keywords))
         (t
          (setq keywords web-mode-aspx-font-lock-keywords))
         )) ;aspx

      ((string= web-mode-engine "freemarker")
       (cond
         ((member sub2 '("${" "#{"))
          (setq keywords web-mode-uel-font-lock-keywords))
         ((or (member sub2 '("<@" "[@" "<#" "[#"))
              (member sub3 '("</@" "[/@" "</#" "[/#")))
          (setq keywords (if (eq ?\[ (aref sub2 0))
                             web-mode-freemarker-square-font-lock-keywords
                             web-mode-freemarker-font-lock-keywords)))
         (t
          (setq keywords web-mode-engine-tag-font-lock-keywords))
         )) ;freemarker

      ) ;cond

    (when keywords
      (web-mode-fontify-region reg-beg reg-end keywords)
      (setq continue t)
      (setq end reg-beg)
      (while continue
        (if (get-text-property end 'block-token)
            (setq beg end)
            (setq beg (next-single-property-change end 'block-token buffer reg-end)))
        (setq end nil)
        (when beg (setq char (char-after beg)))
        (if (and beg (< beg reg-end))
            (progn
              (setq token-type (get-text-property beg 'block-token))
              (setq face (cond
                           ((eq token-type 'string)  'web-mode-block-string-face)
                           ((eq token-type 'comment) 'web-mode-block-comment-face)
                           ((eq token-type 'symbol)  'web-mode-symbol-face)
                           (t                        'web-mode-block-delimiter-face)))
              (setq end (next-single-property-change beg 'block-token buffer reg-end))
              ;;              (message "end=%S" end)
              (if (and end (<= end reg-end))
                  (progn
                    ;;(message "%S > %S face(%S)" beg end face)
                    (remove-list-of-text-properties beg end '(face))
                    (put-text-property beg end 'font-lock-face face)
                    )
                  (setq continue nil
                        end nil)
                  ) ;if end
              ) ;progn beg
            (setq continue nil
                  end nil)
            ) ;if beg
        (when (and beg end)
          (save-match-data
            (when (and web-mode-enable-heredoc-fontification
                       (eq char ?\<)
                       (> (- end beg) 8)
                       (string-match-p "JS\\|JAVASCRIPT\\|HTM\\|CSS" (buffer-substring-no-properties beg end)))
              (setq keywords
                    (cond
                      ((string-match-p "H" (buffer-substring-no-properties beg (+ beg 8)))
                       web-mode-html-font-lock-keywords)
                      (t
                       web-mode-javascript-font-lock-keywords)
                      ))
              (web-mode-fontify-region beg end keywords)
              )
            ) ;save-match-data
          (when (and web-mode-enable-string-interpolation
                     (member char '(?\" ?\<))
                     (member web-mode-engine '("php" "erb"))
                     (> (- end beg) 4))
            (web-mode-interpolate-block-string beg end)
            ) ;when
          (when (and web-mode-enable-comment-interpolation
                     (eq token-type 'comment)
                     (> (- end beg) 3))
            (web-mode-interpolate-comment beg end t)
            ) ;when
          (when (and web-mode-enable-comment-annotation
                     (eq token-type 'comment)
                     (> (- end beg) 3))
            (web-mode-annotate-comment beg end)
            ) ;when
          (when (and web-mode-enable-sql-detection
                     (eq token-type 'string)
                     (> (- end beg) 6)
                     (web-mode-looking-at-p (concat "\\(.\\|<<<[[:alnum:]]+\\)[ \n]*" web-mode-sql-queries) beg)
                     )
            (web-mode-interpolate-sql-string beg end)
            ) ;when
          ) ;when beg end
        ) ;while continue
      ) ;when keywords

    (when (and (member web-mode-engine '("mako"))
               (> (- reg-end reg-beg) 12)
               (eq ?\< (char-after reg-beg)))
      (web-mode-interpolate-block-tag reg-beg reg-end))

    (when web-mode-enable-block-face
      (font-lock-append-text-property reg-beg reg-end 'face 'web-mode-block-face))

    ))