changeset 54314:597fb06dcdda

(comment-use-global-state): New var. (comment-search-forward): Use it.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 08 Mar 2004 01:20:53 +0000
parents 487c9b84c975
children cad9b29a5224
files lisp/newcomment.el
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/newcomment.el	Mon Mar 08 01:10:23 2004 +0000
+++ b/lisp/newcomment.el	Mon Mar 08 01:20:53 2004 +0000
@@ -345,6 +345,13 @@
 ;;;; Navigation
 ;;;;
 
+(defvar comment-use-global-state nil
+  "Non-nil means that the global syntactic context is used.
+More specifically, it means that `syntax-ppss' is used to find out whether
+point is within a string or not.  Major modes whose syntax is faithfully
+described by the syntax-tables can set this to non-nil so comment markers
+in strings will not confuse Emacs.")
+
 (defun comment-search-forward (limit &optional noerror)
   "Find a comment start between point and LIMIT.
 Moves point to inside the comment and returns the position of the
@@ -357,8 +364,10 @@
 	(unless noerror (error "No comment")))
     (let* ((pt (point))
 	   ;; Assume (at first) that pt is outside of any string.
-	   (s (parse-partial-sexp pt (or limit (point-max)) nil nil nil t)))
-      (when (and (nth 8 s) (nth 3 s))
+	   (s (parse-partial-sexp pt (or limit (point-max)) nil nil
+				  (if comment-use-global-state (syntax-ppss pt))
+				  t)))
+      (when (and (nth 8 s) (nth 3 s) (not comment-use-global-state))
 	  ;; The search ended inside a string.  Try to see if it
 	  ;; works better when we assume that pt is inside a string.
 	  (setq s (parse-partial-sexp