diff options
author | smihica <smihica@gmail.com> | 2013-04-05 01:00:34 +0900 |
---|---|---|
committer | smihica <smihica@gmail.com> | 2013-04-05 01:00:34 +0900 |
commit | a6a5f57bdfa6bcbaa64c5e7088c2882255a5f627 (patch) | |
tree | 4f652e2de9c6cc750e54cea704e3bd2ba4cb70f3 /src | |
parent | c7a319e084abf226669e2430c3a6520500e1c7cb (diff) | |
download | emmet-mode-a6a5f57bdfa6bcbaa64c5e7088c2882255a5f627.tar.lz emmet-mode-a6a5f57bdfa6bcbaa64c5e7088c2882255a5f627.tar.xz emmet-mode-a6a5f57bdfa6bcbaa64c5e7088c2882255a5f627.zip |
Added css !important syntax support. (http://docs.emmet.io/css-abbreviations/#important-modifier).
Diffstat (limited to 'src')
-rw-r--r-- | src/css-abbrev.el | 46 | ||||
-rw-r--r-- | src/test.el | 19 |
2 files changed, 43 insertions, 22 deletions
diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 3c528e8..72021ad 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -44,18 +44,26 @@ it (cons input ""))))) +(defun zencoding-css-important-p (input) + (let ((len (length input))) + (and (< 0 len) + (char-equal (aref input (1- len)) ?!)))) + (defun zencoding-css-parse-args (args) - (let ((rt nil)) - (loop - (zencoding-pif (zencoding-css-parse-arg args) - (progn (push (car it) rt) - (setf args (cdr it))) - (return (nreverse rt)))))) + (when args + (let ((rt nil)) + (loop + (zencoding-pif (zencoding-css-parse-arg args) + (progn (push (car it) rt) + (setf args (cdr it))) + (return (nreverse rt))))))) (defun zencoding-css-subexpr (exp) - (let* ((exp (zencoding-css-split-args exp)) + (let* ((importantp (zencoding-css-important-p exp)) + (exp (zencoding-css-split-args + (if importantp (subseq exp 0 -1) exp))) (args (cdr exp))) - (when args (setf (cdr exp) (zencoding-css-parse-args args))) + (setf (cdr exp) (cons importantp (zencoding-css-parse-args args))) exp)) (defun zencoding-css-toknize (str) @@ -132,21 +140,31 @@ (let ((set it) (fn nil) (unitlessp nil)) (if (stringp set) (progn + ;; new pattern + ;; creating print function (setf fn (zencoding-css-instantiate-lambda set)) + ;; get unitless or no (setf unitlessp (not (null (string-match zencoding-css-unitless-properties-regex set)))) + ;; caching (puthash (car expr) (cons fn unitlessp) zencoding-css-snippets)) - (progn (setf fn (car set)) - (setf unitlessp (cdr set)))) - (apply fn - (mapcar #'(lambda (arg) + (progn + ;; cache hit. + (setf fn (car set)) + (setf unitlessp (cdr set)))) + (let ((transformed + (apply fn + (mapcar + #'(lambda (arg) (if (listp arg) (if unitlessp (car arg) (apply #'concat arg)) arg)) - (cdr expr)))) - + (cddr expr))))) + (if (cadr expr) + (concat (subseq transformed 0 -1) " !important;") + transformed))) (concat (car expr) ":" (zencoding-join-string (mapcar #'(lambda (arg) diff --git a/src/test.el b/src/test.el index c0d7e2b..f7b7889 100644 --- a/src/test.el +++ b/src/test.el @@ -456,13 +456,13 @@ (define-zencoding-unit-test-case CSS-exprs #'zencoding-css-expr - "" (("")) - "cl:l+ov:h+bg+" (("cl:l") ("ov:h") ("bg+")) - "m10-auto" (("m" ("10" "px") "auto")) - "bg++c" (("bg+") ("c")) - "m+0-10-10--20+p0-0" (("m+" ("0" "px") ("10" "px") ("10" "px") ("-20" "px")) - ("p" ("0" "px") ("0" "px"))) - "bg+#abc#bc#c-3" (("bg+" "#aabbcc" "#bcbcbc" "#cccccc" ("-3" "px")))) + "" (("" nil)) + "cl:l+ov:h+bg+" (("cl:l" nil) ("ov:h" nil) ("bg+" nil)) + "m10-auto" (("m" nil ("10" "px") "auto")) + "bg++c" (("bg+" nil) ("c" nil)) + "m+0-10-10--20+p0-0" (("m+" nil ("0" "px") ("10" "px") ("10" "px") ("-20" "px")) + ("p" nil ("0" "px") ("0" "px"))) + "bg+#abc#bc#c-3" (("bg+" nil "#aabbcc" "#bcbcbc" "#cccccc" ("-3" "px")))) (defmacro define-zencoding-transform-css-test-case (name &rest tests) `(define-zencoding-transform-test-case ,name @@ -471,7 +471,10 @@ (define-zencoding-transform-css-test-case CSS-transform "m0+p0-1p2e3x" ("margin:0px;" - "padding:0px 1% 2em 3ex;")) + "padding:0px 1% 2em 3ex;") + "p!+m10e!+f" ("padding: !important;" + "margin:10em !important;" + "font:;")) ;; start (zencoding-test-cases)
\ No newline at end of file |