From 7ff95cafdcf85b5048e5ec51f5fd51a176e3d97e Mon Sep 17 00:00:00 2001 From: smihica Date: Tue, 12 Mar 2013 10:50:02 +0900 Subject: Created emmet branch. --- src/css-abbrev.el | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/css-abbrev.el (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el new file mode 100644 index 0000000..5f05035 --- /dev/null +++ b/src/css-abbrev.el @@ -0,0 +1,3 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; CSS abbrev: -- cgit v1.2.3 From 918e5420388bded0dd6b3656cc2fe9f4ba9c0649 Mon Sep 17 00:00:00 2001 From: smihica Date: Thu, 21 Mar 2013 11:41:55 +0900 Subject: [add] Added CSS transform functions. --- src/css-abbrev.el | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 5f05035..8530aa8 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -1,3 +1,157 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; CSS abbrev: + +(defun zencoding-css-split-args (exp) + (zencoding-aif + (string-match "[#0-9$-]" exp) + (cons (substring exp 0 it) (substring exp it)) + (list exp))) + +(defun zencoding-css-arg-number (input) + (zencoding-parse + "\\(\\(?:-\\|\\)[0-9.]+\\)\\(\\(?:-\\|e\\|p\\|x\\)\\|\\)" 3 "css number arguments" + (cons (list (elt it 1) + (let ((unit (string-to-char (elt it 2)))) + (cond ((= unit ?-) "px") + ((= unit ?e) "em") + ((= unit ?p) "%") + ((= unit ?x) "ex") + (t "px")))) + input))) + +(defun zencoding-css-arg-color (input) + (zencoding-parse + "#\\([0-9a-fA-F]\\{1,6\\}\\)" 2 "css color argument" + (cons (let* ((n (elt it 1)) + (l (length n))) + (concat + "#" + (substring + (cond ((= l 1) (concat (make-list 6 (string-to-char n)))) + ((= l 2) (concat n n n)) + ((= l 3) (concat + (loop for c in (string-to-list n) + append (list c c)))) + (t (concat n n))) + 0 6))) + input))) + +(defun zencoding-css-parse-arg (input) + (zencoding-run zencoding-css-arg-number it + (zencoding-run zencoding-css-arg-color it + (if (equal input "") + it + (cons input ""))))) + +(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)))))) + +(defun zencoding-css-subexpr (exp) + (let* ((exp (zencoding-css-split-args exp)) + (args (cdr exp))) + (when args (setf (cdr exp) (zencoding-css-parse-args args))) + exp)) + +(defun zencoding-css-toknize (str) + (let* ((i (split-string str "+")) + (rt nil)) + (loop + (let ((f (first i)) + (s (second i))) + (if f + (if (and s (or (eql s "") (string-match "^[#0-9$-]" s))) + (progn + (setf rt (cons (concat f "+" s) rt)) + (setf i (cddr i))) + (progn + (setf rt (cons f rt)) + (setf i (cdr i)))) + (return (nreverse rt))))))) + +(defun zencoding-css-expr (input) + (mapcar #'zencoding-css-subexpr + (zencoding-css-toknize input))) + +(zencoding-defparameter + zencoding-css-snippets + (gethash "snippets" (gethash "css" zencoding-snippets))) + +(zencoding-defparameter + zencoding-css-unitless-properties + '("z-index" "line-height" "opacity" "font-weight" "zoom")) + +(zencoding-defparameter + zencoding-css-unitless-properties-regex + (concat "^\\(:?" (zencoding-join-string + zencoding-css-unitless-properties "\\|") + "\\):.*$")) + +(defun zencoding-css-instantiate-lambda (str) + (flet ((split-string-to-body + (str args-sym) + (let ((rt '(concat)) (idx-max 0)) + (loop for i from 0 to 255 do + (zencoding-aif + (string-match "\\(?:|\\|${\\([0-9]\\)\\(?::\\(.+?\\)\\|\\)}\\)" str) + (destructuring-bind (mat idx def) + (mapcar (lambda (ref) (match-string ref str)) '(0 1 2)) + (setf rt + `((or + (nth ,(let ((cur-idx (if idx (1- (string-to-int idx)) i))) + (setf idx-max (max cur-idx idx-max))) + ,args-sym) + ,(or def "")) + ,(substring str 0 it) ;; ordered to reverse + ,@rt)) + (setf str (substring str (+ it (length mat))))) + ;; don't use nreverse. cause bug in emacs-lisp. + (return (cons idx-max (reverse (cons str rt))))))))) + (let ((args (gensym))) + (destructuring-bind (idx-max . body) (split-string-to-body str args) + (eval + `(lambda (&rest ,args) + (progn + (when (nthcdr ,idx-max ,args) + (setf (nthcdr ,idx-max ,args) + (list (zencoding-join-string + (nthcdr ,idx-max ,args) " ")))) + ,body))))))) + +(defun zencoding-css-transform (exprs) + (zencoding-join-string + (mapcar + #'(lambda (expr) + (zencoding-aif + (gethash (car expr) zencoding-css-snippets) + (let ((set it) (fn nil) (unitlessp nil)) + (if (stringp set) + (progn + (setf fn (zencoding-css-instantiate-lambda set)) + (setf unitlessp + (not (null (string-match + zencoding-css-unitless-properties-regex set)))) + (puthash (car expr) (cons fn unitlessp) zencoding-css-snippets)) + (progn (setf fn (car set)) + (setf unitlessp (cdr set)))) + (apply fn + (mapcar #'(lambda (arg) + (if (listp arg) + (if unitlessp (car arg) + (apply #'concat arg)) + arg)) + (cdr expr)))) + + (concat (car expr) ":" + (zencoding-join-string + (mapcar #'(lambda (arg) + (if (listp arg) (apply #'concat arg) arg)) + (cdr expr)) " ") + ";"))) + exprs) + "\n")) \ No newline at end of file -- cgit v1.2.3 From e353327def110e43716be349c9cf79420a985ca5 Mon Sep 17 00:00:00 2001 From: smihica Date: Sun, 24 Mar 2013 04:25:40 +0900 Subject: Supported subset of emmet's CSS Abbreviations. You can test it in css-mode. --- src/css-abbrev.el | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 8530aa8..00c182f 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -123,7 +123,7 @@ (nthcdr ,idx-max ,args) " ")))) ,body))))))) -(defun zencoding-css-transform (exprs) +(defun zencoding-css-transform-exprs (exprs) (zencoding-join-string (mapcar #'(lambda (expr) @@ -154,4 +154,8 @@ (cdr expr)) " ") ";"))) exprs) - "\n")) \ No newline at end of file + "\n")) + + +(defun zencoding-css-transform (input) + (zencoding-css-transform-exprs (zencoding-css-expr input))) \ No newline at end of file -- cgit v1.2.3 From c7a319e084abf226669e2430c3a6520500e1c7cb Mon Sep 17 00:00:00 2001 From: smihica Date: Wed, 3 Apr 2013 00:43:18 +0900 Subject: Fixed a bug that trailing '+' pattern (e.g. 'bg+') is not working adequately. --- src/css-abbrev.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 00c182f..3c528e8 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -65,7 +65,7 @@ (let ((f (first i)) (s (second i))) (if f - (if (and s (or (eql s "") (string-match "^[#0-9$-]" s))) + (if (and s (or (string= s "") (string-match "^[#0-9$-]" s))) (progn (setf rt (cons (concat f "+" s) rt)) (setf i (cddr i))) -- cgit v1.2.3 From a6a5f57bdfa6bcbaa64c5e7088c2882255a5f627 Mon Sep 17 00:00:00 2001 From: smihica Date: Fri, 5 Apr 2013 01:00:34 +0900 Subject: Added css !important syntax support. (http://docs.emmet.io/css-abbreviations/#important-modifier). --- src/css-abbrev.el | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'src/css-abbrev.el') 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) -- cgit v1.2.3 From 3d4c9de975da913fefd2d6f4e5f276ea9e03ed26 Mon Sep 17 00:00:00 2001 From: smihica Date: Sat, 6 Apr 2013 00:16:38 +0900 Subject: Supported a missing pattern like 'prop:${default}'. --- src/css-abbrev.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 72021ad..7deb427 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -106,7 +106,7 @@ (let ((rt '(concat)) (idx-max 0)) (loop for i from 0 to 255 do (zencoding-aif - (string-match "\\(?:|\\|${\\([0-9]\\)\\(?::\\(.+?\\)\\|\\)}\\)" str) + (string-match "\\(?:|\\|${\\(?:\\([0-9]\\):\\|\\)\\(?:\\(.+?\\)\\|\\)}\\)" str) (destructuring-bind (mat idx def) (mapcar (lambda (ref) (match-string ref str)) '(0 1 2)) (setf rt -- cgit v1.2.3 From 60fa9d893bc9f4372dbb7563ba13a279e7d59212 Mon Sep 17 00:00:00 2001 From: smihica Date: Fri, 3 May 2013 19:57:48 +0900 Subject: Added #\Space division of css arguments. --- src/css-abbrev.el | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 7deb427..4afcaff 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -4,13 +4,13 @@ (defun zencoding-css-split-args (exp) (zencoding-aif - (string-match "[#0-9$-]" exp) + (string-match "[ #0-9$-]" exp) (cons (substring exp 0 it) (substring exp it)) (list exp))) (defun zencoding-css-arg-number (input) (zencoding-parse - "\\(\\(?:-\\|\\)[0-9.]+\\)\\(\\(?:-\\|e\\|p\\|x\\)\\|\\)" 3 "css number arguments" + " *\\(\\(?:-\\|\\)[0-9.]+\\)\\(\\(?:-\\|e\\|p\\|x\\)\\|\\)" 3 "css number arguments" (cons (list (elt it 1) (let ((unit (string-to-char (elt it 2)))) (cond ((= unit ?-) "px") @@ -22,7 +22,7 @@ (defun zencoding-css-arg-color (input) (zencoding-parse - "#\\([0-9a-fA-F]\\{1,6\\}\\)" 2 "css color argument" + " *#\\([0-9a-fA-F]\\{1,6\\}\\)" 2 "css color argument" (cons (let* ((n (elt it 1)) (l (length n))) (concat @@ -37,12 +37,18 @@ 0 6))) input))) +(defun zencoding-css-arg-something (input) + (zencoding-parse + " *\\([^ ]+\\)" 2 "css argument" + (cons (elt it 1) input))) + (defun zencoding-css-parse-arg (input) (zencoding-run zencoding-css-arg-number it (zencoding-run zencoding-css-arg-color it - (if (equal input "") - it - (cons input ""))))) + (zencoding-run zencoding-css-arg-something it + (if (equal input "") + it + (cons input "")))))) (defun zencoding-css-important-p (input) (let ((len (length input))) @@ -73,7 +79,7 @@ (let ((f (first i)) (s (second i))) (if f - (if (and s (or (string= s "") (string-match "^[#0-9$-]" s))) + (if (and s (or (string= s "") (string-match "^[ #0-9$-]" s))) (progn (setf rt (cons (concat f "+" s) rt)) (setf i (cddr i))) @@ -174,6 +180,5 @@ exprs) "\n")) - (defun zencoding-css-transform (input) (zencoding-css-transform-exprs (zencoding-css-expr input))) \ No newline at end of file -- cgit v1.2.3 From 976449a2d5e28b731e848aa22dab38a05a39ecc1 Mon Sep 17 00:00:00 2001 From: smihica Date: Sat, 4 May 2013 18:08:29 +0900 Subject: Added css vendor-prefix support. (http://docs.emmet.io/css-abbreviations/vendor-prefixes/) --- src/css-abbrev.el | 140 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 49 deletions(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 4afcaff..c4709a7 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -2,22 +2,15 @@ ;; ;;; CSS abbrev: -(defun zencoding-css-split-args (exp) - (zencoding-aif - (string-match "[ #0-9$-]" exp) - (cons (substring exp 0 it) (substring exp it)) - (list exp))) - +(zencoding-defparameter + zencoding-css-unit-aliases + (gethash "unitAliases" (gethash "css" zencoding-preferences))) (defun zencoding-css-arg-number (input) (zencoding-parse " *\\(\\(?:-\\|\\)[0-9.]+\\)\\(\\(?:-\\|e\\|p\\|x\\)\\|\\)" 3 "css number arguments" (cons (list (elt it 1) - (let ((unit (string-to-char (elt it 2)))) - (cond ((= unit ?-) "px") - ((= unit ?e) "em") - ((= unit ?p) "%") - ((= unit ?x) "ex") - (t "px")))) + (let ((unit (elt it 2))) + (gethash unit zencoding-css-unit-aliases "px"))) input))) (defun zencoding-css-arg-color (input) @@ -64,13 +57,30 @@ (setf args (cdr it))) (return (nreverse rt))))))) +(defun zencoding-css-split-args (exp) + (zencoding-aif + (string-match "\\(?:[ #0-9$]\\|-[0-9]\\)" exp) + (list (substring exp 0 it) (substring exp it)) + (list exp nil))) + +(defun zencoding-css-split-vendor-prefixes (input) + (zencoding-parse + "\\(-[wmso]+-\\|-\\|\\)\\(.*\\)" 3 "css vendor prefixes" + (list (elt it 2) + (let ((vp (elt it 1))) + (if (not (string= vp "")) + (if (string= vp "-") 'auto + (string-to-list (subseq vp 1 -1)))))))) + (defun zencoding-css-subexpr (exp) - (let* ((importantp (zencoding-css-important-p exp)) - (exp (zencoding-css-split-args - (if importantp (subseq exp 0 -1) exp))) - (args (cdr exp))) - (setf (cdr exp) (cons importantp (zencoding-css-parse-args args))) - exp)) + (let* ((importantp (zencoding-css-important-p exp))) + (destructuring-bind (exp vp) + (zencoding-css-split-vendor-prefixes exp) + (destructuring-bind (key args) + (zencoding-css-split-args (if importantp (subseq exp 0 -1) exp)) + `(,key ,vp + ,importantp + ,@(zencoding-css-parse-args args)))))) (defun zencoding-css-toknize (str) (let* ((i (split-string str "+")) @@ -79,7 +89,8 @@ (let ((f (first i)) (s (second i))) (if f - (if (and s (or (string= s "") (string-match "^[ #0-9$-]" s))) + (if (and s (or (string= s "") + (string-match "^\\(?:[ #0-9$]\\|-[0-9]\\)" s))) (progn (setf rt (cons (concat f "+" s) rt)) (setf i (cddr i))) @@ -98,7 +109,7 @@ (zencoding-defparameter zencoding-css-unitless-properties - '("z-index" "line-height" "opacity" "font-weight" "zoom")) + (gethash "unitlessProperties" (gethash "css" zencoding-preferences))) (zencoding-defparameter zencoding-css-unitless-properties-regex @@ -137,29 +148,52 @@ (nthcdr ,idx-max ,args) " ")))) ,body))))))) +(zencoding-defparameter + zencoding-vendor-prefixes-properties + (gethash "vendorPrefixesProperties" (gethash "css" zencoding-preferences))) +(zencoding-defparameter + zencoding-vendor-prefixes-default + (list "webkit" "moz" "ms" "o")) +(defun zencoding-css-transform-vendor-prefixes (line vp) + (let ((key (subseq line 0 (or (position ?: line) (length line))))) + (let ((vps (if (eql vp 'auto) + (gethash key + zencoding-vendor-prefixes-properties + zencoding-vendor-prefixes-default) + (mapcar (lambda (v) + (cond ((= v ?w) "webkit") + ((= v ?m) "moz") + ((= v ?s) "ms") + ((= v ?o) "o"))) + vp)))) + (zencoding-join-string + (append (mapcar (lambda (v) (concat "-" v "-" line)) vps) + (list line)) + "\n")))) + (defun zencoding-css-transform-exprs (exprs) (zencoding-join-string (mapcar #'(lambda (expr) - (zencoding-aif - (gethash (car expr) zencoding-css-snippets) - (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 - ;; cache hit. - (setf fn (car set)) - (setf unitlessp (cdr set)))) - (let ((transformed + (let ((basement + (zencoding-aif + (gethash (car expr) zencoding-css-snippets) + (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 + ;; cache hit. + (setf fn (car set)) + (setf unitlessp (cdr set)))) (apply fn (mapcar #'(lambda (arg) @@ -167,16 +201,24 @@ (if unitlessp (car arg) (apply #'concat arg)) arg)) - (cddr expr))))) - (if (cadr expr) - (concat (subseq transformed 0 -1) " !important;") - transformed))) - (concat (car expr) ":" - (zencoding-join-string - (mapcar #'(lambda (arg) - (if (listp arg) (apply #'concat arg) arg)) - (cdr expr)) " ") - ";"))) + (cdddr expr)))) + (concat (car expr) ":" + (zencoding-join-string + (mapcar #'(lambda (arg) + (if (listp arg) (apply #'concat arg) arg)) + (cdddr expr)) " ") + ";")))) + (let* ((separator-pos (position ?: basement)) + (basement (concat (subseq basement 0 (1+ separator-pos)) " " + (subseq basement (1+ separator-pos))))) + (let ((line + (if (caddr expr) + (concat (subseq basement 0 -1) " !important;") + basement))) + (zencoding-aif + (cadr expr) + (zencoding-css-transform-vendor-prefixes line it) + line))))) exprs) "\n")) -- cgit v1.2.3 From ad1f8f3d0347d81756921214e4611cfdad9a1327 Mon Sep 17 00:00:00 2001 From: smihica Date: Wed, 15 May 2013 01:29:00 +0900 Subject: Fixed a bug that CSS snipets @xxx is not working. --- src/css-abbrev.el | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index c4709a7..6533532 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -118,7 +118,13 @@ "\\):.*$")) (defun zencoding-css-instantiate-lambda (str) - (flet ((split-string-to-body + (flet ((insert-space-between-name-and-body + (str) + (if (string-match "^\\([a-z-]+:\\)\\(.+\\)$" str) + (zencoding-join-string + (mapcar (lambda (ref) (match-string ref str)) '(1 2)) " ") + str)) + (split-string-to-body (str args-sym) (let ((rt '(concat)) (idx-max 0)) (loop for i from 0 to 255 do @@ -137,7 +143,8 @@ (setf str (substring str (+ it (length mat))))) ;; don't use nreverse. cause bug in emacs-lisp. (return (cons idx-max (reverse (cons str rt))))))))) - (let ((args (gensym))) + (let ((args (gensym)) + (str (insert-space-between-name-and-body str))) (destructuring-bind (idx-max . body) (split-string-to-body str args) (eval `(lambda (&rest ,args) @@ -202,23 +209,20 @@ (apply #'concat arg)) arg)) (cdddr expr)))) - (concat (car expr) ":" + (concat (car expr) ": " (zencoding-join-string (mapcar #'(lambda (arg) (if (listp arg) (apply #'concat arg) arg)) (cdddr expr)) " ") ";")))) - (let* ((separator-pos (position ?: basement)) - (basement (concat (subseq basement 0 (1+ separator-pos)) " " - (subseq basement (1+ separator-pos))))) - (let ((line - (if (caddr expr) - (concat (subseq basement 0 -1) " !important;") - basement))) - (zencoding-aif - (cadr expr) - (zencoding-css-transform-vendor-prefixes line it) - line))))) + (let ((line + (if (caddr expr) + (concat (subseq basement 0 -1) " !important;") + basement))) + (zencoding-aif + (cadr expr) + (zencoding-css-transform-vendor-prefixes line it) + line)))) exprs) "\n")) -- cgit v1.2.3 From 4713a355010ff4a51e53470c2e8c101bbdaf177b Mon Sep 17 00:00:00 2001 From: smihica Date: Sat, 18 May 2013 17:56:33 +0900 Subject: Some trivial improvements. --- src/css-abbrev.el | 62 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 12 deletions(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 6533532..92f408d 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -7,19 +7,33 @@ (gethash "unitAliases" (gethash "css" zencoding-preferences))) (defun zencoding-css-arg-number (input) (zencoding-parse - " *\\(\\(?:-\\|\\)[0-9.]+\\)\\(\\(?:-\\|e\\|p\\|x\\)\\|\\)" 3 "css number arguments" + " *\\(\\(?:-\\|\\)[0-9.]+\\)\\(-\\|[A-Za-z]*\\)" 3 "css number arguments" (cons (list (elt it 1) (let ((unit (elt it 2))) - (gethash unit zencoding-css-unit-aliases "px"))) + (if (= (length unit) 0) + (if (find ?. (elt it 1)) "em" "px") + (gethash unit zencoding-css-unit-aliases unit)))) input))) +(zencoding-defparameter + zencoding-css-color-shorten-if-possible + (gethash "shortenIfPossible" (gethash "color" (gethash "css" zencoding-preferences)))) +(zencoding-defparameter + zencoding-css-color-case + (gethash "case" (gethash "color" (gethash "css" zencoding-preferences)))) +(zencoding-defparameter + zencoding-css-color-trailing-aliases + (gethash "trailingAliases" (gethash "color" (gethash "css" zencoding-preferences)))) (defun zencoding-css-arg-color (input) (zencoding-parse - " *#\\([0-9a-fA-F]\\{1,6\\}\\)" 2 "css color argument" - (cons (let* ((n (elt it 1)) + (concat " *#\\([0-9a-fA-F]\\{1,6\\}\\)\\(rgb\\|\\)\\([" + (zencoding-join-string + (zencoding-get-keys-of-hash zencoding-css-color-trailing-aliases) "") + "]\\|\\)") + 4 "css color argument" + (let ((color + (let* ((n (elt it 1)) (l (length n))) - (concat - "#" (substring (cond ((= l 1) (concat (make-list 6 (string-to-char n)))) ((= l 2) (concat n n n)) @@ -27,8 +41,30 @@ (loop for c in (string-to-list n) append (list c c)))) (t (concat n n))) - 0 6))) - input))) + 0 6)))) + (cons + (let ((rgb-mode (string= (elt it 2) "rgb"))) + (if rgb-mode + (format "rgb(%d,%d,%d)" + (string-to-int (substring color 0 2) 16) + (string-to-int (substring color 2 4) 16) + (string-to-int (substring color 4 6) 16)) + (concat + "#" + (let ((filter (cond ((string= zencoding-css-color-case "auto") #'identity) + ((string= zencoding-css-color-case "up") #'upcase) + (t #'downcase)))) + (funcall + filter + (if (and zencoding-css-color-shorten-if-possible + (eql (aref color 0) (aref color 1)) + (eql (aref color 2) (aref color 3)) + (eql (aref color 4) (aref color 5))) + (concat (mapcar #'(lambda (i) (aref color i)) '(0 2 4))) + color)))))) + (if (< 0 (length (elt it 3))) + (cons (gethash (elt it 3) zencoding-css-color-trailing-aliases) input) + input))))) (defun zencoding-css-arg-something (input) (zencoding-parse @@ -52,10 +88,12 @@ (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))))))) + (zencoding-pif + (zencoding-css-parse-arg args) + (loop for i on it do (push (car i) rt) + while (consp (cdr i)) + finally (setq args (cdr i))) + (return (nreverse rt))))))) (defun zencoding-css-split-args (exp) (zencoding-aif -- cgit v1.2.3 From b388f1ec83b714b0655c62752336441442dd9da2 Mon Sep 17 00:00:00 2001 From: smihica Date: Sat, 18 May 2013 19:29:51 +0900 Subject: Fixed trivial bugs. --- src/css-abbrev.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/css-abbrev.el') diff --git a/src/css-abbrev.el b/src/css-abbrev.el index 92f408d..4c357d6 100644 --- a/src/css-abbrev.el +++ b/src/css-abbrev.el @@ -167,7 +167,7 @@ (let ((rt '(concat)) (idx-max 0)) (loop for i from 0 to 255 do (zencoding-aif - (string-match "\\(?:|\\|${\\(?:\\([0-9]\\):\\|\\)\\(?:\\(.+?\\)\\|\\)}\\)" str) + (string-match "\\(?:|\\|${\\(?:\\([0-9]\\)\\|\\)\\(?::\\(.+?\\)\\|\\)}\\)" str) (destructuring-bind (mat idx def) (mapcar (lambda (ref) (match-string ref str)) '(0 1 2)) (setf rt -- cgit v1.2.3