branch: elpa/web-mode commit 71903d4837c2ce8add6ec2d994186c68e1459497 Author: fxbois <fxb...@gmail.com> Commit: fxbois <fxb...@gmail.com>
tag lexing bug #1150 --- issues/1150.html | 3 ++- web-mode.el | 68 +++++++++++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/issues/1150.html b/issues/1150.html index 716abf13d5..ee0415f164 100644 --- a/issues/1150.html +++ b/issues/1150.html @@ -1 +1,2 @@ -<link rel="icon" sizes="16x16" href=path/ici.ico /> +<link rel=stylesheet href=markup.css/> +<link href=markup.css> diff --git a/web-mode.el b/web-mode.el index 1443dbedea..ce3c32e3ff 100644 --- a/web-mode.el +++ b/web-mode.el @@ -1,9 +1,9 @@ ;;; web-mode.el --- major mode for editing web templates ;;; -*- coding: utf-8; lexical-binding: t; -*- -;; Copyright 2011-2021 François-Xavier Bois +;; Copyright 2011-2022 François-Xavier Bois -;; Version: 17.0.4 +;; Version: 17.1.0 ;; Author: François-Xavier Bois <fxbois AT Google Mail Service> ;; Maintainer: François-Xavier Bois ;; Package-Requires: ((emacs "23.1")) @@ -17,14 +17,14 @@ ;;; Commentary: ;;============================================================================== -;; WEB-MODE is sponsored by ** Kernix ** Best Digital Factory & Data Lab (Paris) +;; WEB-MODE is sponsored by ** Kernix ** Best Digital Agency & Data Lab (Paris) ;;============================================================================== ;;; Code: ;;---- CONSTS ------------------------------------------------------------------ -(defconst web-mode-version "17.0.4" +(defconst web-mode-version "17.1.0" "Web Mode version.") ;;---- GROUPS ------------------------------------------------------------------ @@ -5166,10 +5166,6 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ;;---- LEXER PARTS ------------------------------------------------------------- -;; FLAGS: tag -;; (1)attrs (2)custom (4)slash-beg (8)slash-end (16)bracket-end -;; (32)namespaced - (defun web-mode-scan-elements (reg-beg reg-end) (save-excursion (let (part-beg part-end flags limit close-expr props tname tbeg tend element-content-type (regexp web-mode-dom-regexp) part-close-tag char) @@ -5358,8 +5354,12 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ))) +;; FLAGS: tag +;; (1)attrs (2)custom (4)slash-beg (8)slash-end (16)bracket-end (32)namespaced + ;; FLAGS: attr ;; (1)custom-attr (2)engine-attr (4)spread-attr[jsx] (8)code-value +;; SPECS: https://www.w3.org/TR/2012/WD-html-markup-20120329/syntax.html#attr-value-unquoted ;; STATES: attr ;; (0)nil (1)space (2)name (3)space-before (4)equal (5)space-after @@ -5387,7 +5387,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ((>= pos limit) (setq continue nil) (setq go-back t) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq attrs (+ attrs (web-mode-attr-scan pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags))) ) ((or (and (= state 8) (not (member char '(?\" ?\\)))) @@ -5408,7 +5408,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ((and (= state 2) is-jsx (eq char ?\}) (eq attr-flags 4)) (setq name-end pos) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5423,7 +5423,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) ;;(message "%S %S" (point) attr-flags) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5459,7 +5459,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ((and (eq char ?\<) (not (member state '(7 8 9)))) (setq continue nil) (setq go-back t) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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)))) @@ -5469,7 +5469,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) (setq continue nil) (when name-beg - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset)))) + (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))) @@ -5480,7 +5480,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) ((and (eq char ?\/) (member state '(4 5))) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5500,7 +5500,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." (or (and (>= char 97) (<= char 122)) ;a - z (and (>= char 65) (<= char 90)) ;A - Z (eq char ?\-))) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5510,7 +5510,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) ((and (eq char ?\n) (not (member state '(7 8 9)))) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5520,7 +5520,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) ((and (= state 6) (member char '(?\s ?\n))) ;#1150 - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5534,7 +5534,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." (setq tag-flags (logior tag-flags 16)) (setq continue nil)) (setq state 6) - (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (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 @@ -5582,7 +5582,7 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ) ;cond - ;;(message "point(%S) end(%S) state(%S) c(%S) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S)" pos end state char name-beg name-end val-beg attr-flags equal-offset) + ;;(message "point(%S) end(%S) state(%S) c(%S) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S)" pos end state char name-beg name-end val-beg attr-flags equal-offset tag-flags) (when (and quoted (>= quoted 2)) (setq quoted nil)) @@ -5597,20 +5597,20 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." tag-flags)) -(defun web-mode-attr-scan (state char name-beg name-end val-beg flags equal-offset) - ;;(message "point(%S) state(%S) c(%c) name-beg(%S) name-end(%S) val-beg(%S) flags(%S) equal-offset(%S)" - ;; (point) state char name-beg name-end val-beg flags equal-offset) - (when (null flags) (setq flags 0)) +(defun web-mode-attr-scan (pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags) + ;;(message "point(%S) state(%S) c(%c) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S) tag-flags(%S)" + ;; pos state char name-beg name-end val-beg attr-flags equal-offset tag-flags) + (when (null attr-flags) (setq attr-flags 0)) (when (and name-beg name-end web-mode-engine-attr-regexp) (let (name) (setq name (buffer-substring-no-properties name-beg (1+ name-end))) ;;(message "%S" name) (cond ((string-match-p "^data[-]" name) - (setq flags (logior flags 1)) + (setq attr-flags (logior attr-flags 1)) ) ((string-match-p web-mode-engine-attr-regexp name) - (setq flags (logior flags 2)) + (setq attr-flags (logior attr-flags 2)) ) ) ) ;name @@ -5618,16 +5618,15 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." ;;(message "%S" name) (cond ((null name-beg) - ;; (message "name-beg is null (%S)" (point)) 0) ((or (and (= state 8) (not (eq ?\" char))) (and (= state 7) (not (eq ?\' char)))) - (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags) (put-text-property name-beg val-beg 'tag-attr t) (put-text-property (1- val-beg) val-beg 'tag-attr-end equal-offset) 1) ((and (member state '(4 5)) (null val-beg)) - (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags) (put-text-property name-beg (+ name-beg equal-offset 1) 'tag-attr t) (put-text-property (+ name-beg equal-offset) (+ name-beg equal-offset 1) 'tag-attr-end equal-offset) 1) @@ -5635,20 +5634,23 @@ Also return non-nil if it is the command `self-insert-command' is remapped to." (let (val-end) (if (null val-beg) (setq val-end name-end) - (setq val-end (point)) + (setq val-end pos) (cond ((null char) (setq val-end (1- val-end))) ((member char '(?\s ?\n ?\/)) (setq val-end (1- val-end))) ((eq char ?\>) - (if (logior flags 8) - (setq val-end (- val-end 2)) + (if (= (logand tag-flags 8) 8) + (progn + ;;(message "tag-flags=%S %S" tag-flags (logand tag-flags 8)) + (setq val-end (- val-end 2))) (setq val-end (- val-end 1))) + ;; (message "val-end=%S" val-end) ) ) - ) ;if - (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + ) ;if null val-beg + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg attr-flags) (put-text-property name-beg (1+ val-end) 'tag-attr t) (put-text-property val-end (1+ val-end) 'tag-attr-end equal-offset) ) ;let