@@ -251,7 +251,7 @@ Intended for `syntax-propertize-function'."
251
251
((swift-mode:chunk:comment-p chunk)
252
252
(goto-char (swift-mode:chunk:start chunk))
253
253
(setq comment-start (point ))
254
- (forward-comment 1 )
254
+ (swift-mode: forward-comment 1 end )
255
255
(put-text-property comment-start (point ) 'swift-mode:comment t ))))
256
256
(swift-mode:syntax-propertize:scan end 0 ))
257
257
@@ -304,7 +304,7 @@ stops where the level becomes zero."
304
304
; ; Comments
305
305
((memq (char-after ) '(?/ ?* ))
306
306
(goto-char start)
307
- (forward-comment 1 )
307
+ (swift-mode: forward-comment 1 end )
308
308
(put-text-property start (point ) 'swift-mode:comment t ))
309
309
310
310
; ; Operators
@@ -323,6 +323,62 @@ stops where the level becomes zero."
323
323
(goto-char end))
324
324
found-matching-parenthesis))
325
325
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
+
326
382
(defun swift-mode:put-syntax-multiline-property (start end )
327
383
" Put `syntax-multiline` text propery from START to END.
328
384
0 commit comments