diff options
| author | Stefan Monnier | 2016-05-13 14:32:22 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2016-05-13 14:32:51 -0400 |
| commit | 536ddf40cc30fbf68c4e6afb2d3d2d8e53458381 (patch) | |
| tree | 11cc440f8e71379ab1037f2047b39fd12caeb8b5 | |
| parent | faa8f38502b1c3b09167ab52b07842f44b833dde (diff) | |
| download | emacs-536ddf40cc30fbf68c4e6afb2d3d2d8e53458381.tar.gz emacs-536ddf40cc30fbf68c4e6afb2d3d2d8e53458381.zip | |
* lisp/net/sieve-mode.el: Handle the text:... notation
Get rid of redundant :group keywords.
(sieve-mode-syntax-table): Move initialization into declaration.
(sieve-syntax-propertize, sieve-syntax-propertize-text): New functions.
(sieve-mode): Use them.
| -rw-r--r-- | lisp/net/sieve-mode.el | 97 |
1 files changed, 56 insertions, 41 deletions
diff --git a/lisp/net/sieve-mode.el b/lisp/net/sieve-mode.el index 7575ba67c5e..77ab44f02db 100644 --- a/lisp/net/sieve-mode.el +++ b/lisp/net/sieve-mode.el | |||
| @@ -57,7 +57,6 @@ | |||
| 57 | 57 | ||
| 58 | (defcustom sieve-mode-hook nil | 58 | (defcustom sieve-mode-hook nil |
| 59 | "Hook run in sieve mode buffers." | 59 | "Hook run in sieve mode buffers." |
| 60 | :group 'sieve | ||
| 61 | :type 'hook) | 60 | :type 'hook) |
| 62 | 61 | ||
| 63 | ;; Font-lock | 62 | ;; Font-lock |
| @@ -72,8 +71,7 @@ | |||
| 72 | (((class color) (background light)) (:foreground "Orchid")) | 71 | (((class color) (background light)) (:foreground "Orchid")) |
| 73 | (((class color) (background dark)) (:foreground "LightSteelBlue")) | 72 | (((class color) (background dark)) (:foreground "LightSteelBlue")) |
| 74 | (t (:bold t))) | 73 | (t (:bold t))) |
| 75 | "Face used for Sieve Control Commands." | 74 | "Face used for Sieve Control Commands.") |
| 76 | :group 'sieve) | ||
| 77 | ;; backward-compatibility alias | 75 | ;; backward-compatibility alias |
| 78 | (put 'sieve-control-commands-face 'face-alias 'sieve-control-commands) | 76 | (put 'sieve-control-commands-face 'face-alias 'sieve-control-commands) |
| 79 | (put 'sieve-control-commands-face 'obsolete-face "22.1") | 77 | (put 'sieve-control-commands-face 'obsolete-face "22.1") |
| @@ -86,8 +84,7 @@ | |||
| 86 | (((class color) (background light)) (:foreground "Blue")) | 84 | (((class color) (background light)) (:foreground "Blue")) |
| 87 | (((class color) (background dark)) (:foreground "LightSkyBlue")) | 85 | (((class color) (background dark)) (:foreground "LightSkyBlue")) |
| 88 | (t (:inverse-video t :bold t))) | 86 | (t (:inverse-video t :bold t))) |
| 89 | "Face used for Sieve Action Commands." | 87 | "Face used for Sieve Action Commands.") |
| 90 | :group 'sieve) | ||
| 91 | ;; backward-compatibility alias | 88 | ;; backward-compatibility alias |
| 92 | (put 'sieve-action-commands-face 'face-alias 'sieve-action-commands) | 89 | (put 'sieve-action-commands-face 'face-alias 'sieve-action-commands) |
| 93 | (put 'sieve-action-commands-face 'obsolete-face "22.1") | 90 | (put 'sieve-action-commands-face 'obsolete-face "22.1") |
| @@ -104,8 +101,7 @@ | |||
| 104 | (((class color) (background light)) (:foreground "CadetBlue")) | 101 | (((class color) (background light)) (:foreground "CadetBlue")) |
| 105 | (((class color) (background dark)) (:foreground "Aquamarine")) | 102 | (((class color) (background dark)) (:foreground "Aquamarine")) |
| 106 | (t (:bold t :underline t))) | 103 | (t (:bold t :underline t))) |
| 107 | "Face used for Sieve Test Commands." | 104 | "Face used for Sieve Test Commands.") |
| 108 | :group 'sieve) | ||
| 109 | ;; backward-compatibility alias | 105 | ;; backward-compatibility alias |
| 110 | (put 'sieve-test-commands-face 'face-alias 'sieve-test-commands) | 106 | (put 'sieve-test-commands-face 'face-alias 'sieve-test-commands) |
| 111 | (put 'sieve-test-commands-face 'obsolete-face "22.1") | 107 | (put 'sieve-test-commands-face 'obsolete-face "22.1") |
| @@ -120,8 +116,7 @@ | |||
| 120 | (((class color) (background light)) (:foreground "Purple")) | 116 | (((class color) (background light)) (:foreground "Purple")) |
| 121 | (((class color) (background dark)) (:foreground "Cyan")) | 117 | (((class color) (background dark)) (:foreground "Cyan")) |
| 122 | (t (:bold t))) | 118 | (t (:bold t))) |
| 123 | "Face used for Sieve Tagged Arguments." | 119 | "Face used for Sieve Tagged Arguments.") |
| 124 | :group 'sieve) | ||
| 125 | ;; backward-compatibility alias | 120 | ;; backward-compatibility alias |
| 126 | (put 'sieve-tagged-arguments-face 'face-alias 'sieve-tagged-arguments) | 121 | (put 'sieve-tagged-arguments-face 'face-alias 'sieve-tagged-arguments) |
| 127 | (put 'sieve-tagged-arguments-face 'obsolete-face "22.1") | 122 | (put 'sieve-tagged-arguments-face 'obsolete-face "22.1") |
| @@ -149,28 +144,27 @@ | |||
| 149 | 144 | ||
| 150 | ;; Syntax table | 145 | ;; Syntax table |
| 151 | 146 | ||
| 152 | (defvar sieve-mode-syntax-table nil | 147 | (defvar sieve-mode-syntax-table |
| 148 | (let ((st (make-syntax-table))) | ||
| 149 | (modify-syntax-entry ?\\ "\\" st) | ||
| 150 | (modify-syntax-entry ?\n "> " st) | ||
| 151 | (modify-syntax-entry ?\f "> " st) | ||
| 152 | (modify-syntax-entry ?\# "< " st) | ||
| 153 | (modify-syntax-entry ?/ ". 14" st) | ||
| 154 | (modify-syntax-entry ?* ". 23b" st) | ||
| 155 | (modify-syntax-entry ?+ "." st) | ||
| 156 | (modify-syntax-entry ?- "." st) | ||
| 157 | (modify-syntax-entry ?= "." st) | ||
| 158 | (modify-syntax-entry ?% "." st) | ||
| 159 | (modify-syntax-entry ?< "." st) | ||
| 160 | (modify-syntax-entry ?> "." st) | ||
| 161 | (modify-syntax-entry ?& "." st) | ||
| 162 | (modify-syntax-entry ?| "." st) | ||
| 163 | (modify-syntax-entry ?_ "_" st) | ||
| 164 | (modify-syntax-entry ?\' "\"" st) | ||
| 165 | st) | ||
| 153 | "Syntax table in use in sieve-mode buffers.") | 166 | "Syntax table in use in sieve-mode buffers.") |
| 154 | 167 | ||
| 155 | (if sieve-mode-syntax-table | ||
| 156 | () | ||
| 157 | (setq sieve-mode-syntax-table (make-syntax-table)) | ||
| 158 | (modify-syntax-entry ?\\ "\\" sieve-mode-syntax-table) | ||
| 159 | (modify-syntax-entry ?\n "> " sieve-mode-syntax-table) | ||
| 160 | (modify-syntax-entry ?\f "> " sieve-mode-syntax-table) | ||
| 161 | (modify-syntax-entry ?\# "< " sieve-mode-syntax-table) | ||
| 162 | (modify-syntax-entry ?/ "." sieve-mode-syntax-table) | ||
| 163 | (modify-syntax-entry ?* "." sieve-mode-syntax-table) | ||
| 164 | (modify-syntax-entry ?+ "." sieve-mode-syntax-table) | ||
| 165 | (modify-syntax-entry ?- "." sieve-mode-syntax-table) | ||
| 166 | (modify-syntax-entry ?= "." sieve-mode-syntax-table) | ||
| 167 | (modify-syntax-entry ?% "." sieve-mode-syntax-table) | ||
| 168 | (modify-syntax-entry ?< "." sieve-mode-syntax-table) | ||
| 169 | (modify-syntax-entry ?> "." sieve-mode-syntax-table) | ||
| 170 | (modify-syntax-entry ?& "." sieve-mode-syntax-table) | ||
| 171 | (modify-syntax-entry ?| "." sieve-mode-syntax-table) | ||
| 172 | (modify-syntax-entry ?_ "_" sieve-mode-syntax-table) | ||
| 173 | (modify-syntax-entry ?\' "\"" sieve-mode-syntax-table)) | ||
| 174 | 168 | ||
| 175 | ;; Key map definition | 169 | ;; Key map definition |
| 176 | 170 | ||
| @@ -182,13 +176,40 @@ | |||
| 182 | map) | 176 | map) |
| 183 | "Key map used in sieve mode.") | 177 | "Key map used in sieve mode.") |
| 184 | 178 | ||
| 185 | ;; Menu definition | 179 | ;; Menu |
| 186 | 180 | ||
| 187 | (defvar sieve-mode-menu nil | 181 | (easy-menu-define sieve-mode-menu sieve-mode-map |
| 188 | "Menubar used in sieve mode.") | 182 | "Sieve Menu." |
| 183 | '("Sieve" | ||
| 184 | ["Upload script" sieve-upload t] | ||
| 185 | ["Manage scripts on server" sieve-manage t])) | ||
| 189 | 186 | ||
| 190 | ;; Code for Sieve editing mode. | 187 | ;; Code for Sieve editing mode. |
| 191 | (autoload 'easy-menu-add-item "easymenu") | 188 | |
| 189 | |||
| 190 | (defun sieve-syntax-propertize (beg end) | ||
| 191 | (goto-char beg) | ||
| 192 | (sieve-syntax-propertize-text end) | ||
| 193 | (funcall | ||
| 194 | (syntax-propertize-rules | ||
| 195 | ;; FIXME: When there's a "text:" with a # comment, the \n plays dual role: | ||
| 196 | ;; it closes the comment and starts the string. This is problematic for us | ||
| 197 | ;; since syntax-table entries can either close a comment or | ||
| 198 | ;; delimit a string, but not both. | ||
| 199 | ("\\_<text:[ \t]*\\(?:#.*\\(.\\)\\)?\\(\n\\)" | ||
| 200 | (1 ">") | ||
| 201 | (2 (prog1 (unless (save-excursion | ||
| 202 | (nth 8 (syntax-ppss (match-beginning 0)))) | ||
| 203 | (string-to-syntax "|")) | ||
| 204 | (sieve-syntax-propertize-text end))))) | ||
| 205 | beg end)) | ||
| 206 | |||
| 207 | (defun sieve-syntax-propertize-text (end) | ||
| 208 | (let ((ppss (syntax-ppss))) | ||
| 209 | (when (and (eq t (nth 3 ppss)) | ||
| 210 | (re-search-forward "^\\.\\(\n\\)" end 'move)) | ||
| 211 | (put-text-property (match-beginning 1) (match-end 1) | ||
| 212 | 'syntax-table (string-to-syntax "|"))))) | ||
| 192 | 213 | ||
| 193 | ;;;###autoload | 214 | ;;;###autoload |
| 194 | (define-derived-mode sieve-mode c-mode "Sieve" | 215 | (define-derived-mode sieve-mode c-mode "Sieve" |
| @@ -204,18 +225,12 @@ Turning on Sieve mode runs `sieve-mode-hook'." | |||
| 204 | (set (make-local-variable 'comment-end) "") | 225 | (set (make-local-variable 'comment-end) "") |
| 205 | ;;(set (make-local-variable 'comment-start-skip) "\\(^\\|\\s-\\);?#+ *") | 226 | ;;(set (make-local-variable 'comment-start-skip) "\\(^\\|\\s-\\);?#+ *") |
| 206 | (set (make-local-variable 'comment-start-skip) "#+ *") | 227 | (set (make-local-variable 'comment-start-skip) "#+ *") |
| 228 | (set (make-local-variable 'syntax-propertize-function) | ||
| 229 | #'sieve-syntax-propertize) | ||
| 207 | (set (make-local-variable 'font-lock-defaults) | 230 | (set (make-local-variable 'font-lock-defaults) |
| 208 | '(sieve-font-lock-keywords nil nil ((?_ . "w")))) | 231 | '(sieve-font-lock-keywords nil nil ((?_ . "w")))) |
| 209 | (easy-menu-add-item nil nil sieve-mode-menu)) | 232 | (easy-menu-add-item nil nil sieve-mode-menu)) |
| 210 | 233 | ||
| 211 | ;; Menu | ||
| 212 | |||
| 213 | (easy-menu-define sieve-mode-menu sieve-mode-map | ||
| 214 | "Sieve Menu." | ||
| 215 | '("Sieve" | ||
| 216 | ["Upload script" sieve-upload t] | ||
| 217 | ["Manage scripts on server" sieve-manage t])) | ||
| 218 | |||
| 219 | (provide 'sieve-mode) | 234 | (provide 'sieve-mode) |
| 220 | 235 | ||
| 221 | ;; sieve-mode.el ends here | 236 | ;; sieve-mode.el ends here |