Function: web-mode-mark

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

Signature

(web-mode-mark 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-mark (pos)
  (let ((beg pos) (end pos) boundaries)

    (if mark-active
        (setq web-mode-expand-initial-pos (point)
              web-mode-expand-initial-scroll (window-start))
        )

    ;; (message "regs=%S %S %S %S" (region-beginning) (region-end) (point-min) (point-max))
    ;; (message "before=%S" web-mode-expand-previous-state)

    (cond

      ((and mark-active
            (= (region-beginning) (point-min))
            (or (= (region-end) (point-max))
                (= (1+ (region-end)) (point-max))))
       (deactivate-mark)
       (goto-char (or web-mode-expand-initial-pos (point-min)))
       (setq web-mode-expand-previous-state nil)
       (when web-mode-expand-initial-scroll
         (set-window-start (selected-window) web-mode-expand-initial-scroll))
       )

      ((string= web-mode-expand-previous-state "elt-content")
       (web-mode-element-parent)
       ;;(message "pos=%S" (point))
       (web-mode-element-select)
       (setq web-mode-expand-previous-state "html-parent"))

      ((and (member (get-text-property pos 'block-token) '(comment string))
            (not (member web-mode-expand-previous-state '("block-token" "block-body" "block-side"))))
       (when (eq (get-text-property pos 'block-token) (get-text-property (1- pos) 'block-token))
         (setq beg (or (previous-single-property-change pos 'block-token) (point-min))))
       (when (eq (get-text-property pos 'block-token) (get-text-property (1+ pos) 'block-token))
         (setq end (next-single-property-change pos 'block-token)))
       (set-mark beg)
       (goto-char end)
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "block-token"))

      ((and (get-text-property pos 'block-side)
            (not (member web-mode-expand-previous-state '("block-body" "block-side")))
            (not (member web-mode-engine '(django go)))
            (setq boundaries (web-mode-in-code-block "{" "}" 'block-side)))
       (set-mark (car boundaries))
       (goto-char (cdr boundaries))
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "block-body"))

      ((and (get-text-property pos 'block-side)
            (not (member web-mode-expand-previous-state '("block-side"))))
       (set-mark (web-mode-block-beginning-position pos))
       (goto-char (1+ (web-mode-block-end-position pos)))
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "block-side"))

      ((and (get-text-property pos 'part-token)
            (not (string= web-mode-expand-previous-state "part-token")))
       (when (eq (get-text-property pos 'part-token) (get-text-property (1- pos) 'part-token))
         (setq beg (previous-single-property-change pos 'part-token)))
       (when (eq (get-text-property pos 'part-token) (get-text-property (1+ pos) 'part-token))
         (setq end (next-single-property-change pos 'part-token)))
       (set-mark beg)
       (goto-char end)
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "part-token"))

      ((and (get-text-property pos 'part-side)
            (not (string= web-mode-expand-previous-state "client-part"))
            (setq boundaries (web-mode-in-code-block "{" "}" 'part-side)))
       (set-mark (car boundaries))
       (goto-char (cdr boundaries))
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "client-part"))

      ((and (get-text-property pos 'part-side)
            (not (string= web-mode-expand-previous-state "part-side")))
       (when (eq (get-text-property pos 'part-side) (get-text-property (1- pos) 'part-side))
         (setq beg (previous-single-property-change pos 'part-side)))
       (when (eq (get-text-property pos 'part-side) (get-text-property (1+ pos) 'part-side))
         (setq end (next-single-property-change pos 'part-side)))
       (when (eq (char-after beg) ?\n)
         (setq beg (1+ beg)))
       (set-mark beg)
       (goto-char end)
       (when (looking-back "^[ \t]+" (point-min))
         (beginning-of-line))
       (exchange-point-and-mark)
       (setq web-mode-expand-previous-state "part-side"))

      ((and (get-text-property pos 'tag-attr)
            (not (member web-mode-expand-previous-state '("html-attr" "html-tag"))))
       (web-mode-attribute-select pos)
       (setq web-mode-expand-previous-state "html-attr"))

      ((and (eq (get-text-property pos 'tag-type) 'comment)
            (not (member web-mode-expand-previous-state '("html-tag" "html-comment" "html-elt" "html-parent"))))
       (web-mode-tag-select)
       (setq web-mode-expand-previous-state "html-comment"))

      ((and (get-text-property pos 'tag-name)
            (not (member web-mode-expand-previous-state '("html-tag" "html-elt" "html-parent"))))
       (web-mode-tag-select)
       (setq web-mode-expand-previous-state "html-tag"))

      ((and (get-text-property pos 'tag-beg)
            (string= web-mode-expand-previous-state "html-tag"))
       (web-mode-element-select)
       (setq web-mode-expand-previous-state "html-elt"))

      (t
       (cond
         ((not (web-mode-element-parent))
          (push-mark (point))
          (push-mark (point-max) nil t)
          (goto-char (point-min))
          (setq web-mode-expand-previous-state "mark-whole"))
         ((not (= (web-mode-tag-end-position (point)) (1- beg)))
          (web-mode-element-content-select)
          (setq web-mode-expand-previous-state "elt-content"))
         (t
          (web-mode-element-select)
          (setq web-mode-expand-previous-state "html-parent"))
         )
       ) ;t

      ) ;cond

    ;;(message "w=%S" (window-end))
    ;;(message "after=%S" web-mode-expand-previous-state)

    ))