aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--conf/preferences.json11
-rw-r--r--conf/snippets.json16
-rw-r--r--src/css-abbrev.el62
-rw-r--r--src/html-abbrev.el2
-rw-r--r--src/init.el10
-rw-r--r--src/preferences.el15
-rw-r--r--src/snippets.el16
-rw-r--r--src/test.el119
-rw-r--r--zencoding-mode.el105
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