+(defun last-opening-brace()
+ ;; Get the position of the last opening brace, with
+ ;; respect to the current point.
+ (save-excursion
+ (let ((lob (re-search-backward "{" nil t)))
+ (if lob
+ lob
+ -1)
+ )
+ )
+)
+
+(defun last-closing-brace()
+ ;; Get the position of the last closing brace, with
+ ;; respect to the current point.
+ (save-excursion
+ (let ((lcb (re-search-backward "}" nil t)))
+ (if lcb
+ lcb
+ -1)
+ )
+ )
+)
+
(defun nagios-in-block()
"Determine if the point is inside of a {} block."
- (setq pos (point))
-
- ;; Get the position of the last opening and closing braces, with
- ;; respect to the current point
- (setq last-opening-brace (re-search-backward "{" nil t))
- (goto-char pos)
-
- (setq last-closing-brace (re-search-backward "}" nil t))
- (goto-char pos)
-
- ;; If either is nil (not found) just set it to -1, so the comparison
- ;; doesn't die.
- (if (not last-opening-brace)
- (setq last-opening-brace -1))
-
- (if (not last-closing-brace)
- (setq last-closing-brace -1))
-
;; If the last brace seen in the buffer is an opening brace, we're
;; in a block. Otherwise, we aren't.
- (if (>= last-closing-brace last-opening-brace)
+ (if (>= (last-closing-brace) (last-opening-brace))
nil
- t)
- )
+ t)
+)
-;; Regular Expression Transformations
-
-(defun regexp-alt-raw(element-list)
- "Takes a list of elements, and returns the string '\\(element1\\|element2...\\)'"
-
- ;; This is necessary since regexp-opt does not accept regular
- ;; expressions as arguments. We use regexp-opt when we can, of
- ;; course.
-
- (let ((regexp "\\("))
- (mapcar (lambda(elem)
- (setq regexp (concat regexp "\\(" elem "\\)" "\\|")))
- element-list)
- (concat (substring regexp 0 -2) ; Cut the last "\\|"
- "\\)")
- )
- )
-
-
-
(defconst nagios-directives
(eval-when-compile
(concat "^[ \t\r\n]*"
(concat "^[ \t\r\n]*"
- (regexp-alt-raw
- '("define command"
- "define contact"
- "define contactgroup"
- "define host"
- "define hostdependency"
- "define hostescalation"
- "define hostextinfo"
- "define hostgroup"
- "define hostgroupescalation"
- "define null"
- "define service"
- "define servicedependency"
- "define serviceescalation"
- "define serviceextinfo"
- "define servicegroup"
- "define timeperiod"))
-
- ;; These can be "terminated" by either an opening curly
- ;; brace, or a space.
- "\\({\\| \\)")
+ "\\(" ;; Stick parenthesis around whatever comes out
+ ;; of regexp-opt. We use this to match a
+ ;; subexpression during font-lock.
+ (regexp-opt
+ '("define command"
+ "define contact"
+ "define contactgroup"
+ "define host"
+ "define hostdependency"
+ "define hostescalation"
+ "define hostextinfo"
+ "define hostgroup"
+ "define hostgroupescalation"
+ "define null"
+ "define service"
+ "define servicedependency"
+ "define serviceescalation"
+ "define serviceextinfo"
+ "define servicegroup"
+ "define timeperiod"))
+ ;; This closes the parentheses that we opened
+ "\\)" ;; before regexp-opt.
+
+ ;; These can be "terminated" by either an opening curly
+ ;; brace, or a space.
+ "\\({\\| \\)")
)
)