aboutsummaryrefslogtreecommitdiffstats
path: root/zencoding-mode.el
diff options
context:
space:
mode:
authorsmihica <smihica@gmail.com>2013-04-05 01:00:34 +0900
committersmihica <smihica@gmail.com>2013-04-05 01:00:34 +0900
commita6a5f57bdfa6bcbaa64c5e7088c2882255a5f627 (patch)
tree4f652e2de9c6cc750e54cea704e3bd2ba4cb70f3 /zencoding-mode.el
parentc7a319e084abf226669e2430c3a6520500e1c7cb (diff)
downloademmet-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.el46
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)