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 /zencoding-mode.el | |
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 'zencoding-mode.el')
-rw-r--r-- | zencoding-mode.el | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/zencoding-mode.el b/zencoding-mode.el index 9958cbb..4016218 100644 --- a/zencoding-mode.el +++ b/zencoding-mode.el @@ -1585,18 +1585,26 @@ tbl)) 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) @@ -1673,21 +1681,31 @@ tbl)) (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) |