diff options
Diffstat (limited to 'zencoding-mode.el')
-rw-r--r-- | zencoding-mode.el | 1111 |
1 files changed, 1062 insertions, 49 deletions
diff --git a/zencoding-mode.el b/zencoding-mode.el index 0924965..98c4a02 100644 --- a/zencoding-mode.el +++ b/zencoding-mode.el @@ -940,6 +940,977 @@ tbl) tbl) (puthash "filters" "html, xsl" tbl) tbl) tbl) tbl)) +;; src/preferences.el +;; This file is generated from conf/preferences.json +;; Don't edit. +(zencoding-defparameter zencoding-preferences +(let ((tbl (make-hash-table :test 'equal))) +(puthash "css" (let ((tbl (make-hash-table :test 'equal))) +(puthash "vendorPrefixesProperties" (let ((tbl (make-hash-table :test 'equal))) +(puthash "text-fill-color" (vector +"webkit" +) + tbl) +(puthash "ime-mode" (vector +"ms" +) + tbl) +(puthash "grid-layer" (vector +"ms" +) + tbl) +(puthash "user-drag" (vector +"webkit" +) + tbl) +(puthash "mask-image" (vector +"webkit" +) + tbl) +(puthash "font-feature-settings" (vector +"moz" +"ms" +) + tbl) +(puthash "outline-radius-topleft" (vector +"moz" +) + tbl) +(puthash "mask-box-image-slice" (vector +"webkit" +) + tbl) +(puthash "background-composite" (vector +"webkit" +) + tbl) +(puthash "text-underline-position" (vector +"ms" +) + tbl) +(puthash "hyphenate-limit-chars" (vector +"ms" +) + tbl) +(puthash "marquee-speed" (vector +"o" +) + tbl) +(puthash "input-required" (vector +"o" +) + tbl) +(puthash "color-correction" (vector +"webkit" +) + tbl) +(puthash "background-size" (vector +"webkit" +) + tbl) +(puthash "background-origin" (vector +"webkit" +) + tbl) +(puthash "wrap-through" (vector +"ms" +) + tbl) +(puthash "text-emphasis-position" (vector +"webkit" +) + tbl) +(puthash "user-select" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "dashboard-region" (vector +"webkit" +"o" +) + tbl) +(puthash "accesskey" (vector +"o" +) + tbl) +(puthash "scrollbar-track-color" (vector +"ms" +) + tbl) +(puthash "grid-columns" (vector +"ms" +) + tbl) +(puthash "text-stroke-width" (vector +"webkit" +) + tbl) +(puthash "link-source" (vector +"o" +) + tbl) +(puthash "scrollbar-arrow-color" (vector +"ms" +) + tbl) +(puthash "border-radius" (vector +"webkit" +"moz" +) + tbl) +(puthash "text-stroke-color" (vector +"webkit" +) + tbl) +(puthash "box-shadow" (vector +"webkit" +"moz" +) + tbl) +(puthash "flow-into" (vector +"ms" +) + tbl) +(puthash "scrollbar-highlight-color" (vector +"ms" +) + tbl) +(puthash "border-left-colors" (vector +"moz" +) + tbl) +(puthash "word-wrap" (vector +"ms" +) + tbl) +(puthash "text-emphasis-color" (vector +"webkit" +) + tbl) +(puthash "hyphens" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "marquee-direction" (vector +"webkit" +) + tbl) +(puthash "column-rule-width" (vector +"webkit" +"moz" +) + tbl) +(puthash "box-lines" (vector +"webkit" +"ms" +) + tbl) +(puthash "column-break-inside" (vector +"webkit" +) + tbl) +(puthash "scroll-snap-points-x" (vector +"ms" +) + tbl) +(puthash "grid-row-align" (vector +"ms" +) + tbl) +(puthash "force-broken-image-icon" (vector +"moz" +) + tbl) +(puthash "animation-fill-mode" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "box-line-progression" (vector +"ms" +) + tbl) +(puthash "mask-size" (vector +"webkit" +) + tbl) +(puthash "scroll-boundary-left" (vector +"ms" +) + tbl) +(puthash "text-combine" (vector +"webkit" +) + tbl) +(puthash "grid-column-align" (vector +"ms" +) + tbl) +(puthash "perspective-origin" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "overflow-style" (vector +"ms" +) + tbl) +(puthash "mask-position" (vector +"webkit" +) + tbl) +(puthash "content-zoom-chaining" (vector +"ms" +) + tbl) +(puthash "column-span" (vector +"webkit" +) + tbl) +(puthash "border-fit" (vector +"webkit" +) + tbl) +(puthash "outline-radius-topright" (vector +"moz" +) + tbl) +(puthash "tab-size" (vector +"moz" +"o" +) + tbl) +(puthash "layout-grid-type" (vector +"ms" +) + tbl) +(puthash "mask-clip" (vector +"webkit" +) + tbl) +(puthash "column-gap" (vector +"webkit" +"moz" +) + tbl) +(puthash "text-security" (vector +"webkit" +) + tbl) +(puthash "text-align-last" (vector +"ms" +) + tbl) +(puthash "svg-shadow" (vector +"webkit" +) + tbl) +(puthash "accelerator" (vector +"ms" +) + tbl) +(puthash "locale" (vector +"webkit" +) + tbl) +(puthash "line-clamp" (vector +"webkit" +) + tbl) +(puthash "column-count" (vector +"webkit" +"moz" +) + tbl) +(puthash "line-box-contain" (vector +"webkit" +) + tbl) +(puthash "line-break" (vector +"webkit" +"ms" +) + tbl) +(puthash "transform-style" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "perspective" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "orient" (vector +"moz" +) + tbl) +(puthash "float-edge" (vector +"moz" +) + tbl) +(puthash "image-region" (vector +"moz" +) + tbl) +(puthash "mask-box-image-width" (vector +"webkit" +) + tbl) +(puthash "background-inline-policy" (vector +"moz" +) + tbl) +(puthash "user-modify" (vector +"webkit" +"moz" +) + tbl) +(puthash "content-zoom-snap-type" (vector +"ms" +) + tbl) +(puthash "outline-radius-bottomright" (vector +"moz" +) + tbl) +(puthash "wrap-margin" (vector +"ms" +) + tbl) +(puthash "transform-origin-z" (vector +"ms" +) + tbl) +(puthash "mask-box-image" (vector +"webkit" +) + tbl) +(puthash "scroll-chaining" (vector +"ms" +) + tbl) +(puthash "grid-row" (vector +"ms" +) + tbl) +(puthash "nbsp-mode" (vector +"webkit" +) + tbl) +(puthash "mask-box-image-source" (vector +"webkit" +) + tbl) +(puthash "font-language-override" (vector +"moz" +) + tbl) +(puthash "animation-delay" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "hyphenate-character" (vector +"webkit" +) + tbl) +(puthash "box-flex-group" (vector +"webkit" +) + tbl) +(puthash "border-image" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "highlight" (vector +"webkit" +) + tbl) +(puthash "marquee-repetition" (vector +"webkit" +) + tbl) +(puthash "grid-column" (vector +"ms" +) + tbl) +(puthash "box-align" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "user-input" (vector +"moz" +) + tbl) +(puthash "animation-duration" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "transform-origin-y" (vector +"ms" +) + tbl) +(puthash "box-ordinal-group" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "box-orient" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "stack-sizing" (vector +"moz" +) + tbl) +(puthash "transition" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "text-size-adjust" (vector +"moz" +"ms" +) + tbl) +(puthash "filter" (vector +"ms" +) + tbl) +(puthash "content-zoom-boundary" (vector +"ms" +) + tbl) +(puthash "layout-grid-char" (vector +"ms" +) + tbl) +(puthash "perspective-origin-x" (vector +"ms" +) + tbl) +(puthash "perspective-origin-y" (vector +"ms" +) + tbl) +(puthash "column-rule-color" (vector +"webkit" +"moz" +) + tbl) +(puthash "high-contrast-adjust" (vector +"ms" +) + tbl) +(puthash "text-justify" (vector +"ms" +) + tbl) +(puthash "text-decoration-color" (vector +"moz" +) + tbl) +(puthash "block-progression" (vector +"ms" +) + tbl) +(puthash "border-horizontal-spacing" (vector +"webkit" +) + tbl) +(puthash "wrap-flow" (vector +"ms" +) + tbl) +(puthash "margin-before-collapse" (vector +"webkit" +) + tbl) +(puthash "table-baseline" (vector +"o" +) + tbl) +(puthash "background-clip" (vector +"webkit" +"moz" +) + tbl) +(puthash "interpolation-mode" (vector +"ms" +) + tbl) +(puthash "scroll-snap-type" (vector +"ms" +) + tbl) +(puthash "text-emphasis-style" (vector +"webkit" +) + tbl) +(puthash "flow-from" (vector +"ms" +) + tbl) +(puthash "backface-visibility" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "transform" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "column-break-after" (vector +"webkit" +) + tbl) +(puthash "mask-composite" (vector +"webkit" +) + tbl) +(puthash "layout-grid" (vector +"ms" +) + tbl) +(puthash "column-width" (vector +"webkit" +"moz" +) + tbl) +(puthash "scrollbar-base-color" (vector +"ms" +) + tbl) +(puthash "window-shadow" (vector +"moz" +) + tbl) +(puthash "object-fit" (vector +"o" +) + tbl) +(puthash "text-decorations-in-effect" (vector +"webkit" +) + tbl) +(puthash "box-flex" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "hyphenate-limit-after" (vector +"webkit" +) + tbl) +(puthash "animation-play-state" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "transition-delay" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "input-format" (vector +"o" +) + tbl) +(puthash "mask-attachment" (vector +"webkit" +) + tbl) +(puthash "scroll-boundary-right" (vector +"ms" +) + tbl) +(puthash "animation-iteration-count" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "link" (vector +"o" +) + tbl) +(puthash "content-zoom-boundary-max" (vector +"ms" +) + tbl) +(puthash "text-decoration-style" (vector +"moz" +) + tbl) +(puthash "text-autospace" (vector +"ms" +) + tbl) +(puthash "mask-origin" (vector +"webkit" +) + tbl) +(puthash "user-focus" (vector +"moz" +) + tbl) +(puthash "border-bottom-colors" (vector +"moz" +) + tbl) +(puthash "scroll-boundary-top" (vector +"ms" +) + tbl) +(puthash "content-zooming" (vector +"ms" +) + tbl) +(puthash "appearance" (vector +"webkit" +"moz" +) + tbl) +(puthash "scroll-snap-x" (vector +"ms" +) + tbl) +(puthash "marquee-loop" (vector +"o" +) + tbl) +(puthash "column-rule-style" (vector +"webkit" +"moz" +) + tbl) +(puthash "marquee-increment" (vector +"webkit" +) + tbl) +(puthash "behavior" (vector +"ms" +) + tbl) +(puthash "box-pack" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "animation-direction" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "scrollbar-darkshadow-color" (vector +"ms" +) + tbl) +(puthash "animation-timing-function" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "text-blink" (vector +"moz" +) + tbl) +(puthash "scroll-boundary-bottom" (vector +"ms" +) + tbl) +(puthash "mask-box-image-repeat" (vector +"webkit" +) + tbl) +(puthash "text-orientation" (vector +"webkit" +) + tbl) +(puthash "grid-column-span" (vector +"ms" +) + tbl) +(puthash "binding" (vector +"moz" +) + tbl) +(puthash "transform-origin" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "text-decoration-line" (vector +"moz" +) + tbl) +(puthash "animation-name" (vector +"webkit" +"moz" +"o" +) + tbl) +(puthash "marquee-dir" (vector +"o" +) + tbl) +(puthash "content-zoom-snap" (vector +"ms" +) + tbl) +(puthash "border-top-colors" (vector +"moz" +) + tbl) +(puthash "border-vertical-spacing" (vector +"webkit" +) + tbl) +(puthash "grid-rows" (vector +"ms" +) + tbl) +(puthash "box-reflect" (vector +"webkit" +) + tbl) +(puthash "hyphenate-limit-before" (vector +"webkit" +) + tbl) +(puthash "mask-box-image-outset" (vector +"webkit" +) + tbl) +(puthash "outline-radius-bottomleft" (vector +"moz" +) + tbl) +(puthash "text-overflow" (vector +"ms" +) + tbl) +(puthash "border-right-colors" (vector +"moz" +) + tbl) +(puthash "layout-flow" (vector +"ms" +) + tbl) +(puthash "box-direction" (vector +"webkit" +"moz" +"ms" +) + tbl) +(puthash "animation" (vector +"webkit" +"o" +) + tbl) +(puthash "hyphenate-limit-lines" (vector +"ms" +) + tbl) +(puthash "scrollbar-face-color" (vector +"ms" +) + tbl) +(puthash "column-break-before" (vector +"webkit" +) + tbl) +(puthash "content-zoom-snap-points" (vector +"ms" +) + tbl) +(puthash "grid-row-span" (vector +"ms" +) + tbl) +(puthash "touch-action" (vector +"ms" +) + tbl) +(puthash "marquee-style" (vector +"webkit" +"o" +) + tbl) +(puthash "margin-after-collapse" (vector +"webkit" +) + tbl) +(puthash "text-kashida-space" (vector +"ms" +) + tbl) +(puthash "scrollbar-shadow-color" (vector +"ms" +) + tbl) +(puthash "object-position" (vector +"o" +) + tbl) +(puthash "hyphenate-limit-zone" (vector +"ms" +) + tbl) +(puthash "scroll-snap-y" (vector +"ms" +) + tbl) +(puthash "transform-origin-x" (vector +"ms" +) + tbl) +(puthash "transition-property" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "word-break" (vector +"ms" +) + tbl) +(puthash "scroll-snap-points-y" (vector +"ms" +) + tbl) +(puthash "scroll-boundary" (vector +"ms" +) + tbl) +(puthash "mask-repeat" (vector +"webkit" +) + tbl) +(puthash "writing-mode" (vector +"webkit" +"ms" +) + tbl) +(puthash "layout-grid-mode" (vector +"ms" +) + tbl) +(puthash "background-position-y" (vector +"ms" +) + tbl) +(puthash "scroll-rails" (vector +"ms" +) + tbl) +(puthash "content-zoom-boundary-min" (vector +"ms" +) + tbl) +(puthash "background-position-x" (vector +"ms" +) + tbl) +(puthash "box-sizing" (vector +"webkit" +"moz" +) + tbl) +(puthash "transition-duration" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +(puthash "rtl-ordering" (vector +"webkit" +) + tbl) +(puthash "layout-grid-line" (vector +"ms" +) + tbl) +(puthash "font-smoothing" (vector +"webkit" +) + tbl) +(puthash "transition-timing-function" (vector +"webkit" +"moz" +"ms" +"o" +) + tbl) +tbl) tbl) +(puthash "unitlessProperties" (vector +"z-index" +"line-height" +"opacity" +"font-weight" +"zoom" +) + tbl) +(puthash "floatUnit" "em" tbl) +(puthash "intUnit" "px" tbl) +(puthash "keywordAliases" (let ((tbl (make-hash-table :test 'equal))) +(puthash "a" "auto" tbl) +(puthash "do" "dotted" tbl) +(puthash "i" "inherit" tbl) +(puthash "da" "dashed" tbl) +(puthash "s" "solid" tbl) +(puthash "t" "transparent" tbl) +tbl) tbl) +(puthash "keywords" (vector +"auto" +"inherit" +) + tbl) +(puthash "unitAliases" (let ((tbl (make-hash-table :test 'equal))) +(puthash "p" "%" tbl) +(puthash "r" "rem" tbl) +(puthash "e" "em" tbl) +(puthash "x" "ex" tbl) +tbl) tbl) +tbl) tbl) +tbl)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; XML abbrev @@ -1543,22 +2514,15 @@ tbl)) ;; ;;; 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) @@ -1605,13 +2569,30 @@ tbl)) (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 "+")) @@ -1620,7 +2601,8 @@ tbl)) (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))) @@ -1639,7 +2621,7 @@ tbl)) (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 @@ -1678,29 +2660,52 @@ tbl)) (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) @@ -1708,16 +2713,24 @@ tbl)) (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")) |