Function: web-mode-token-html-indentation

web-mode-token-html-indentation is a natively compiled function defined in web-mode.el.

Signature

(web-mode-token-html-indentation POS)

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-token-html-indentation (pos)
  (save-excursion
    (let (beg (continue t) end level map offset regexp tag val void (css-beg 0))
      (goto-char pos)
      ;;(message "pos=%S" pos)
      (setq beg (web-mode-part-token-beginning-position pos))
      (save-excursion
        (when (and (> (- pos beg) 5)
                   (re-search-backward "</?[a-zA-Z0-9]+" beg t)
                   (string= "<style" (downcase (match-string-no-properties 0))))
          (setq css-beg (point))
          )
        )
      ;;(message "beg=%S" beg)
      (cond
        ((eq (char-after pos) ?\`)
         (setq offset (web-mode-indentation-at-pos beg)))
        ((web-mode-looking-back "`[ \n\t]*" pos)
         (setq offset (+ (web-mode-indentation-at-pos beg) web-mode-markup-indent-offset)))
        ((looking-at "</\\([a-zA-Z0-9]+\\)")
         (setq tag (match-string-no-properties 1)
               regexp (concat "</?" tag)
               level -1)
         (while (and continue (re-search-backward regexp beg t))
           (cond
             ((eq (aref (match-string-no-properties 0) 1) ?\/)
              (setq level (1- level)))
             (t
              (setq level (1+ level)))
             ) ;cond
           (when (= level 0)
             (setq continue nil
                   offset (current-indentation)))
           ) ;while
         )
        ((> css-beg 0)
         ;;(message "CSS")
         (cond
           ((member (char-after) '(?\) ?\} ?\]))
            (web-mode-go (web-mode-token-opening-paren-position pos (+ css-beg 8) ""))
            (setq offset (current-indentation))
            )
           ((setq level (web-mode-bracket-level pos (+ css-beg 8)))
            (setq offset (+ level web-mode-css-indent-offset))
            )
           (t
            (setq offset (+ (web-mode-indentation-at-pos css-beg) web-mode-style-padding))
            ) ;t
           )
         )
        ((looking-at "[a-zA-Z-]+[ ]?=")
         (re-search-backward "<[a-zA-Z]+[ ]*" beg t)
         (setq offset (+ (current-column) (length (match-string-no-properties 0))))
         )
        ((looking-at-p "/>")
         (search-backward "<" beg t)
         (setq offset (current-column))
         )
        (t
         (setq regexp "</?\\([a-zA-Z0-9]+\\)")
         ;;(message "point=%S" (point))
         (while (and continue (re-search-backward regexp beg t))
           (setq tag (downcase (match-string-no-properties 1))
                 end nil
                 void nil)
           (cond
             ((eq (aref (match-string-no-properties 0) 1) ?/)
              (setq end t))
             ((web-mode-element-is-void tag)
              (setq void t))
             (t
              (save-excursion
                (when (and (search-forward ">" pos t) (eq (char-before (1- (point))) ?\/))
                  (setq void t))
                ) ;save-excursion
              ) ;t
             ) ;cond
           (unless void
             (setq val (or (lax-plist-get map tag) 0))
             (setq val (if end (1- val) (1+ val)))
             (setq map (lax-plist-put map tag val))
             ;;(message "val=%S tag=%S end=%S | %S" val tag end (plist-get map tag))
             (setq continue (not (> val 0)))
             ) ;unless
                                        ;(message "pos=%S tag=%S val=%S end=%S void=%S" (point) tag val end void)
           ) ;while
         (cond
           ((> val 0)
            ;;(message "point=%S" (point))
            ;;(goto-char (1+ beg))
            ;;(forward-char)
            ;;(re-search-forward "[[:space:]]*")
            (setq offset (+ (current-indentation) web-mode-markup-indent-offset)))
           (t
            (setq offset (current-indentation)))
           )
         ) ;t
        ) ;cond
      offset)))