From ae7d5a2588ea5f8a48eda1c9d190ff06073e555b Mon Sep 17 00:00:00 2001 From: Dave Mayo Date: Tue, 6 Sep 2016 00:47:44 -0400 Subject: Implement token-replacement in new wrap * function It itched at me, so I cleaned it up and rewrote to make it do the token replacement. Would be more performant to do the sha1 once, but realistically, it's not going to be meaningfully slow for the use-case. This is essentially complete, but needs tests - I'll add them as soon as I can get testing working on my computer. --- emmet-mode.el | 39 +++++++++++++++++++++++---------------- src/mode-def.el | 39 +++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/emmet-mode.el b/emmet-mode.el index 2e03c94..92542f4 100644 --- a/emmet-mode.el +++ b/emmet-mode.el @@ -632,24 +632,31 @@ accept it or skip it." (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)) + (initial-elements (replace-regexp-in-string "\\(.*>\\)?[^>*]+\\*?$" "\\1" wrap-with t)) + (terminal-element (replace-regexp-in-string "\\(.*>\\)?\\([^>*]+\\)\\*?$" "\\2" wrap-with t)) (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) - (indent-region (region-beginning) (region-end)) - (let ((end (region-end))) - (goto-char (region-beginning)) - (unless (ignore-errors (progn (emmet-next-edit-point 1) t)) - (goto-char end))) - ))) + (mapconcat (lambda (el) (concat terminal-element "{!!!" (secure-hash 'sha1 el) "!!!}")) + to-wrap + "+"))) + (markup + (reduce + (lambda (result text) + (replace-regexp-in-string + (concat "!!!" (secure-hash 'sha1 text) "!!!") + text + result t t)) + to-wrap + :initial-value (emmet-transform expr)))) + (when markup + (delete-region (region-beginning) (region-end)) + (insert markup) + (indent-region (region-beginning) (region-end)) + (let ((end (region-end))) + (goto-char (region-beginning)) + (unless (ignore-errors (progn (emmet-next-edit-point 1) t)) + (goto-char end))) + ))) ;;;###autoload (defun emmet-next-edit-point (count) diff --git a/src/mode-def.el b/src/mode-def.el index 1b4358e..0f3a522 100644 --- a/src/mode-def.el +++ b/src/mode-def.el @@ -479,24 +479,31 @@ accept it or skip it." (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)) + (initial-elements (replace-regexp-in-string "\\(.*>\\)?[^>*]+\\*?$" "\\1" wrap-with t)) + (terminal-element (replace-regexp-in-string "\\(.*>\\)?\\([^>*]+\\)\\*?$" "\\2" wrap-with t)) (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) - (indent-region (region-beginning) (region-end)) - (let ((end (region-end))) - (goto-char (region-beginning)) - (unless (ignore-errors (progn (emmet-next-edit-point 1) t)) - (goto-char end))) - ))) + (mapconcat (lambda (el) (concat terminal-element "{!!!" (secure-hash 'sha1 el) "!!!}")) + to-wrap + "+"))) + (markup + (reduce + (lambda (result text) + (replace-regexp-in-string + (concat "!!!" (secure-hash 'sha1 text) "!!!") + text + result t t)) + to-wrap + :initial-value (emmet-transform expr)))) + (when markup + (delete-region (region-beginning) (region-end)) + (insert markup) + (indent-region (region-beginning) (region-end)) + (let ((end (region-end))) + (goto-char (region-beginning)) + (unless (ignore-errors (progn (emmet-next-edit-point 1) t)) + (goto-char end))) + ))) ;;;###autoload (defun emmet-next-edit-point (count) -- cgit v1.2.3