diff options
author | Dave Mayo <dave_mayo@harvard.edu> | 2016-09-05 23:53:01 -0400 |
---|---|---|
committer | Dave Mayo <dave_mayo@harvard.edu> | 2016-09-06 00:07:43 -0400 |
commit | 1a64b7dfece4357df0b0d96929225057951fe781 (patch) | |
tree | af07641cd1b9d669521c80ee5b3a641cd3789dd0 /emmet-mode.el | |
parent | 3c2d5c3e86c317601cbf8d976c5611b8c73ac178 (diff) | |
download | emmet-mode-1a64b7dfece4357df0b0d96929225057951fe781.tar.lz emmet-mode-1a64b7dfece4357df0b0d96929225057951fe781.tar.xz emmet-mode-1a64b7dfece4357df0b0d96929225057951fe781.zip |
Added multi-line * wrap functionality as per #81
This is a proof-of-concept - it needs to do the token-replacement jazz the original
version did, because right now this will fail if the content of the
txt/lines includes unmatched braces in various configurations.
I think the overall plan is sound: split expression into leading and
terminal components, render the text as a list (either a one-element
list of all text or a multiline list, depending on trailing *), and
create a terminal phrase consisting of "terminal-element{TOKEN}" joined
on "+"
To do: render list into a-list of '((hash-of-txt . txt), ...), mapconcat
the hash replacement instead of the text, then run replace over result.
Write tests. Also, tests appear to be broken on master, at least on my machine.
Diffstat (limited to 'emmet-mode.el')
-rw-r--r-- | emmet-mode.el | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/emmet-mode.el b/emmet-mode.el index 5c2bdee..2e03c94 100644 --- a/emmet-mode.el +++ b/emmet-mode.el @@ -172,7 +172,7 @@ and leaving the point in place." "Find the left bound of an emmet expr" (save-excursion (save-match-data (let ((char (char-before)) - (in-style-attr (looking-back "style=[\"'][^\"']*")) + (in-style-attr (looking-back "style=[\"'][^\"']*" nil)) (syn-tab (make-syntax-table))) (modify-syntax-entry ?\\ "\\") (while char @@ -627,12 +627,20 @@ accept it or skip it." (defun emmet-wrap-with-markup (wrap-with) "Wrap region with markup." (interactive "sExpression to wrap with: ") - (let* ((to-wrap (buffer-substring-no-properties (region-beginning) (region-end))) - (expr (concat wrap-with ">{!EMMET-TO-WRAP-REPLACEMENT!}")) - (markup (replace-regexp-in-string - "!EMMET-TO-WRAP-REPLACEMENT!" to-wrap - (emmet-transform expr) - t t))) + (let* ((multi (string-match "\\*$" wrap-with)) + (txt (buffer-substring-no-properties (region-beginning) (region-end))) + (to-wrap (if multi + (split-string txt "\n") + (list txt))) + (initial-elements (replace-regexp-in-string "\\(.*>\\)?[^>*]+\\*?$" "\\1" wrap-with)) + (terminal-element (replace-regexp-in-string "\\(.*>\\)?\\([^>*]+\\)\\*?$" "\\2" wrap-with)) + (expr (concat + initial-elements + (mapconcat (lambda (el) (concat terminal-element "{" el "}")) to-wrap "+"))) + + (markup (emmet-transform expr)) + (debug-shit (message "initial-elements: %s\nterminal-element: %s\n expr: %s\n markup: %s" initial-elements terminal-element expr markup)) + ) (when markup (delete-region (region-beginning) (region-end)) (insert markup) @@ -656,7 +664,6 @@ accept it or skip it." (error "First edit point reached."))) (provide 'emmet-mode) - ;; src/snippets.el ;; This file is generated from conf/snippets.json ;; Don't edit. |