123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- (autoload 'sieve-manage "sieve")
- (autoload 'sieve-upload "sieve")
- (eval-when-compile
- (require 'font-lock))
- (defgroup sieve nil
- "Sieve."
- :group 'languages)
- (defcustom sieve-mode-hook nil
- "Hook run in sieve mode buffers."
- :group 'sieve
- :type 'hook)
- (defvar sieve-control-commands-face 'sieve-control-commands
- "Face name used for Sieve Control Commands.")
- (defface sieve-control-commands
- '((((type tty) (class color)) (:foreground "blue" :weight light))
- (((class grayscale) (background light)) (:foreground "LightGray" :bold t))
- (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
- (((class color) (background light)) (:foreground "Orchid"))
- (((class color) (background dark)) (:foreground "LightSteelBlue"))
- (t (:bold t)))
- "Face used for Sieve Control Commands."
- :group 'sieve)
- (put 'sieve-control-commands-face 'face-alias 'sieve-control-commands)
- (put 'sieve-control-commands-face 'obsolete-face "22.1")
- (defvar sieve-action-commands-face 'sieve-action-commands
- "Face name used for Sieve Action Commands.")
- (defface sieve-action-commands
- '((((type tty) (class color)) (:foreground "blue" :weight bold))
- (((class color) (background light)) (:foreground "Blue"))
- (((class color) (background dark)) (:foreground "LightSkyBlue"))
- (t (:inverse-video t :bold t)))
- "Face used for Sieve Action Commands."
- :group 'sieve)
- (put 'sieve-action-commands-face 'face-alias 'sieve-action-commands)
- (put 'sieve-action-commands-face 'obsolete-face "22.1")
- (defvar sieve-test-commands-face 'sieve-test-commands
- "Face name used for Sieve Test Commands.")
- (defface sieve-test-commands
- '((((type tty) (class color)) (:foreground "magenta"))
- (((class grayscale) (background light))
- (:foreground "LightGray" :bold t :underline t))
- (((class grayscale) (background dark))
- (:foreground "Gray50" :bold t :underline t))
- (((class color) (background light)) (:foreground "CadetBlue"))
- (((class color) (background dark)) (:foreground "Aquamarine"))
- (t (:bold t :underline t)))
- "Face used for Sieve Test Commands."
- :group 'sieve)
- (put 'sieve-test-commands-face 'face-alias 'sieve-test-commands)
- (put 'sieve-test-commands-face 'obsolete-face "22.1")
- (defvar sieve-tagged-arguments-face 'sieve-tagged-arguments
- "Face name used for Sieve Tagged Arguments.")
- (defface sieve-tagged-arguments
- '((((type tty) (class color)) (:foreground "cyan" :weight bold))
- (((class grayscale) (background light)) (:foreground "LightGray" :bold t))
- (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
- (((class color) (background light)) (:foreground "Purple"))
- (((class color) (background dark)) (:foreground "Cyan"))
- (t (:bold t)))
- "Face used for Sieve Tagged Arguments."
- :group 'sieve)
- (put 'sieve-tagged-arguments-face 'face-alias 'sieve-tagged-arguments)
- (put 'sieve-tagged-arguments-face 'obsolete-face "22.1")
- (defconst sieve-font-lock-keywords
- (eval-when-compile
- (list
-
- (cons (regexp-opt '("require" "if" "else" "elsif" "stop"))
- 'sieve-control-commands-face)
-
- (cons (regexp-opt '("fileinto" "redirect" "reject" "keep" "discard"))
- 'sieve-action-commands-face)
-
- (cons (regexp-opt '("address" "allof" "anyof" "exists" "false"
- "true" "header" "not" "size" "envelope"))
- 'sieve-test-commands-face)
- (cons "\\Sw+:\\sw+"
- 'sieve-tagged-arguments-face))))
- (defvar sieve-mode-syntax-table nil
- "Syntax table in use in sieve-mode buffers.")
- (if sieve-mode-syntax-table
- ()
- (setq sieve-mode-syntax-table (make-syntax-table))
- (modify-syntax-entry ?\\ "\\" sieve-mode-syntax-table)
- (modify-syntax-entry ?\n "> " sieve-mode-syntax-table)
- (modify-syntax-entry ?\f "> " sieve-mode-syntax-table)
- (modify-syntax-entry ?\# "< " sieve-mode-syntax-table)
- (modify-syntax-entry ?/ "." sieve-mode-syntax-table)
- (modify-syntax-entry ?* "." sieve-mode-syntax-table)
- (modify-syntax-entry ?+ "." sieve-mode-syntax-table)
- (modify-syntax-entry ?- "." sieve-mode-syntax-table)
- (modify-syntax-entry ?= "." sieve-mode-syntax-table)
- (modify-syntax-entry ?% "." sieve-mode-syntax-table)
- (modify-syntax-entry ?< "." sieve-mode-syntax-table)
- (modify-syntax-entry ?> "." sieve-mode-syntax-table)
- (modify-syntax-entry ?& "." sieve-mode-syntax-table)
- (modify-syntax-entry ?| "." sieve-mode-syntax-table)
- (modify-syntax-entry ?_ "_" sieve-mode-syntax-table)
- (modify-syntax-entry ?\' "\"" sieve-mode-syntax-table))
- (defvar sieve-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map "\C-c\C-l" 'sieve-upload)
- (define-key map "\C-c\C-c" 'sieve-upload-and-bury)
- (define-key map "\C-c\C-m" 'sieve-manage)
- map)
- "Key map used in sieve mode.")
- (defvar sieve-mode-menu nil
- "Menubar used in sieve mode.")
- (autoload 'easy-menu-add-item "easymenu")
- (define-derived-mode sieve-mode c-mode "Sieve"
- "Major mode for editing Sieve code.
- This is much like C mode except for the syntax of comments. Its keymap
- inherits from C mode's and it has the same variables for customizing
- indentation. It has its own abbrev table and its own syntax table.
- Turning on Sieve mode runs `sieve-mode-hook'."
- (set (make-local-variable 'paragraph-start) (concat "$\\|" page-delimiter))
- (set (make-local-variable 'paragraph-separate) paragraph-start)
- (set (make-local-variable 'comment-start) "#")
- (set (make-local-variable 'comment-end) "")
-
- (set (make-local-variable 'comment-start-skip) "#+ *")
- (unless (featurep 'xemacs)
- (set (make-local-variable 'font-lock-defaults)
- '(sieve-font-lock-keywords nil nil ((?_ . "w")))))
- (easy-menu-add-item nil nil sieve-mode-menu))
- (easy-menu-define sieve-mode-menu sieve-mode-map
- "Sieve Menu."
- '("Sieve"
- ["Upload script" sieve-upload t]
- ["Manage scripts on server" sieve-manage t]))
- (provide 'sieve-mode)
|