mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-24 13:57:36 +00:00
* lisp/newcomment.el (comment-beginning): When `comment-use-syntax' is
non-nil, use `syntax-ppss'. Fixes: debbugs:15251
This commit is contained in:
parent
481a8e0f45
commit
e9155c4ae4
2 changed files with 35 additions and 24 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2013-10-01 Dmitry Gutov <dgutov@yandex.ru>
|
||||
|
||||
* newcomment.el (comment-beginning): When `comment-use-syntax' is
|
||||
non-nil, use `syntax-ppss' (Bug#15251).
|
||||
|
||||
2013-09-30 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
|
||||
|
||||
* progmodes/octave.el (inferior-octave-startup-file): Prefer
|
||||
|
|
|
|||
|
|
@ -515,30 +515,36 @@ Ensure that `comment-normalize-vars' has been called before you use this."
|
|||
"Find the beginning of the enclosing comment.
|
||||
Returns nil if not inside a comment, else moves point and returns
|
||||
the same as `comment-search-backward'."
|
||||
;; HACK ATTACK!
|
||||
;; We should really test `in-string-p' but that can be expensive.
|
||||
(unless (eq (get-text-property (point) 'face) 'font-lock-string-face)
|
||||
(let ((pt (point))
|
||||
(cs (comment-search-backward nil t)))
|
||||
(when cs
|
||||
(if (save-excursion
|
||||
(goto-char cs)
|
||||
(and
|
||||
;; For modes where comment-start and comment-end are the same,
|
||||
;; the search above may have found a `ce' rather than a `cs'.
|
||||
(or (if comment-end-skip (not (looking-at comment-end-skip)))
|
||||
;; Maybe font-lock knows that it's a `cs'?
|
||||
(eq (get-text-property (match-end 0) 'face)
|
||||
'font-lock-comment-face)
|
||||
(unless (eq (get-text-property (point) 'face)
|
||||
'font-lock-comment-face)
|
||||
;; Let's assume it's a `cs' if we're on the same line.
|
||||
(>= (line-end-position) pt)))
|
||||
;; Make sure that PT is not past the end of the comment.
|
||||
(if (comment-forward 1) (> (point) pt) (eobp))))
|
||||
cs
|
||||
(goto-char pt)
|
||||
nil)))))
|
||||
(if comment-use-syntax
|
||||
(let ((state (syntax-ppss)))
|
||||
(when (nth 4 state)
|
||||
(goto-char (nth 8 state))
|
||||
(prog1 (point)
|
||||
(when (looking-at comment-start-skip)
|
||||
(goto-char (match-end 0))))))
|
||||
;; Can't rely on the syntax table, let's guess based on font-lock.
|
||||
(unless (eq (get-text-property (point) 'face) 'font-lock-string-face)
|
||||
(let ((pt (point))
|
||||
(cs (comment-search-backward nil t)))
|
||||
(when cs
|
||||
(if (save-excursion
|
||||
(goto-char cs)
|
||||
(and
|
||||
;; For modes where comment-start and comment-end are the same,
|
||||
;; the search above may have found a `ce' rather than a `cs'.
|
||||
(or (if comment-end-skip (not (looking-at comment-end-skip)))
|
||||
;; Maybe font-lock knows that it's a `cs'?
|
||||
(eq (get-text-property (match-end 0) 'face)
|
||||
'font-lock-comment-face)
|
||||
(unless (eq (get-text-property (point) 'face)
|
||||
'font-lock-comment-face)
|
||||
;; Let's assume it's a `cs' if we're on the same line.
|
||||
(>= (line-end-position) pt)))
|
||||
;; Make sure that PT is not past the end of the comment.
|
||||
(if (comment-forward 1) (> (point) pt) (eobp))))
|
||||
cs
|
||||
(goto-char pt)
|
||||
nil))))))
|
||||
|
||||
(defun comment-forward (&optional n)
|
||||
"Skip forward over N comments.
|
||||
|
|
|
|||
Loading…
Reference in a new issue