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

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

[elpa] master 278ba52 386/433: Fix #37


From: Dmitry Gutov
Subject: [elpa] master 278ba52 386/433: Fix #37
Date: Thu, 15 Mar 2018 19:44:40 -0400 (EDT)

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

    Fix #37
---
 mmm-region.el         |  7 ++++++-
 tests/highlighting.el | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/mmm-region.el b/mmm-region.el
index 7600ff0..d95df0e 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -800,7 +800,9 @@ of the REGIONS covers START to STOP."
                   (mmm-set-local-variables (unless (eq mmm-previous-submode 
mode)
                                              mode)
                                            mmm-current-overlay)
-                  (funcall func (car reg) (cadr reg) nil)
+                  (let ((syntax-ppss-last (and (caddr reg) (list (car reg))))
+                        syntax-ppss-cache)
+                    (funcall func (car reg) (cadr reg) nil))
                   ;; Catch changes in font-lock cache.
                   (mmm-save-changed-local-variables
                    mmm-current-submode mmm-current-overlay))
@@ -844,6 +846,9 @@ calls each respective submode's 
`syntax-propertize-function'."
                     (mmm-set-local-variables mode mmm-current-overlay)
                     (save-restriction
                       (when mmm-current-overlay
+                        ;; Simple optimization to avoid calling 
syntax-beginning
+                        ;; for small buffers.
+                        (setq syntax-ppss-last (list beg))
                         (narrow-to-region (overlay-start mmm-current-overlay)
                                           (overlay-end mmm-current-overlay)))
                       (cond
diff --git a/tests/highlighting.el b/tests/highlighting.el
index 25fcf95..b10aca8 100644
--- a/tests/highlighting.el
+++ b/tests/highlighting.el
@@ -57,3 +57,35 @@
         (should pt)
         (goto-char pt)
         (should (looking-at "foo\\'"))))))
+
+(ert-deftest mmm-fontify-region-list-ignores-outside-for-syntactic-ff-tion ()
+  (ert-with-test-buffer nil
+    (let (mmm-mode-ext-classes-alist
+          mmm-parse-when-idle)
+      (insert "unpaired '!\n")
+      (insert "js>>\n")
+      (insert "var woo = js;\n")
+      (foo1-mode)
+      (mmm-mode-on)
+      (syntax-ppss-flush-cache (point-min))
+      (mmm-ify-by-regexp 'js-mode "js>>\n" 0 "\\'" 0 nil)
+      (font-lock-fontify-region (point-min) (point-max))
+      (search-backward "var")
+      (should (eq 'font-lock-keyword-face
+                  (get-text-property (point) 'face))))))
+
+(ert-deftest mmm-fontify-region-list-carries-string-after-subregion ()
+  (ert-with-test-buffer nil
+    (let (mmm-mode-ext-classes-alist
+          mmm-parse-when-idle)
+      (insert "<p class=\"foo <% 1 + 2 %> bar tee\"</p>")
+      (html-mode)
+      (mmm-mode-on)
+      (syntax-ppss-flush-cache (point-min))
+      (mmm-ify-by-regexp 'js-mode "<%" 0 "%>" 0 nil)
+      (font-lock-fontify-region (point-min) (point-max))
+      (search-backward "1")
+      (should (null (get-text-property (point) 'face)))
+      (search-forward "bar")
+      (should (eq 'font-lock-string-face
+                  (get-text-property (point) 'face))))))



reply via email to

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