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 /src | |
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.
Diffstat (limited to 'src')
-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 |
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\"/>") |