branch: master
commit 004a6184e467b7336330702010f74826f0bd526b
Author: Dmitry Gutov <[email protected]>
Commit: Dmitry Gutov <[email protected]>

    Fix #23
    
    * mmm-erb-scan-erb: Only reject region of type 'open when close-re applies 
at
      the end of the region, this way we're less likely to trip over hashes.
    
    * mmm-submode-changes-in: Only add start and stop when either is not inside
      submode regions. This way `mmm-regions-in' doesn't split regions.
---
 mmm-erb.el    |  6 +++++-
 mmm-region.el | 19 ++++++++++++-------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/mmm-erb.el b/mmm-erb.el
index 86ec45a..fbde445 100644
--- a/mmm-erb.el
+++ b/mmm-erb.el
@@ -202,7 +202,11 @@
         ((and (re-search-forward (concat "\\(?: +do +\\| *{ *\\)"
                                          "\\(?:|[A-Za-z0-9_, ]*|\\)? *")
                                  limit t)
-              (not (re-search-forward mmm-erb-ruby-close-re limit t)))
+              (let ((pt (point)))
+                (not (when (< pt limit)
+                       (goto-char limit)
+                       (skip-syntax-backward "-")
+                       (looking-back mmm-erb-ruby-close-re pt)))))
          'open)))
 
 (defun mmm-erb-scan-ejs (limit)
diff --git a/mmm-region.el b/mmm-region.el
index 384be68..b4c9485 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -694,13 +694,18 @@ region and mode for the previous position."
 (defun mmm-submode-changes-in (start stop)
   "Return a list of all submode-change positions from START to STOP.
 The list is sorted in order of increasing buffer position."
-  (sort (remove-duplicates
-         (list* start stop
-                (mapcan #'(lambda (ovl)
-                            `(,(overlay-start ovl)
-                              ,(overlay-end ovl)))
-                        (mmm-overlays-overlapping start stop))))
-        #'<))
+  (let ((changes (sort (remove-duplicates
+                        (mapcan #'(lambda (ovl)
+                                    `(,(overlay-start ovl)
+                                      ,(overlay-end ovl)))
+                                (mmm-overlays-overlapping start stop)))
+                       #'<)))
+    (when (or (not changes) (< start (car changes)))
+      (push start changes))
+    (let ((last (last changes)))
+      (when (> stop (car last))
+        (setcdr last (list stop))))
+    changes))
 
 (defun mmm-regions-in (start stop)
   "Return a list of regions of the form (MODE BEG END OVL) whose disjoint

Reply via email to