(require 'cc-mode)
+(defgroup hide-ifdef nil
+ "Hide selected code within `ifdef'."
+ :group 'c)
+
(defvar hide-ifdef-mode-submap nil
"Keymap used with Hide-Ifdef mode.")
; pattern to match initial identifier, !, &&, ||, (, or ).
; Added ==, + and -: garyo@avs.com 8/9/94
-(defconst hif-token-regexp "^\\(!\\|&&\\|||\\|[!=]=\\|[()+-]\\|\\w+\\)")
+(defconst hif-token-regexp "^\\(&&\\|||\\|[!=]=\\|!\\|[()+-]\\|[<>]=?\\|\\w+\\)")
(defconst hif-end-of-comment "\\*/")
((string-equal token "defined") 'hif-defined)
((string-equal token "(") 'lparen)
((string-equal token ")") 'rparen)
+ ((string-equal token ">") 'hif-greater)
+ ((string-equal token "<") 'hif-less)
+ ((string-equal token ">=") 'hif-greater-equal)
+ ((string-equal token "<=") 'hif-less-equal)
((string-equal token "+") 'hif-plus)
((string-equal token "-") 'hif-minus)
(t (intern token)))
result))
(defun hif-eq-expr ()
- "Parse an eq-expr : math | eq-expr '=='|'!=' math."
+ "Parse an eq-expr : math | eq-expr `=='|`!='|`<'|`>'|`>='|`<=' math."
(let ((result (hif-math))
(eq-token nil))
- (while (or (eq token 'equal) (eq token 'hif-notequal))
+ (while (memq token '(equal hif-notequal hif-greater hif-less
+ hif-greater-equal hif-less-equal))
(setq eq-token token)
(hif-nexttoken)
(setq result (list eq-token result (hif-math))))
(defun hif-notequal (a b)
"Like (not (equal A B)) but as one symbol."
(not (equal a b)))
-
+(defun hif-greater (a b)
+ "Simple comparison."
+ (> (hif-mathify a) (hif-mathify b)))
+(defun hif-less (a b)
+ "Simple comparison."
+ (< (hif-mathify a) (hif-mathify b)))
+(defun hif-greater-equal (a b)
+ "Simple comparison."
+ (>= (hif-mathify a) (hif-mathify b)))
+(defun hif-less-equal (a b)
+ "Simple comparison."
+ (<= (hif-mathify a) (hif-mathify b)))
;;;----------- end of parser -----------------------
;===%%SF%% exports (Start) ===
;;;###autoload
-(defvar hide-ifdef-initially nil
- "*Non-nil means call `hide-ifdefs' when Hide-Ifdef mode is first activated.")
+(defcustom hide-ifdef-initially nil
+ "*Non-nil means call `hide-ifdefs' when Hide-Ifdef mode is first activated."
+ :type 'boolean
+ :group 'hide-ifdef)
;;;###autoload
-(defvar hide-ifdef-read-only nil
- "*Set to non-nil if you want buffer to be read-only while hiding text.")
+(defcustom hide-ifdef-read-only nil
+ "*Set to non-nil if you want buffer to be read-only while hiding text."
+ :type 'boolean
+ :group 'hide-ifdef)
(defvar hif-outside-read-only nil
"Internal variable. Saves the value of `buffer-read-only' while hiding.")
;;;###autoload
-(defvar hide-ifdef-lines nil
- "*Non-nil means hide the #ifX, #else, and #endif lines.")
+(defcustom hide-ifdef-lines nil
+ "*Non-nil means hide the #ifX, #else, and #endif lines."
+ :type 'boolean
+ :group 'hide-ifdef)
(defun hide-ifdef-toggle-read-only ()
"Toggle hide-ifdef-read-only."