diff options
author | Dave Mayo <dave_mayo@harvard.edu> | 2014-11-26 00:26:46 -0500 |
---|---|---|
committer | Dave Mayo <dave_mayo@harvard.edu> | 2014-11-26 00:26:46 -0500 |
commit | aa68ee74fd85723f40f7a5202009ebab09184215 (patch) | |
tree | c123f250dac67c7fceecf1efa05b61f79a646c22 | |
parent | c22ba86d6fcceeff4026185b3f6c5b8d66ef7f91 (diff) | |
download | emmet-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.el | 18 | ||||
-rw-r--r-- | src/mode-def.el | 7 | ||||
-rw-r--r-- | src/test.el | 23 |
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) |