# HG changeset patch # User Stefan Monnier # Date 1111338373 0 # Node ID 7aef7292e42f77e566a18a152dc84cf8f556afdb # Parent a706fe4203bc401d8207ba17730e3857aa557672 (perl-font-lock-syntactic-face-function): Properly handle the case where the `m' or `s' command's argument is not yet terminated. diff -r a706fe4203bc -r 7aef7292e42f lisp/progmodes/perl-mode.el --- a/lisp/progmodes/perl-mode.el Sun Mar 20 01:49:32 2005 +0000 +++ b/lisp/progmodes/perl-mode.el Sun Mar 20 17:06:13 2005 +0000 @@ -330,30 +330,34 @@ nil nil state 'syntax-table))) ;; The open/close chars are matched like () [] {} and <>. (let ((parse-sexp-lookup-properties nil)) - (ignore-errors - (with-syntax-table st - (goto-char (nth 8 state)) (forward-sexp 1)) - (when twoargs - (save-excursion - ;; Skip whitespace and make sure that font-lock will - ;; refontify the second part in the proper context. - (put-text-property - (point) (progn (forward-comment (point-max)) (point)) - 'font-lock-multiline t) - ;; - (unless - (save-excursion - (let* ((char2 (char-after)) - (st2 (perl-quote-syntax-table char2))) - (with-syntax-table st2 (forward-sexp 1)) - (put-text-property pos (line-end-position) - 'jit-lock-defer-multiline t) - (looking-at "\\s-*\\sw*e"))) - (put-text-property (point) (1+ (point)) - 'syntax-table - (if (assoc (char-after) - perl-quote-like-pairs) - '(15) '(7))))))))) + (condition-case err + (progn + (with-syntax-table st + (goto-char (nth 8 state)) (forward-sexp 1)) + (when twoargs + (save-excursion + ;; Skip whitespace and make sure that font-lock will + ;; refontify the second part in the proper context. + (put-text-property + (point) (progn (forward-comment (point-max)) (point)) + 'font-lock-multiline t) + ;; + (unless + (save-excursion + (with-syntax-table + (perl-quote-syntax-table (char-after)) + (forward-sexp 1)) + (put-text-property pos (line-end-position) + 'jit-lock-defer-multiline t) + (looking-at "\\s-*\\sw*e")) + (put-text-property (point) (1+ (point)) + 'syntax-table + (if (assoc (char-after) + perl-quote-like-pairs) + '(15) '(7))))))) + ;; The arg(s) is not terminated, so it extends until EOB. + (scan-error (goto-char (point-max)))))) + ;; Point is now right after the arg(s). ;; Erase any syntactic marks within the quoted text. (put-text-property pos (1- (point)) 'syntax-table nil) (when (eq (char-before (1- (point))) ?$)