Function: cperl-to-comment-or-eol
cperl-to-comment-or-eol is a byte-compiled function defined in
cperl-mode.el.gz.
Signature
(cperl-to-comment-or-eol)
Documentation
Go to position before comment on the current line, or to end of line.
Returns true if comment is found. In POD will not move the point.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cperl-mode.el.gz
(defun cperl-to-comment-or-eol ()
"Go to position before comment on the current line, or to end of line.
Returns true if comment is found. In POD will not move the point."
;; If the line is inside other syntax groups (qq-style strings, HERE-docs)
;; then looks for literal # or end-of-line.
(let (state stop-in cpoint (lim (line-end-position)) pr e)
(or cperl-font-locking
(cperl-update-syntaxification lim))
(beginning-of-line)
(if (setq pr (get-text-property (point) 'syntax-type))
(setq e (next-single-property-change (point) 'syntax-type nil (point-max))))
(if (or (eq pr 'pod)
(if (or (not e) (> e lim)) ; deep inside a group
(re-search-forward "\\=[ \t]*\\(#\\|$\\)" lim t)))
(if (eq (preceding-char) ?\#) (progn (backward-char 1) t))
;; Else - need to do it the hard way
(and (and e (<= e lim))
(goto-char e))
(while (not stop-in)
(setq state (parse-partial-sexp (point) lim nil nil nil t))
; stop at comment
;; If fails (beginning-of-line inside sexp), then contains not-comment
(if (nth 4 state) ; After `#';
; (nth 2 state) can be
; beginning of m,s,qq and so
; on
(if (nth 2 state)
(progn
(setq cpoint (point))
(goto-char (nth 2 state))
(cond
((looking-at "\\(s\\|tr\\)\\>")
(or (re-search-forward
"\\=\\w+[ \t]*#\\([^\n\\#]\\|\\\\[\\#]\\)*#\\([^\n\\#]\\|\\\\[\\#]\\)*"
lim 'move)
(setq stop-in t)))
((looking-at "\\(m\\|q\\([qxwr]\\)?\\)\\>")
(or (re-search-forward
"\\=\\w+[ \t]*#\\([^\n\\#]\\|\\\\[\\#]\\)*#"
lim 'move)
(setq stop-in t)))
(t ; It was fair comment
(setq stop-in t) ; Finish
(goto-char (1- cpoint)))))
(setq stop-in t) ; Finish
(forward-char -1))
(setq stop-in t))) ; Finish
(nth 4 state))))