@@ -251,7 +251,7 @@ Intended for `syntax-propertize-function'."
251251 ((swift-mode:chunk:comment-p chunk)
252252 (goto-char (swift-mode:chunk:start chunk))
253253 (setq comment-start (point ))
254- (forward-comment 1 )
254+ (swift-mode: forward-comment 1 end )
255255 (put-text-property comment-start (point ) 'swift-mode:comment t ))))
256256 (swift-mode:syntax-propertize:scan end 0 ))
257257
@@ -304,7 +304,7 @@ stops where the level becomes zero."
304304 ; ; Comments
305305 ((memq (char-after ) '(?/ ?* ))
306306 (goto-char start)
307- (forward-comment 1 )
307+ (swift-mode: forward-comment 1 end )
308308 (put-text-property start (point ) 'swift-mode:comment t ))
309309
310310 ; ; Operators
@@ -323,6 +323,62 @@ stops where the level becomes zero."
323323 (goto-char end))
324324 found-matching-parenthesis))
325325
326+ (defun swift-mode:forward-comment (count &optional end )
327+ " Move point after spaces and COUNT comments.
328+
329+ If END is given, do not move beyond END.
330+
331+ COUNT must be positive.
332+
333+ Multiline comments can be nested.
334+
335+ If the comment is not closed, move to END if given, or `point-max' if it
336+ is nil.
337+
338+ This function doesn't depend on the syntax tables, so that it works in
339+ `swift-mode:syntax-propertize' ."
340+ (while (< 0 count)
341+ (skip-chars-forward " \s\t\n " )
342+ (cond
343+ ; ; Single line comment
344+ ((and (eq (char-after ) ?/ )
345+ (eq (char-after (1+ (point ))) ?/ ))
346+ (forward-line ))
347+
348+ ; ; Multiline comment
349+ ((and (eq (char-after ) ?/ )
350+ (eq (char-after (1+ (point ))) ?* ))
351+ (swift-mode:forward-multiline-comment (or end (point-max ))))
352+
353+ ; ; Not a comment
354+ (t
355+ (setq count 1 )))
356+ (setq count (1- count))))
357+
358+ (defun swift-mode:forward-multiline-comment (end )
359+ " Move point after a multiline comment.
360+
361+ Assuming the point is just before a multiline comment.
362+
363+ Do not move beyond END.
364+
365+ Multiline comments can be nested.
366+
367+ If the comment is not closed, move to END."
368+ (forward-char 2 )
369+ (let ((pattern (mapconcat #'regexp-quote '(" /*" " */" ) " \\ |" ))
370+ (nesting-level 1 ))
371+ (while (and (< 0 nesting-level)
372+ (< (point ) end)
373+ (search-forward-regexp pattern end t ))
374+ (if (eq (char-before ) ?* )
375+ (setq nesting-level (1+ nesting-level))
376+ (setq nesting-level (1- nesting-level))))
377+ (when (or (and (not (zerop nesting-level))
378+ (< (point ) end))
379+ (< end (point )))
380+ (goto-char end))))
381+
326382(defun swift-mode:put-syntax-multiline-property (start end )
327383 " Put `syntax-multiline` text propery from START to END.
328384
0 commit comments