1 (defvar cs-font-lock-keywords 2 (list 3 '("<\\?cs[^\\?]*\\?>" 0 font-lock-keyword-face t) 4 '("<\\?cs +\\(call\\|each\\|if\\|alt\\|var\\|include\\)" 1 font-lock-keyword-face t) 5 '("<\\?cs +\\(/each\\|/if\\|/alt\\|/var\\|/include\\)" 1 font-lock-keyword-face t) 6 7 ; variable names 8 '("<\\?cs +var:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t) 9 '("<\\?cs +alt:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t) 10 '("<\\?cs +each:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t) 11 12 ; string 13 '("<\\?cs[^\"\\?]+\\(\"[^\"]+\"\\)[^\\?]+\\?>" 1 font-lock-string-face t) 14 15 )) 16 17 (defvar cs-mode-map ()) 18 19 (if (not cs-mode-map) 20 (progn 21 (setq cs-mode-map (make-sparse-keymap)) 22 (define-key cs-mode-map "\C-c\C-i" 'cs-insert-tag) 23 )) 24 25 (defun cs-mode nil 26 "ClearSilver mode" 27 28 (interactive) 29 (setq major-mode 'cs-mode) 30 (setq mode-name "CS") 31 (use-local-map cs-mode-map) 32 33 (make-local-variable 'font-lock-defaults) 34 (setq font-lock-defaults 35 '((cs-font-lock-keywords) t)) 36 37 (setq font-lock-keywords cs-font-lock-keywords) 38 39 (font-lock-mode 1) 40 41 (run-hooks 'cs-mode-hook) 42 43 ) 44 45 (defun cs-insert-tag () 46 (interactive) 47 (insert "<?cs ?>") 48 (backward-char 3) 49 ) 50 51