]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix the formatting of '\' (including apostrophes) in CC Mode.
authorAlan Mackenzie <acm@muc.de>
Fri, 26 Apr 2019 01:15:00 +0000 (01:15 +0000)
committerAlan Mackenzie <acm@muc.de>
Fri, 26 Apr 2019 01:15:00 +0000 (01:15 +0000)
In particular, the second apostrophe must also get font-lock-warning-face.

* lisp/progmodes/cc-mode.el (c-parse-quotes-before-change)
(c-parse-quotes-after-change): Add cond arms to recognize and handle the
anomalous construct '\'.  Correct the handling of c-new-BEG in
c-parse-quotes-before-change.

lisp/progmodes/cc-mode.el

index 1a3600487528329a73cc09fd2a4da2a0001c4842..ea865e0b0fbbb493815245d2cb6e2e461feb8580 100644 (file)
@@ -1529,9 +1529,12 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".")
        (goto-char (match-end 0))
        (if (> (match-end 0) c-new-BEG)
            (setq c-new-BEG (1- (match-beginning 0)))))
+       ((looking-at "\\\\'")
+       (setq c-new-BEG (min c-new-BEG (1- (point))))
+       (goto-char (match-end 0)))
        ((save-excursion
          (not (search-forward "'" c-new-BEG t)))
-       (setq c-new-BEG (1- (point))))
+       (setq c-new-BEG (min c-new-BEG (1- (point)))))
        (t nil)))
 
     (goto-char c-new-END)
@@ -1555,6 +1558,9 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".")
        (goto-char (match-end 0))
        (if (> (match-end 0) c-new-END)
            (setq c-new-END (match-end 0))))
+       ((looking-at "\\\\'")
+       (goto-char (match-end 0))
+       (setq c-new-END (max c-new-END (point))))
        ((equal (c-get-char-property (1- (point)) 'syntax-table) '(1))
        (when (c-search-forward-char-property-with-value-on-char
               'syntax-table '(1) ?\' (c-point 'eoll))
@@ -1624,6 +1630,12 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".")
                "\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\
 \\)'") ; balanced quoted expression.
               (goto-char (match-end 0)))
+             ((looking-at "\\\\'")     ; Anomalous construct.
+              (c-invalidate-state-cache (1- (point)))
+              (c-truncate-semi-nonlit-pos-cache (1- (point)))
+              (c-put-char-properties-on-char (1- (point)) (+ (point) 2)
+                                             'syntax-table '(1) ?')
+              (goto-char (match-end 0)))
              (t
               (c-invalidate-state-cache (1- (point)))
               (c-truncate-semi-nonlit-pos-cache (1- (point)))