aboutsummaryrefslogtreecommitdiffstats
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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
4 files changed, 37 insertions, 18 deletions
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\"/>")