]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/icon.el
rgrep ignored file tweak
[gnu-emacs] / lisp / progmodes / icon.el
index d9df015ea0d2a06c2291919a3dcb68ab304c1d95..205b226160aa1fb0c8f8a2b2b4fb83a33e27c446 100644 (file)
@@ -1,7 +1,6 @@
 ;;; icon.el --- mode for editing Icon code
 
 ;;; icon.el --- mode for editing Icon code
 
-;; Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2012  Free Software Foundation, Inc.
 
 ;; Author: Chris Smith <csmith@convex.com>
 ;; Created: 15 Feb 89
 
 ;; Author: Chris Smith <csmith@convex.com>
 ;; Created: 15 Feb 89
@@ -9,10 +8,10 @@
 
 ;; This file is part of GNU Emacs.
 
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
   :group 'languages)
 
 (defcustom icon-indent-level 4
   :group 'languages)
 
 (defcustom icon-indent-level 4
-  "*Indentation of Icon statements with respect to containing block."
+  "Indentation of Icon statements with respect to containing block."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-brace-imaginary-offset 0
   :type 'integer
   :group 'icon)
 
 (defcustom icon-brace-imaginary-offset 0
-  "*Imagined indentation of a Icon open brace that actually follows a statement."
+  "Imagined indentation of a Icon open brace that actually follows a statement."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-brace-offset 0
   :type 'integer
   :group 'icon)
 
 (defcustom icon-brace-offset 0
-  "*Extra indentation for braces, compared with other text in same context."
+  "Extra indentation for braces, compared with other text in same context."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-continued-statement-offset 4
   :type 'integer
   :group 'icon)
 
 (defcustom icon-continued-statement-offset 4
-  "*Extra indent for Icon lines not starting new statements."
+  "Extra indent for Icon lines not starting new statements."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-continued-brace-offset 0
   :type 'integer
   :group 'icon)
 
 (defcustom icon-continued-brace-offset 0
-  "*Extra indent for Icon substatements that start with open-braces.
+  "Extra indent for Icon substatements that start with open-braces.
 This is in addition to `icon-continued-statement-offset'."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-auto-newline nil
 This is in addition to `icon-continued-statement-offset'."
   :type 'integer
   :group 'icon)
 
 (defcustom icon-auto-newline nil
-  "*Non-nil means automatically newline before and after braces Icon code.
+  "Non-nil means automatically newline before and after braces Icon code.
 This applies when braces are inserted."
   :type 'boolean
   :group 'icon)
 
 (defcustom icon-tab-always-indent t
 This applies when braces are inserted."
   :type 'boolean
   :group 'icon)
 
 (defcustom icon-tab-always-indent t
-  "*Non-nil means TAB in Icon mode should always reindent the current line.
+  "Non-nil means TAB in Icon mode should always reindent the current line.
 It will then reindent, regardless of where in the line point is
 when the TAB command is used."
   :type 'boolean
 It will then reindent, regardless of where in the line point is
 when the TAB command is used."
   :type 'boolean
@@ -133,7 +130,7 @@ when the TAB command is used."
 
 \f
 ;;;###autoload
 
 \f
 ;;;###autoload
-(defun icon-mode ()
+(define-derived-mode icon-mode prog-mode "Icon"
   "Major mode for editing Icon code.
 Expression and list commands understand all Icon brackets.
 Tab indents for Icon code.
   "Major mode for editing Icon code.
 Expression and list commands understand all Icon brackets.
 Tab indents for Icon code.
@@ -165,49 +162,33 @@ Variables controlling indentation style:
 
 Turning on Icon mode calls the value of the variable `icon-mode-hook'
 with no args, if that value is non-nil."
 
 Turning on Icon mode calls the value of the variable `icon-mode-hook'
 with no args, if that value is non-nil."
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map icon-mode-map)
-  (setq major-mode 'icon-mode)
-  (setq mode-name "Icon")
-  (setq local-abbrev-table icon-mode-abbrev-table)
-  (set-syntax-table icon-mode-syntax-table)
-  (make-local-variable 'paragraph-start)
-  (setq paragraph-start (concat "$\\|" page-delimiter))
-  (make-local-variable 'paragraph-separate)
-  (setq paragraph-separate paragraph-start)
-  (make-local-variable 'indent-line-function)
-  (setq indent-line-function 'icon-indent-line)
-  (make-local-variable 'require-final-newline)
-  (setq require-final-newline mode-require-final-newline)
-  (make-local-variable 'comment-start)
-  (setq comment-start "# ")
-  (make-local-variable 'comment-end)
-  (setq comment-end "")
-  (make-local-variable 'comment-start-skip)
-  (setq comment-start-skip "# *")
-  (make-local-variable 'comment-indent-function)
-  (setq comment-indent-function 'icon-comment-indent)
+  :abbrev-table icon-mode-abbrev-table
+  (set (make-local-variable 'paragraph-start) (concat "$\\|" page-delimiter))
+  (set (make-local-variable 'paragraph-separate) paragraph-start)
+  (set (make-local-variable 'indent-line-function) #'icon-indent-line)
+  (set (make-local-variable 'comment-start) "# ")
+  (set (make-local-variable 'comment-end) "")
+  (set (make-local-variable 'comment-start-skip) "# *")
+  (set (make-local-variable 'comment-indent-function) 'icon-comment-indent)
   (set (make-local-variable 'indent-line-function) 'icon-indent-line)
   ;; font-lock support
   (set (make-local-variable 'indent-line-function) 'icon-indent-line)
   ;; font-lock support
-  (setq font-lock-defaults
-       '((icon-font-lock-keywords
-          icon-font-lock-keywords-1 icon-font-lock-keywords-2)
-         nil nil ((?_ . "w")) beginning-of-defun
-         ;; Obsoleted by Emacs 19.35 parse-partial-sexp's COMMENTSTOP.
-         ;(font-lock-comment-start-regexp . "#")
-         (font-lock-mark-block-function . mark-defun)))
+  (set (make-local-variable 'font-lock-defaults)
+       '((icon-font-lock-keywords
+          icon-font-lock-keywords-1 icon-font-lock-keywords-2)
+         nil nil ((?_ . "w")) beginning-of-defun
+         ;; Obsoleted by Emacs 19.35 parse-partial-sexp's COMMENTSTOP.
+         ;;(font-lock-comment-start-regexp . "#")
+         (font-lock-mark-block-function . mark-defun)))
   ;; imenu support
   ;; imenu support
-  (make-local-variable 'imenu-generic-expression)
-  (setq imenu-generic-expression icon-imenu-generic-expression)
+  (set (make-local-variable 'imenu-generic-expression)
+       icon-imenu-generic-expression)
   ;; hideshow support
   ;; we start from the assertion that `hs-special-modes-alist' is autoloaded.
   (unless (assq 'icon-mode hs-special-modes-alist)
     (setq hs-special-modes-alist
          (cons '(icon-mode  "\\<procedure\\>" "\\<end\\>" nil
                             icon-forward-sexp-function)
   ;; hideshow support
   ;; we start from the assertion that `hs-special-modes-alist' is autoloaded.
   (unless (assq 'icon-mode hs-special-modes-alist)
     (setq hs-special-modes-alist
          (cons '(icon-mode  "\\<procedure\\>" "\\<end\\>" nil
                             icon-forward-sexp-function)
-               hs-special-modes-alist)))
-  (run-mode-hooks 'icon-mode-hook))
+               hs-special-modes-alist))))
 \f
 ;; This is used by indent-for-comment to decide how much to
 ;; indent a comment in Icon code based on its context.
 \f
 ;; This is used by indent-for-comment to decide how much to
 ;; indent a comment in Icon code based on its context.
@@ -227,7 +208,7 @@ with no args, if that value is non-nil."
                     (progn (icon-indent-line) (newline) t)
                   nil)))
        (progn
                     (progn (icon-indent-line) (newline) t)
                   nil)))
        (progn
-         (insert last-command-char)
+         (insert last-command-event)
          (icon-indent-line)
          (if icon-auto-newline
              (progn
          (icon-indent-line)
          (if icon-auto-newline
              (progn
@@ -503,9 +484,9 @@ Returns nil if line starts inside a string, t if in a comment."
   (let ((indent-stack (list nil))
        (contain-stack (list (point)))
        (case-fold-search nil)
   (let ((indent-stack (list nil))
        (contain-stack (list (point)))
        (case-fold-search nil)
-       restart outer-loop-done inner-loop-done state ostate
-       this-indent last-sexp last-depth
-       at-else at-brace at-do
+       outer-loop-done inner-loop-done state ostate
+       this-indent last-depth
+       at-else at-brace
        (opoint (point))
        (next-depth 0))
     (save-excursion
        (opoint (point))
        (next-depth 0))
     (save-excursion
@@ -525,9 +506,6 @@ Returns nil if line starts inside a string, t if in a comment."
          (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
                                          nil nil state))
          (setq next-depth (car state))
          (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
                                          nil nil state))
          (setq next-depth (car state))
-         (if (and (car (cdr (cdr state)))
-                  (>= (car (cdr (cdr state))) 0))
-             (setq last-sexp (car (cdr (cdr state)))))
          (if (or (nth 4 ostate))
              (icon-indent-line))
          (if (or (nth 3 state))
          (if (or (nth 4 ostate))
              (icon-indent-line))
          (if (or (nth 3 state))
@@ -537,8 +515,6 @@ Returns nil if line starts inside a string, t if in a comment."
            (setq outer-loop-done t))
        (if outer-loop-done
            nil
            (setq outer-loop-done t))
        (if outer-loop-done
            nil
-         (if (/= last-depth next-depth)
-             (setq last-sexp nil))
          (while (> last-depth next-depth)
            (setq indent-stack (cdr indent-stack)
                  contain-stack (cdr contain-stack)
          (while (> last-depth next-depth)
            (setq indent-stack (cdr indent-stack)
                  contain-stack (cdr contain-stack)
@@ -603,7 +579,7 @@ Returns nil if line starts inside a string, t if in a comment."
                  (indent-to this-indent)))
            ;; Indent any comment following the text.
            (or (looking-at comment-start-skip)
                  (indent-to this-indent)))
            ;; Indent any comment following the text.
            (or (looking-at comment-start-skip)
-               (if (re-search-forward comment-start-skip (save-excursion (end-of-line) (point)) t)
+               (if (re-search-forward comment-start-skip (line-end-position) t)
                    (progn (indent-for-comment) (beginning-of-line))))))))))
 
 (defconst icon-font-lock-keywords-1
                    (progn (indent-for-comment) (beginning-of-line))))))))))
 
 (defconst icon-font-lock-keywords-1
@@ -689,5 +665,4 @@ Returns nil if line starts inside a string, t if in a comment."
 
 (provide 'icon)
 
 
 (provide 'icon)
 
-;; arch-tag: 8abf8c99-e7df-44af-a58f-ef5ed2ee52cb
 ;;; icon.el ends here
 ;;; icon.el ends here