aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--emmet-mode.el36
-rw-r--r--src/mode-def.el37
2 files changed, 69 insertions, 4 deletions
diff --git a/emmet-mode.el b/emmet-mode.el
index 1ba39fc..cdc965b 100644
--- a/emmet-mode.el
+++ b/emmet-mode.el
@@ -3337,7 +3337,6 @@ tbl))
(replace-regexp-in-string "\n" (concat "\n" first-col)
(replace-regexp-in-string " " tab markup)))))
-
(defun emmet-transform (input)
(if (memq major-mode '(css-mode scss-mode sass-mode))
(emmet-css-transform input)
@@ -3481,9 +3480,42 @@ See also `emmet-expand-line'."
(markup (emmet-preview-transformed indent)))
(when markup
(delete-region (line-beginning-position) (overlay-end ovli))
- (emmet-insert-and-flash markup)))))
+ (emmet-insert-and-flash markup)
+ (when (= (elt markup 0) ?<)
+ (let ((p (point)))
+ (goto-char
+ (+ (- p (length markup))
+ (emmet-html-next-insert-point markup)))))))))
(emmet-preview-abort))
+(defun emmet-html-next-insert-point (str)
+ (let ((intag t) (instring nil)
+ (last-c nil) (c nil)
+ (rti 0))
+ (loop for i to (1- (length str)) do
+ (setq last-c c)
+ (setq c (elt str i))
+ (case c
+ (?\" (if (not (= last-c ?\\))
+ (setq instring (not instring))))
+ (?> (if (not instring)
+ (if intag
+ (if (= last-c ?/) (return (1+ i))
+ (progn (setq intag nil)
+ (setq rti (1+ i))))
+ (return i)))) ;; error?
+ (?< (if (and (not instring) (not intag))
+ (setq intag t)))
+ (?/ (if (and intag
+ (not instring)
+ (= last-c ?<))
+ (return rti)))
+ (t
+ (if (memq c '(?\t ?\n ?\r ?\s))
+ (progn (setq c last-c))
+ (if (and (not intag) (not instring))
+ (return rti))))))))
+
(defvar emmet-flash-ovl nil)
(make-variable-buffer-local 'emmet-flash-ovl)
diff --git a/src/mode-def.el b/src/mode-def.el
index 07550ae..24ea9ff 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -28,7 +28,7 @@
(replace-regexp-in-string " " tab markup)))))
(defun emmet-transform (input)
- (if (eql major-mode 'css-mode)
+ (if (memq major-mode '(css-mode scss-mode sass-mode))
(emmet-css-transform input)
(emmet-html-transform input)))
@@ -170,9 +170,42 @@ See also `emmet-expand-line'."
(markup (emmet-preview-transformed indent)))
(when markup
(delete-region (line-beginning-position) (overlay-end ovli))
- (emmet-insert-and-flash markup)))))
+ (emmet-insert-and-flash markup)
+ (when (= (elt markup 0) ?<)
+ (let ((p (point)))
+ (goto-char
+ (+ (- p (length markup))
+ (emmet-html-next-insert-point markup)))))))))
(emmet-preview-abort))
+(defun emmet-html-next-insert-point (str)
+ (let ((intag t) (instring nil)
+ (last-c nil) (c nil)
+ (rti 0))
+ (loop for i to (1- (length str)) do
+ (setq last-c c)
+ (setq c (elt str i))
+ (case c
+ (?\" (if (not (= last-c ?\\))
+ (setq instring (not instring))))
+ (?> (if (not instring)
+ (if intag
+ (if (= last-c ?/) (return (1+ i))
+ (progn (setq intag nil)
+ (setq rti (1+ i))))
+ (return i)))) ;; error?
+ (?< (if (and (not instring) (not intag))
+ (setq intag t)))
+ (?/ (if (and intag
+ (not instring)
+ (= last-c ?<))
+ (return rti)))
+ (t
+ (if (memq c '(?\t ?\n ?\r ?\s))
+ (progn (setq c last-c))
+ (if (and (not intag) (not instring))
+ (return rti))))))))
+
(defvar emmet-flash-ovl nil)
(make-variable-buffer-local 'emmet-flash-ovl)