From 6a0f56dd41ab92dcc08f41ef66eca06d7d37336d Mon Sep 17 00:00:00 2001 From: smihica Date: Sat, 14 Jun 2014 15:06:22 +0900 Subject: Fixed issue-11 : Respect indent-tabs-mode. --- emmet-mode.el | 14 +++++---- src/mode-def.el | 14 +++++---- src/test.el | 91 +++++++++++++++++++++++++++++++++++++-------------------- 3 files changed, 78 insertions(+), 41 deletions(-) diff --git a/emmet-mode.el b/emmet-mode.el index 4052c82..2380aea 100644 --- a/emmet-mode.el +++ b/emmet-mode.el @@ -3481,11 +3481,15 @@ tbl)) :group 'emmet) (defun emmet-prettify (markup indent) - (let ((first-col (format (format "%%%ds" indent) "")) - (tab (format (format "%%%ds" emmet-indentation) ""))) - (concat first-col - (replace-regexp-in-string "\n" (concat "\n" first-col) - (replace-regexp-in-string " " tab markup))))) + (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)))))) (defvar emmet-use-css-transform nil "When true, transform Emmet snippets into CSS, instead of the usual HTML.") diff --git a/src/mode-def.el b/src/mode-def.el index 5ff77ff..fa01727 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -21,11 +21,15 @@ :group 'emmet) (defun emmet-prettify (markup indent) - (let ((first-col (format (format "%%%ds" indent) "")) - (tab (format (format "%%%ds" emmet-indentation) ""))) - (concat first-col - (replace-regexp-in-string "\n" (concat "\n" first-col) - (replace-regexp-in-string " " tab markup))))) + (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)))))) (defvar emmet-use-css-transform nil "When true, transform Emmet snippets into CSS, instead of the usual HTML.") diff --git a/src/test.el b/src/test.el index 3477192..ef2c90f 100644 --- a/src/test.el +++ b/src/test.el @@ -5,39 +5,38 @@ (emmet-defparameter *emmet-test-cases* nil) +(defun emmet-run-test-case (name fn cases) + (let ((res (loop for c in cases + for i to (1- (length cases)) do + (let ((expected (cdr c)) + (actual (funcall fn (car c)))) + (when (not (equal expected actual)) + (princ + (concat "*** [FAIL] | \"" name "\" " (number-to-string i) "\n\n" + (format "%s" (car c)) "\t=>\n\n" + "Expected\n" (format "%s" expected) "\n\nActual\n" (format "%s" actual) "\n\n")) + (return 'fail)))))) + (if (not (eql res 'fail)) + (princ (concat " [PASS] | \"" name "\" " + (number-to-string (length cases)) " tests.\n"))))) + (defun emmet-test-cases (&rest args) (let ((cmd (car args))) - (flet - ((run-cases - (fn cases) - (loop for c in cases - for i to (1- (length cases)) do - (let ((expected (cdr c)) - (actual (funcall fn (car c)))) - (when (not (equal expected actual)) - (princ - (concat "*** [FAIL] | \"" name "\" " (number-to-string i) "\n\n" - (format "%s" (car c)) "\t=>\n\n" - "Expected\n" (format "%s" expected) "\n\nActual\n" (format "%s" actual) "\n\n")) - (return 'fail)))))) - (cond ((eql cmd 'assign) - (let ((name (cadr args)) - (fn (caddr args)) - (defs (cadddr args))) - (let ((place (assoc name *emmet-test-cases*))) - (if place - (setf (cdr place) (cons fn defs)) - (setq *emmet-test-cases* - (cons (cons name (cons fn defs)) *emmet-test-cases*)))))) - (t - (loop for test in (reverse *emmet-test-cases*) do - (let ((name (symbol-name (car test))) - (fn (cadr test)) - (cases (cddr test))) - (let ((res (run-cases fn cases))) - (if (not (eql res 'fail)) - (princ (concat " [PASS] | \"" name "\" " - (number-to-string (length cases)) " tests.\n"))))))))))) + (cond ((eql cmd 'assign) + (let ((name (cadr args)) + (fn (caddr args)) + (defs (cadddr args))) + (let ((place (assoc name *emmet-test-cases*))) + (if place + (setf (cdr place) (cons fn defs)) + (setq *emmet-test-cases* + (cons (cons name (cons fn defs)) *emmet-test-cases*)))))) + (t + (loop for test in (reverse *emmet-test-cases*) do + (let ((name (symbol-name (car test))) + (fn (cadr test)) + (cases (cddr test))) + (emmet-run-test-case name fn cases))))))) (defmacro define-emmet-transform-test-case (name fn &rest tests) `(emmet-test-cases 'assign ',name @@ -575,5 +574,35 @@ (concat "*** [FAIL] | \"" name "\".\n") (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 + '((("" 0) . "") + (("" 1) . " ") + (("" 4) . " ") + (("" 8) . " ") + (("\n \n" 1) . " \n \n "))) +(setq-default emmet-indentation 8) +(emmet-run-test-case "Indent-2" + #'emmet-prettify-test + '((("\n \n" 0) . "\n \n") + (("\n \n" 4) . " \n \n "))) +(setq-default indent-tabs-mode t) +(setq-default tab-width 2) +(emmet-run-test-case "Indent-3" + #'emmet-prettify-test + '((("\n \n" 0) . "\n\t\n") + (("\n \n" 4) . "\t\t\n\t\t\t\n\t\t"))) +(setq-default tab-width 1) +(emmet-run-test-case "Indent-4" + #'emmet-prettify-test + '((("\n \n" 0) . "\n\t\n") + (("\n \n" 4) . "\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t"))) + ;; start (emmet-test-cases) -- cgit v1.2.3