Function: c-ts-common--fill-block-comment
c-ts-common--fill-block-comment is a byte-compiled function defined in
c-ts-common.el.gz.
Signature
(c-ts-common--fill-block-comment &optional ARG)
Documentation
Filling function for block comments.
ARG is passed to fill-paragraph. Assume point is in a block
comment.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/c-ts-common.el.gz
(defun c-ts-common--fill-block-comment (&optional arg)
"Filling function for block comments.
ARG is passed to `fill-paragraph'. Assume point is in a block
comment."
(let* ((node (treesit-node-at (point)))
(start (treesit-node-start node))
(end (treesit-node-end node))
;; Bind to nil to avoid infinite recursion.
(fill-paragraph-function nil)
(orig-point (point-marker))
(start-marker (point-marker))
(end-marker nil)
(end-len 0)
(end-mask-done nil))
(move-marker start-marker start)
;; If the first line is /* followed by non-text, exclude this line
;; from filling.
(atomic-change-group
(goto-char start)
(when (looking-at (rx (* (syntax whitespace))
(group "/") "*"
(* (or "*" "=" "-" "/" (syntax whitespace)))
eol))
(forward-line)
(move-marker start-marker (point)))
;; Include whitespaces before /*.
(goto-char start)
(beginning-of-line)
(setq start (point))
;; Mask spaces before "*/" if it is attached at the end
;; of a sentence rather than on its own line.
(goto-char end)
(when (looking-back (rx (not (syntax whitespace))
(group (+ (syntax whitespace)))
"*/")
(line-beginning-position))
(goto-char (match-beginning 1))
(setq end-marker (point-marker))
(setq end-len (- (match-end 1) (match-beginning 1)))
(setq end-mask-done t)
(replace-match (make-string end-len ?x)
nil nil nil 1))
;; If "*/" is on its own line, don't included it in the
;; filling region.
(when (not end-marker)
(goto-char end)
(forward-line 0)
(when (looking-at (rx (* (or (syntax whitespace) "*" "=" "-"))
"*/" eol))
(setq end (point))))
;; Let `fill-paragraph' do its thing.
(goto-char orig-point)
(narrow-to-region start end)
(let (para-start para-end)
(forward-paragraph 1)
(setq para-end (point))
(forward-paragraph -1)
(setq para-start (point))
;; We don't want to fill the region between START and
;; START-MARKER, otherwise the filling function might delete
;; some spaces there. Also, we only fill the current
;; paragraph.
(fill-region (max start-marker para-start) (min end para-end) arg))
;; Unmask.
(when (and end-marker end-mask-done)
(goto-char end-marker)
(delete-region (point) (+ end-len (point)))
(insert (make-string end-len ?\s)))
(goto-char orig-point))))