diff options
Diffstat (limited to 'src/mode-def.el')
-rw-r--r-- | src/mode-def.el | 56 |
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 |