aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2020-01-10 13:27:24 -0500
committerJesús <heckyel@hyperbola.info>2020-01-10 13:27:24 -0500
commitd7424d40aa963e47d3224b81ccf41c4f8669617d (patch)
tree949207d0127a4ffb400e1b2df74df1144a78498d
parent312cbf5789eb62a53920353faa3503ebc60af249 (diff)
downloademmet-mode-d7424d40aa963e47d3224b81ccf41c4f8669617d.tar.lz
emmet-mode-d7424d40aa963e47d3224b81ccf41c4f8669617d.tar.xz
emmet-mode-d7424d40aa963e47d3224b81ccf41c4f8669617d.zip
Support boolean attributes
For example, script[src defer.] expands to <script src="" defer></script>. This notation is not documented in the cheet sheet, but you can use it in the playground. We should support boolean attributes for the other filters as well, say, haml.
-rw-r--r--README.md4
-rw-r--r--src/css-abbrev.el2
-rw-r--r--src/html-abbrev.el42
-rw-r--r--src/mode-def.el7
-rw-r--r--src/test.el4
5 files changed, 41 insertions, 18 deletions
diff --git a/README.md b/README.md
index 1fb534a..395e10b 100644
--- a/README.md
+++ b/README.md
@@ -279,12 +279,16 @@ you'll transform your snippet into the appropriate tag structure.
#### Properties
b[x] <b x=""></b>
+ b[x.] <b x></b>
b[x=] <b x=""></b>
b[x=""] <b x=""></b>
b[x=y] <b x="y"></b>
b[x="y"] <b x="y"></b>
b[x="()"] <b x="()"></b>
b[x m] <b x="" m=""></b>
+ b[x. m] <b x m=""></b>
+ b[x m.] <b x="" m></b>
+ b[x. m.] <b x m></b>
b[x= m=""] <b x="" m=""></b>
b[x=y m=l] <b x="y" m="l"></b>
b/[x=y m=l] <b x="y" m="l"/>
diff --git a/src/css-abbrev.el b/src/css-abbrev.el
index edc09ca..37fb091 100644
--- a/src/css-abbrev.el
+++ b/src/css-abbrev.el
@@ -224,7 +224,7 @@
(emmet-join-string
(mapcar
#'(lambda (expr)
- (let*
+ (let*
((hash-map (if emmet-use-sass-syntax emmet-sass-snippets emmet-css-snippets))
(basement
(emmet-aif
diff --git a/src/html-abbrev.el b/src/html-abbrev.el
index ad53474..e66b459 100644
--- a/src/html-abbrev.el
+++ b/src/html-abbrev.el
@@ -51,16 +51,18 @@
(defun emmet-default-filter ()
"Default filter(s) to be used if none is specified."
- (let* ((file-ext (car (emmet-regex ".*\\(\\..*\\)" (or (buffer-file-name) "") 1)))
- (defaults '(".html" ("html")
- ".htm" ("html")
- ".haml" ("haml")
- ".clj" ("hic")))
- (default-else '("html"))
- (selected-default (member file-ext defaults)))
- (if selected-default
- (cadr selected-default)
- default-else)))
+ (or emmet-file-filter
+ (let* ((file-ext (car (emmet-regex ".*\\(\\..*\\)" (or (buffer-file-name) "") 1)))
+ (defaults '(".html" ("html")
+ ".htm" ("html")
+ ".haml" ("haml")
+ ".clj" ("hic")
+ ".cljs" ("hic")))
+ (default-else emmet-fallback-filter)
+ (selected-default (member file-ext defaults)))
+ (if selected-default
+ (cadr selected-default)
+ default-else))))
(defun emmet-numbering (input)
(emmet-parse
@@ -251,9 +253,12 @@
(emmet-run
emmet-name
(let ((name (cdr expr)))
- (emmet-pif (emmet-prop-value name input)
- it
- `((,(read name) "") . ,input))))))
+ (emmet-pif (emmet-parse "\\.\\(.*?\\)" 2 "."
+ `((,(read name)) . ,input))
+ it
+ (emmet-pif (emmet-prop-value name input)
+ it
+ `((,(read name) "") . ,input)))))))
(defun emmet-prop-value (name input)
(emmet-pif (emmet-parse "=\"\\(.*?\\)\"" 2
@@ -561,15 +566,18 @@
(emmet-mapconcat-or-empty
" " merged-tag-props " " nil
(lambda (prop)
- (let ((key (car prop)))
- (concat (if (symbolp key) (symbol-name key) key)
- "=\"" (cadr prop) "\""))))))
+ (let* ((key (car prop))
+ (key (if (symbolp key) (symbol-name key) key))
+ (value (cadr prop)))
+ (if value
+ (concat key "=\"" value "\"")
+ key))))))
(content-multiline? (and content (string-match "\n" content)))
(block-tag? (and settings (gethash "block" settings)))
(self-closing? (and (not (or tag-txt content))
(or (not tag-has-body?)
(and settings (gethash "selfClosing" settings)))))
- (block-indentation? (or content-multiline? (and block-tag? content)))
+ (block-indentation? (or content-multiline? (and block-tag? content)))
(lf (if block-indentation? "\n")))
(concat "<" tag-name id classes props
(if self-closing?
diff --git a/src/mode-def.el b/src/mode-def.el
index 67313dd..f8d481f 100644
--- a/src/mode-def.el
+++ b/src/mode-def.el
@@ -91,6 +91,13 @@ e. g. without semicolons")
less-css-mode)
"Major modes that use emmet for CSS, rather than HTML.")
+(defvar emmet-fallback-filter '("html")
+ "Fallback filter for `emmet-default-filter', if none is found.")
+
+(defvar emmet-file-filter nil
+ "File local filter used by `emmet-default-filter'.")
+(make-variable-buffer-local 'emmet-file-filter)
+
(defun emmet-transform (input)
(if (or (emmet-detect-style-tag-and-attr) emmet-use-css-transform)
(emmet-css-transform input)
diff --git a/src/test.el b/src/test.el
index 913daca..ddc7e40 100644
--- a/src/test.el
+++ b/src/test.el
@@ -278,12 +278,16 @@
(define-emmet-transform-html-test-case Properties
"a[x]" ("<a href=\"\" x=\"\"></a>")
+ "a[x.]" ("<a href=\"\" x></a>")
"a[x=]" ("<a href=\"\" x=\"\"></a>")
"a[x=\"\"]" ("<a href=\"\" x=\"\"></a>")
"a[x=y]" ("<a href=\"\" x=\"y\"></a>")
"a[x=\"y\"]" ("<a href=\"\" x=\"y\"></a>")
"a[x=\"()\"]" ("<a href=\"\" x=\"()\"></a>")
"a[x m]" ("<a href=\"\" x=\"\" m=\"\"></a>")
+ "a[x. m]" ("<a href=\"\" x m=\"\"></a>")
+ "a[x m.]" ("<a href=\"\" x=\"\" m></a>")
+ "a[x. m.]" ("<a href=\"\" x m></a>")
"a[x= m=\"\"]" ("<a href=\"\" x=\"\" m=\"\"></a>")
"a[x=y m=l]" ("<a href=\"\" x=\"y\" m=\"l\"></a>")
"a/[x=y m=l]" ("<a href=\"\" x=\"y\" m=\"l\"/>")