aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Mayo <dave_mayo@harvard.edu>2014-11-26 00:26:46 -0500
committerDave Mayo <dave_mayo@harvard.edu>2014-11-26 00:26:46 -0500
commitaa68ee74fd85723f40f7a5202009ebab09184215 (patch)
treec123f250dac67c7fceecf1efa05b61f79a646c22
parentc22ba86d6fcceeff4026185b3f6c5b8d66ef7f91 (diff)
downloademmet-mode-aa68ee74fd85723f40f7a5202009ebab09184215.tar.lz
emmet-mode-aa68ee74fd85723f40f7a5202009ebab09184215.tar.xz
emmet-mode-aa68ee74fd85723f40f7a5202009ebab09184215.zip
Fixes #54 - Uses looking-back to check if there is a tag immediately preceding in cases where ">" is before-char
-rw-r--r--emmet-mode.el18
-rw-r--r--src/mode-def.el7
-rw-r--r--src/test.el23
3 files changed, 36 insertions, 12 deletions
diff --git a/emmet-mode.el b/emmet-mode.el
index 330658a..30592a1 100644
--- a/emmet-mode.el
+++ b/emmet-mode.el
@@ -172,7 +172,6 @@ and leaving the point in place."
"Find the left bound of an emmet expr"
(save-excursion (save-match-data
(let ((char (char-before))
- (last-gt (point))
(in-style-attr (looking-back "style=[\"'][^\"']*")))
(while char
(cond ((and in-style-attr (member char '(?\" ?\')))
@@ -181,9 +180,9 @@ and leaving the point in place."
(with-syntax-table (standard-syntax-table)
(backward-sexp) (setq char (char-before))))
((eq char ?\>)
- (setq last-gt (point)) (backward-char) (setq char (char-before)))
- ((eq char ?\<)
- (goto-char last-gt) (setq char nil))
+ (if (looking-back "<[^>]+>" (line-beginning-position))
+ (setq char nil)
+ (progn (backward-char) (setq char (char-before)))))
((not (string-match-p "[[:space:]\n;]" (string char)))
(backward-char) (setq char (char-before)))
(t
@@ -460,10 +459,13 @@ cursor position will be moved to after the first quote."
(emmet-remove-flash-ovl (current-buffer))
(let ((here (point)))
(insert markup)
- (if emmet-indent-after-insert
- (let ((pre-indent-point (point)))
- (indent-region here (point))
- (setq here (+ here (- (point) pre-indent-point)))))
+ (when emmet-indent-after-insert
+ (indent-region here (point))
+ (setq here
+ (save-excursion
+ (goto-char here)
+ (skip-chars-forward "\s-")
+ (point))))
(setq emmet-flash-ovl (make-overlay here (point)))
(overlay-put emmet-flash-ovl 'face 'emmet-preview-output)
(when (< 0 emmet-insert-flash-time)
diff --git a/src/mode-def.el b/src/mode-def.el
index b3c7541..418be9c 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -19,7 +19,6 @@
"Find the left bound of an emmet expr"
(save-excursion (save-match-data
(let ((char (char-before))
- (last-gt (point))
(in-style-attr (looking-back "style=[\"'][^\"']*")))
(while char
(cond ((and in-style-attr (member char '(?\" ?\')))
@@ -28,9 +27,9 @@
(with-syntax-table (standard-syntax-table)
(backward-sexp) (setq char (char-before))))
((eq char ?\>)
- (setq last-gt (point)) (backward-char) (setq char (char-before)))
- ((eq char ?\<)
- (goto-char last-gt) (setq char nil))
+ (if (looking-back "<[^>]+>" (line-beginning-position))
+ (setq char nil)
+ (progn (backward-char) (setq char (char-before)))))
((not (string-match-p "[[:space:]\n;]" (string char)))
(backward-char) (setq char (char-before)))
(t
diff --git a/src/test.el b/src/test.el
index 28b7db4..75398af 100644
--- a/src/test.el
+++ b/src/test.el
@@ -648,5 +648,28 @@
#'emmet-wrap-with-markup-test
'((("div>ul>li" "I am some\nmultiline\n text") . "<div>\n <ul>\n <li>I am some\n multiline\n text</li>\n </ul>\n</div>")))
+;; Regression test for #54 (broken emmet-find-left-bound behavior
+;; after tag with attributes)
+(defun emmet-regression-54-test (lis)
+ (let ((es (car lis))
+ (emmet-preview-default nil)
+ (emmet-indent-after-insert nil))
+ (with-temp-buffer
+ (emmet-mode 1)
+ (sgml-mode)
+ (insert "<div class=\"broken\">")
+ (insert es)
+ (emmet-expand-line nil)
+ (buffer-string))))
+
+(emmet-run-test-case "Regression 54 with span"
+ #'emmet-regression-54-test
+ '((("span") . "<div class=\"broken\"><span></span>")))
+
+(emmet-run-test-case "Regression 54 with complex span"
+ #'emmet-regression-54-test
+ '((("span.whut[thing=\"stuff\"]{Huh?}") . "<div class=\"broken\"><span class=\"whut\" thing=\"stuff\">Huh?</span>")))
+
+
;; start
(emmet-test-cases)