Function: c-parse-quotes-after-change

c-parse-quotes-after-change is a byte-compiled function defined in cc-mode.el.gz.

Signature

(c-parse-quotes-after-change BEG END OLD-LEN)

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/cc-mode.el.gz
(defun c-parse-quotes-after-change (_beg _end _old-len)
  ;; This function applies syntax-table properties (value '(1)) and
  ;; c-digit-separator properties as needed to 's within the range (c-new-BEG
  ;; c-new-END).  This operation is performed even within strings and
  ;; comments.
  ;;
  ;; This function is called exclusively as an after-change function via the
  ;; variable `c-before-font-lock-functions'.
  (c-save-buffer-state (num-beg num-end case-fold-search)
    ;; Apply the needed syntax-table and c-digit-separator text properties to
    ;; quotes.
    (save-restriction
      (goto-char c-new-BEG)
      (while (and (< (point) c-new-END)
		  (search-forward "'" c-new-END 'limit))
	(cond ((c-is-escaped (1- (point)))) ; not a real '.
	      ((c-quoted-number-straddling-point)
	       (setq num-beg (match-beginning 0)
		     num-end (match-end 0))
	       (c-invalidate-state-cache num-beg)
	       (c-truncate-lit-pos-cache num-beg)
	       (c-put-char-properties-on-char num-beg num-end
					      'syntax-table '(1) ?')
	       (c-put-char-properties-on-char num-beg num-end
					      'c-digit-separator t ?')
	       (goto-char num-end))
	      ((looking-at
		"\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\
\\)'") ; balanced quoted expression.
	       (goto-char (match-end 0)))
	      ((looking-at "\\\\'")	; Anomalous construct.
	       (c-invalidate-state-cache (1- (point)))
	       (c-truncate-lit-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-lit-pos-cache (1- (point)))
	       (c-put-char-property (1- (point)) 'syntax-table '(1))))
	;; Prevent the next `c-quoted-number-straddling-point' getting
	;; confused by already processed single quotes.
	(narrow-to-region (point) (point-max))))))