comparison lisp/textmodes/sgml-mode.el @ 21780:5dc3fe7cd300

(sgml-font-lock-keywords-1): Copy initialization from sgml-font-lock-keywords. (sgml-font-lock-keywords): Initialize from sgml-font-lock-keywords-1. (sgml-font-lock-keywords-2): New variable. (sgml-mode-common): Make buffer-local binding for sgml-font-lock-keywords-2 and initialize it. Use it in font-lock-defaults.
author Richard M. Stallman <rms@gnu.org>
date Mon, 27 Apr 1998 01:22:08 +0000
parents 3ae81bc17b19
children 23bf812d4937
comparison
equal deleted inserted replaced
21779:6aaa0268fe91 21780:5dc3fe7cd300
203 "<[A-Za-z]\\([-.A-Za-z0-9= \n\t]\\|\"[^\"]*\"\\|'[^']*'\\)*" 203 "<[A-Za-z]\\([-.A-Za-z0-9= \n\t]\\|\"[^\"]*\"\\|'[^']*'\\)*"
204 "Regular expression that matches a non-empty start tag. 204 "Regular expression that matches a non-empty start tag.
205 Any terminating `>' or `/' is not matched.") 205 Any terminating `>' or `/' is not matched.")
206 206
207 207
208 (defvar sgml-font-lock-keywords 208 ;; internal
209 (defconst sgml-font-lock-keywords-1
209 '(("<\\([!?][a-z0-9]+\\)" 1 font-lock-keyword-face) 210 '(("<\\([!?][a-z0-9]+\\)" 1 font-lock-keyword-face)
210 ("<\\(/?[a-z0-9]+\\)" 1 font-lock-function-name-face) 211 ("<\\(/?[a-z0-9]+\\)" 1 font-lock-function-name-face)
211 ("[&%][-.A-Za-z0-9]+;?" . font-lock-variable-name-face) 212 ("[&%][-.A-Za-z0-9]+;?" . font-lock-variable-name-face)
212 ("<!--[^<>]*-->" . font-lock-comment-face)) 213 ("<!--[^<>]*-->" . font-lock-comment-face)))
214
215 (defconst sgml-font-lock-keywords-2 ())
216
217 ;; for font-lock, but must be defvar'ed after
218 ;; sgml-font-lock-keywords-1 and sgml-font-lock-keywords-2 above
219 (defvar sgml-font-lock-keywords sgml-font-lock-keywords-1
213 "*Rules for highlighting SGML code. See also `sgml-tag-face-alist'.") 220 "*Rules for highlighting SGML code. See also `sgml-tag-face-alist'.")
214 221
215 ;; internal 222 ;; internal
216 (defvar sgml-font-lock-keywords-1 ())
217
218 (defvar sgml-face-tag-alist () 223 (defvar sgml-face-tag-alist ()
219 "Alist of face and tag name for facemenu.") 224 "Alist of face and tag name for facemenu.")
220 225
221 (defvar sgml-tag-face-alist () 226 (defvar sgml-tag-face-alist ()
222 "Tag names and face or list of faces to fontify with when invisible. 227 "Tag names and face or list of faces to fontify with when invisible.
271 (string :tag "Description"))) 276 (string :tag "Description")))
272 :group 'sgml) 277 :group 'sgml)
273 278
274 (defun sgml-mode-common (sgml-tag-face-alist sgml-display-text) 279 (defun sgml-mode-common (sgml-tag-face-alist sgml-display-text)
275 "Common code for setting up `sgml-mode' and derived modes. 280 "Common code for setting up `sgml-mode' and derived modes.
276 SGML-TAG-FACE-ALIST is used for calculating `sgml-font-lock-keywords-1'. 281 SGML-TAG-FACE-ALIST is used for calculating `sgml-font-lock-keywords-2'.
277 SGML-DISPLAY-TEXT sets up alternate text for when tags are invisible (see 282 SGML-DISPLAY-TEXT sets up alternate text for when tags are invisible (see
278 varables of same name)." 283 varables of same name)."
279 (kill-all-local-variables) 284 (kill-all-local-variables)
280 (setq local-abbrev-table text-mode-abbrev-table) 285 (setq local-abbrev-table text-mode-abbrev-table)
281 (set-syntax-table sgml-mode-syntax-table) 286 (set-syntax-table sgml-mode-syntax-table)
292 (make-local-variable 'skeleton-transformation) 297 (make-local-variable 'skeleton-transformation)
293 (make-local-variable 'skeleton-further-elements) 298 (make-local-variable 'skeleton-further-elements)
294 (make-local-variable 'skeleton-end-hook) 299 (make-local-variable 'skeleton-end-hook)
295 (make-local-variable 'font-lock-defaults) 300 (make-local-variable 'font-lock-defaults)
296 (make-local-variable 'sgml-font-lock-keywords-1) 301 (make-local-variable 'sgml-font-lock-keywords-1)
302 (make-local-variable 'sgml-font-lock-keywords-2)
297 (make-local-variable 'facemenu-add-face-function) 303 (make-local-variable 'facemenu-add-face-function)
298 (make-local-variable 'facemenu-end-add-face) 304 (make-local-variable 'facemenu-end-add-face)
299 ;;(make-local-variable 'facemenu-remove-face-function) 305 ;;(make-local-variable 'facemenu-remove-face-function)
300 (and sgml-tag-face-alist 306 (and sgml-tag-face-alist
301 (not (assq 1 sgml-tag-face-alist)) 307 (not (assq 1 sgml-tag-face-alist))
325 skeleton-end-hook (lambda () 331 skeleton-end-hook (lambda ()
326 (or (eolp) 332 (or (eolp)
327 (not (or (eq v2 '\n) 333 (not (or (eq v2 '\n)
328 (eq (car-safe v2) '\n))) 334 (eq (car-safe v2) '\n)))
329 (newline-and-indent))) 335 (newline-and-indent)))
330 sgml-font-lock-keywords-1 (cdr (assq 1 sgml-tag-face-alist)) 336 sgml-font-lock-keywords-2 (append
337 sgml-font-lock-keywords-1
338 (cdr (assq 1 sgml-tag-face-alist)))
331 font-lock-defaults '((sgml-font-lock-keywords 339 font-lock-defaults '((sgml-font-lock-keywords
332 sgml-font-lock-keywords-1) 340 sgml-font-lock-keywords-1
341 sgml-font-lock-keywords-2)
333 nil 342 nil
334 t) 343 t)
335 facemenu-add-face-function 'sgml-mode-facemenu-add-face-function) 344 facemenu-add-face-function 'sgml-mode-facemenu-add-face-function)
336 (while sgml-display-text 345 (while sgml-display-text
337 (put (car (car sgml-display-text)) 'before-string 346 (put (car (car sgml-display-text)) 'before-string