Function: web-mode-point-context
web-mode-point-context is a natively compiled function defined in
web-mode.el.
Signature
(web-mode-point-context POS)
Documentation
POS should be at the beginning of the indentation.
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-point-context (pos)
"POS should be at the beginning of the indentation."
(save-excursion
(let (curr-char curr-indentation curr-line
language
options
reg-beg reg-col
prev-char prev-indentation prev-line prev-pos
token
part-language
depth)
(setq reg-beg (point-min)
reg-col 0
token "live"
options ""
language ""
prev-line ""
prev-char 0
prev-pos nil
prev-line-end nil)
(when (get-text-property pos 'part-side)
(setq part-language (symbol-name (get-text-property pos 'part-side))))
;;(message "part-language=%S" part-language)
(cond
((and (bobp) (member web-mode-content-type '("html" "xml")))
(setq language web-mode-content-type)
)
((string= web-mode-content-type "css")
(setq language "css"
curr-indentation web-mode-css-indent-offset))
((member web-mode-content-type '("javascript" "json" "typescript"))
(setq language web-mode-content-type
curr-indentation web-mode-code-indent-offset))
((or (string= web-mode-content-type "jsx")
(and part-language (string= part-language "jsx")))
(setq language "jsx"
curr-indentation web-mode-code-indent-offset)
(cond
((web-mode-jsx-is-html pos)
(setq curr-indentation web-mode-markup-indent-offset
options "is-html"))
((and (setq depth (get-text-property pos 'jsx-depth)) (> depth 1))
(when (get-text-property pos 'jsx-beg)
(setq depth (1- depth)))
(setq reg-beg (web-mode-jsx-depth-beginning-position pos depth))
(setq reg-beg (1+ reg-beg))
;;(message "%S" (point))
(save-excursion
(goto-char reg-beg)
;;(message "pt=%S" reg-beg)
(cond
((and (not (looking-at-p "[ ]*$"))
(looking-back "^[[:space:]]*{" (point-min)))
(setq reg-col (+ (current-indentation) ;; #1027
(cond
((looking-at "[ ]+") (1+ (length (match-string-no-properties 0))))
(t 0))
))
)
((looking-at-p "[ ]*\\[[ ]*$") ;; #0659
(setq reg-col (current-indentation))
)
((and (looking-back "=[ ]*{" (point-min)) ;; #0739 #1022
(not (looking-at-p "[[:space:]]*<")))
(setq reg-col (current-indentation))
)
;;((and (looking-back "=[ ]*{" (point-min)) ;; #0739
;; (looking-at-p "{[ ]*"))
;; (setq reg-col (current-indentation))
;; )
((get-text-property (1- (point)) 'tag-beg)
;;(message "point=%S" (point))
(setq reg-col (current-indentation))
)
(t
(message "%S : %S %S" (point) (current-indentation) web-mode-code-indent-offset)
;;(setq reg-col (+ (current-indentation) web-mode-code-indent-offset web-mode-jsx-expression-padding)))
(setq reg-col (+ (current-indentation) web-mode-code-indent-offset)))
)
;;(message "%S %S %S" (point) (current-indentation) reg-col)
) ;save-excursion
)
((string= web-mode-content-type "jsx")
(setq reg-beg (point-min)))
(t
(setq reg-beg (or (web-mode-part-beginning-position pos) (point-min)))
(save-excursion
(goto-char reg-beg)
(search-backward "<" nil t)
(setq reg-col (current-column))
) ;save-excursion
)
) ;cond
;;(message "jsx reg-beg=%S" reg-beg)
) ;jsx
((string= web-mode-content-type "php")
(setq language "php"
curr-indentation web-mode-code-indent-offset))
((or (string= web-mode-content-type "xml"))
(setq language "xml"
curr-indentation web-mode-markup-indent-offset))
;; TODO: est ce util ?
((and (get-text-property pos 'tag-beg)
(get-text-property pos 'tag-name)
;;(not (get-text-property pos 'part-side))
)
(setq language "html"
curr-indentation web-mode-markup-indent-offset))
((and (get-text-property pos 'block-side)
(not (get-text-property pos 'block-beg)))
(setq reg-beg (or (web-mode-block-beginning-position pos) (point-min)))
(goto-char reg-beg)
(setq reg-col (current-column))
;;(message "%S %S" reg-beg reg-col)
(setq language web-mode-engine)
(setq curr-indentation web-mode-code-indent-offset)
(cond
((string= web-mode-engine "blade")
(save-excursion
(when (web-mode-rsf "{[{!]+[ ]*\\|@props[ ]*[(]") ;; #1318
(setq reg-col (current-column))))
(setq reg-beg (+ reg-beg 2))
)
((string= web-mode-engine "razor")
;;(setq reg-beg (+ reg-beg 2))
;;(setq reg-col (current-column))
)
;; tests/demo.chtml
((string= web-mode-engine "ctemplate")
(save-excursion
(when (web-mode-rsf "{{#?")
(setq reg-col (current-column))))
)
((string= web-mode-engine "dust")
(save-excursion
(when (web-mode-rsf "{@")
(setq reg-col (current-column))))
)
((string= web-mode-engine "svelte")
(save-excursion
(when (web-mode-rsf "{@")
(setq reg-col (current-column))))
)
((string= web-mode-engine "template-toolkit")
(setq reg-beg (+ reg-beg 3)
reg-col (+ reg-col 3))
)
((and (string= web-mode-engine "jsp")
(web-mode-looking-at "<%@" reg-beg))
(save-excursion
(goto-char reg-beg)
(looking-at "<%@[ ]*[[:alpha:]]+[ ]+\\|</?[[:alpha:]]+[:.][[:alpha:]]+[ ]+")
(goto-char (match-end 0))
(setq reg-col (current-column))
)
)
((and (string= web-mode-engine "freemarker")
(web-mode-looking-at "<@\\|<%@\\|<[[:alpha:]]" reg-beg))
(save-excursion
(goto-char reg-beg)
(looking-at "<@[[:alpha:].]+[ ]+\\|<%@[ ]*[[:alpha:]]+[ ]+\\|<[[:alpha:]]+:[[:alpha:]]+[ ]+")
(goto-char (match-end 0))
(setq reg-col (current-column))
)
)
) ;cond
) ;block-side
((and part-language (member part-language
'("css" "javascript" "json" "sql" "markdown"
"pug" "ruby" "sass" "stylus" "typescript")))
(setq reg-beg (or (web-mode-part-beginning-position pos) (point-min)))
(goto-char reg-beg)
(if (and (string= web-mode-engine "mojolicious")
(looking-back "javascript begin" (point-min)))
(search-backward "%" nil t)
(search-backward "<" nil t))
(setq reg-col (current-column))
(setq language part-language)
(cond
((string= language "css")
(setq curr-indentation web-mode-css-indent-offset))
((string= language "sql")
(setq curr-indentation web-mode-sql-indent-offset))
((string= language "markdown")
(setq curr-indentation web-mode-code-indent-offset))
((string= language "pug")
(setq curr-indentation web-mode-code-indent-offset))
((string= language "sass")
(setq curr-indentation web-mode-code-indent-offset))
((string= language "stylus")
(setq curr-indentation web-mode-code-indent-offset))
((string= language "ruby")
(setq curr-indentation web-mode-code-indent-offset))
((string= language "typescript")
(setq curr-indentation web-mode-code-indent-offset))
(t
(setq language "javascript"
curr-indentation web-mode-code-indent-offset))
)
) ;part-side
(t
(setq language "html"
curr-indentation web-mode-markup-indent-offset)
)
) ;cond
(cond
((or (and (> pos (point-min))
(eq (get-text-property pos 'part-token) 'comment)
(eq (get-text-property (1- pos) 'part-token) 'comment)
(progn
(setq reg-beg (previous-single-property-change pos 'part-token))
t))
(and (> pos (point-min))
(eq (get-text-property pos 'block-token) 'comment)
(eq (get-text-property (1- pos) 'block-token) 'comment)
(progn
(setq reg-beg (previous-single-property-change pos 'block-token))
t))
(and (> pos (point-min))
(eq (get-text-property pos 'tag-type) 'comment)
(not (get-text-property pos 'tag-beg))
(progn
(setq reg-beg (web-mode-tag-beginning-position pos))
t))
)
(setq token "comment"))
((or (and (> pos (point-min))
(member (get-text-property pos 'part-token)
'(string context key))
(member (get-text-property (1- pos) 'part-token)
'(string context key)))
(and (eq (get-text-property pos 'block-token) 'string)
(eq (get-text-property (1- pos) 'block-token) 'string)))
(setq token "string"))
)
(goto-char pos)
(setq curr-line (web-mode-trim
(buffer-substring-no-properties
(line-beginning-position)
(line-end-position))))
(setq curr-char (if (string= curr-line "") 0 (aref curr-line 0)))
(when (or (member language '("php" "blade" "javascript" "typescript" "jsx" "razor" "css"))
(and (member language '("html" "xml"))
(not (eq ?\< curr-char))))
(let (prev)
(cond
((member language '("html" "xml" "javascript" "typescript" "jsx" "css"))
(when (setq prev (web-mode-part-previous-live-line reg-beg))
(setq prev-line (nth 0 prev)
prev-indentation (nth 1 prev)
prev-pos (nth 2 prev)
prev-line-end (nth 3 prev))
)
)
((setq prev (web-mode-block-previous-live-line))
(setq prev-line (nth 0 prev)
prev-indentation (nth 1 prev)
prev-pos (nth 2 prev)
prev-line-end (nth 3 prev))
(setq prev-line (web-mode-clean-block-line prev-line)))
) ;cond
) ;let
(when (>= (length prev-line) 1)
(setq prev-char (aref prev-line (1- (length prev-line))))
(setq prev-line (substring-no-properties prev-line))
)
)
(cond
((not (member web-mode-content-type '("html" "xml")))
)
((member language '("javascript" "typescript" "jsx" "ruby"))
(setq reg-col (if web-mode-script-padding (+ reg-col web-mode-script-padding) 0)))
((member language '("css" "sql" "markdown" "pug" "sass" "stylus"))
(setq reg-col (if web-mode-style-padding (+ reg-col web-mode-style-padding) 0)))
((not (member language '("html" "xml")))
(setq reg-col
(cond
((not web-mode-block-padding) reg-col)
((eq web-mode-block-padding -1) 0)
(t (+ reg-col web-mode-block-padding))
) ;cond
) ;setq
)
)
(list :curr-char curr-char
:curr-indentation curr-indentation
:curr-line curr-line
:language language
:options options
:prev-char prev-char
:prev-indentation prev-indentation
:prev-line prev-line
:prev-line-end prev-line-end
:prev-pos prev-pos
:reg-beg reg-beg
:reg-col reg-col
:token token)
)))