on the completed work posted on http://www.emacswiki.org/emacs/HideIfDef.
- Supporting argumented macro expansion.
- Stringification, tokenization and concatenation of strings and tokens.
- Add functions to find defines and parse argumented macros into a macro
tree containing macro name, formal parameters and macro body.
- On macro evaluation, macros will be applied with actual parameters and
then got expanded recursively.
- Merge main trunk changes
* lisp/progmodes/hideif.el (hif-string-to-number): Merge changes from
main trunk.
(hif-simple-token-only, hif-tokenize): Commentted in detail mainly for
performance enhancements.
(hif-parse-if-exp): Rename to `hif-parse-exp'. Enhanced for macro
expansion.
(hif-factor, hif-string-concatenation, intern-safe): Support string
concatenation and argumented macro expansion.
(hif-if-valid-identifier-p, hif-define-operator, hif-flatten)
(hif-expand-token-list, hif-get-argument-list, hif-define-macro)
(hif-delimit, hif-macro-supply-arguments, hif-invoke, hif-canonicalize)
(hif-canonicalize-tokens, hif-looking-at-elif, hif-place-macro-invocation)
(hif-parse-macro-arglist): Mostly new functions for supporting argumented
macro expansion.
(hif-string-concatenation, hif-stringify, hif-token-concat)
(hif-token-stringification, hif-token-concatenation): Stringify and
concatentation.
(hif-find-next-relevant): Fix comments
(hif-ifdef-to-endif, hif-looking-at-elif, hif-hide-line): Bug fix for
some cases involving #elif.
(hif-find-define, hif-add-new-defines): New functions for automatically
scanning of defined symbols.
(hide-ifdef-guts): Fix for auto defined symbol scanning.
(hide-ifdef-undef): Fix behavior to match CPP.
on the completed work posted on http://www.emacswiki.org/emacs/HideIfDef.
- Supporting argumented macro expansion.
- Stringification, tokenization and concatenation of strings and tokens.
- Add functions to find defines and parse argumented macros into a macro
tree containing macro name, formal parameters and macro body.
- On macro evaluation, macros will be applied with actual parameters and
then got expanded recursively.
- Apply review changes.
* lisp/progmodes/hideif.el (hif-string-to-number): Fix return value bug.
(hif-simple-token-only, hif-tokenize): Commentted in detail mainly for
performance enhancements.
(hif-parse-if-exp): Rename to `hif-parse-exp'. Enhanced for macro
expansion.
(hif-factor, hif-string-concatenation, intern-safe): Support string
concatenation and argumented macro expansion.
(hif-if-valid-identifier-p, hif-define-operator, hif-flatten)
(hif-expand-token-list, hif-get-argument-list, hif-define-macro)
(hif-delimit, hif-macro-supply-arguments, hif-invoke, hif-canonicalize)
(hif-canonicalize-tokens, hif-looking-at-elif, hif-place-macro-invocation)
(hif-parse-macro-arglist): Mostly new functions for supporting argumented
macro expansion.
(hif-string-concatenation, hif-stringify, hif-token-concat)
(hif-token-stringification, hif-token-concatenation): Stringify and
concatentation.
(hif-find-next-relevant): Fix comments
(hif-ifdef-to-endif, hif-looking-at-elif, hif-hide-line): Bug fix for
some cases involving #elif.
(hif-find-define, hif-add-new-defines): New functions for automatically
scanning of defined symbols.
(hide-ifdef-guts): Fix for auto defined symbol scanning.
(hide-ifdef-undef): Fix behavior to match CPP.
(hif-token-regexp, hif-tokenize): Use it.
(hif-mathify-binop): New macro.
(hif-plus, hif-minus, hif-notequal, hif-greater, hif-less)
(hif-greater-equal, hif-less-equal): Use it.
(hif-logior, hif-logand): New functions.
(hif-math): Accept | and & as well.
(hide-ifdef-shadow): New face.
(hide-ifdef-toggle-shadowing): New function to toggle between
shadowing and making code invisible.
(hide-ifdef-mode-submap): Add binding for
hide-ifdef-toggle-shadowing.
(hide-ifdef-mode-menu): Add entry for
hide-ifdef-toggle-shadowing.
(hide-ifdef-region-internal): Give new overlay hide-ifdef
property. Shadow text when hide-ifdef-shadow is non-nil.
(hif-show-ifdef-region): Remove overlays with hide-ifdef
property set.
(hif-hide-line): Use when instead of if.
(hide-ifdef-initially, hide-ifdef-read-only, hide-ifdef-lines):
Remove unneeded * from doc-strings.
(hide-ifdef-mode): Set line-move-ignore-invisible.
(hide-ifdef-region-internal): New function.
(hide-ifdef-region): Use it.
(hif-defined): Return an integer.
(hif-infix-to-prefix): Remove.
(hif-tokenize): Parse from the buffer rather than from a string.
Correctly tokenize integers. Use forward-comment.
(hif-expr): Use hif-or.
(hif-term): Use hif-and.
(hif-factor): Use hif-not. Handle numbers properly.
Don't require parenthesis around `defined's argument.
(hif-and, hif-or, hif-not): New funs.
(hif-canonicalize): Pass a region to hif-tokenize. Use hif-not.
(hif-hide-line): Don't hide the \n before the line.
(hif-possibly-hide): Correctly handle numeric evaluation results.
(hide-ifdef-mode-submap): Put the def in the defvar.
Use substitute-key-definition.
(hide-ifdef-mode): Use define-minor-mode.
(hif-outline-flag-region): Remove.
(hif-show-all): Define in terms of hif-show-ifdef-region.
(hif-after-revert-function): Rename from hif-before-revert-function.
(hide-ifdef-region, hif-show-ifdef-region): Use overlays.
(hif-tokenize): Use with-syntax-table.
(hif-make-range): Use `else' also for `else-p'.
(hif-range-else-p): Remove.
(hif-find-range): Simplify.
(hif-hide-line): Don't bother preserving buffer-modified-p.
(hide-ifdefs, show-ifdefs, hide-ifdef-block, show-ifdef-block):
Don't use selective-display and inhibit-read-only.