aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorflyingleafe <flyingleafe@gmail.com>2014-08-11 20:37:52 +0600
committerflyingleafe <flyingleafe@gmail.com>2014-08-11 20:37:52 +0600
commit3e945d2e84abaa54de53b571b7831c0892d09854 (patch)
tree0d159a8e808a7a349d5fce614726feee154546bc /src
parentae88e6ce954fa6e0fe7cfc31d7aa7977e0c579af (diff)
downloademmet-mode-3e945d2e84abaa54de53b571b7831c0892d09854.tar.lz
emmet-mode-3e945d2e84abaa54de53b571b7831c0892d09854.tar.xz
emmet-mode-3e945d2e84abaa54de53b571b7831c0892d09854.zip
Add support for Sass: Removing trailing semicolon; ability to define
Sass-specific snippets
Diffstat (limited to 'src')
-rw-r--r--src/css-abbrev.el75
-rw-r--r--src/mode-def.el9
-rw-r--r--src/snippets.el15
3 files changed, 62 insertions, 37 deletions
diff --git a/src/css-abbrev.el b/src/css-abbrev.el
index 7f2e909..7e2fe9f 100644
--- a/src/css-abbrev.el
+++ b/src/css-abbrev.el
@@ -146,6 +146,10 @@
(gethash "snippets" (gethash "css" emmet-snippets)))
(emmet-defparameter
+ emmet-sass-snippets
+ (gethash "snippets" (gethash "sass" emmet-snippets)))
+
+(emmet-defparameter
emmet-css-unitless-properties
(gethash "unitlessProperties" (gethash "css" emmet-preferences)))
@@ -220,43 +224,48 @@
(emmet-join-string
(mapcar
#'(lambda (expr)
- (let ((basement
- (emmet-aif
- (gethash (car expr) emmet-css-snippets)
- (let ((set it) (fn nil) (unitlessp nil))
- (if (stringp set)
- (progn
- ;; new pattern
- ;; creating print function
- (setf fn (emmet-css-instantiate-lambda set))
- ;; get unitless or no
- (setf unitlessp
- (not (null (string-match
- emmet-css-unitless-properties-regex set))))
- ;; caching
- (puthash (car expr) (cons fn unitlessp) emmet-css-snippets))
- (progn
- ;; cache hit.
- (setf fn (car set))
- (setf unitlessp (cdr set))))
- (apply fn
- (mapcar
- #'(lambda (arg)
- (if (listp arg)
- (if unitlessp (car arg)
- (apply #'concat arg))
- arg))
- (cdddr expr))))
- (concat (car expr) ": "
- (emmet-join-string
- (mapcar #'(lambda (arg)
- (if (listp arg) (apply #'concat arg) arg))
- (cdddr expr)) " ")
- ";"))))
+ (let*
+ ((hash-map (if emmet-use-sass-syntax emmet-sass-snippets emmet-css-snippets))
+ (basement
+ (emmet-aif
+ (or (gethash (car expr) hash-map) (gethash (car expr) emmet-css-snippets))
+ (let ((set it) (fn nil) (unitlessp nil))
+ (if (stringp set)
+ (progn
+ ;; new pattern
+ ;; creating print function
+ (setf fn (emmet-css-instantiate-lambda set))
+ ;; get unitless or no
+ (setf unitlessp
+ (not (null (string-match
+ emmet-css-unitless-properties-regex set))))
+ ;; caching
+ (puthash (car expr) (cons fn unitlessp) hash-map))
+ (progn
+ ;; cache hit.
+ (setf fn (car set))
+ (setf unitlessp (cdr set))))
+ (apply fn
+ (mapcar
+ #'(lambda (arg)
+ (if (listp arg)
+ (if unitlessp (car arg)
+ (apply #'concat arg))
+ arg))
+ (cdddr expr))))
+ (concat (car expr) ": "
+ (emmet-join-string
+ (mapcar #'(lambda (arg)
+ (if (listp arg) (apply #'concat arg) arg))
+ (cdddr expr)) " ")
+ ";"))))
(let ((line
(if (caddr expr)
(concat (subseq basement 0 -1) " !important;")
basement)))
+ ;; remove trailing semicolon while editing Sass files
+ (if (and emmet-use-sass-syntax (equal ";" (subseq line -1)))
+ (setq line (subseq line 0 -1)))
(emmet-aif
(cadr expr)
(emmet-css-transform-vendor-prefixes line it)
diff --git a/src/mode-def.el b/src/mode-def.el
index cbabeb8..b9b1f94 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -47,6 +47,11 @@
"When true, transform Emmet snippets into CSS, instead of the usual HTML.")
(make-variable-buffer-local 'emmet-use-css-transform)
+(defvar emmet-use-sass-syntax nil
+ "When true, uses Sass syntax for CSS abbreviations expanding,
+e. g. without semicolons")
+(make-variable-buffer-local 'emmet-use-sass-syntax)
+
(defvar emmet-css-major-modes
'(css-mode
scss-mode
@@ -108,7 +113,9 @@ For more information see `emmet-mode'."
(defun emmet-after-hook ()
"Initialize Emmet's buffer-local variables."
(if (memq major-mode emmet-css-major-modes)
- (setq emmet-use-css-transform t)))
+ (setq emmet-use-css-transform t))
+ (if (eq major-mode 'sass-mode)
+ (setq emmet-use-sass-syntax t)))
;;;###autoload
(define-minor-mode emmet-mode
diff --git a/src/snippets.el b/src/snippets.el
index b65af78..0f6655a 100644
--- a/src/snippets.el
+++ b/src/snippets.el
@@ -599,7 +599,7 @@ tbl) tbl)
(puthash "dl+" "dl>dt+dd" tbl)
(puthash "dlg" "dialog" tbl)
(puthash "doc" "html>(head>meta charset=UTF-8+title{Document})+body" tbl)
-(puthash "doc4" "html>(head>meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"+title{Document})" tbl)
+(puthash "doc4" "html>(head>meta http-equiv=\"Content-Type\" content=\"text/htmlcharset=UTF-8\"+title{Document})" tbl)
(puthash "emb" "embed" tbl)
(puthash "fig" "figure" tbl)
(puthash "figc" "figcaption" tbl)
@@ -662,9 +662,9 @@ tbl) tbl)
(puthash "menu:t" "menu:toolbar" tbl)
(puthash "menu:toolbar" "menu type=toolbar" tbl)
(puthash "meta:compat" "meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1\"" tbl)
-(puthash "meta:utf" "meta http-equiv=Content-Type content=\"text/html;charset=UTF-8\"" tbl)
+(puthash "meta:utf" "meta http-equiv=Content-Type content=\"text/htmlcharset=UTF-8\"" tbl)
(puthash "meta:vp" "meta name=viewport content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\"" tbl)
-(puthash "meta:win" "meta http-equiv=Content-Type content=\"text/html;charset=windows-1251\"" tbl)
+(puthash "meta:win" "meta http-equiv=Content-Type content=\"text/htmlcharset=windows-1251\"" tbl)
(puthash "obj" "object" tbl)
(puthash "ol+" "ol>li" tbl)
(puthash "opt" "option" tbl)
@@ -695,4 +695,13 @@ tbl) tbl)
(puthash "cc:noie" "<!--[if !IE]><!-->\n\t${child}\n<!--<![endif]-->" tbl)
tbl) tbl)
tbl) tbl)
+(puthash "sass" (let ((tbl (make-hash-table :test 'equal)))
+(puthash "snippets" (let ((tbl (make-hash-table :test 'equal)))
+(puthash "@f" "@font-face\n\tfont-family:|\n\tsrc:url(|)\n" tbl)
+(puthash "@f+" "@font-face\n\tfont-family: '${1:FontName}'\n\tsrc: url('${2:FileName}.eot')\n\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'), url('${2:FileName}.woff') format('woff'), url('${2:FileName}.ttf') format('truetype'), url('${2:FileName}.svg#${1:FontName}') format('svg')\n\tfont-style: ${3:normal}\n\tfont-weight: ${4:normal}\n" tbl)
+(puthash "@kf" "@-webkit-keyframes ${1:identifier}\n\t${2:from}\n\t\t${3}${6}\n\t${4:to}\n\t\t${5}\n\n@-o-keyframes ${1:identifier}\n\t${2:from}\n\t\t${3}${6}\n\t${4:to}\n\t\t${5}\n\n@-moz-keyframes ${1:identifier}\n\t${2:from}\n\t\t${3}${6}\n\t${4:to}\n\t\t${5}\n\n@keyframes ${1:identifier}\n\t${2:from}\n\t\t${3}${6}\n\t${4:to}\n\t\t${5}\n" tbl)
+(puthash "@m" "@media ${1:screen}\n\t|\n" tbl)
+(puthash "@media" "@media ${1:screen}\n\t|\n" tbl)
+tbl) tbl)
+tbl) tbl)
tbl))