Function: web-mode-attr-skip

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

Signature

(web-mode-attr-skip LIMIT)

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-skip (limit)

  (let ((tag-flags 0) (attr-flags 0) (continue t) (attrs 0) (brace-depth 0)
        (state 0) (equal-offset 0) (go-back nil)
        (is-jsx (or (string= web-mode-content-type "jsx") (eq (get-text-property (point) 'part-type) 'jsx)))
        attr name-beg name-end val-beg char pos mem step escaped spaced quoted)

    (while continue

      (setq pos (point)
            char (char-after)
            mem state
            ;;spaced (eq char ?\s)
            spaced (member char '(?\s ?\n))
            step nil)

      (ignore mem step) ;; Only used in debug print
      (when quoted (setq quoted (1+ quoted)))

      (cond

        ((>= pos limit)
         (setq continue nil)
         (setq go-back t)
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         )

        ((and (or (= state 0) (= state 1)) (get-text-property pos 'block-side))
         )

        ((or (and (= state 8) (not (member char '(?\" ?\\))))
             (and (= state 7) (not (member char '(?\' ?\\))))
             (and (= state 9) (not (member char '(?} ?\\))))
             )
         (when (and (= state 9) (eq char ?\{))
           (setq brace-depth (1+ brace-depth)))
         )

        ((and (= state 9) (eq char ?\}) (> brace-depth 1))
         (setq brace-depth (1- brace-depth)))

        ;; #1233
        ;;((get-text-property pos 'block-side)
        ;; (when (= state 2)
        ;;   (setq name-end pos))
        ;; )

        ((and (= state 2) is-jsx (eq char ?\}) (eq attr-flags 4))
         (setq name-end pos)
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 0
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((or (and (= state 8) (eq ?\" char) (not escaped))
             (and (= state 7) (eq ?\' char) (not escaped))
             (and (= state 9) (eq ?\} char) (= brace-depth 1))
             (and (= state 10) (get-text-property pos 'block-end))
             )
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 0
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((and (member state '(4 5)) (get-text-property pos 'block-beg))
         (setq val-beg pos)
         (setq state 10))

        ((and (member state '(4 5)) (member char '(?\' ?\" ?\{)))
         (setq val-beg pos)
         (setq quoted 1)
         (setq state (cond ((eq ?\' char) 7)
                           ((eq ?\" char) 8)
                           (t             9)))
         (setq step 100)
         (when (= state 9) (setq brace-depth 1))
         )

        ((and (eq ?\= char) (member state '(2 3)))
         (setq equal-offset (- pos name-beg)
               name-end (1- pos))
         (setq state 4)
         (setq attr (buffer-substring-no-properties name-beg (1+ name-end)))
         (when (and web-mode-indentless-attributes (web-mode--indentless-attribute-p (downcase attr)))
           (setq attr-flags (logior attr-flags 8)))
         )

        ((and spaced (= state 0))
         (setq state 1)
         )

        ((and (eq char ?\<) (not (member state '(7 8 9))))
         (setq continue nil)
         (setq go-back t)
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         )

        ((and (eq char ?\>) (not (member state '(7 8 9))))
         (setq tag-flags (logior tag-flags 16))
         (when (eq (char-before) ?\/)
           (setq tag-flags (logior tag-flags 8))
           )
         (setq continue nil)
         (when name-beg
           (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags))))
         )

        ((and spaced (member state '(1 3 5)))
         )

        ((and spaced (= state 2))
         (setq state 3)
         )

        ((and (eq char ?\/) (member state '(4 5)))
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 1
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((and (eq char ?\/) (member state '(0 1)))
         )

        ((and spaced (= state 4))
         (setq state 5)
         )

        ((and (= state 3)
              (or (and (>= char 97) (<= char 122)) ;a - z
                  (and (>= char 65) (<= char 90)) ;A - Z
                  (eq char ?\-)))
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 2
               attr-flags 0
               equal-offset 0
               name-beg pos
               name-end pos
               val-beg nil)
         )

        ((and (eq char ?\n) (not (member state '(7 8 9))))
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 1
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((and (= state 6) (member char '(?\s ?\n))) ;#1150
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 1
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((and quoted (= quoted 2) (member char '(?\s ?\n ?\>)))
         (when (eq char ?\>)
           (setq tag-flags (logior tag-flags 16))
           (setq continue nil))
         (setq state 6)
         (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)))
         (setq state 1
               attr-flags 0
               equal-offset 0
               name-beg nil
               name-end nil
               val-beg nil)
         )

        ((and (not spaced) (= state 1))
         (when (and is-jsx (eq char ?\{))
           (setq attr-flags 4))
         (setq state 2)
         (setq name-beg pos
               name-end pos)
         )

        ((member state '(4 5))
         (setq val-beg pos)
         (setq state 6)
         )

        ((= state 1)
         (setq state 2)
         )

        ((= state 2)
         (setq name-end pos)
         (when (and nil (= attr-flags 0) (member char '(?\- ?\:)))
           (let (attr)
             (setq attr (buffer-substring-no-properties name-beg (1+ name-end)))
             (cond
               ((member attr '("http-equiv"))
                (setq attr-flags (1- attr-flags))
                )
               ((and (eq char ?\-) (not (string= attr "http-")))
                (setq attr-flags (logior attr-flags 1)))
               ) ;cond
             ) ;let
           ) ;when attr-flags = 1
         ) ;state=2

        ) ;cond

      ;;(message "point(%S) state(%S) c(%S) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S)" pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags)

      (when (and quoted (>= quoted 2))
        (setq quoted nil))

      (setq escaped (eq ?\\ char))
      (when (null go-back)
        (forward-char))

      ;;(when (not (= mem state)) (message "pos=%S before=%S after=%S step=%S" pos mem state step))

      ) ;while

    (when (> attrs 0) (setq tag-flags (logior tag-flags 1)))

    tag-flags))