diff options
-rw-r--r-- | conf/preferences.json | 11 | ||||
-rw-r--r-- | conf/snippets.json | 16 | ||||
-rw-r--r-- | src/css-abbrev.el | 62 | ||||
-rw-r--r-- | src/html-abbrev.el | 2 | ||||
-rw-r--r-- | src/init.el | 10 | ||||
-rw-r--r-- | src/preferences.el | 15 | ||||
-rw-r--r-- | src/snippets.el | 16 | ||||
-rw-r--r-- | src/test.el | 119 | ||||
-rw-r--r-- | zencoding-mode.el | 105 |
9 files changed, 254 insertions, 102 deletions
diff --git a/conf/preferences.json b/conf/preferences.json index 8c6444b..8062b9f 100644 --- a/conf/preferences.json +++ b/conf/preferences.json @@ -352,10 +352,21 @@ "t":"transparent" }, "unitAliases": { + "-": "px", "e": "em", "p": "%", "x": "ex", "r": "rem" + }, + "color": { + "shortenIfPossible": true, + "case": "auto", + "trailingAliases": { + "s": "solid", + "t": "dotted", + "n": "none", + "h": "hidden" + } } } }
\ No newline at end of file diff --git a/conf/snippets.json b/conf/snippets.json index 555a00f..4aadc00 100644 --- a/conf/snippets.json +++ b/conf/snippets.json @@ -181,7 +181,7 @@ "olo": "outline-offset:|;", "olw": "outline-width:|;", "ols": "outline-style:|;", - "olc": "outline-color:#${1:000};", + "olc": "outline-color:${1:#000};", "olc:i": "outline-color:invert;", "bd": "border:|;", "bd+": "border:${1:1px} ${2:solid} ${3:#000};", @@ -191,7 +191,7 @@ "bdcl": "border-collapse:|;", "bdcl:c": "border-collapse:collapse;", "bdcl:s": "border-collapse:separate;", - "bdc": "border-color:#${1:000};", + "bdc": "border-color:${1:#000};", "bdc:t": "border-color:transparent;", "bdi": "border-image:url(|);", "bdi:n": "border-image:none;", @@ -254,7 +254,7 @@ "bdt:n": "border-top:none;", "bdts": "border-top-style:|;", "bdts:n": "border-top-style:none;", - "bdtc": "border-top-color:#${1:000};", + "bdtc": "border-top-color:${1:#000};", "bdtc:t": "border-top-color:transparent;", "bdr": "border-right:|;", "br": "border-right:|;", @@ -262,7 +262,7 @@ "bdr:n": "border-right:none;", "bdrst": "border-right-style:|;", "bdrst:n": "border-right-style:none;", - "bdrc": "border-right-color:#${1:000};", + "bdrc": "border-right-color:${1:#000};", "bdrc:t": "border-right-color:transparent;", "bdb": "border-bottom:|;", "bb": "border-bottom:|;", @@ -270,7 +270,7 @@ "bdb:n": "border-bottom:none;", "bdbs": "border-bottom-style:|;", "bdbs:n": "border-bottom-style:none;", - "bdbc": "border-bottom-color:#${1:000};", + "bdbc": "border-bottom-color:${1:#000};", "bdbc:t": "border-bottom-color:transparent;", "bdl": "border-left:|;", "bl": "border-left:|;", @@ -278,7 +278,7 @@ "bdl:n": "border-left:none;", "bdls": "border-left-style:|;", "bdls:n": "border-left-style:none;", - "bdlc": "border-left-color:#${1:000};", + "bdlc": "border-left-color:${1:#000};", "bdlc:t": "border-left-color:transparent;", "bdrs": "border-radius:|;", "bdtrrs": "border-top-right-radius:|;", @@ -289,7 +289,7 @@ "bg+": "background:${1:#fff} url(${2}) ${3:0} ${4:0} ${5:no-repeat};", "bg:n": "background:none;", "bg:ie": "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1:x}.png',sizingMethod='${2:crop}');", - "bgc": "background-color:#${1:fff};", + "bgc": "background-color:${1:#fff};", "bgc:t": "background-color:transparent;", "bgi": "background-image:url(|);", "bgi:n": "background-image:none;", @@ -322,7 +322,7 @@ "bgsz:a": "background-size:auto;", "bgsz:ct": "background-size:contain;", "bgsz:cv": "background-size:cover;", - "c": "color:#${1:000};", + "c": "color:${1:#000};", "c:r": "color:rgb(${1:0}, ${2:0}, ${3:0});", "c:ra": "color:rgba(${1:0}, ${2:0}, ${3:0}, .${4:5});", "cm": "/* |${child} */", 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 diff --git a/src/html-abbrev.el b/src/html-abbrev.el index e298ebc..ed004a2 100644 --- a/src/html-abbrev.el +++ b/src/html-abbrev.el @@ -245,7 +245,7 @@ (input (elt it 2))) `((,(read name) ,value) . ,input))) it - (zencoding-parse "=\\([^\\,\\+\\>\\ )]*\\)" 2 + (zencoding-parse "=\\([^\\,\\+\\>\\{\\}\\ )]*\\)" 2 "=property value" (let ((value (elt it 1)) (input (elt it 2))) diff --git a/src/init.el b/src/init.el index c9038fd..b2fd434 100644 --- a/src/init.el +++ b/src/init.el @@ -17,6 +17,16 @@ (defun zencoding-join-string (lis joiner) (mapconcat 'identity lis joiner)) +(defun zencoding-get-keys-of-hash (hash) + (let ((ks nil)) + (maphash #'(lambda (k v) (setq ks (cons k ks))) hash) + ks)) + +(defun zencoding-get-vals-of-hash (hash) + (let ((vs nil)) + (maphash #'(lambda (k v) (setq vs (cons v vs))) hash) + vs)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Generic parsing macros and utilities diff --git a/src/preferences.el b/src/preferences.el index 653c4e3..a9bfc39 100644 --- a/src/preferences.el +++ b/src/preferences.el @@ -1514,6 +1514,16 @@ tbl) tbl) tbl) (puthash "floatUnit" "em" tbl) (puthash "intUnit" "px" tbl) +(puthash "color" (let ((tbl (make-hash-table :test 'equal))) +(puthash "case" "auto" tbl) +(puthash "shortenIfPossible" t tbl) +(puthash "trailingAliases" (let ((tbl (make-hash-table :test 'equal))) +(puthash "h" "hidden" tbl) +(puthash "s" "solid" tbl) +(puthash "t" "dotted" tbl) +(puthash "n" "none" tbl) +tbl) tbl) +tbl) tbl) (puthash "keywordAliases" (let ((tbl (make-hash-table :test 'equal))) (puthash "a" "auto" tbl) (puthash "do" "dotted" tbl) @@ -1528,10 +1538,11 @@ tbl) tbl) ) tbl) (puthash "unitAliases" (let ((tbl (make-hash-table :test 'equal))) -(puthash "p" "%" tbl) -(puthash "r" "rem" tbl) (puthash "e" "em" tbl) +(puthash "r" "rem" tbl) +(puthash "-" "px" tbl) (puthash "x" "ex" tbl) +(puthash "p" "%" tbl) tbl) tbl) tbl) tbl) tbl)) diff --git a/src/snippets.el b/src/snippets.el index 0fb9b63..e5b9477 100644 --- a/src/snippets.el +++ b/src/snippets.el @@ -134,7 +134,7 @@ tbl) tbl) (puthash "bdls" "border-left-style:|;" tbl) (puthash "bdlw" "border-left-width:|;" tbl) (puthash "bdli" "border-left-image:url(|);" tbl) -(puthash "bdlc" "border-left-color:#${1:000};" tbl) +(puthash "bdlc" "border-left-color:${1:#000};" tbl) (puthash "whsc" "white-space-collapse:|;" tbl) (puthash "bdtlrs" "border-top-left-radius:|;" tbl) (puthash "bdblrs" "border-bottom-left-radius:|;" tbl) @@ -176,7 +176,7 @@ tbl) tbl) (puthash "d:tbclg" "display:table-column-group;" tbl) (puthash "bdf" "border-fit:${1:repeat};" tbl) (puthash "@f" "@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}" tbl) -(puthash "bdc" "border-color:#${1:000};" tbl) +(puthash "bdc" "border-color:${1:#000};" tbl) (puthash "d:rbt" "display:ruby-text;" tbl) (puthash "bdl" "border-left:|;" tbl) (puthash "@i" "@import url(|);" tbl) @@ -233,7 +233,7 @@ tbl) tbl) (puthash "ti" "text-indent:|;" tbl) (puthash "pgbi:av" "page-break-inside:avoid;" tbl) (puthash "tj:t" "text-justify:tibetan;" tbl) -(puthash "bgc" "background-color:#${1:fff};" tbl) +(puthash "bgc" "background-color:${1:#fff};" tbl) (puthash "trf:tx" "transform: translateX(${1:x});" tbl) (puthash "trf:ty" "transform: translateY(${1:y});" tbl) (puthash "va:sup" "vertical-align:super;" tbl) @@ -324,7 +324,7 @@ tbl) tbl) (puthash "bdbk" "border-break:${1:close};" tbl) (puthash "pgba:r" "page-break-after:right;" tbl) (puthash "wfsm" "-webkit-font-smoothing:${antialiased};" tbl) -(puthash "bdbc" "border-bottom-color:#${1:000};" tbl) +(puthash "bdbc" "border-bottom-color:${1:#000};" tbl) (puthash "ec" "empty-cells:|;" tbl) (puthash "te:ac" "text-emphasis:accent;" tbl) (puthash "fs" "font-style:${italic};" tbl) @@ -365,7 +365,7 @@ tbl) tbl) (puthash "bdtw" "border-top-width:|;" tbl) (puthash "cnt:c" "content:counter(|);" tbl) (puthash "cnt:a" "content:attr(|);" tbl) -(puthash "bdtc" "border-top-color:#${1:000};" tbl) +(puthash "bdtc" "border-top-color:${1:#000};" tbl) (puthash "cnt:noq" "content:no-open-quote;" tbl) (puthash "td:u" "text-decoration:underline;" tbl) (puthash "bdti" "border-top-image:url(|);" tbl) @@ -480,8 +480,8 @@ tbl) tbl) (puthash "fst:ue" "font-stretch:ultra-expanded;" tbl) (puthash "fst:uc" "font-stretch:ultra-condensed;" tbl) (puthash "pgbb:al" "page-break-before:always;" tbl) -(puthash "c" "color:#${1:000};" tbl) -(puthash "bdrc" "border-right-color:#${1:000};" tbl) +(puthash "c" "color:${1:#000};" tbl) +(puthash "bdrc" "border-right-color:${1:#000};" tbl) (puthash "bdtli:n" "border-top-left-image:none;" tbl) (puthash "bdtli:c" "border-top-left-image:continue;" tbl) (puthash "list:ur" "list-style-type:upper-roman;" tbl) @@ -632,7 +632,7 @@ tbl) tbl) (puthash "fs:i" "font-style:italic;" tbl) (puthash "ct:oq" "content:open-quote;" tbl) (puthash "bds:g" "border-style:groove;" tbl) -(puthash "olc" "outline-color:#${1:000};" tbl) +(puthash "olc" "outline-color:${1:#000};" tbl) (puthash "bds:r" "border-style:ridge;" tbl) (puthash "bds:s" "border-style:solid;" tbl) (puthash "bds:w" "border-style:wave;" tbl) diff --git a/src/test.el b/src/test.el index f651928..dc021ae 100644 --- a/src/test.el +++ b/src/test.el @@ -141,6 +141,48 @@ " <c><d></d></c>" "</a>")) +(define-zencoding-transform-html-test-case Climb-up + "a>b>c^d" ("<a href=\"\">" + " <b><c></c></b>" + " <d></d>" + "</a>") + "a>b>c^^d" ("<a href=\"\"><b><c></c></b></a>" + "<d></d>") + "a*2>b*2>c^d" ("<a href=\"\">" + " <b><c></c></b>" + " <b><c></c></b>" + " <d></d>" + "</a>" + "<a href=\"\">" + " <b><c></c></b>" + " <b><c></c></b>" + " <d></d>" + "</a>") + + "div+a>p>span{foo}+em>b^^^p" + ("<div>" + "</div>" + "<a href=\"\">" + " <p>" + " <span>foo</span>" + " <em><b></b></em>" + " </p>" + "</a>" + "<p></p>") + + "div+div>p>span+em^blockquote{foo}" + ("<div>" + "</div>" + "<div>" + " <p>" + " <span></span>" + " <em></em>" + " </p>" + " <blockquote>" + " foo" + " </blockquote>" + "</div>")) + (define-zencoding-transform-html-test-case Multiplication "a*1" ("<a href=\"\"></a>") "a*2" ("<a href=\"\"></a>" @@ -306,49 +348,11 @@ "p{Click }+a{here}+{ to continue}" ("<p>Click </p>" "<a href=\"\">here</a>" - " to continue")) + " to continue") -(define-zencoding-transform-html-test-case Climb-up - "a>b>c^d" ("<a href=\"\">" - " <b><c></c></b>" - " <d></d>" - "</a>") - "a>b>c^^d" ("<a href=\"\"><b><c></c></b></a>" - "<d></d>") - "a*2>b*2>c^d" ("<a href=\"\">" - " <b><c></c></b>" - " <b><c></c></b>" - " <d></d>" - "</a>" - "<a href=\"\">" - " <b><c></c></b>" - " <b><c></c></b>" - " <d></d>" - "</a>") + "xxx#id.cls p=1{txt}" + ("<xxx id=\"id\" class=\"cls\" p=\"1\">txt</xxx>")) - "div+a>p>span{foo}+em>b^^^p" - ("<div>" - "</div>" - "<a href=\"\">" - " <p>" - " <span>foo</span>" - " <em><b></b></em>" - " </p>" - "</a>" - "<p></p>") - - "div+div>p>span+em^blockquote{foo}" - ("<div>" - "</div>" - "<div>" - " <p>" - " <span></span>" - " <em></em>" - " </p>" - " <blockquote>" - " foo" - " </blockquote>" - "</div>")) (define-zencoding-transform-html-test-case Filter-comment "a.b|c" ("<!-- .b -->" @@ -438,14 +442,14 @@ "" (error "expected css color argument") "abc" (error "expected css color argument") "#x" (error "expected css color argument") - "#a" ("#aaaaaa" . "") + "#a" ("#aaa" . "") "#09" ("#090909" . "") - "#3D5-2" ("#33DD55" . "-2") + "#3D5-2" ("#3D5" . "-2") "#1a2B-3" ("#1a2B1a" . "-3") "#1A2b3x" ("#1A2b31" . "x") "#1a2B3Cx" ("#1a2B3C" . "x") "#1A2B3C4D-2" ("#1A2B3C" . "4D-2") - " #abc" ("#aabbcc" . "")) + " #abc" ("#abc" . "")) (define-zencoding-unit-test-case CSS-parse-arg-something #'zencoding-css-arg-something @@ -458,9 +462,9 @@ #'zencoding-css-parse-args "" nil "1-2--3-4" (("1" "px") ("2" "px") ("-3" "px") ("4" "px")) - "-10-2p-30#abc" (("-10" "px") ("2" "%") ("-30" "px") "#aabbcc") + "-10-2p-30#abc" (("-10" "px") ("2" "%") ("-30" "px") "#abc") "1p2x3-4e5x" (("1" "%") ("2" "ex") ("3" "px") ("4" "em") ("5" "ex")) - "#abc#de#f-3" ("#aabbcc" "#dedede" "#ffffff" ("-3" "px"))) + "#abc#de#f-3" ("#abc" "#dedede" "#fff" ("-3" "px"))) (define-zencoding-unit-test-case CSS-split-vendor-prefixes #'zencoding-css-split-vendor-prefixes @@ -476,7 +480,7 @@ "bg++c!" (("bg+" nil nil) ("c" nil t)) "m+0-10-10--20!+p0-0" (("m+" nil t ("0" "px") ("10" "px") ("10" "px") ("-20" "px")) ("p" nil nil ("0" "px") ("0" "px"))) - "bg+#abc#bc#c-3!" (("bg+" nil t "#aabbcc" "#bcbcbc" "#cccccc" ("-3" "px")))) + "bg+#abc#bc#c-3!" (("bg+" nil t "#abc" "#bcbcbc" "#ccc" ("-3" "px")))) (defmacro define-zencoding-transform-css-test-case (name &rest tests) `(define-zencoding-transform-test-case ,name @@ -484,6 +488,25 @@ ,@tests)) (define-zencoding-transform-css-test-case CSS-transform + ;; supplying values with units + "m10" ("margin: 10px;") + "m1.5" ("margin: 1.5em;") + "m1.5ex" ("margin: 1.5ex;") + "m1.5x" ("margin: 1.5ex;") + "m10foo" ("margin: 10foo;") + "m10ex20em" ("margin: 10ex 20em;") + "m10x20e" ("margin: 10ex 20em;") + "m10x-5" ("margin: 10ex -5px;") + ;; Color values + "c#3" ("color: #333;") + "bd5#0rgb" ("border: 5px rgb(0,0,0);") + "bd5#20rgb" ("border: 5px rgb(32,32,32);") + "bd5#0s" ("border: 5px #000 solid;") + "bd5#2rgbs" ("border: 5px rgb(34,34,34) solid;") + ;; Unitless property + "lh2" ("line-height: 2;") + "fw400" ("font-weight: 400;") + ;; "m0+p0-1p2e3x" ("margin: 0px;" "padding: 0px 1% 2em 3ex;") "p!+m10e!+f" ("padding: !important;" @@ -494,7 +517,7 @@ "p auto+m auto+bg+#F00 x.jpg 10 10 repeat-x" ("padding: auto;" "margin: auto;" - "background: #FF0000 url(x.jpg) 10px 10px repeat-x;") + "background: #F00 url(x.jpg) 10px 10px repeat-x;") "-bdrs" ("-webkit-border-radius: ;" "-moz-border-radius: ;" "border-radius: ;") diff --git a/zencoding-mode.el b/zencoding-mode.el index 2798997..d4caa18 100644 --- a/zencoding-mode.el +++ b/zencoding-mode.el @@ -79,6 +79,16 @@ (defun zencoding-join-string (lis joiner) (mapconcat 'identity lis joiner)) +(defun zencoding-get-keys-of-hash (hash) + (let ((ks nil)) + (maphash #'(lambda (k v) (setq ks (cons k ks))) hash) + ks)) + +(defun zencoding-get-vals-of-hash (hash) + (let ((vs nil)) + (maphash #'(lambda (k v) (setq vs (cons v vs))) hash) + vs)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Generic parsing macros and utilities @@ -262,7 +272,7 @@ tbl) tbl) (puthash "bdls" "border-left-style:|;" tbl) (puthash "bdlw" "border-left-width:|;" tbl) (puthash "bdli" "border-left-image:url(|);" tbl) -(puthash "bdlc" "border-left-color:#${1:000};" tbl) +(puthash "bdlc" "border-left-color:${1:#000};" tbl) (puthash "whsc" "white-space-collapse:|;" tbl) (puthash "bdtlrs" "border-top-left-radius:|;" tbl) (puthash "bdblrs" "border-bottom-left-radius:|;" tbl) @@ -304,7 +314,7 @@ tbl) tbl) (puthash "d:tbclg" "display:table-column-group;" tbl) (puthash "bdf" "border-fit:${1:repeat};" tbl) (puthash "@f" "@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}" tbl) -(puthash "bdc" "border-color:#${1:000};" tbl) +(puthash "bdc" "border-color:${1:#000};" tbl) (puthash "d:rbt" "display:ruby-text;" tbl) (puthash "bdl" "border-left:|;" tbl) (puthash "@i" "@import url(|);" tbl) @@ -361,7 +371,7 @@ tbl) tbl) (puthash "ti" "text-indent:|;" tbl) (puthash "pgbi:av" "page-break-inside:avoid;" tbl) (puthash "tj:t" "text-justify:tibetan;" tbl) -(puthash "bgc" "background-color:#${1:fff};" tbl) +(puthash "bgc" "background-color:${1:#fff};" tbl) (puthash "trf:tx" "transform: translateX(${1:x});" tbl) (puthash "trf:ty" "transform: translateY(${1:y});" tbl) (puthash "va:sup" "vertical-align:super;" tbl) @@ -452,7 +462,7 @@ tbl) tbl) (puthash "bdbk" "border-break:${1:close};" tbl) (puthash "pgba:r" "page-break-after:right;" tbl) (puthash "wfsm" "-webkit-font-smoothing:${antialiased};" tbl) -(puthash "bdbc" "border-bottom-color:#${1:000};" tbl) +(puthash "bdbc" "border-bottom-color:${1:#000};" tbl) (puthash "ec" "empty-cells:|;" tbl) (puthash "te:ac" "text-emphasis:accent;" tbl) (puthash "fs" "font-style:${italic};" tbl) @@ -493,7 +503,7 @@ tbl) tbl) (puthash "bdtw" "border-top-width:|;" tbl) (puthash "cnt:c" "content:counter(|);" tbl) (puthash "cnt:a" "content:attr(|);" tbl) -(puthash "bdtc" "border-top-color:#${1:000};" tbl) +(puthash "bdtc" "border-top-color:${1:#000};" tbl) (puthash "cnt:noq" "content:no-open-quote;" tbl) (puthash "td:u" "text-decoration:underline;" tbl) (puthash "bdti" "border-top-image:url(|);" tbl) @@ -608,8 +618,8 @@ tbl) tbl) (puthash "fst:ue" "font-stretch:ultra-expanded;" tbl) (puthash "fst:uc" "font-stretch:ultra-condensed;" tbl) (puthash "pgbb:al" "page-break-before:always;" tbl) -(puthash "c" "color:#${1:000};" tbl) -(puthash "bdrc" "border-right-color:#${1:000};" tbl) +(puthash "c" "color:${1:#000};" tbl) +(puthash "bdrc" "border-right-color:${1:#000};" tbl) (puthash "bdtli:n" "border-top-left-image:none;" tbl) (puthash "bdtli:c" "border-top-left-image:continue;" tbl) (puthash "list:ur" "list-style-type:upper-roman;" tbl) @@ -760,7 +770,7 @@ tbl) tbl) (puthash "fs:i" "font-style:italic;" tbl) (puthash "ct:oq" "content:open-quote;" tbl) (puthash "bds:g" "border-style:groove;" tbl) -(puthash "olc" "outline-color:#${1:000};" tbl) +(puthash "olc" "outline-color:${1:#000};" tbl) (puthash "bds:r" "border-style:ridge;" tbl) (puthash "bds:s" "border-style:solid;" tbl) (puthash "bds:w" "border-style:wave;" tbl) @@ -2340,6 +2350,16 @@ tbl) tbl) tbl) (puthash "floatUnit" "em" tbl) (puthash "intUnit" "px" tbl) +(puthash "color" (let ((tbl (make-hash-table :test 'equal))) +(puthash "case" "auto" tbl) +(puthash "shortenIfPossible" t tbl) +(puthash "trailingAliases" (let ((tbl (make-hash-table :test 'equal))) +(puthash "h" "hidden" tbl) +(puthash "s" "solid" tbl) +(puthash "t" "dotted" tbl) +(puthash "n" "none" tbl) +tbl) tbl) +tbl) tbl) (puthash "keywordAliases" (let ((tbl (make-hash-table :test 'equal))) (puthash "a" "auto" tbl) (puthash "do" "dotted" tbl) @@ -2354,10 +2374,11 @@ tbl) tbl) ) tbl) (puthash "unitAliases" (let ((tbl (make-hash-table :test 'equal))) -(puthash "p" "%" tbl) -(puthash "r" "rem" tbl) (puthash "e" "em" tbl) +(puthash "r" "rem" tbl) +(puthash "-" "px" tbl) (puthash "x" "ex" tbl) +(puthash "p" "%" tbl) tbl) tbl) tbl) tbl) tbl)) @@ -2608,7 +2629,7 @@ tbl)) (input (elt it 2))) `((,(read name) ,value) . ,input))) it - (zencoding-parse "=\\([^\\,\\+\\>\\ )]*\\)" 2 + (zencoding-parse "=\\([^\\,\\+\\>\\{\\}\\ )]*\\)" 2 "=property value" (let ((value (elt it 1)) (input (elt it 2))) @@ -3030,19 +3051,33 @@ tbl)) (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)) @@ -3050,8 +3085,30 @@ tbl)) (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 @@ -3075,10 +3132,12 @@ tbl)) (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 |