diff options
author | Shin Aoyama <smihica@gmail.com> | 2014-07-14 10:01:09 +0900 |
---|---|---|
committer | Shin Aoyama <smihica@gmail.com> | 2014-07-14 10:01:09 +0900 |
commit | 505c1896b34042d96b9f90114f44f507b063b8d3 (patch) | |
tree | a0a1bb7f8821353e869c1d74dda7039f4be97fe8 /src | |
parent | db356e8b5eafb873f15b331d109a640031149890 (diff) | |
parent | 6262224f3894825413deb88702dd283b38a3f595 (diff) | |
download | emmet-mode-505c1896b34042d96b9f90114f44f507b063b8d3.tar.lz emmet-mode-505c1896b34042d96b9f90114f44f507b063b8d3.tar.xz emmet-mode-505c1896b34042d96b9f90114f44f507b063b8d3.zip |
Merge pull request #25 from pobocks/indent_region_support
Support for indent-region
Diffstat (limited to 'src')
-rw-r--r-- | src/html-abbrev.el | 5 | ||||
-rw-r--r-- | src/mode-def.el | 56 | ||||
-rw-r--r-- | src/test.el | 34 |
3 files changed, 31 insertions, 64 deletions
diff --git a/src/html-abbrev.el b/src/html-abbrev.el index 2c4a0b5..ccc233e 100644 --- a/src/html-abbrev.el +++ b/src/html-abbrev.el @@ -685,9 +685,10 @@ (sib2 (emmet-transform-ast (caddr ast) tag-maker))) (concat sib1 "\n" sib2)))))) +;; Indents text rigidly by inserting spaces +;; Only matters if emmet-indent-after-insert is set to nil (defun emmet-indent (text) "Indent the text" (if text - (replace-regexp-in-string "\n" "\n " (concat "\n" text)) + (replace-regexp-in-string "\n" (concat "\n" (make-string emmet-indentation ?\ )) (concat "\n" text)) nil)) - diff --git a/src/mode-def.el b/src/mode-def.el index 82c74fd..3324cba 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -5,14 +5,6 @@ "Customization group for emmet-mode." :group 'convenience) -(defun emmet-check-for-markup (bound) - (save-excursion - (save-match-data - (goto-char (line-beginning-position)) - (if (re-search-forward "\\(\\([ \t]+\\)?<[^>]*?>\\)+" bound t) - t - nil)))) - (defun emmet-expr-on-line () "Extract a emmet expression and the corresponding bounds for the current line." @@ -39,16 +31,10 @@ :type '(number :tag "Spaces") :group 'emmet) -(defun emmet-prettify (markup indent) - (destructuring-bind (first-col tab) - (if indent-tabs-mode - (list (apply #'concat (loop for i from 1 to (/ indent tab-width) collect "\t")) "\t") - (list (format (format "%%%ds" indent) "") - (format (format "%%%ds" emmet-indentation) ""))) - (let ((internal-indent-1 " ")) - (concat first-col - (replace-regexp-in-string "\n" (concat "\n" first-col) - (replace-regexp-in-string internal-indent-1 tab markup)))))) +(defcustom emmet-indent-after-insert t + "Indent region after insert?" + :type 'boolean + :group 'emmet) (defvar emmet-use-css-transform nil "When true, transform Emmet snippets into CSS, instead of the usual HTML.") @@ -99,17 +85,14 @@ For more information see `emmet-mode'." (if expr (let ((markup (emmet-transform (first expr)))) (when markup - (let ((pretty (if (emmet-check-for-markup here) - markup - (emmet-prettify markup (current-indentation))))) - (when pretty - (delete-region (second expr) (third expr)) - (emmet-insert-and-flash pretty) - (when (and emmet-move-cursor-after-expanding (emmet-html-text-p markup)) - (let ((p (point))) - (goto-char - (+ (- p (length pretty)) - (emmet-html-next-insert-point pretty)))))))))))))) + (delete-region (second expr) (third expr)) + (emmet-insert-and-flash markup) + (let ((output-markup (buffer-substring-no-properties (second expr) (point)))) + (when (and emmet-move-cursor-after-expanding (emmet-html-text-p markup)) + (let ((p (point))) + (goto-char + (+ (- p (length output-markup)) + (emmet-html-next-insert-point output-markup))))))))))))) (defvar emmet-mode-keymap nil "Keymap for emmet minor mode.") @@ -220,11 +203,12 @@ See also `emmet-expand-line'." (when markup (delete-region (line-beginning-position) (overlay-end ovli)) (emmet-insert-and-flash markup) - (when (and emmet-move-cursor-after-expanding (emmet-html-text-p markup)) - (let ((p (point))) - (goto-char - (+ (- p (length markup)) - (emmet-html-next-insert-point markup))))))))) + (let ((output-markup (buffer-substring-no-properties (line-beginning-position) (point)))) + (when (and emmet-move-cursor-after-expanding (emmet-html-text-p markup)) + (let ((p (point))) + (goto-char + (+ (- p (length output-markup)) + (emmet-html-next-insert-point output-markup)))))))))) (emmet-preview-abort)) (defun emmet-html-next-insert-point (str) @@ -297,6 +281,8 @@ 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 + (indent-region here (point))) (setq emmet-flash-ovl (make-overlay here (point))) (overlay-put emmet-flash-ovl 'face 'emmet-preview-output) (when (< 0 emmet-insert-flash-time) @@ -379,7 +365,7 @@ accept it or skip it." (overlay-end emmet-preview-input)))) (let ((output (emmet-transform string))) (when output - (emmet-prettify output indent))))) + output)))) (defun emmet-update-preview (indent) (let* ((pretty (emmet-preview-transformed indent)) diff --git a/src/test.el b/src/test.el index ef2c90f..ff60f0b 100644 --- a/src/test.el +++ b/src/test.el @@ -575,34 +575,14 @@ (concat " [PASS] | \"" name "\" 5 tests.\n")))) -(defun emmet-prettify-test (lis) - (emmet-prettify (car lis) (cadr lis))) - ;; indent -(setq-default indent-tabs-mode nil) -(emmet-run-test-case "Indent-1" - #'emmet-prettify-test - '((("<html>" 0) . "<html>") - (("<html>" 1) . " <html>") - (("<html>" 4) . " <html>") - (("<html>" 8) . " <html>") - (("<html>\n <body></body>\n</html>" 1) . " <html>\n <body></body>\n </html>"))) -(setq-default emmet-indentation 8) -(emmet-run-test-case "Indent-2" - #'emmet-prettify-test - '((("<html>\n <body></body>\n</html>" 0) . "<html>\n <body></body>\n</html>") - (("<html>\n <body></body>\n</html>" 4) . " <html>\n <body></body>\n </html>"))) -(setq-default indent-tabs-mode t) -(setq-default tab-width 2) -(emmet-run-test-case "Indent-3" - #'emmet-prettify-test - '((("<html>\n <body></body>\n</html>" 0) . "<html>\n\t<body></body>\n</html>") - (("<html>\n <body></body>\n</html>" 4) . "\t\t<html>\n\t\t\t<body></body>\n\t\t</html>"))) -(setq-default tab-width 1) -(emmet-run-test-case "Indent-4" - #'emmet-prettify-test - '((("<html>\n <body></body>\n</html>" 0) . "<html>\n\t<body></body>\n</html>") - (("<html>\n <body></body>\n</html>" 4) . "\t\t\t\t<html>\n\t\t\t\t\t<body></body>\n\t\t\t\t</html>"))) +;; NOTE: Indent now uses indent-region by default, +;; and inserts spaces based on emmet-indentation +;; if emmet-indent-after-insert is nil +;; This needs tests, but they aren't written yet. :-( + +;; Old tests for previous indent behavior last seen: +;; commit: f56174e5905a40583b47f9737abee3af8da3faeb ;; start (emmet-test-cases) |