aboutsummaryrefslogtreecommitdiffstats
path: root/src/mode-def.el
diff options
context:
space:
mode:
Diffstat (limited to 'src/mode-def.el')
-rw-r--r--src/mode-def.el39
1 files changed, 17 insertions, 22 deletions
diff --git a/src/mode-def.el b/src/mode-def.el
index e8060a6..cef6151 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -8,24 +8,25 @@
(defun emmet-expr-on-line ()
"Extract a emmet expression and the corresponding bounds
for the current line."
- (let* ((start (line-beginning-position))
- (end (line-end-position))
+ (let* ((end (point))
+ (start (emmet-find-left-bound))
(line (buffer-substring-no-properties start end)))
- (save-excursion
- (save-match-data
- (let ((bound (point)))
- (goto-char start)
- (if (re-search-forward "\\(\\([ \t]+\\)?<[^>]*?>\\)+" bound t)
- (progn
- (setq start (match-end 0))
- (setq end bound)
- (setq line (buffer-substring-no-properties start end))
- )
- ))))
(let ((expr (emmet-regex "\\([ \t]*\\)\\([^\n]+\\)" line 2)))
(if (first expr)
(list (first expr) start end)))))
+(defun emmet-find-left-bound ()
+ "Find the left bound of an emmet expr"
+ (save-excursion (save-match-data
+ (let ((char (char-before)))
+ (while char
+ (cond ((member char '(?\} ?\] ?\))) (backward-sexp) (setq char (char-before)))
+ ((member char '(?\/ ?\<)) (search-forward ">") (setq char nil))
+ ((not (string-match-p "[[:space:]\"';\n]" (string char)))
+ (backward-word) (setq char (char-before)))
+ (t (setq char nil))))
+ (point)))))
+
(defcustom emmet-indentation 4
"Number of spaces used for indentation."
:type '(number :tag "Spaces")
@@ -66,16 +67,10 @@ For more information see `emmet-mode'."
(let* ((here (point))
(preview (if emmet-preview-default (not arg) arg))
(beg (if preview
- (progn
- (beginning-of-line)
- (skip-chars-forward " \t")
- (point))
+ (emmet-find-left-bound)
(when (use-region-p) (region-beginning))))
(end (if preview
- (progn
- (end-of-line)
- (skip-chars-backward " \t")
- (point))
+ here
(when (use-region-p) (region-end)))))
(if (and preview beg)
(progn
@@ -201,7 +196,7 @@ See also `emmet-expand-line'."
(let* ((indent (current-indentation))
(markup (emmet-preview-transformed indent)))
(when markup
- (delete-region (line-beginning-position) (overlay-end ovli))
+ (delete-region (overlay-start ovli) (overlay-end ovli))
(emmet-insert-and-flash markup)
(let ((output-markup (buffer-substring-no-properties (line-beginning-position) (point))))
(when (and emmet-move-cursor-after-expanding (emmet-html-text-p markup))