Function: web-mode-attr-scan

web-mode-attr-scan is a natively compiled function defined in web-mode.el.

Signature

(web-mode-attr-scan POS STATE CHAR NAME-BEG NAME-END VAL-BEG ATTR-FLAGS EQUAL-OFFSET TAG-FLAGS)

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-attr-scan (pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)
  ;;(message "point(%S) state(%S) c(%c) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S) tag-flags(%S)" pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)
  (when (null attr-flags) (setq attr-flags 0))
  (when (and name-beg name-end web-mode-engine-attr-regexp)
    (let (name)
      (setq name (buffer-substring-no-properties name-beg (1+ name-end)))
      (cond
        ((string-match-p "^data[-]" name)
         (setq attr-flags (logior attr-flags 1))
         )
        ((string-match-p web-mode-engine-attr-regexp name)
         (setq attr-flags (logior attr-flags 2))
         )
        )
      ) ;name
    )
  ;;(message "%S" name)
  (cond
    ((null name-beg)
     0)
    ((or (and (= state 8) (not (eq ?\" char)))
         (and (= state 7) (not (eq ?\' char))))
     (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags)
     (put-text-property name-beg val-beg 'tag-attr t)
     (put-text-property (1- val-beg) val-beg 'tag-attr-end equal-offset)
     1)
    ((and (member state '(4 5)) (null val-beg))
     (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags)
     (put-text-property name-beg (+ name-beg equal-offset 1) 'tag-attr t)
     (put-text-property (+ name-beg equal-offset) (+ name-beg equal-offset 1) 'tag-attr-end equal-offset)
     1)
    (t
     (let (val-end)
       (if (null val-beg)
           (setq val-end name-end)
           (setq val-end pos)
           (cond
             ((null char)
              (setq val-end (1- val-end)))
             ((member char '(?\s ?\n ?\/))
              (setq val-end (1- val-end)))
             ((eq char ?\>)
              (if (= (logand tag-flags 8) 8)
                  (progn
                    ;;(message "tag-flags=%S %S" tag-flags (logand tag-flags 8))
                    (setq val-end (- val-end 2)))
                  (setq val-end (- val-end 1)))
              ;; (message "val-end=%S" val-end)
              )
             )
           )
       (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags)
       (put-text-property name-beg (1+ val-end) 'tag-attr t)
       (put-text-property val-end (1+ val-end) 'tag-attr-end equal-offset)
       ) ;let
     1) ;t
    ) ;cond
  )