Function: web-mode-block-string-beginning-position

web-mode-block-string-beginning-position is a natively compiled function defined in web-mode.el.

Signature

(web-mode-block-string-beginning-position POS &optional BLOCK-BEG)

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-block-string-beginning-position (pos &optional block-beg)
  (unless pos (setq pos (point)))
  (unless block-beg (setq block-beg (web-mode-block-beginning-position pos)))
  (let (char (ori pos) (continue (not (null pos))))
    (while continue
      (setq char (char-after pos))
      (cond
        ((< pos block-beg)
         (setq continue nil
               pos block-beg))
        ((and (member (get-text-property pos 'block-token) '(string comment))
              (eq (get-text-property pos 'block-token) (get-text-property (1- pos) 'block-token)))
         (setq pos (web-mode-block-token-beginning-position pos))
         )
        ((member char '(?\) ?\]))
         (setq pos (web-mode-block-opening-paren-position pos block-beg))
         (setq pos (1- pos))
         )
        ((and (> ori pos) (member char '(?\( ?\= ?\[ ?\? ?\: ?\; ?\, ?\`)))
         (if (and (eq char ?\:) ; #1024
                  (web-mode-looking-at ":" pos))
             (setq pos (1- pos))
             (web-mode-looking-at ".[ \t\n]*" pos)
             (setq pos (+ pos (length (match-string-no-properties 0)))
                   continue nil)
             )
         )
        ((web-mode-looking-at "\\(return\\|echo\\|include\\|print\\)[ \n]" pos)
         (setq pos (+ pos (length (match-string-no-properties 0)))
               continue nil))
        (t
         (setq pos (web-mode-rsb-position pos "[\]\[}{)(=?;,`:]\\|\\(return\\|echo\\|include\\|print\\)" block-beg))
         (when (not pos)
           (message "block-string-beginning-position ** search failure **")
           (setq continue nil
                 pos block-beg)))
        ) ;cond
      ) ;while
    ;;(message "pos=%S" pos)
    pos))