aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShin Aoyama <smihica@gmail.com>2014-07-14 10:01:09 +0900
committerShin Aoyama <smihica@gmail.com>2014-07-14 10:01:09 +0900
commit505c1896b34042d96b9f90114f44f507b063b8d3 (patch)
treea0a1bb7f8821353e869c1d74dda7039f4be97fe8 /src
parentdb356e8b5eafb873f15b331d109a640031149890 (diff)
parent6262224f3894825413deb88702dd283b38a3f595 (diff)
downloademmet-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.el5
-rw-r--r--src/mode-def.el56
-rw-r--r--src/test.el34
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)