Function: comment-search-forward
comment-search-forward is a byte-compiled function defined in
newcomment.el.gz.
Signature
(comment-search-forward LIMIT &optional NOERROR)
Documentation
Find a comment start between point and LIMIT.
Moves point to inside the comment and returns the position of the comment-starter. If no comment is found, moves point to LIMIT and raises an error or returns nil if NOERROR is non-nil.
Ensure that comment-normalize-vars has been called before you use this.
Source Code
;; Defined in /usr/src/emacs/lisp/newcomment.el.gz
(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
comment-starter. If no comment is found, moves point to LIMIT
and raises an error or returns nil if NOERROR is non-nil.
Ensure that `comment-normalize-vars' has been called before you use this."
(if (not comment-use-syntax)
(if (re-search-forward comment-start-skip limit noerror)
(or (match-end 1) (match-beginning 0))
(goto-char limit)
(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
(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 at eol inside a string. Try to see if it
;; works better when we assume that pt is inside a string.
(setq s (parse-partial-sexp
pt (or limit (point-max)) nil nil
(list nil nil nil (nth 3 s) nil nil nil nil)
t)))
(if (or (not (and (nth 8 s) (not (nth 3 s))))
;; Make sure the comment starts after PT.
(< (nth 8 s) pt))
(unless noerror (error "No comment"))
;; We found the comment.
(let ((pos (point))
(start (nth 8 s))
(bol (line-beginning-position))
(end nil))
(while (and (null end) (>= (point) bol))
(if (looking-at comment-start-skip)
(setq end (min (or limit (point-max)) (match-end 0)))
(backward-char)))
(goto-char (or end pos))
start)))))