aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
6 files changed, 153 insertions, 71 deletions
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: ;")