emacs-pretest-bug
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cfengine-mode fails to colorize escaped double-quoted


From: Chong Yidong
Subject: Re: cfengine-mode fails to colorize escaped double-quoted
Date: Fri, 08 Sep 2006 13:15:46 -0400
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Stefan Monnier <address@hidden> writes:

>>> cfengine-mode fails to colorize escaped double-quoted
>>> 
>>> Here's the smallest file I can reproduce the bug with:
>>> 
>>> # -*- mode: cfengine -*-
>>> 
>>> editfiles:
>>> { /etc/lilo.conf
>>> InsertLine "append=\"ip=dhcp\""
>>> }
>
>> It's because of the following line in `cfengine-mode'.  I don't know
>> Cfengine, so if someone could propose a fix, that would be nice.
>
>>   ;; Doze path separators:
>>   (modify-syntax-entry ?\\ "_" cfengine-mode-syntax-table)
>
> Maybe the patch below is a solution?

Looks good to me.

> --- cfengine.el       23 fév 2006 11:34:11 -0500      1.9
> +++ cfengine.el       08 sep 2006 11:59:44 -0400      
> @@ -85,6 +85,12 @@
>      ;; File, acl &c in group:   { token ... }
>      ("{[ \t]*\\([^ \t\n]+\\)" 1 font-lock-constant-face)))
>  
> +(defconst cfengine-font-lock-syntactic-keywords
> +  ;; In the main syntax-table, backslash is marked as a punctuation, because
> +  ;; of its use in DOS-style directory separators.  Here we try to recognize
> +  ;; the cases where backslash is used as an escape inside strings.
> +  '(("\\(\\(?:\\\\\\)+\\)\"" . "\\")))
> +
>  (defvar cfengine-imenu-expression
>    `((nil ,(concat "^[ \t]*" (eval-when-compile
>                             (regexp-opt cfengine-actions t))
> @@ -218,7 +224,7 @@
>    ;; variable substitution:
>    (modify-syntax-entry ?$ "." cfengine-mode-syntax-table)
>    ;; Doze path separators:
> -  (modify-syntax-entry ?\\ "_" cfengine-mode-syntax-table)
> +  (modify-syntax-entry ?\\ "." cfengine-mode-syntax-table)
>    ;; Otherwise, syntax defaults seem OK to give reasonable word
>    ;; movement.
>  
> @@ -237,7 +243,9 @@
>    ;; functions in evaluated classes to string syntax, and then obey
>    ;; syntax properties.
>    (setq font-lock-defaults
> -     '(cfengine-font-lock-keywords nil nil nil beginning-of-line))
> +     '(cfengine-font-lock-keywords nil nil nil beginning-of-line
> +          (font-lock-syntactic-keywords
> +           . cfengine-font-lock-syntactic-keywords)))
>    (setq imenu-generic-expression cfengine-imenu-expression)
>    (set (make-local-variable 'beginning-of-defun-function)
>         #'cfengine-beginning-of-defun)
> @@ -249,5 +257,5 @@
>  
>  (provide 'cfengine)
>  
> -;;; arch-tag: 6b931be2-1505-4124-afa6-9675971e26d4
> +;; arch-tag: 6b931be2-1505-4124-afa6-9675971e26d4
>  ;;; cfengine.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]