Function: hs-inside-comment-p
hs-inside-comment-p is a byte-compiled function defined in
hideshow.el.gz.
Signature
(hs-inside-comment-p)
Documentation
Return non-nil if point is inside a comment, otherwise nil.
Actually, return a list containing the buffer position of the start and the end of the comment. A comment block can be hidden only if on its starting line there is only whitespace preceding the actual comment beginning. If we are inside of a comment but this condition is not met, we return a list having a nil as its car and the end of comment position as cdr.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/hideshow.el.gz
(defun hs-inside-comment-p ()
"Return non-nil if point is inside a comment, otherwise nil.
Actually, return a list containing the buffer position of the start
and the end of the comment. A comment block can be hidden only if on
its starting line there is only whitespace preceding the actual comment
beginning. If we are inside of a comment but this condition is not met,
we return a list having a nil as its car and the end of comment position
as cdr."
(save-excursion
;; the idea is to look backwards for a comment start regexp, do a
;; forward comment, and see if we are inside, then extend
;; forward and backward as long as we have comments
(let ((q (point)))
(skip-chars-forward "[:blank:]")
(when (or (looking-at hs-c-start-regexp)
(re-search-backward hs-c-start-regexp (point-min) t))
;; first get to the beginning of this comment...
(while (and (not (bobp))
(= (point) (progn (forward-comment -1) (point))))
(forward-char -1))
;; ...then extend backwards
(forward-comment (- (buffer-size)))
(skip-chars-forward " \t\n\f")
(let ((p (point))
(hideable t))
(beginning-of-line)
(unless (looking-at (concat "[ \t]*" hs-c-start-regexp))
;; we are in this situation: (example)
;; (defun bar ()
;; (foo)
;; ) ; comment
;; ^
;; the point was here before doing (beginning-of-line)
;; here we should advance till the next comment which
;; eventually has only white spaces preceding it on the same
;; line
(goto-char p)
(forward-comment 1)
(skip-chars-forward " \t\n\f")
(setq p (point))
(while (and (< (point) q)
(> (point) p)
(not (looking-at hs-c-start-regexp)))
;; avoid an infinite cycle
(setq p (point))
(forward-comment 1)
(skip-chars-forward " \t\n\f"))
(when (or (not (looking-at hs-c-start-regexp))
(> (point) q))
;; we cannot hide this comment block
(setq hideable nil)))
;; goto the end of the comment
(forward-comment (buffer-size))
(skip-chars-backward " \t\n\f")
(end-of-line)
(when (>= (point) q)
(list (and hideable p) (point))))))))