diff options
author | Jesús <heckyel@hyperbola.info> | 2020-01-10 13:27:24 -0500 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2020-01-10 13:27:24 -0500 |
commit | d7424d40aa963e47d3224b81ccf41c4f8669617d (patch) | |
tree | 949207d0127a4ffb400e1b2df74df1144a78498d | |
parent | 312cbf5789eb62a53920353faa3503ebc60af249 (diff) | |
download | emmet-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.md | 4 | ||||
-rw-r--r-- | src/css-abbrev.el | 2 | ||||
-rw-r--r-- | src/html-abbrev.el | 42 | ||||
-rw-r--r-- | src/mode-def.el | 7 | ||||
-rw-r--r-- | src/test.el | 4 |
5 files changed, 41 insertions, 18 deletions
@@ -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\"/>") |