1
2;; Help from http://two-wugs.net/emacs/wpdl-mode.el
3
4(defvar conf-mode-hook nil)
5(defvar conf-mode-map
6  (let ((conf-mode-map (make-keymap)))
7;    (define-key conf-mode-map "\C-j" 'newline-and-indent)
8    conf-mode-map)
9  "Keymap for Conf major mode")
10
11;; Set us up to load by default for .conf files
12(add-to-list 'auto-mode-alist '("\\.conf$" . conf-mode))
13
14
15
16
17; Note comments are done via. syntax table...
18(defconst conf-font-lock-keywords-1
19  (list
20   '("\\<\\(AND\\|and\\|OR\\|or\\|||\\|&&\\|NOT\\|not\\|!\\)\\>" .
21     font-lock-function-name-face)
22;   '("\\<\\(\\w\\w*\\)\\>" .
23;     font-lock-variable-name-face)
24   '("^#!\\( \\|/\\).*" .
25     font-lock-warning-face))
26  "Minimal highlighting expressions for Conf mode")
27
28(defconst conf-font-lock-keywords-2
29  (append conf-font-lock-keywords-1
30	  (list
31	   '("[][()]" . font-lock-keyword-face)
32	   '("\\<\\(TRUE\\|true\\|FALSE\\|false\\|ELSE\\|else\\)\\>" .
33	     font-lock-constant-face)))
34  "Level 2 Keywords to highlight in Conf mode")
35
36; httpd specific keywords...
37(defconst conf-font-lock-keywords-3
38  (append conf-font-lock-keywords-2
39	  (list
40	   '("\\<\\(org.and.daemon-conf-1.0\\|org.and.httpd-conf-main-1.0\\|org.and.httpd-conf-req-1.0\\)\\>" . font-lock-function-name-face)))
41  "Level 3 Keywords to highlight in Conf mode")
42
43(defconst conf-font-lock-keywords-4
44  (append conf-font-lock-keywords-3
45	  (list
46	   '("\\<return\\>" . font-lock-keyword-face)
47	   '("\\<policy\\|connection-policy\\>" . font-lock-builtin-face)))
48  "Level 4 Keywords to highlight in Conf mode")
49
50
51; By default highlight for httpd...
52(defvar conf-font-lock-keywords conf-font-lock-keywords-4
53  "Default highlighting expressions for Conf mode")
54
55
56(defun conf-indent-line ()
57  "Indent current line as Conf code."
58  (interactive)
59  (beginning-of-line)
60  (indent-line-to 0)		   ; First line is always non-indented
61)
62
63(defvar conf-mode-syntax-table
64  (let ((conf-mode-syntax-table (make-syntax-table)))
65
66    ; This is added so symbols can be more easily parsed
67	(modify-syntax-entry ?- "w" conf-mode-syntax-table)
68	(modify-syntax-entry ?_ "w" conf-mode-syntax-table)
69	(modify-syntax-entry ?. "w" conf-mode-syntax-table)
70	(modify-syntax-entry ?, "w" conf-mode-syntax-table)
71	(modify-syntax-entry ?` "w" conf-mode-syntax-table)
72	(modify-syntax-entry ?{ "w" conf-mode-syntax-table)
73	(modify-syntax-entry ?} "w" conf-mode-syntax-table)
74	(modify-syntax-entry ?& "w" conf-mode-syntax-table)
75	(modify-syntax-entry ?| "w" conf-mode-syntax-table)
76	(modify-syntax-entry ?! "w" conf-mode-syntax-table)
77	(modify-syntax-entry ?: "w" conf-mode-syntax-table)
78
79;;	(modify-syntax-entry ?\( "$" conf-mode-syntax-table)
80;;	(modify-syntax-entry ?\) "$" conf-mode-syntax-table)
81;;	(modify-syntax-entry ?\[ "$" conf-mode-syntax-table)
82;;	(modify-syntax-entry ?\] "$" conf-mode-syntax-table)
83	(modify-syntax-entry ?\' "\"" conf-mode-syntax-table)
84	(modify-syntax-entry ?\; "<" conf-mode-syntax-table)
85	(modify-syntax-entry ?\# "<" conf-mode-syntax-table)
86	(modify-syntax-entry ?\n ">" conf-mode-syntax-table)
87	conf-mode-syntax-table)
88  "Syntax table for conf-mode")
89
90(defun conf-mode ()
91  (interactive)
92  (kill-all-local-variables)
93  (use-local-map conf-mode-map)
94  (set-syntax-table conf-mode-syntax-table)
95  ;; Set up font-lock
96  (set (make-local-variable 'font-lock-defaults) '(conf-font-lock-keywords))
97  ;; Register our indentation function
98  (set (make-local-variable 'indent-line-function) 'conf-indent-line)
99  (setq major-mode 'conf-mode)
100  (setq mode-name "CONF")
101  (run-hooks 'conf-mode-hook))
102
103(provide 'conf-mode)
104
105;;; conf-mode.el ends here
106