branch: master
commit 278ba5253bb61911bacb9756539fe39f58f08641
Author: Dmitry Gutov <[email protected]>
Commit: Dmitry Gutov <[email protected]>
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))))))