From 5b7aed673d83715f7f96910e6459415d094d5860 Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Sun, 24 Aug 2014 21:28:21 -0400 Subject: Make emmet-next-edit-point respect "emmet-move-cursor-between-quotes" --- src/mode-def.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mode-def.el b/src/mode-def.el index 7cac58d..d64b4eb 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -392,9 +392,14 @@ accept it or skip it." ((between-tags (if only-before-closed-tag "\\(><\\)/" "\\(><\\)")) (indented-line "\\(^[[:blank:]]+$\\)") - (between-quotes "\\(=\\(\"\\|'\\)\\{2\\}\\)") - (edit-point (format "\\(%s\\|%s\\|%s\\)" - between-tags indented-line between-quotes))) + (between-quotes + (if emmet-move-cursor-between-quotes "\\(=\\(\"\\|'\\)\\{2\\}\\)" nil)) + (whole-regex + (mapconcat 'identity + (delq nil + (list between-tags indented-line between-quotes)) + "\\|")) + (edit-point (format "\\(%s\\)" whole-regex))) (if (> count 0) (progn (forward-char) -- cgit v1.2.3 From c8fd50b6eaf02f44b32ee546021671353746168f Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Mon, 25 Aug 2014 07:12:22 -0400 Subject: WIP - Needs escaping figured out or avoided --- src/mode-def.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/mode-def.el b/src/mode-def.el index d64b4eb..dd2435d 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -426,6 +426,21 @@ accept it or skip it." (point)) (forward-char))))))) +(defun emmet-wrap-with-markup (wrap-with) + "Wrap region with markup." + (interactive "sExpression to wrap with: ") + (let* ((emmet-move-cursor-between-quotes nil) + (to-wrap (buffer-substring-no-properties (region-beginning) (region-end))) + (expr (concat wrap-with + ">{" + ;;FIX(replace-regexp-in-string "}" (concat "\\" "\&" to-wrap) + "}")) + (markup (emmet-transform expr))) + (when markup + (delete-region (region-beginning) (region-end)) + (insert markup)))) + + ;;;###autoload (defun emmet-next-edit-point (count) (interactive "^p") -- cgit v1.2.3 From df4e66009f0274df001978296e517e22d38631d3 Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Mon, 25 Aug 2014 07:38:48 -0400 Subject: Functional wrap-with-markup! --- src/mode-def.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mode-def.el b/src/mode-def.el index dd2435d..efe08a9 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -127,6 +127,7 @@ For more information see `emmet-mode'." (define-key map (kbd "") 'emmet-expand-line) (define-key map (kbd "") 'emmet-next-edit-point) (define-key map (kbd "") 'emmet-prev-edit-point) + (define-key map (kbd "C-c w") 'emmet-wrap-with-markup) map) "Keymap for emmet minor mode.") @@ -426,6 +427,7 @@ accept it or skip it." (point)) (forward-char))))))) +;;;###autoload (defun emmet-wrap-with-markup (wrap-with) "Wrap region with markup." (interactive "sExpression to wrap with: ") @@ -433,14 +435,13 @@ accept it or skip it." (to-wrap (buffer-substring-no-properties (region-beginning) (region-end))) (expr (concat wrap-with ">{" - ;;FIX(replace-regexp-in-string "}" (concat "\\" "\&" to-wrap) + (replace-regexp-in-string "}" "!EMMET-BRACKET-REPLACEMENT!" to-wrap) "}")) - (markup (emmet-transform expr))) + (markup (replace-regexp-in-string "!EMMET-BRACKET-REPLACEMENT!" "}" (emmet-transform expr)))) (when markup (delete-region (region-beginning) (region-end)) (insert markup)))) - ;;;###autoload (defun emmet-next-edit-point (count) (interactive "^p") -- cgit v1.2.3 From dd4aecb453b2f9ad494c9e0ca397528db2bbf2ac Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Mon, 25 Aug 2014 08:25:32 -0400 Subject: Tests for escape and multiplier. --- src/mode-def.el | 23 ++++++++++++++++++----- src/test.el | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/mode-def.el b/src/mode-def.el index efe08a9..515b51a 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -435,12 +435,25 @@ accept it or skip it." (to-wrap (buffer-substring-no-properties (region-beginning) (region-end))) (expr (concat wrap-with ">{" - (replace-regexp-in-string "}" "!EMMET-BRACKET-REPLACEMENT!" to-wrap) + (replace-regexp-in-string + "\\$" + "!EMMET-DOLLAR-REPLACEMENT!" + (replace-regexp-in-string + "}" + "!EMMET-BRACKET-REPLACEMENT!" + to-wrap nil t) nil t) "}")) - (markup (replace-regexp-in-string "!EMMET-BRACKET-REPLACEMENT!" "}" (emmet-transform expr)))) - (when markup - (delete-region (region-beginning) (region-end)) - (insert markup)))) + (markup (replace-regexp-in-string + "!EMMET-DOLLAR-REPLACEMENT!" + "$" + (replace-regexp-in-string + "!EMMET-BRACKET-REPLACEMENT!" + "}" (emmet-transform expr) nil t) nil t))) + (when markup + (delete-region (region-beginning) (region-end)) + (insert markup) + (indent-region (region-beginning) (region-end)) + ))) ;;;###autoload (defun emmet-next-edit-point (count) diff --git a/src/test.el b/src/test.el index 69c5a3c..48bb5ed 100644 --- a/src/test.el +++ b/src/test.el @@ -622,5 +622,26 @@ ;; Old tests for previous indent behavior last seen: ;; commit: f56174e5905a40583b47f9737abee3af8da3faeb +(defun emmet-wrap-with-markup-test (lis) + (let ((es (car lis)) + (indent-tabs-mode nil) + (tab-width 2) + (standard-indent 2)) + (with-temp-buffer + (emmet-mode 1) + (sgml-mode) + (set-mark (point)) + (insert "This is gnarly text with $$$s and markup and end brackets}}s") + (emmet-wrap-with-markup es) + (buffer-string)))) + +(emmet-run-test-case "Wrap with markup on text with brackets and markup" + #'emmet-wrap-with-markup-test + '((("div>ul>li") . "
\n
    \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
