emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master f9e4dd5 376/433: Fix #26


From: Dmitry Gutov
Subject: [elpa] master f9e4dd5 376/433: Fix #26
Date: Thu, 15 Mar 2018 19:44:39 -0400 (EDT)

branch: master
commit f9e4dd544024a5172ee9c74ff6fa9d01fb8e83d8
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Fix #26
---
 mmm-erb.el        | 19 ++++++++++++++-----
 mmm-region.el     | 12 +++++++++++-
 tests/html-erb.el |  3 +--
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/mmm-erb.el b/mmm-erb.el
index fbde445..e1a4e3d 100644
--- a/mmm-erb.el
+++ b/mmm-erb.el
@@ -79,15 +79,24 @@
                  (?= ejs-expression nil @ "<%=" @ " " _ " " @ "%>" @))
         :creation-hook mmm-erb-mark-as-special)))
 
-;;;###autoload
-(define-derived-mode html-erb-mode html-mode "ERB-HTML"
-  (setq sgml-unclosed-tags nil) ; Simplifies indentation logic.
-  (set (make-local-variable 'mmm-indent-line-function) 'mmm-erb-indent-line))
-
 (defun mmm-erb-mark-as-special ()
   "Hook function to run in ERB and EJS tag regions."
   (overlay-put mmm-current-overlay 'mmm-special-tag t))
 
+;;;###autoload
+(define-derived-mode html-erb-mode html-mode "ERB-HTML"
+  (setq sgml-unclosed-tags nil) ; Simplifies indentation logic.
+  (set (make-local-variable 'mmm-indent-line-function) 'mmm-erb-indent-line)
+  (add-hook 'mmm-after-syntax-propertize-functions
+            'html-erb-after-syntax-propertize nil t))
+
+(defun html-erb-after-syntax-propertize (overlay mode beg end)
+  (when overlay
+    (with-silent-modifications
+      (funcall
+       (syntax-propertize-rules ("<\\|>" (0 ".")))
+       beg end))))
+
 (defun mmm-erb-indent-line ()
   "Indent the current line intelligently."
   (interactive)
diff --git a/mmm-region.el b/mmm-region.el
index baef051..4239f9b 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -803,7 +803,15 @@ of the REGIONS covers START to STOP."
           (if func (progn (funcall func) (point)) (point-min))
           (point-min)))))
 
+(defvar mmm-after-syntax-propertize-functions nil
+  "List of functions to call after applying `syntax-table' text
+properties to a submode region. It is passed four arguments: the
+region overlay, the submode and the bounds of the region.")
+
 (defun mmm-syntax-propertize-function (start stop)
+  "Composite function that applies `syntax-table' text properties.
+It iterates over all submode regions between START and STOP and
+calls each respective submode's `syntax-propertize-function'."
   (let ((saved-mode mmm-current-submode)
         (saved-ovl  mmm-current-overlay))
     (mmm-save-changed-local-variables
@@ -828,7 +836,9 @@ of the REGIONS covers START to STOP."
                         (funcall func beg end))
                        (font-lock-syntactic-keywords
                         (let ((syntax-propertize-function nil))
-                          (font-lock-fontify-syntactic-keywords-region beg 
end)))))))
+                          (font-lock-fontify-syntactic-keywords-region beg 
end))))
+                      (run-hook-with-args 
'mmm-after-syntax-propertize-functions
+                                          mmm-current-overlay mode beg end))))
               (mmm-regions-in start stop))
       (mmm-set-current-pair saved-mode saved-ovl)
       (mmm-set-local-variables (or saved-mode mmm-primary-mode) saved-ovl))))
diff --git a/tests/html-erb.el b/tests/html-erb.el
index eb7ec7c..ff974cc 100644
--- a/tests/html-erb.el
+++ b/tests/html-erb.el
@@ -71,13 +71,12 @@
   (mmm-erb-assert-non-string-syntax))
 
 (mmm-erb-deftest gt-inside-subregion-doesnt-change-nesting
-  :expected-result (if mmm-erb-edge-emacs :failed :passed)
   (insert "<% if 2 > 1 %><div class=\"foo\"/><% end %>")
   (mmm-apply-all)
   (mmm-erb-assert-string-syntax))
 
 (mmm-erb-deftest lt-inside-subregion-doesnt-change-nesting
-  :expected-result :failed
+  :expected-result (if mmm-erb-edge-emacs :passed :failed)
   (insert "<% if 2 < 1 %><p>\"foo bar\"</p><% end %>")
   (mmm-apply-all)
   (mmm-erb-assert-non-string-syntax))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]