annotate lisp/progmodes/icon.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents f2892faa87d4
children 18a818a2ee7c 01137c1fdbe9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
660
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 210
diff changeset
1 ;;; icon.el --- mode for editing Icon code
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 210
diff changeset
2
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
3 ;; Copyright (C) 1989 Free Software Foundation, Inc.
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
12910
8aa95606db04 Define user options with defvar, not defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10874
diff changeset
5 ;; Author: Chris Smith <csmith@convex.com>
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
6 ;; Created: 15 Feb 89
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7 ;; Keywords: languages
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12910
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12910
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12910
diff changeset
24 ;; Boston, MA 02111-1307, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
26 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
27
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
28 ;; A major mode for editing the Icon programming language.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
29
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 660
diff changeset
30 ;;; Code:
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32 (defvar icon-mode-abbrev-table nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
33 "Abbrev table in use in Icon-mode buffers.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 (define-abbrev-table 'icon-mode-abbrev-table ())
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 (defvar icon-mode-map ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 "Keymap used in Icon mode.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 (if icon-mode-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 ()
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
40 (let ((map (make-sparse-keymap "Icon")))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
41 (setq icon-mode-map (make-sparse-keymap))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
42 (define-key icon-mode-map "{" 'electric-icon-brace)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
43 (define-key icon-mode-map "}" 'electric-icon-brace)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
44 (define-key icon-mode-map "\e\C-h" 'mark-icon-function)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
45 (define-key icon-mode-map "\e\C-a" 'beginning-of-icon-defun)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
46 (define-key icon-mode-map "\e\C-e" 'end-of-icon-defun)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
47 (define-key icon-mode-map "\e\C-q" 'indent-icon-exp)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
48 (define-key icon-mode-map "\177" 'backward-delete-char-untabify)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
49
32299
4888d3b1cf29 (icon-mode-map): Add name to menu-bar keymap.
Dave Love <fx@gnu.org>
parents: 32155
diff changeset
50 (define-key icon-mode-map [menu-bar] (make-sparse-keymap "Icon"))
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
51 (define-key icon-mode-map [menu-bar icon]
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
52 (cons "Icon" map))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
53 (define-key map [beginning-of-icon-defun] '("Beginning of function" . beginning-of-icon-defun))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
54 (define-key map [end-of-icon-defun] '("End of function" . end-of-icon-defun))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
55 (define-key map [comment-region] '("Comment Out Region" . comment-region))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
56 (define-key map [indent-region] '("Indent Region" . indent-region))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
57 (define-key map [indent-line] '("Indent Line" . icon-indent-command))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
58 (put 'eval-region 'menu-enable 'mark-active)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
59 (put 'comment-region 'menu-enable 'mark-active)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
60 (put 'indent-region 'menu-enable 'mark-active)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 (defvar icon-mode-syntax-table nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63 "Syntax table in use in Icon-mode buffers.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 (if icon-mode-syntax-table
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67 (setq icon-mode-syntax-table (make-syntax-table))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 (modify-syntax-entry ?\\ "\\" icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 (modify-syntax-entry ?# "<" icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 (modify-syntax-entry ?\n ">" icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 (modify-syntax-entry ?$ "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 (modify-syntax-entry ?/ "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 (modify-syntax-entry ?* "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 (modify-syntax-entry ?+ "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 (modify-syntax-entry ?- "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 (modify-syntax-entry ?= "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77 (modify-syntax-entry ?% "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78 (modify-syntax-entry ?< "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 (modify-syntax-entry ?> "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 (modify-syntax-entry ?& "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 (modify-syntax-entry ?| "." icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 (modify-syntax-entry ?\' "\"" icon-mode-syntax-table))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83
17633
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
84 (defgroup icon nil
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
85 "Mode for editing Icon code."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
86 :group 'languages)
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
87
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
88 (defcustom icon-indent-level 4
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
89 "*Indentation of Icon statements with respect to containing block."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
90 :type 'integer
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
91 :group 'icon)
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
92
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
93 (defcustom icon-brace-imaginary-offset 0
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
94 "*Imagined indentation of a Icon open brace that actually follows a statement."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
95 :type 'integer
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
96 :group 'icon)
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
97
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
98 (defcustom icon-brace-offset 0
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
99 "*Extra indentation for braces, compared with other text in same context."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
100 :type 'integer
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
101 :group 'icon)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102
17633
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
103 (defcustom icon-continued-statement-offset 4
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
104 "*Extra indent for Icon lines not starting new statements."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
105 :type 'integer
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
106 :group 'icon)
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
107
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
108 (defcustom icon-continued-brace-offset 0
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
109 "*Extra indent for Icon substatements that start with open-braces.
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
110 This is in addition to `icon-continued-statement-offset'."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
111 :type 'integer
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
112 :group 'icon)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113
17633
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
114 (defcustom icon-auto-newline nil
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
115 "*Non-nil means automatically newline before and after braces Icon code.
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
116 This applies when braces are inserted."
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
117 :type 'boolean
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
118 :group 'icon)
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
119
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
120 (defcustom icon-tab-always-indent t
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
121 "*Non-nil means TAB in Icon mode should always reindent the current line.
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
122 It will then reindent, regardless of where in the line point is
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
123 when the TAB command is used."
19834
63f793f84d0f (icon-tab-always-indent): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 18381
diff changeset
124 :type 'boolean
17633
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
125 :group 'icon)
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
126
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
127 (defvar icon-imenu-generic-expression
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
128 '((nil "^[ \t]*procedure[ \t]+\\(\\sw+\\)[ \t]*(" 1))
17633
3b746ca2bca9 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17266
diff changeset
129 "Imenu expression for Icon mode. See `imenu-generic-expression'.")
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
130
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
131
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132
9055
2e089bdec449 (icon-mode): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
133 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 (defun icon-mode ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 "Major mode for editing Icon code.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 Expression and list commands understand all Icon brackets.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 Tab indents for Icon code.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 Paragraphs are separated by blank lines only.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 Delete converts tabs to spaces as it moves back.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 \\{icon-mode-map}
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 Variables controlling indentation style:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 icon-tab-always-indent
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
143 Non-nil means TAB in Icon mode should always reindent the current line,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144 regardless of where in the line point is when the TAB command is used.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 icon-auto-newline
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146 Non-nil means automatically newline before and after braces
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 inserted in Icon code.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 icon-indent-level
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149 Indentation of Icon statements within surrounding block.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 The surrounding block's indentation is the indentation
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 of the line on which the open-brace appears.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 icon-continued-statement-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153 Extra indentation given to a substatement, such as the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 then-clause of an if or body of a while.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 icon-continued-brace-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 Extra indentation given to a brace that starts a substatement.
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
157 This is in addition to `icon-continued-statement-offset'.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158 icon-brace-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 Extra indentation for line if it starts with an open brace.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160 icon-brace-imaginary-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161 An open brace following other text is treated as if it were
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162 this far to the right of the start of its line.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
164 Turning on Icon mode calls the value of the variable `icon-mode-hook'
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
165 with no args, if that value is non-nil."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167 (kill-all-local-variables)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 (use-local-map icon-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169 (setq major-mode 'icon-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
170 (setq mode-name "Icon")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 (setq local-abbrev-table icon-mode-abbrev-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 (set-syntax-table icon-mode-syntax-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 (make-local-variable 'paragraph-start)
10874
7ad2cc4e9963 (icon-mode): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 9055
diff changeset
174 (setq paragraph-start (concat "$\\|" page-delimiter))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175 (make-local-variable 'paragraph-separate)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 (setq paragraph-separate paragraph-start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 (make-local-variable 'indent-line-function)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 (setq indent-line-function 'icon-indent-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179 (make-local-variable 'require-final-newline)
59245
11d2d878c92f (icon-mode): Use mode-require-final-newline.
Richard M. Stallman <rms@gnu.org>
parents: 54014
diff changeset
180 (setq require-final-newline mode-require-final-newline)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 (make-local-variable 'comment-start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 (setq comment-start "# ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 (make-local-variable 'comment-end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 (setq comment-end "")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 (make-local-variable 'comment-start-skip)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 (setq comment-start-skip "# *")
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
187 (make-local-variable 'comment-indent-function)
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
188 (setq comment-indent-function 'icon-comment-indent)
33200
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
189 (set (make-local-variable 'indent-line-function) 'icon-indent-line)
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
190 ;; font-lock support
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
191 (setq font-lock-defaults
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
192 '((icon-font-lock-keywords
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
193 icon-font-lock-keywords-1 icon-font-lock-keywords-2)
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
194 nil nil ((?_ . "w")) beginning-of-defun
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
195 ;; Obsoleted by Emacs 19.35 parse-partial-sexp's COMMENTSTOP.
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
196 ;(font-lock-comment-start-regexp . "#")
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
197 (font-lock-mark-block-function . mark-defun)))
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
198 ;; imenu support
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
199 (make-local-variable 'imenu-generic-expression)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
200 (setq imenu-generic-expression icon-imenu-generic-expression)
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
201 ;; hideshow support
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
202 ;; we start from the assertion that `hs-special-modes-alist' is autoloaded.
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
203 (unless (assq 'icon-mode hs-special-modes-alist)
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
204 (setq hs-special-modes-alist
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
205 (cons '(icon-mode "\\<procedure\\>" "\\<end\\>" nil
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
206 icon-forward-sexp-function)
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
207 hs-special-modes-alist)))
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 59245
diff changeset
208 (run-mode-hooks 'icon-mode-hook))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
210 ;; This is used by indent-for-comment to decide how much to
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
211 ;; indent a comment in Icon code based on its context.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 (defun icon-comment-indent ()
33200
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
213 (if (looking-at "^#") 0 comment-column))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 (defun electric-icon-brace (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216 "Insert character and correct line's indentation."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218 (let (insertpos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 (if (and (not arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 (eolp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 (or (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 (skip-chars-backward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 (bolp))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 (if icon-auto-newline
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
225 (progn (icon-indent-line) (newline) t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 nil)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
228 (insert last-command-char)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229 (icon-indent-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 (if icon-auto-newline
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
231 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 (newline)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233 ;; (newline) may have done auto-fill
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 (setq insertpos (- (point) 2))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
235 (icon-indent-line)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237 (if insertpos (goto-char (1+ insertpos)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238 (delete-char -1))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 (if insertpos
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 (goto-char insertpos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242 (self-insert-command (prefix-numeric-value arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
243 (self-insert-command (prefix-numeric-value arg)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 (defun icon-indent-command (&optional whole-exp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246 "Indent current line as Icon code, or in some cases insert a tab character.
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
247 If `icon-tab-always-indent' is non-nil (the default), always indent current
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
248 line. Otherwise, indent the current line only if point is at the left margin
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249 or in the line's indentation; otherwise insert a tab.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
251 A numeric argument, regardless of its value, means indent rigidly all the
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
252 lines of the expression starting after point so that this line becomes
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
253 properly indented. The relative indentation among the lines of the
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
254 expression are preserved."
54014
6296b1d1ae51 * net/telnet.el (telnet-interrupt-subjob): Move doc string to the correct place.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
255 (interactive "P")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
256 (if whole-exp
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257 ;; If arg, always indent this line as Icon
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 ;; and shift remaining lines of expression the same amount.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 (let ((shift-amt (icon-indent-line))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 beg end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
262 (if icon-tab-always-indent
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 (beginning-of-line))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264 (setq beg (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
265 (forward-sexp 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
266 (setq end (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
267 (goto-char beg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
268 (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
269 (setq beg (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
270 (if (> end beg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
271 (indent-code-rigidly beg end shift-amt "#")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 (if (and (not icon-tab-always-indent)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 (skip-chars-backward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
275 (not (bolp))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
276 (insert-tab)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 (icon-indent-line))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
278
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
279 (defun icon-indent-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
280 "Indent current line as Icon code.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281 Return the amount the indentation changed by."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
282 (let ((indent (calculate-icon-indent nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
283 beg shift-amt
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
284 (case-fold-search nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
285 (pos (- (point-max) (point))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
286 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
287 (setq beg (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
288 (cond ((eq indent nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289 (setq indent (current-indentation)))
30947
3e2633195694 (icon-indent-line)
Gerd Moellmann <gerd@gnu.org>
parents: 20953
diff changeset
290 ((looking-at "^#")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291 (setq indent 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
292 (t
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
293 (skip-chars-forward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
294 (if (listp indent) (setq indent (car indent)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
295 (cond ((and (looking-at "else\\b")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
296 (not (looking-at "else\\s_")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
297 (setq indent (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
298 (icon-backward-to-start-of-if)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299 (current-indentation))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
300 ((or (= (following-char) ?})
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 (looking-at "end\\b"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 (setq indent (- indent icon-indent-level)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 ((= (following-char) ?{)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
304 (setq indent (+ indent icon-brace-offset))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
305 (skip-chars-forward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
306 (setq shift-amt (- indent (current-column)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
307 (if (zerop shift-amt)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
308 (if (> (- (point-max) pos) (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309 (goto-char (- (point-max) pos)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
310 (delete-region beg (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
311 (indent-to indent)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 ;; If initial point was within line's indentation,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
313 ;; position after the indentation. Else stay at same point in text.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 (if (> (- (point-max) pos) (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
315 (goto-char (- (point-max) pos))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
316 shift-amt))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
318 (defun calculate-icon-indent (&optional parse-start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 "Return appropriate indentation for current line as Icon code.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
320 In usual case returns an integer: the column to indent to.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
321 Returns nil if line starts inside a string, t if in a comment."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
322 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
323 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
324 (let ((indent-point (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
325 (case-fold-search nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
326 state
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
327 containing-sexp
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
328 toplevel)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
329 (if parse-start
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
330 (goto-char parse-start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
331 (setq toplevel (beginning-of-icon-defun)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
332 (while (< (point) indent-point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
333 (setq parse-start (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
334 (setq state (parse-partial-sexp (point) indent-point 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
335 (setq containing-sexp (car (cdr state))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
336 (cond ((or (nth 3 state) (nth 4 state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
337 ;; return nil or t if should not change this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
338 (nth 4 state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
339 ((and containing-sexp
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
340 (/= (char-after containing-sexp) ?{))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
341 ;; line is expression, not statement:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
342 ;; indent to just after the surrounding open.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
343 (goto-char (1+ containing-sexp))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
344 (current-column))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
345 (t
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
346 (if toplevel
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
347 ;; Outside any procedures.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
348 (progn (icon-backward-to-noncomment (point-min))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
349 (if (icon-is-continuation-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
350 icon-continued-statement-offset 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
351 ;; Statement level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
352 (if (null containing-sexp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
353 (progn (beginning-of-icon-defun)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
354 (setq containing-sexp (point))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
355 (goto-char indent-point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
356 ;; Is it a continuation or a new statement?
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
357 ;; Find previous non-comment character.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
358 (icon-backward-to-noncomment containing-sexp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
359 ;; Now we get the answer.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
360 (if (icon-is-continuation-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361 ;; This line is continuation of preceding line's statement;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
362 ;; indent icon-continued-statement-offset more than the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
363 ;; first line of the statement.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
364 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
365 (icon-backward-to-start-of-continued-exp containing-sexp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
366 (+ icon-continued-statement-offset (current-column)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
367 (if (save-excursion (goto-char indent-point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368 (skip-chars-forward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
369 (eq (following-char) ?{))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
370 icon-continued-brace-offset 0)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 ;; This line starts a new statement.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372 ;; Position following last unclosed open.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373 (goto-char containing-sexp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374 ;; Is line first statement after an open-brace?
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
375 (or
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376 ;; If no, find that first statement and indent like it.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378 (if (looking-at "procedure\\s ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 (forward-sexp 3)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
380 (forward-char 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
381 (while (progn (skip-chars-forward " \t\n")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 (looking-at "#"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
383 ;; Skip over comments following openbrace.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384 (forward-line 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
385 ;; The first following code counts
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
386 ;; if it is before the line we want to indent.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
387 (and (< (point) indent-point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
388 (current-column)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
389 ;; If no previous statement,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
390 ;; indent it relative to line brace is on.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
391 ;; For open brace in column zero, don't let statement
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392 ;; start there too. If icon-indent-level is zero,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393 ;; use icon-brace-offset + icon-continued-statement-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 ;; instead.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 ;; For open-braces not the first thing in a line,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
396 ;; add in icon-brace-imaginary-offset.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397 (+ (if (and (bolp) (zerop icon-indent-level))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 (+ icon-brace-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399 icon-continued-statement-offset)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 icon-indent-level)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
401 ;; Move back over whitespace before the openbrace.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
402 ;; If openbrace is not first nonwhite thing on the line,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
403 ;; add the icon-brace-imaginary-offset.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
404 (progn (skip-chars-backward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
405 (if (bolp) 0 icon-brace-imaginary-offset))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
406 ;; Get initial indentation of the line we are on.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407 (current-indentation))))))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
408
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
409 ;; List of words to check for as the last thing on a line.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
410 ;; If cdr is t, next line is a continuation of the same statement,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
411 ;; if cdr is nil, next line starts a new (possibly indented) statement.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
412
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
413 (defconst icon-resword-alist
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
414 '(("by" . t) ("case" . t) ("create") ("do") ("dynamic" . t) ("else")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 ("every" . t) ("if" . t) ("global" . t) ("initial" . t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416 ("link" . t) ("local" . t) ("of") ("record" . t) ("repeat" . t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
417 ("static" . t) ("then") ("to" . t) ("until" . t) ("while" . t)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
418
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
419 (defun icon-is-continuation-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
420 (let* ((ch (preceding-char))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
421 (ch-syntax (char-syntax ch)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
422 (if (eq ch-syntax ?w)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
423 (assoc (buffer-substring
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
424 (progn (forward-word -1) (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
425 (progn (forward-word 1) (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
426 icon-resword-alist)
30947
3e2633195694 (icon-indent-line)
Gerd Moellmann <gerd@gnu.org>
parents: 20953
diff changeset
427 (not (memq ch '(0 ?\; ?\} ?\{ ?\) ?\] ?\" ?\' ?\# ?\, ?\. ?\n))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
428
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
429 (defun icon-backward-to-noncomment (lim)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
430 (let (opoint stop)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
431 (while (not stop)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
432 (skip-chars-backward " \t\n\f" lim)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
433 (setq opoint (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
434 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
435 (if (and (nth 5 (parse-partial-sexp (point) opoint))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
436 (< lim (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
437 (search-backward "#")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 (setq stop t)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
439
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
440 (defun icon-backward-to-start-of-continued-exp (lim)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
441 (if (memq (preceding-char) '(?\) ?\]))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
442 (forward-sexp -1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
443 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
444 (skip-chars-forward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
445 (cond
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
446 ((<= (point) lim) (goto-char (1+ lim)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
447 ((not (icon-is-continued-line)) 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
448 ((and (eq (char-syntax (following-char)) ?w)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
449 (cdr
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
450 (assoc (buffer-substring (point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
451 (save-excursion (forward-word 1) (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
452 icon-resword-alist))) 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
453 (t (end-of-line 0) (icon-backward-to-start-of-continued-exp lim))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
454
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
455 (defun icon-is-continued-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
456 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
457 (end-of-line 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
458 (icon-is-continuation-line)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
459
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
460 (defun icon-backward-to-start-of-if (&optional limit)
210
01cbfdd59f82 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 36
diff changeset
461 "Move to the start of the last \"unbalanced\" if."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
462 (or limit (setq limit (save-excursion (beginning-of-icon-defun) (point))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
463 (let ((if-level 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
464 (case-fold-search nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
465 (while (not (zerop if-level))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
466 (backward-sexp 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
467 (cond ((looking-at "else\\b")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
468 (setq if-level (1+ if-level)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
469 ((looking-at "if\\b")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
470 (setq if-level (1- if-level)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
471 ((< (point) limit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
472 (setq if-level 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
473 (goto-char limit))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
475 (defun mark-icon-function ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
476 "Put mark at end of Icon function, point at beginning."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
477 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
478 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479 (end-of-icon-defun)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
480 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
481 (beginning-of-line 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
482 (beginning-of-icon-defun))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
483
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
484 (defun beginning-of-icon-defun ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
485 "Go to the start of the enclosing procedure; return t if at top level."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 (if (re-search-backward "^procedure\\s \\|^end[ \t\n]" (point-min) 'move)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488 (looking-at "e")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
489 t))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
490
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491 (defun end-of-icon-defun ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
492 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
493 (if (not (bobp)) (forward-char -1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
494 (re-search-forward "\\(\\s \\|^\\)end\\(\\s \\|$\\)" (point-max) 'move)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
495 (forward-word -1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
496 (forward-line 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
497
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
498 (defun indent-icon-exp ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
499 "Indent each line of the Icon grouping following point."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
500 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
501 (let ((indent-stack (list nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
502 (contain-stack (list (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
503 (case-fold-search nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
504 restart outer-loop-done inner-loop-done state ostate
17974
b7df247f7487 (indent-icon-exp): Bind last-depth.
Richard M. Stallman <rms@gnu.org>
parents: 17969
diff changeset
505 this-indent last-sexp last-depth
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
506 at-else at-brace at-do
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
507 (opoint (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
508 (next-depth 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
509 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
510 (forward-sexp 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
511 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
512 (setq outer-loop-done nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
513 (while (and (not (eobp)) (not outer-loop-done))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
514 (setq last-depth next-depth)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
515 ;; Compute how depth changes over this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
516 ;; plus enough other lines to get to one that
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
517 ;; does not end inside a comment or string.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
518 ;; Meanwhile, do appropriate indentation on comment lines.
17974
b7df247f7487 (indent-icon-exp): Bind last-depth.
Richard M. Stallman <rms@gnu.org>
parents: 17969
diff changeset
519 (setq inner-loop-done nil)
b7df247f7487 (indent-icon-exp): Bind last-depth.
Richard M. Stallman <rms@gnu.org>
parents: 17969
diff changeset
520 (while (and (not inner-loop-done)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
521 (not (and (eobp) (setq outer-loop-done t))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
522 (setq ostate state)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
523 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
524 nil nil state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
525 (setq next-depth (car state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
526 (if (and (car (cdr (cdr state)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
527 (>= (car (cdr (cdr state))) 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
528 (setq last-sexp (car (cdr (cdr state)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
529 (if (or (nth 4 ostate))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
530 (icon-indent-line))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
531 (if (or (nth 3 state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
532 (forward-line 1)
17974
b7df247f7487 (indent-icon-exp): Bind last-depth.
Richard M. Stallman <rms@gnu.org>
parents: 17969
diff changeset
533 (setq inner-loop-done t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
534 (if (<= next-depth 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
535 (setq outer-loop-done t))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
536 (if outer-loop-done
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
537 nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
538 (if (/= last-depth next-depth)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
539 (setq last-sexp nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
540 (while (> last-depth next-depth)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
541 (setq indent-stack (cdr indent-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
542 contain-stack (cdr contain-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
543 last-depth (1- last-depth)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
544 (while (< last-depth next-depth)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
545 (setq indent-stack (cons nil indent-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
546 contain-stack (cons nil contain-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
547 last-depth (1+ last-depth)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
548 (if (null (car contain-stack))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
549 (setcar contain-stack (or (car (cdr state))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
550 (save-excursion (forward-sexp -1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
551 (point)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
552 (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
553 (skip-chars-forward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
554 (if (eolp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
555 nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
556 (if (and (car indent-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
557 (>= (car indent-stack) 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
558 ;; Line is on an existing nesting level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
559 ;; Lines inside parens are handled specially.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
560 (if (/= (char-after (car contain-stack)) ?{)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
561 (setq this-indent (car indent-stack))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
562 ;; Line is at statement level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
563 ;; Is it a new statement? Is it an else?
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
564 ;; Find last non-comment character before this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
565 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
566 (setq at-else (looking-at "else\\W"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
567 (setq at-brace (= (following-char) ?{))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
568 (icon-backward-to-noncomment opoint)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
569 (if (icon-is-continuation-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
570 ;; Preceding line did not end in comma or semi;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
571 ;; indent this line icon-continued-statement-offset
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
572 ;; more than previous.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
573 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
574 (icon-backward-to-start-of-continued-exp (car contain-stack))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
575 (setq this-indent
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
576 (+ icon-continued-statement-offset (current-column)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
577 (if at-brace icon-continued-brace-offset 0))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
578 ;; Preceding line ended in comma or semi;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
579 ;; use the standard indent for this level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
580 (if at-else
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
581 (progn (icon-backward-to-start-of-if opoint)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
582 (setq this-indent (current-indentation)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
583 (setq this-indent (car indent-stack))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
584 ;; Just started a new nesting level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
585 ;; Compute the standard indent for this level.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
586 (let ((val (calculate-icon-indent
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
587 (if (car indent-stack)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
588 (- (car indent-stack))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
589 (setcar indent-stack
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
590 (setq this-indent val))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
591 ;; Adjust line indentation according to its contents
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
592 (if (or (= (following-char) ?})
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
593 (looking-at "end\\b"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
594 (setq this-indent (- this-indent icon-indent-level)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
595 (if (= (following-char) ?{)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
596 (setq this-indent (+ this-indent icon-brace-offset)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
597 ;; Put chosen indentation into effect.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
598 (or (= (current-column) this-indent)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
599 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
600 (delete-region (point) (progn (beginning-of-line) (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
601 (indent-to this-indent)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
602 ;; Indent any comment following the text.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
603 (or (looking-at comment-start-skip)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
604 (if (re-search-forward comment-start-skip (save-excursion (end-of-line) (point)) t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
605 (progn (indent-for-comment) (beginning-of-line))))))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
606
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
607 (defconst icon-font-lock-keywords-1
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
608 (eval-when-compile
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
609 (list
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
610 ;; Fontify procedure name definitions.
18281
ffc2fda197bc (icon-indent-line): A comment ends at the end of the
Richard M. Stallman <rms@gnu.org>
parents: 18272
diff changeset
611 '("^[ \t]*\\(procedure\\)\\>[ \t]*\\(\\sw+\\)?"
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
612 (1 font-lock-builtin-face) (2 font-lock-function-name-face nil t))))
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
613 "Subdued level highlighting for Icon mode.")
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
614
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
615 (defconst icon-font-lock-keywords-2
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
616 (append
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
617 icon-font-lock-keywords-1
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
618 (eval-when-compile
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
619 (list
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
620 ;; Fontify all type specifiers.
33200
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
621 (cons
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
622 (regexp-opt '("null" "string" "co-expression" "table" "integer"
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
623 "cset" "set" "real" "file" "list") 'words)
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
624 'font-lock-type-face)
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
625 ;; Fontify all keywords.
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
626 ;;
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
627 (cons
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
628 (regexp-opt
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
629 '("break" "do" "next" "repeat" "to" "by" "else" "if" "not" "return"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
630 "until" "case" "of" "while" "create" "every" "suspend" "default"
33200
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
631 "fail" "record" "then") 'words)
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
632 'font-lock-keyword-face)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
633 ;; "end" "initial"
33200
5323492591dd (icon-mode-map): Don't rebind \t.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32299
diff changeset
634 (cons (regexp-opt '("end" "initial") 'words)
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
635 'font-lock-builtin-face)
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
636 ;; Fontify all system variables.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
637 (cons
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
638 (regexp-opt
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
639 '("&allocated" "&ascii" "&clock" "&col" "&collections" "&column"
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
640 "&control" "&cset" "&current" "&date" "&dateline" "&digits" "&dump"
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
641 "&e" "&error" "&errornumber" "&errortext" "&errorvalue" "&errout"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
642 "&eventcode" "&eventsource" "&eventvalue" "&fail" "&features"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
643 "&file" "&host" "&input" "&interval" "&lcase" "&ldrag" "&letters"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
644 "&level" "&line" "&lpress" "&lrelease" "&main" "&mdrag" "&meta"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
645 "&mpress" "&mrelease" "&null" "&output" "&phi" "&pi" "&pos"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
646 "&progname" "&random" "&rdrag" "&regions" "&resize" "&row"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
647 "&rpress" "&rrelease" "&shift" "&source" "&storage" "&subject"
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
648 "&time" "&trace" "&ucase" "&version" "&window" "&x" "&y") t)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 19834
diff changeset
649 'font-lock-constant-face)
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
650 (cons ;; global local static declarations and link files
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
651 (concat
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
652 "^[ \t]*"
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
653 (regexp-opt '("global" "link" "local" "static") t)
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
654 "\\(\\sw+\\>\\)*")
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
655 '((1 font-lock-builtin-face)
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
656 (font-lock-match-c-style-declaration-item-and-skip-to-next
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
657 (goto-char (or (match-beginning 2) (match-end 1))) nil
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
658 (1 (if (match-beginning 2)
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
659 font-lock-function-name-face
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
660 font-lock-variable-name-face)))))
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
661
18281
ffc2fda197bc (icon-indent-line): A comment ends at the end of the
Richard M. Stallman <rms@gnu.org>
parents: 18272
diff changeset
662 (cons ;; $define $elif $ifdef $ifndef $undef
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
663 (concat "^"
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
664 (regexp-opt'("$define" "$elif" "$ifdef" "$ifndef" "$undef") t)
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
665 "\\>[ \t]*\\([^ \t\n]+\\)?")
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
666 '((1 font-lock-builtin-face)
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
667 (4 font-lock-variable-name-face nil t)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
668 (cons ;; $dump $endif $else $include
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 33200
diff changeset
669 (concat
18167
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
670 "^" (regexp-opt'("$dump" "$endif" "$else" "$include") t) "\\>" )
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
671 'font-lock-builtin-face)
6da1b5250673 (icon-font-lock-keywords-2): Use regexp-opt for the regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17974
diff changeset
672 (cons ;; $warning $error
18272
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
673 (concat "^" (regexp-opt '("$warning" "$error") t)
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
674 "\\>[ \t]*\\(.+\\)?")
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
675 '((1 font-lock-builtin-face) (3 font-lock-warning-face nil t))))))
aea95178357e (icon-imenu-generic-expression): Improved regexp.
Richard M. Stallman <rms@gnu.org>
parents: 18167
diff changeset
676 "Gaudy level highlighting for Icon mode.")
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
677
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
678 (defvar icon-font-lock-keywords icon-font-lock-keywords-1
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
679 "Default expressions to highlight in `icon-mode'.")
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
680
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
681 ;;;used by hs-minor-mode
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
682 (defun icon-forward-sexp-function (arg)
17969
fa550516120f (icon-mode): Adapt to new hideshow and improve regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17633
diff changeset
683 (if (< arg 0)
fa550516120f (icon-mode): Adapt to new hideshow and improve regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17633
diff changeset
684 (beginning-of-icon-defun)
fa550516120f (icon-mode): Adapt to new hideshow and improve regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17633
diff changeset
685 (end-of-icon-defun)
fa550516120f (icon-mode): Adapt to new hideshow and improve regexps.
Richard M. Stallman <rms@gnu.org>
parents: 17633
diff changeset
686 (forward-char -1)))
17266
9ef8bf76c3c2 (icon-mode-map): Added menus.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
687
18381
d7ba4cdf0e37 Fix provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18281
diff changeset
688 (provide 'icon)
d7ba4cdf0e37 Fix provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18281
diff changeset
689
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
690 ;;; arch-tag: 8abf8c99-e7df-44af-a58f-ef5ed2ee52cb
660
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 210
diff changeset
691 ;;; icon.el ends here