- (when ada-indent-opentoken
- (save-excursion
- (let ((token-text (nth 1 (wisi-backward-token))))
- (cond
- ((equal token-text "<=")
- (back-to-indentation)
- (+ (current-column) ada-indent-broken))
-
- ((member token-text '("+" "&"))
- (while (not (equal "<=" (nth 1 (wisi-backward-token)))))
- (back-to-indentation)
- (+ (current-column) ada-indent-broken))
- )))))
-
-(defun ada-wisi-opentoken-setup ()
- (add-to-list 'wisi-indent-calculate-functions 'ada-wisi-opentoken))
-
-;; This must be after ada-wisi-setup on ada-mode-hook, because
-;; ada-wisi-setup resets wisi-indent-calculate-functions
-(add-hook 'ada-mode-hook 'ada-wisi-opentoken-setup t)
-
-(add-to-list 'ada-align-rules
- '(ada-opentoken
- (regexp . "[^=]\\(\\s-*\\)<=")
- (valid . (lambda() (not (ada-in-comment-p))))
- (modes . '(ada-mode))))
+ (save-excursion
+ (let ((token-text (wisi-token-text (wisi-backward-token))))
+ (cond
+ ((equal token-text "<=")
+ (back-to-indentation)
+ (+ (current-column) ada-indent-broken))
+
+ ((member token-text '("+" "&"))
+ (while (not (equal "<=" (wisi-token-text (wisi-backward-token)))))
+ (back-to-indentation)
+ (+ (current-column) ada-indent-broken))
+ ))))
+
+(defconst ada-wisi-opentoken-align
+ "Align rule for OpenToken grammar definitions."
+ '(ada-opentoken
+ (regexp . "[^=]\\(\\s-*\\)<=")
+ (valid . (lambda() (not (ada-in-comment-p))))
+ (modes . '(ada-mode))))
+
+;;;###autoload
+(define-minor-mode ada-indent-opentoken-mode
+ "Minor mode for indenting grammar definitions for the OpenToken package.
+Enable mode if ARG is positive"
+ :initial-value t
+ :lighter "OpenToken" ;; mode line
+
+ (if ada-indent-opentoken-mode
+ (progn
+ ;; This must be after ada-wisi-setup on ada-mode-hook, because
+ ;; ada-wisi-setup resets wisi-indent-calculate-functions
+ (add-to-list 'ada-align-rules ada-wisi-opentoken-align)
+ (add-to-list 'wisi-indent-calculate-functions 'ada-wisi-opentoken))
+
+ (setq ada-align-rules (delete ada-wisi-opentoken-align ada-align-rules))
+ (setq wisi-indent-calculate-functions (delete 'ada-wisi-opentoken wisi-indent-calculate-functions))
+ ))