2003-06-14 Martin Schwenke * eiffel.el: This is an effort to fix the indentation of the "once" keyword. Removed context for once keyword from constant eif-control-flow-matching-keywords. New constant eif-once-non-indent-regexp. Removed special case of once keyword from constant eiffel-font-lock-keywords-2. (eif-calc-indent): added special case to notice eif-once-non-indent-regexp and call eif-calc-indent-non-keyword accordingly. (eif-calc-non-keyword-indent): exclude on eif-once-non-indent-regexp when looking at eif-indentation-keywords-regexp and include eif-once-non-indent-regexp in sanity check on catch-all. (eif-matching-kw): added special case for eif-once-non-indent-regexp on matching keyword search. This might not be the best way of implementing this, but it works... :-( * eiffel.el: Removed use of eiffel-comment-start-skip from constant eif-non-source-line, replaced with "--". Some weird interaction between the regexps was causing a lot of backtracking to occur in the first (looking-at ...) in function (eif-find-end-of-feature). * eiffel.el: Made constant eif-routine-begin-regexp much more explicit so it can cope with line breaks in particular places. Constant eiffel-font-lock-keywords-1 now uses just eif-routine-begin-regexp to find routine-names. 2003-06-07 Martin Schwenke * eiffel.el: eif-font-lock-keywords-2: added "once" to special case keywords, since the indentation regexp isn't suitable for font-locking. * eiffel.el: Fix some things reported by Berend de Boer... eiffel-font-lock-keywords-1, eiffel-font-lock-keywords-3: allow routine, variables and constants to contain uppercase letters after the first character. eif-font-lock-keywords-2: stop eif-major-variable-keywords overriding font-locking of other things, particularly comments. * eiffel.el: Changed SmartEiffel debugger -trace flag to -sedb at suggestion of Dominique Colnet. 2003-06-06 Martin Schwenke * eiffel.el: New constants eif-create-keyword, eif-create-keyword-regexp. Removed "create" from eif-misc-keywords. Added "create" to constant eif-all-keywords. (eif-calc-indent): added case for eif-create-keyword-regexp. (eif-calc-indent-non-keyword): simplified setting of continuation and id-colon variables; added case for class-level eif-create-keyword-regexp to case for eif-feature-indentation-keywords-regexp; added special case for minor eif-create-keyword-regexp near end - possible improvement: factor out last chunk of code (non-keyword case) and add a separate case for eif-create-keyword-regexp (to perhaps do special indentation for continued create statements). * eiffel.el (eif-calc-indent): Split function off second part of function into new function (eif-calc-indent-non-keyword), which does the indentation in the case where there is no indentation affecting keyword at the beginning of the current line. 2003-06-04 Martin Schwenke * eiffel.el: Last change broke handling of preprocessor keywords because the anchoring was too strong. Renamed function (eif-post-anchor) to (eif-word-anchor) and changed all uses (except those related to eif-preprocessor-keywords) correspondingly. (eif-post-anchor): New function - really only does post-anchoring! Add carefully anchored eif-preprocessor-keywords-regexp to eif-all-keywords-regexp and remove eif-preprocessor-keywords from value of constant eif-all-keywords (since it is only used otherwise for font-locking, and the preprocessor stuff is handled separately). New constant eiffel-comment-start-skip. Value of constant eif-non-source-line now uses eiffel-comment-start-skip and also eif-preprocessor-keywords-regexp to avoid repeating the same logic everywhere. In constant eiffel-font-lock-keywords-2, eif-preprocessor-keywords is now anchored via eif-post-anchor (and the submatch selector changes correspondingly from 3 to 2). (eif-calc-indent): remove reference to eif-preprocessor-keywords-regexp in backward scan for most recent source line. (eiffel-mode): use value of eiffel-comment-start-skip to set comment-start-skip. * eiffel.el (eif-post-anchor): Added word delimitting to regexp. Things like "document" were being matched as keywords ("do") if they were the first (non-whitespace) thing on a line. 2003-06-03 Martin Schwenke * eiffel.el: eiffel-font-lock-keywords-2: removed major keywords and changed comment for minor keywords to jusy saying "keywords"; added a comment before assertions about how special font-locking for them might be removed; rolled "not" in with "is", and added "class", so that "deferred class" works. * eiffel.el: Added comment about why indented preprocessor keywords don't get font-locked. (eif-calc-indent): minor bugfix eif-preprocessor-keywords -> eif-preprocessor-keywords-regexp. 2003-06-02 Martin Schwenke * eiffel.el: Push auto-mode-alist magic for XEmacs into the ;;;###autoload comment, as in latest XEmacs CVS version. * eiffel.el: New function (eif-manifest-array-common): factored out common code from (eif-manifest-array-indent, eif-manifest-array-start). * eiffel.el (eif-manifest-array-indent, eif-manifest-array-start): Skip over operators @<<, @>>, |<<, |>> instead of treating them as array opens/closes. * eiffel.el: Added "expanded" and "reference" to eif-misc-keywords. I'm now really starting to wonder if we need the major keywords font-locking at all. I think nearly everything is now done by the minor keywords font-locking. * eiffel.el: Most of these a related to warnings from the byte-compiler. Added require for imenu, and corresponding comment in header. Moved GNU SmartEiffel compilation stuff to below the font-lock stuff to avoid byte-compile warning. Moved utility functions to earlier in file and reordered then to avoid byte-compile warnings. (eif-calc-indent): removed (now) unused let variable "line-end". (eif-find-beginning-of-feature): removed unused let variable "routine-end". (eif-current-line-indent): removed surplus let construct and associated variables. (eif-manifest-array-indent, eif-manifest-array-start): removed unreferenced let variable "limit", and code that set it. (eif-imenu-create-index): removed unreferenced let variable "prefix" and removed historical code that set it; fixed typo prev-pos -> prevpos. * eiffel.el: New macro eif-preprocessor-indent-m, corresponding to variable eif-preprocessor-indent. Modified if-operator-eol-regexp to use eif-operator-keywords instead of hard-coding them. Removed constant eif-preprocessor-regexp, and replaced by eif-preprocessor-keywords and eif-preprocessor-keywords-regexp following new convention. Modified value of constant eif-all-keywords to include eif-preprocessor-keywords. Added font-locking for eif-preprocessor-keywords to eiffel-font-lock-keywords-2. Modified function (eif-calc-indent) to indent preprocessor keywords correctly. Removd variable eif-indent-preprocessor-directives-flag - the indentation of preprocessor directives is done unconditionally - this shouldn't cause any problems, since there shouldn't be a syntax clash, and conditional font-locking and indentation looks like it won't be terribly easy in this case. * eiffel.el: Removed constants eif-operator-keyword-list, eif-operator-combined-regexp and replaced with new constant eif-operator-keywords. Modified eif-operator-regexp to use eif-operator-keywords. New constant eif-misc-keywords. Updated documentation for constants eif-all-keywords, eif-all-keywords-regexp to indicate they don't really match *all* keywords. In variable eif-font-lock-keywords-2, added missing keywords (mostly via eif-misc-keywords), taking care to cope with adjacent/overlapping patterns. Modified comment about imenu support to reflect reality. * eiffel.el: Added 2003 to copyright and maintainer comments. Starting to add support for GOBO preprocessor directives: new variables/constants eif-preprocessor-indent, eif-preprocessor-regexp, eif-indent-preprocessor-directives-flag. Changed documentation and comment references from SmallEiffel to SmartEiffel. Moved font-lock support until after the constant definitions for indentation regexps and use those constant regexps in the font-lock code. Moved eif-non-id-char-regexp above other definitions, changed it to use syntax codes and actually use it. New functions: (eif-post-anchor, eif-anchor) used to add context to regexps. Factored out common stuff in keyword regexp constants, removed unnecessary parentheses, and removed context from any of the constants ending in "-keywords" - affected these constants (some of them removed/renamed, if no plain version was needed): eif-all-keywords, eif-all-keywords-regexp, eif-class-level-keywords, eif-inherit-level-keywords, eif-feature-level-keywords, eif-end-keyword-regexp, eif-end-matching-keywords, eif-control-flow-keywords, eif-control-flow-matching-keywords, eif-check-keywords, eif-check-matching-keywords, eif-rescue-keywords, eif-rescue-matching-keywords, eif-from-level-keywords, eif-if-or-inspect-level-keywords, eif-if-or-inspect-keywords, eif-indentation-keywords. New or modified constants: eif-class-level-keywords-regexp, eif-feature-level-keywords-regexp, eif-control-flow-matching-keywords-regexp, eif-end-matching-keywords-regexp, eif-check-keywords-regexp, eif-rescue-keywords-regexp, eif-rescue-matching-keywords-regexp, eif-from-level-keywords-regexp, eif-if-or-inspect-level-keywords-regexp, eif-indentation-keywords-regexp, eif-feature-indentation-keywords-regexp - these are parenthesised and have trailing (and sometimes other) context. Removed constants eif-white-space-regexp and eif-comment-line-regexp. Factored out stuff from eif-operator-regexp in new constants eif-operator-keyword-list, eif-operator-combined-regexp, New constants to replace inline constant strings (for clarity): eif-smarteiffel-guru-keywords, eif-major-variable-keywords, eif-standard-class-keywords. Font lock support is currently missing some keywords, particularly operators and the "create" keyword - more news as it comes to hand. New function (eif-skip-leading-whitespace) used in indentation code (eif-calc-indent, eif-current-line-indent) instead of repeating code using eif-white-space-regexp. (eif-calc-indent) uses comment-start-skip instead of eif-comment-line-regexp, and has various other changes relating to the "-keywords"/"-keywords-regexp" changes. Updated documentation for (eif-matching-kw). That's far too many changes for 1 commit. Now to fix what I've broken! 2003-04-25 Martin Schwenke * eiffel.el (eif-matching-indent): Removed function - duplicated functionality of eif-matching-kw, only used once. (eif-calc-indent): changed use of eif-matching-indent to eif-matching-kw, removed redundant word "the" from a couple of comments, since it made them wrap. (eif-matching-kw): simplied logic by using eif-re-search-backward, minor reformatting. 2003-03-29 Martin Schwenke * eiffel.el: Added "reference"/"reference class" keyword(s). 2003-01-24 Martin Schwenke * eiffel.el (eif-opening-regexp): added "debug". (eif-non-opening-regexp): new constant used to exclude things that eif-opening-regexp seems to want to match. (eif-do-regexp): put grouping parentheses in regexp to make it work properly. (eif-matching-line): modifications to use eif-non-opening-regexp. (eif-backward-sexp, eif-near-comment-p): use eif-peeking-backwards-at. (eif-peeking-backwards-at): renamed function from eif-peeking-backwards-at-char. (eif-find-end-of-feature): threw away custom logic, now use eif-matching-line. (eif-find-beginning-of-feature): bug fix for when attribute/constant is first feature of file. (eif-scan-for-features-after-point, eif-scan-for-features-before-point): removed functions... too inefficient. (eif-beginning-of-feature): reimplemented using iterative scanning with hack to do the counting carefully. (eif-end-of-feature): corrected code to find feature beginning to start at and also a subtle error in the argument to eif-beginning-of-feature. Whew! 2003-01-05 Martin Schwenke * eiffel.el (eif-routine-begin-regexp): added right bracket to stop it matching the end of certain routine declaration beginnings. * eiffel.el (eif-peeking-backwards-at-char): new function. (eif-find-end-of-feature): Added error checking, and check to make sure that keywords aren't in comment or string, or part of a longer variable name. 2002-12-12 Martin Schwenke * eiffel.el (eiffel-font-lock-keywords-1, eiffel-font-lock-keywords-2): Factor out the regexps for things that match feature beginnings and put them into the following new constants. (eif-routine-begin-regexp, eif-attribute-regexp, eif-constant-regexp, eif-probably-feature-regexp, eif-prefeature-regexp): New constants. (eif-control-flow-matching-keywords): Updated "once" part of regexp so that it doesn't match when followed by double quote. (eif-bof-p, eif-end-of-feature-forward-only): Removed function. (eif-re-search-forward, eif-re-search-backward): Added functions to search for regexp, but not stop inside a string or comment. (eif-find-end-of-feature): Now assumes starting at beginning of feature and now works for attributes and constants. (eif-scan-for-features-after-point, eif-scan-for-features-before-point): New functions. (eif-beginning-of-feature): Rewritten to use eif-scan-for-features-before-point and eif-scan-for-features-after-point. Not sure if this will perform adequately on slow machines. (eif-end-of-feature): Much simplified, uses new eif-beginning-of-feature. (eif-imenu-scan-for-names): Removed function. (eif-imenu-create-index): Reimplemented using eif-find-beginning-of-feature. 2002-12-05 Martin Schwenke * eiffel.el: Added hack for old XEmacs that didn't define font-lock-constant-face. (eif-imenu-add-menubar-by-position, eif-imenu-add-menubar-by-name, eif-imenu-create-index-by-name, eif-imenu-create-index-by-position): documentation cleanups. Added comment about how reimplement the imenu stuff so that it works more precisely involves a rewrite of eif-{beginning,end}-of-feature. 2002-09-25 Martin Schwenke * eiffel.el: Added imenu support, courstesy of Berend de Boer . 2002-09-24 Martin Schwenke * eiffel.el: Added comment about who contributed new font-lock code. * eiffel.el (auto-mode-alist): Add .e-files/eiffel-mode to to auto-mode-alist. This mostly because XEmacs wants to do it this way and I can't be bothered maintaining differences. * eiffel.el: New font-lock stuff from Karl Landström , plus a few changes from Cyril's font-lock code put into level 4. 2002-09-13 Martin Schwenke * eiffel.el (eiffel-font-lock-keywords): Updates from Cyril Adrian , with some minor changes by me. (eif-debug): Reenabled the wait loop and added a "known bugs" entry about it hanging under XEmacs 21.4.[89] in some cases. 2002-06-11 Martin Schwenke * eiffel.el (eif-root-class): New variable, now separate from eif-compile-target. (eif-debug-target, eif-debug-command: New variables. (eif-debug): New function, still a bit buggy on XEmacs, although this could be an XEmacs bug. (eif-compile-prompt, eif-compile-internal, eif-run-internal): New functions, separated from eif-compile, eif-run to support eif-debug. (eif-compile, eif-run): Factored out some code. (eif-add-menu, eiffel-mode): Added menu/key bindings for eif-debug. 2002-06-07 Martin Schwenke * eiffel.el: eif-end-matching-keywords now insists that "once" is followed by whitespace and that the next character is not a double-quote. This fixes indentation and eif-end-of-feature bugs. It also works for SmallEiffel's once manifest strings. * eiffel.el: - Changed name of file to eiffel.el - fixed various comments and the provide. - Remove D. Colnet from copyright. A recent exchange confirmed that I haven't merged any of his changes. - Clarified eif-short bug is under *GNU* Emacs 19.34. 2002-05-22 Martin Schwenke * eiffel-mode.el: - Put Bob Weiner in the copyright section. I seem to have missed that earlier. - Added a comment about where to get new versions. - Attempt to fix indentation following "once manifest strings". This might not be a great fix... 2002-04-15 Martin Schwenke * eiffel-mode.el: An attempt to improve Chris's overall happiness... :-) 2002-04-11 Martin Schwenke * eiffel-mode.el: - OK, Christoph Spiel finally convinced me that eif-in-comment-p should do what its name says. Redefined it using parse-partial-sexp and added eif-on-comment-delimiter-p and eif-near-comment-p. Use eif-near-comment-p to enable eif-feature-quote in the menu. - Fixed eif-not-in-comment-or-quoted-string-p. 2002-04-01 Martin Schwenke * eiffel-mode.el: Revert definition of eif-in-comment-p. In most places it doesn't matter, but when at the beginning of a line in the middle of a multi-line comment, you're in a comment! This is important for the binding of eif-fill-paragraph and simply doesn't matter anywhere else... * eiffel-mode.el: - Took Martin Schwenke out of copyright, since it has been assigned to FSF. - Factored out eif-in-comment-or-quoted-string and eif-not-in-comment-or-quoted-string-p. - Experimental definition of eif-in-comment-p that uses parse-partial-sexp. 2002-02-28 Martin Schwenke * eiffel-mode.el: Fixed comment-start-skip to handle cramped and hidden comment. Also some documentation and comment fixes. Thanks to Christoph Spiel . 2002-02-26 Martin Schwenke * eiffel-mode.el: Added variable eif-fill-max-save to control gross hack that restores buffer modification state when eif-fill-paragraph doesn't modify the paragraph. * eiffel-mode.el: - comment-start-skip can now have TABs after the -- as well as spaces. - Added horrible hack to eif-fill-paragraph that stops the buffer being marked as modified when the fill operation does nothing. 2002-01-14 Martin Schwenke * eiffel-mode.el: Changes to eif-{beginning,end}-of-feature and related code by Christoph Spiel plus some more of my own hacks on the same code, including a complete rewrite of eif-in-comment-p. * eiffel-mode.el: More hacking on eif-{beginning,end}-of-feature and related functions. 2002-01-07 Martin Schwenke * eiffel-mode.el: - Whitespace cleanups. - Comment fixes, mostly courtesy of Christoph Spiel . - Loosened eif-end-keyword-regexp to match at beginning or end of line. - Changed eif-beginning-of-feature, added eif-end-of-feature and eif-narrow-to-feature, and added keybindings. Thanks to Christoph Spiel . - Began hacking eif-beginning-of-feature and eif-end-of-feature so that they almost work like eif-beginning-of-defun and eif-end-of-defun. Nearly there: time to completely rewrite eif-end-of-feature! :-) 2002-01-06 Martin Schwenke * eiffel-mode.el: - Added variable eif-set-tab-width-flag, with default value t. When non-nil, entry to eiffel-mode sets tab-width to eif-indent-increment. Thanks to Cyril Adrian . - Tightened up value added to compilation-error-regexp-alist so that it only matches lines ending in .[Ee]. Thanks to Cyril Adrian . * eiffel-mode.el: Added extra indentation for a string on a line by itself. Will make this optional if anyone complains! :-) 2001-11-18 Martin Schwenke * eiffel-mode.el: Comment fix. * eiffel-mode.el: Added variables eif-string-continuation-indent, eif-extra-string-continuation-indent and eif-indent-string-continuations-relatively-flag that can be used to change the indentation of continued strings. Andreas Leitner wanted this for GOBO. * eiffel-mode.el: Removed eif-newline and eif-indent-and-newline. Use newline-and-indent and reindent-then-newline-and-indent instead. 2001-11-05 Martin Schwenke * eiffel-mode.el: First lot of changes merged from Cyril Adrian's eiffel.el: - Moved the font-lock code (made merging easier). - Made it clearer that GNU Eiffel is GNU SmallEiffel. I would like to change the name of the variable to eif-use-gnu-smalleiffel but, since this is a "API change" for users, I'm reluctant to do that. In fact I'd like to change all the user variables to start with "eiffel-"... maybe... - Added "agent", "debug" and "separate" minor keywords to eiffel-font-lock-keywords. - Added "separate class" to eif-class-level keywords. - Added "separate" to eif-feature-level-keywords and eif-indentation-keywords-regexp. - Added "debug" and "separate" to eif-end-matching-words. - Cleaned up character classes that had literal TABs, changing them to us "\t" instead. - Added "implies" to eif-operator-regexp and eif-operator-eol-regexp. 2001-02-27 martin * eiffel-mode.el: Added 2001 to the copyright and author info. * eiffel-mode.el: Added "create" and "precursor" keywords. Thanks to Berend de Boer . 2001-02-12 martin * eiffel-mode.el: Changed e-mail address. 2000-08-14 Martin Schwenke * eiffel-mode.el: Only call make-local-variable on compilation-error-screen-columns if it isn't already buffer local. This avoids the vague possibility of problems for Emacs > 20.7 where this variable is already buffer local. 2000-08-07 Martin Schwenke * eiffel-mode.el: - Moved version string to a constant. - Added eif-compilation-mode-hook and used it in eif-compile. - Changed value that gets added to compilation-error-regexp-list to fix buglet reported by Andreas . 2000-06-12 Martin Schwenke * eiffel-mode.el: Most of these changes made after reading Emacs Lisp coding guidelines. - Added "Requires:" header to indicate dependencies. - Moved require statements to beginning. - Added eif-customize function, mostly to refer to it in eiffel-mode docstring. - Changed calls to next-line and previous-line to be to forward-line. - Made setup of eiffel-mode-map comply with guidelines. - Removed explicit binding for TAB. This happens implicitly via the call to the value of indent-line-function. - Improved docstring for eiffel-mode. - Added menu item for eif-customize. - Added local setting of font-lock-defaults to eiffel-mode. * eiffel-mode.el: Minor cleanups; documentation and comment cleanups. * eiffel-mode.el: - Comment fix. - Fixed eif-feature-quote to work even when at the beginning of a feature. - Got rid of abbrev-table stuff. It wasn't used. - Moved menu stuff to its own function. - Neatened up the large setq in `eiffel-mode'. * eiffel-mode.el: Changed my e-mail address to a Linuxcare one. Added Maintainer line. Removed crud from beginning of commentary. * eiffel-mode.el: Changed eif-compile to use compile-internal to avoid stupid buffer saving questions. * eiffel-mode.el: Fixed eif-in-comment-p. Made eif-compile partially XEmacsx friendly. * eiffel-mode.el: Added automatic detection of "se-compile" for Debian GNU/Linux. 2000-06-11 Martin Schwenke * eiffel-mode.el: Subtle change to menu setup for XEmacs compatibility. * eiffel-mode.el: Made font-lock-defaults-alist stuff optional. 2000-05-24 Martin Schwenke * eiffel-mode.el: Added 2000 to year range for authors. * eiffel-mode.el: Updated version number to 2.0 to reflect major update. 2000-05-18 Martin Schwenke * eiffel-mode.el: Cleaned up eiffel-mode-map. * eiffel-mode.el: Whitespace cleanups. * eiffel-mode.el: Added customization groups and used them. Modified documentation string for eif-compile-command to give a hint for Debian GNU/Linux users! * eiffel-mode.el: Simplified some nil assignments in let statements. Removed a redundant (t nil) case in a cond statement. * eiffel-mode.el: Simplified eif-in-quoted-string-p. * eiffel-mode.el: Documentation and layout fixes. Minor code cleanups. 2000-03-27 Martin Schwenke * eiffel-mode.el: Special Win32 case for setting of eif-run-command in eif-run. Thanks to Lukas Tan . * eiffel-mode.el: *** empty log message ***