From d7424d40aa963e47d3224b81ccf41c4f8669617d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs?= Date: Fri, 10 Jan 2020 13:27:24 -0500 Subject: Support boolean attributes For example, script[src defer.] expands to . 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. --- README.md | 4 ++++ src/css-abbrev.el | 2 +- src/html-abbrev.el | 42 +++++++++++++++++++++++++----------------- src/mode-def.el | 7 +++++++ src/test.el | 4 ++++ 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[x=] b[x=""] b[x=y] b[x="y"] b[x="()"] b[x m] + b[x. m] + b[x m.] + b[x. m.] b[x= m=""] 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[x.]" ("") "a[x=]" ("") "a[x=\"\"]" ("") "a[x=y]" ("") "a[x=\"y\"]" ("") "a[x=\"()\"]" ("") "a[x m]" ("") + "a[x. m]" ("") + "a[x m.]" ("") + "a[x. m.]" ("") "a[x= m=\"\"]" ("") "a[x=y m=l]" ("") "a/[x=y m=l]" ("") -- cgit v1.2.3