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.el56
1 files changed, 27 insertions, 29 deletions
diff --git a/src/mode-def.el b/src/mode-def.el
index e84bf96..6d7aebc 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -8,24 +8,28 @@
(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-char) (setq char (char-before)))
+ (t
+ (setq char nil))))
+ (point)))))
+
(defcustom emmet-indentation 4
"Number of spaces used for indentation."
:type '(number :tag "Spaces")
@@ -66,17 +70,11 @@ 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))
- (when mark-active (region-beginning))))
+ (emmet-find-left-bound)
+ (when (use-region-p) (region-beginning))))
(end (if preview
- (progn
- (end-of-line)
- (skip-chars-backward " \t")
- (point))
- (when mark-active (region-end)))))
+ here
+ (when (use-region-p) (region-end)))))
(if (and preview beg)
(progn
(goto-char here)
@@ -94,7 +92,7 @@ For more information see `emmet-mode'."
(+ (- p (length output-markup))
(emmet-html-next-insert-point output-markup)))))))))))))
-(defvar emmet-mode-keymap
+(defvar emmet-mode-keymap
(let
((map (make-sparse-keymap)))
(define-key map (kbd "C-j") 'emmet-expand-line)
@@ -201,7 +199,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))
@@ -294,7 +292,7 @@ cursor position will be moved to after the first quote."
"Expand emmet between BEG and END interactively.
This will show a preview of the expanded emmet code and you can
accept it or skip it."
- (interactive (if mark-active
+ (interactive (if (use-region-p)
(list (region-beginning) (region-end))
(list nil nil)))
(emmet-preview-abort)
@@ -381,7 +379,7 @@ accept it or skip it."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun emmet-go-to-edit-point (count)
- (let
+ (let
((buf (buffer-string))
(point (point))
(edit-point "\\(\\(><\\)\\|\\(^[[:blank:]]+$\\)\\|\\(=\\(\"\\|'\\)\\{2\\}\\)\\)"))
@@ -399,8 +397,8 @@ accept it or skip it."
(backward-char))))
(progn
(backward-char)
- (let
- ((search-result (re-search-backward edit-point nil t (- count))))
+ (let
+ ((search-result (re-search-backward edit-point nil t (- count))))
(if search-result
(progn
(cond