\n
"))) + +(emmet-run-test-case "Wrap with markup multiplier" + #'emmet-wrap-with-markup-test + '((("div>ul>li*3") . "
\n
    \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
\n
"))) + ;; start (emmet-test-cases) -- cgit v1.2.3 From e0e0a29bcf13f29c004de6c54ea2879738cc2ecb Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Thu, 28 Aug 2014 08:03:03 -0400 Subject: Wrap using token replacement, handles multiline. Test for multiline. --- src/mode-def.el | 19 ++++--------------- src/test.el | 7 ++++++- 2 files changed, 10 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/mode-def.el b/src/mode-def.el index 515b51a..e0a22b9 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -433,22 +433,11 @@ accept it or skip it." (interactive "sExpression to wrap with: ") (let* ((emmet-move-cursor-between-quotes nil) (to-wrap (buffer-substring-no-properties (region-beginning) (region-end))) - (expr (concat wrap-with - ">{" - (replace-regexp-in-string - "\\$" - "!EMMET-DOLLAR-REPLACEMENT!" - (replace-regexp-in-string - "}" - "!EMMET-BRACKET-REPLACEMENT!" - to-wrap nil t) nil t) - "}")) + (expr (concat wrap-with ">{!EMMET-TO-WRAP-REPLACEMENT!}")) (markup (replace-regexp-in-string - "!EMMET-DOLLAR-REPLACEMENT!" - "$" - (replace-regexp-in-string - "!EMMET-BRACKET-REPLACEMENT!" - "}" (emmet-transform expr) nil t) nil t))) + "!EMMET-TO-WRAP-REPLACEMENT!" to-wrap + (emmet-transform expr) + t t))) (when markup (delete-region (region-beginning) (region-end)) (insert markup) diff --git a/src/test.el b/src/test.el index 48bb5ed..28b7db4 100644 --- a/src/test.el +++ b/src/test.el @@ -624,6 +624,7 @@ (defun emmet-wrap-with-markup-test (lis) (let ((es (car lis)) + (ins (or (elt lis 1) "This is gnarly text with $$$s and markup and end brackets}}s")) (indent-tabs-mode nil) (tab-width 2) (standard-indent 2)) @@ -631,7 +632,7 @@ (emmet-mode 1) (sgml-mode) (set-mark (point)) - (insert "This is gnarly text with $$$s and markup and end brackets}}s") + (insert ins) (emmet-wrap-with-markup es) (buffer-string)))) @@ -643,5 +644,9 @@ #'emmet-wrap-with-markup-test '((("div>ul>li*3") . "
\n
    \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
  • This is gnarly text with $$$s and markup and end brackets}}s
  • \n
\n
"))) +(emmet-run-test-case "Wrap with multiline content" + #'emmet-wrap-with-markup-test + '((("div>ul>li" "I am some\nmultiline\n text") . "
\n
    \n
  • I am some\n multiline\n text
  • \n
\n
"))) + ;; start (emmet-test-cases) -- cgit v1.2.3