annotate lisp/progmodes/simula.el @ 69478:e8bb5df2ba7a

Add index entries around each paragraph rather than depend on entries from beginning of node. Doing so ensures that index entries are less likely to be forgotten if text is cut and pasted, and are necessary anyway if the references are on a separate page. It seems that makeinfo is now (v. 4.8) only producing one index entry per node, so there is no longer any excuse not to. Use subheading instead of heading. The incorrect use of heading produced very large fonts in Info--as large as the main heading. (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6 and 7 appeared *around* the time of these Emacs releases.
author Bill Wohler <wohler@newt.com>
date Wed, 15 Mar 2006 00:26:12 +0000
parents dc49655f57ae
children 4bef63927dd7 4b3d39451150
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1 ;;; simula.el --- SIMULA 87 code editing commands for Emacs
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
68773
dc49655f57ae Update copyright for 2006.
Nick Roberts <nickrob@snap.net.nz>
parents: 66963
diff changeset
3 ;; Copyright (C) 1992, 1994, 1996 2001, 2002, 2003, 2004, 2005, 2006
64699
629afbe74e61 Update copyright for release of 22.1 for progmodes directory.
Nick Roberts <nickrob@snap.net.nz>
parents: 64085
diff changeset
4 ;; Free Software Foundation, Inc.
841
2cdce064065f entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 810
diff changeset
5
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
6 ;; Author: Hans Henrik Eriksen <hhe@ifi.uio.no>
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
7 ;; Maintainer: simula-mode@ifi.uio.no
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
8 ;; Adapted-By: ESR
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
9 ;; Keywords: languages
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
10
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16 ;; any later version.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21 ;; GNU General Public License for more details.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
22
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 10895
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59252
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59252
diff changeset
26 ;; Boston, MA 02110-1301, USA.
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
27
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
28 ;;; Commentary:
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
29
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2024
diff changeset
30 ;; A major mode for editing the Simula language. It knows about Simula
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2024
diff changeset
31 ;; syntax and standard indentation commands. It also provides convenient
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2024
diff changeset
32 ;; abbrevs for Simula keywords.
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2024
diff changeset
33 ;;
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2024
diff changeset
34 ;; Hans Henrik Eriksen (the author) may be reached at:
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
35 ;; Institutt for informatikk,
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
36 ;; Universitetet i Oslo
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
37
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 805
diff changeset
38 ;;; Code:
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
39
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
40
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
41 (defgroup simula nil
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
42 "Major mode for editing Simula code."
66963
a11fdee52c05 Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
43 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
44 :prefix "simula-"
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
45 :group 'languages)
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
46
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
47 (defconst simula-tab-always-indent-default nil
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
48 "Non-nil means TAB in SIMULA mode should always reindent the current line.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
49 Otherwise TAB indents only when point is within
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
50 the run of whitespace at the beginning of the line.")
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
51
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
52 (defcustom simula-tab-always-indent simula-tab-always-indent-default
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
53 "*Non-nil means TAB in SIMULA mode should always reindent the current line.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
54 Otherwise TAB indents only when point is within
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
55 the run of whitespace at the beginning of the line."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
56 :type 'boolean
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
57 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
58
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
59 (defconst simula-indent-level-default 3
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
60 "Indentation of SIMULA statements with respect to containing block.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
61
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
62 (defcustom simula-indent-level simula-indent-level-default
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
63 "*Indentation of SIMULA statements with respect to containing block."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
64 :type 'integer
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
65 :group 'simula)
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
66
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
67
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
68 (defconst simula-substatement-offset-default 3
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
69 "Extra indentation after DO, THEN, ELSE, WHEN and OTHERWISE.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
70
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
71 (defcustom simula-substatement-offset simula-substatement-offset-default
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
72 "*Extra indentation after DO, THEN, ELSE, WHEN and OTHERWISE."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
73 :type 'integer
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
74 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
75
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
76 (defconst simula-continued-statement-offset-default 3
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
77 "Extra indentation for lines not starting a statement or substatement.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
78 If value is a list, each line in a multipleline continued statement
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
79 will have the car of the list extra indentation with respect to
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
80 the previous line of the statement.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
81
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
82 (defcustom simula-continued-statement-offset
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
83 simula-continued-statement-offset-default
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
84 "*Extra indentation for lines not starting a statement or substatement.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
85 If value is a list, each line in a multipleline continued statement
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
86 will have the car of the list extra indentation with respect to
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
87 the previous line of the statement."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
88 :type 'integer
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
89 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
90
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
91 (defconst simula-label-offset-default -4711
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
92 "Offset of SIMULA label lines relative to usual indentation.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
93
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
94 (defcustom simula-label-offset simula-label-offset-default
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
95 "*Offset of SIMULA label lines relative to usual indentation."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
96 :type 'integer
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
97 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
98
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
99 (defconst simula-if-indent-default '(0 . 0)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
100 "Extra indentation of THEN and ELSE with respect to the starting IF.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
101 Value is a cons cell, the car is extra THEN indentation and the cdr
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
102 extra ELSE indentation. IF after ELSE is indented as the starting IF.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
103
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
104 (defcustom simula-if-indent simula-if-indent-default
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
105 "*Extra indentation of THEN and ELSE with respect to the starting IF.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
106 Value is a cons cell, the car is extra THEN indentation and the cdr
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
107 extra ELSE indentation. IF after ELSE is indented as the starting IF."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
108 :type '(cons integer integer)
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
109 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
110
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
111 (defconst simula-inspect-indent-default '(0 . 0)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
112 "Extra indentation of WHEN and OTHERWISE with respect to the INSPECT.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
113 Value is a cons cell, the car is extra WHEN indentation
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
114 and the cdr extra OTHERWISE indentation.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
115
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
116 (defcustom simula-inspect-indent simula-inspect-indent-default
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
117 "*Extra indentation of WHEN and OTHERWISE with respect to the INSPECT.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
118 Value is a cons cell, the car is extra WHEN indentation
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
119 and the cdr extra OTHERWISE indentation."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
120 :type '(cons integer integer)
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
121 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
122
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
123 (defconst simula-electric-indent-default nil
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
124 "Non-nil means `simula-indent-line' function may reindent previous line.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
125
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
126 (defcustom simula-electric-indent simula-electric-indent-default
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
127 "*Non-nil means `simula-indent-line' function may reindent previous line."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
128 :type 'boolean
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
129 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
130
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
131 (defconst simula-abbrev-keyword-default 'upcase
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
132 "Specify how to convert case for SIMULA keywords.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
133 Value is one of the symbols `upcase', `downcase', `capitalize',
47024
15430c8d0eaa * startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
parents: 42202
diff changeset
134 \(as in) `abbrev-table' or nil if they should not be changed.")
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
135
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
136 (defcustom simula-abbrev-keyword simula-abbrev-keyword-default
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
137 "*Specify how to convert case for SIMULA keywords.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
138 Value is one of the symbols `upcase', `downcase', `capitalize',
47024
15430c8d0eaa * startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
parents: 42202
diff changeset
139 \(as in) `abbrev-table' or nil if they should not be changed."
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
140 :type '(choice (const upcase) (const downcase) (const capitalize)(const nil))
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
141 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
142
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
143 (defconst simula-abbrev-stdproc-default 'abbrev-table
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
144 "Specify how to convert case for standard SIMULA procedure and class names.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
145 Value is one of the symbols `upcase', `downcase', `capitalize',
47024
15430c8d0eaa * startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
parents: 42202
diff changeset
146 \(as in) `abbrev-table', or nil if they should not be changed.")
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
147
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
148 (defcustom simula-abbrev-stdproc simula-abbrev-stdproc-default
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
149 "*Specify how to convert case for standard SIMULA procedure and class names.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
150 Value is one of the symbols `upcase', `downcase', `capitalize',
47024
15430c8d0eaa * startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
parents: 42202
diff changeset
151 \(as in) `abbrev-table', or nil if they should not be changed."
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
152 :type '(choice (const upcase) (const downcase) (const capitalize)
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
153 (const abbrev-table) (const nil))
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
154 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
155
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
156 (defcustom simula-abbrev-file nil
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
157 "*File with extra abbrev definitions for use in SIMULA mode.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
158 These are used together with the standard abbrev definitions for SIMULA.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
159 Please note that the standard definitions are required
20960
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
160 for SIMULA mode to function correctly."
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
161 :type '(choice file (const nil))
2f9b7d0689a9 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20953
diff changeset
162 :group 'simula)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
163
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
164 (defvar simula-mode-syntax-table nil
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
165 "Syntax table in SIMULA mode buffers.")
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
166
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
167 (defconst simula-font-lock-syntactic-keywords
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
168 `(;; `comment' directive.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
169 ("\\<\\(c\\)omment\\>" 1 "<")
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
170 ;; end comments
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
171 (,(concat "\\<end\\>\\([^;\n]\\).*?\\(\n\\|\\(.\\)\\(;\\|"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
172 (regexp-opt '("end" "else" "when" "otherwise"))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
173 "\\)\\)")
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
174 (1 "< b")
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
175 (3 "> b" nil t))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
176 ;; non-quoted single-quote char.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
177 ("'\\('\\)'" 1 ".")))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
178
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
179 ;; Regexps written with help from Alf-Ivar Holm <alfh@ifi.uio.no>.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
180 (defconst simula-font-lock-keywords-1
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
181 '(;;
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
182 ;; Compiler directives.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
183 ("^%\\([^ \t\n].*\\)" 1 font-lock-constant-face t)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
184 ;;
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
185 ;; Class and procedure names.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
186 ("\\<\\(class\\|procedure\\)\\>[ \t]*\\(\\sw+\\)?"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
187 (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t)))
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
188 "Subdued level highlighting for Simula mode.")
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
189
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
190 (defconst simula-font-lock-keywords-2
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
191 (append simula-font-lock-keywords-1
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
192 (list
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
193 ;;
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 19786
diff changeset
194 ;; Constants.
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 19786
diff changeset
195 '("\\<\\(false\\|none\\|notext\\|true\\)\\>" . font-lock-constant-face)
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
196 ;;
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
197 ;; Keywords.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
198 (regexp-opt
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
199 '("activate" "after" "and" "at" "before" "begin" "delay" "do"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
200 "else" "end" "eq" "eqv" "external" "for" "ge" "go" "goto" "gt"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
201 "hidden" "if" "imp" "in" "inner" "inspect" "is" "label" "le"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
202 "lt" "ne" "new" "not" "or" "otherwise" "prior" "protected"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
203 "qua" "reactivate" "step" "switch" "then" "this" "to" "until"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
204 "virtual" "when" "while") 'words)
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
205 ;;
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
206 ;; Types.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
207 (cons (regexp-opt
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
208 '("array" "boolean" "character" "integer"
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
209 "long" "name" "real" "short" "text" "value" "ref") 'words)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
210 'font-lock-type-face)))
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
211 "Medium level highlighting for Simula mode.")
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
212
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
213 (defconst simula-font-lock-keywords-3
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
214 (append simula-font-lock-keywords-2
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
215 (list
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
216 ;;
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
217 ;; Super-class names and super-slow.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
218 '("\\<\\(\\sw+\\)[ \t]+class\\>" 1 font-lock-function-name-face)
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
219 ;;
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
220 ;; Types and their declarations.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
221 (list (concat "\\<\\(array\\|boolean\\|character\\|integer\\|"
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
222 "long\\|name\\|real\\|short\\|text\\|value\\)\\>"
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
223 "\\([ \t]+\\sw+\\>\\)*")
16582
608c038c2225 Use simpler fn.
Simon Marshall <simon@gnu.org>
parents: 16455
diff changeset
224 '(font-lock-match-c-style-declaration-item-and-skip-to-next
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
225 ;; Start with point after all type specifiers.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
226 (goto-char (or (match-beginning 2) (match-end 1)))
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
227 ;; Finish with point after first type specifier.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
228 (goto-char (match-end 1))
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
229 ;; Fontify as a variable name.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
230 (1 font-lock-variable-name-face)))
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
231 ;;
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
232 ;; Object references and their declarations.
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
233 '("\\<\\(ref\\)\\>[ \t]*\\((\\(\\sw+\\))\\)?"
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
234 (3 font-lock-function-name-face nil t)
16582
608c038c2225 Use simpler fn.
Simon Marshall <simon@gnu.org>
parents: 16455
diff changeset
235 (font-lock-match-c-style-declaration-item-and-skip-to-next nil nil
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
236 (1 font-lock-variable-name-face)))
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
237 ))
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
238 "Gaudy level highlighting for Simula mode.")
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
239
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
240 (defvar simula-font-lock-keywords simula-font-lock-keywords-1
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
241 "Default expressions to highlight in Simula mode.")
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
242
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
243 ; The following function is taken from cc-mode.el,
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
244 ; it determines the flavor of the Emacs running
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
245
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
246 (defvar simula-mode-menu
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
247 '(["Report Bug" simula-submit-bug-report t]
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
248 ["Indent Line" simula-indent-line t]
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
249 ["Backward Statement" simula-previous-statement t]
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
250 ["Forward Statement" simula-next-statement t]
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
251 ["Backward Up Level" simula-backward-up-level t]
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
252 ["Forward Down Statement" simula-forward-down-level t])
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
253 "Lucid Emacs menu for SIMULA mode.")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
254
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
255 (if simula-mode-syntax-table
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
256 ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
257 (setq simula-mode-syntax-table (copy-syntax-table (standard-syntax-table)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
258 (modify-syntax-entry ?! "<" simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
259 (modify-syntax-entry ?$ "." simula-mode-syntax-table)
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
260 (modify-syntax-entry ?% "< b" simula-mode-syntax-table)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
261 (modify-syntax-entry ?\n "> b" simula-mode-syntax-table)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
262 (modify-syntax-entry ?' "\"" simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
263 (modify-syntax-entry ?\( "()" simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
264 (modify-syntax-entry ?\) ")(" simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
265 (modify-syntax-entry ?\; ">" simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
266 (modify-syntax-entry ?\[ "." simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
267 (modify-syntax-entry ?\\ "." simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
268 (modify-syntax-entry ?\] "." simula-mode-syntax-table)
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
269 (modify-syntax-entry ?_ "_" simula-mode-syntax-table)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
270 (modify-syntax-entry ?\| "." simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
271 (modify-syntax-entry ?\{ "." simula-mode-syntax-table)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
272 (modify-syntax-entry ?\} "." simula-mode-syntax-table))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
273
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
274 (defvar simula-mode-map
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
275 (let ((map (make-sparse-keymap)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
276 (define-key map "\C-c\C-u" 'simula-backward-up-level)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
277 (define-key map "\C-c\C-p" 'simula-previous-statement)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
278 (define-key map "\C-c\C-d" 'simula-forward-down-level)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
279 (define-key map "\C-c\C-n" 'simula-next-statement)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
280 ;; (define-key map "\C-c\C-g" 'simula-goto-definition)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
281 ;; (define-key map "\C-c\C-h" 'simula-standard-help)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
282 (define-key map "\177" 'backward-delete-char-untabify)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
283 (define-key map ":" 'simula-electric-label)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
284 (define-key map "\e\C-q" 'simula-indent-exp)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
285 (define-key map "\t" 'simula-indent-command)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
286 ;; Emacs 19 defines menus in the mode map
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
287 (define-key map [menu-bar simula]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
288 (cons "SIMULA" (make-sparse-keymap "SIMULA")))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
289 (define-key map [menu-bar simula bug-report]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
290 '("Submit Bug Report" . simula-submit-bug-report))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
291 (define-key map [menu-bar simula separator-indent]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
292 '("--"))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
293 (define-key map [menu-bar simula indent-exp]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
294 '("Indent Expression" . simula-indent-exp))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
295 (define-key map [menu-bar simula indent-line]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
296 '("Indent Line" . simula-indent-command))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
297 (define-key map [menu-bar simula separator-navigate]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
298 '("--"))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
299 (define-key map [menu-bar simula backward-stmt]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
300 '("Previous Statement" . simula-previous-statement))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
301 (define-key map [menu-bar simula forward-stmt]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
302 '("Next Statement" . simula-next-statement))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
303 (define-key map [menu-bar simula backward-up]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
304 '("Backward Up Level" . simula-backward-up-level))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
305 (define-key map [menu-bar simula forward-down]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
306 '("Forward Down Statement" . simula-forward-down-level))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
307
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
308 (put 'simula-next-statement 'menu-enable '(not (eobp)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
309 (put 'simula-previous-statement 'menu-enable '(not (bobp)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
310 (put 'simula-forward-down-level 'menu-enable '(not (eobp)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
311 (put 'simula-backward-up-level 'menu-enable '(not (bobp)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
312 (put 'simula-indent-command 'menu-enable '(not buffer-read-only))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
313 (put 'simula-indent-exp 'menu-enable '(not buffer-read-only))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
314
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
315 ;; RMS: mouse-3 should not select this menu. mouse-3's global
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
316 ;; definition is useful in SIMULA mode and we should not interfere
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
317 ;; with that. The menu is mainly for beginners, and for them,
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
318 ;; the menubar requires less memory than a special click.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
319 ;; in Lucid Emacs, we want the menu to popup when the 3rd button is
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
320 ;; hit. In 19.10 and beyond this is done automatically if we put
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
321 ;; the menu on mode-popup-menu variable, see c-common-init [cc-mode.el]
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
322 ;;(if (not (boundp 'mode-popup-menu))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
323 ;; (define-key simula-mode-map 'button3 'simula-popup-menu))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
324 map)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
325 "Keymap used in `simula-mode'.")
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
326
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
327 ;; menus for Lucid
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
328 (defun simula-popup-menu (e)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
329 "Pops up the SIMULA menu."
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
330 (interactive "@e")
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
331 (popup-menu (cons (concat mode-name " Mode Commands") simula-mode-menu)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
332
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
333 ;;;###autoload
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
334 (define-derived-mode simula-mode nil "Simula"
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
335 "Major mode for editing SIMULA code.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
336 \\{simula-mode-map}
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
337 Variables controlling indentation style:
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
338 `simula-tab-always-indent'
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
339 Non-nil means TAB in SIMULA mode should always reindent the current line,
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
340 regardless of where in the line point is when the TAB command is used.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
341 `simula-indent-level'
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
342 Indentation of SIMULA statements with respect to containing block.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
343 `simula-substatement-offset'
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
344 Extra indentation after DO, THEN, ELSE, WHEN and OTHERWISE.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
345 `simula-continued-statement-offset' 3
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
346 Extra indentation for lines not starting a statement or substatement,
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
347 e.g. a nested FOR-loop. If value is a list, each line in a multiple-
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
348 line continued statement will have the car of the list extra indentation
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
349 with respect to the previous line of the statement.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
350 `simula-label-offset' -4711
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
351 Offset of SIMULA label lines relative to usual indentation.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
352 `simula-if-indent' '(0 . 0)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
353 Extra indentation of THEN and ELSE with respect to the starting IF.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
354 Value is a cons cell, the car is extra THEN indentation and the cdr
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
355 extra ELSE indentation. IF after ELSE is indented as the starting IF.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
356 `simula-inspect-indent' '(0 . 0)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357 Extra indentation of WHEN and OTHERWISE with respect to the
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
358 corresponding INSPECT. Value is a cons cell, the car is
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
359 extra WHEN indentation and the cdr extra OTHERWISE indentation.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
360 `simula-electric-indent' nil
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
361 If this variable is non-nil, `simula-indent-line'
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
362 will check the previous line to see if it has to be reindented.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
363 `simula-abbrev-keyword' 'upcase
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
364 Determine how SIMULA keywords will be expanded. Value is one of
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
365 the symbols `upcase', `downcase', `capitalize', (as in) `abbrev-table',
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
366 or nil if they should not be changed.
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
367 `simula-abbrev-stdproc' 'abbrev-table
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
368 Determine how standard SIMULA procedure and class names will be
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
369 expanded. Value is one of the symbols `upcase', `downcase', `capitalize',
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
370 (as in) `abbrev-table', or nil if they should not be changed.
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
371
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
372 Turning on SIMULA mode calls the value of the variable simula-mode-hook
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
373 with no arguments, if that value is non-nil."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374 (make-local-variable 'comment-column)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
375 (setq comment-column 40)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
376 ; (make-local-variable 'end-comment-column)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
377 ; (setq end-comment-column 75)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
378 (make-local-variable 'paragraph-start)
10895
27b6776dc562 (simula-mode): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 7639
diff changeset
379 (setq paragraph-start "[ \t]*$\\|\\f")
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
380 (make-local-variable 'paragraph-separate)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
381 (setq paragraph-separate paragraph-start)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
382 (make-local-variable 'indent-line-function)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
383 (setq indent-line-function 'simula-indent-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
384 (make-local-variable 'require-final-newline)
59252
2a058ed87066 (simula-mode): Use mode-require-final-newline.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
385 (setq require-final-newline mode-require-final-newline)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
386 (make-local-variable 'comment-start)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
387 (setq comment-start "! ")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
388 (make-local-variable 'comment-end)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
389 (setq comment-end " ;")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
390 (make-local-variable 'comment-start-skip)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
391 (setq comment-start-skip "!+ *")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
392 (make-local-variable 'parse-sexp-ignore-comments)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
393 (setq parse-sexp-ignore-comments nil)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
394 (make-local-variable 'comment-multi-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
395 (setq comment-multi-line t)
16455
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
396 (make-local-variable 'font-lock-defaults)
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
397 (setq font-lock-defaults
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
398 '((simula-font-lock-keywords simula-font-lock-keywords-1
0ea4c341ed0c Add Font Lock support. Add mode command autoload cookie.
Simon Marshall <simon@gnu.org>
parents: 16072
diff changeset
399 simula-font-lock-keywords-2 simula-font-lock-keywords-3)
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
400 nil t ((?_ . "w")) nil
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
401 (font-lock-syntactic-keywords . simula-font-lock-syntactic-keywords)))
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
402 (abbrev-mode 1))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
403
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
404 (defun simula-indent-exp ()
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
405 "Indent SIMULA expression following point."
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
406 (interactive)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
407 (let ((here (point))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
408 (simula-electric-indent nil)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
409 end)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
410 (simula-skip-comment-forward)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
411 (if (eobp)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
412 (goto-char here)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
413 (unwind-protect
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
414 (progn
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
415 (simula-next-statement 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
416 (setq end (point-marker))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
417 (simula-previous-statement 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
418 (beginning-of-line)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
419 (while (< (point) end)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
420 (if (not (looking-at "[ \t]*$"))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
421 (simula-indent-line))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
422 (forward-line 1)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
423 (and end (set-marker end nil))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
424
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
425
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
426 (defun simula-indent-line ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
427 "Indent this line as SIMULA code.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
428 If `simula-electric-indent' is non-nil, indent previous line if necessary."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
429 (let ((origin (- (point-max) (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
430 (indent (simula-calculate-indent))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
431 (case-fold-search t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
432 (unwind-protect
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
433 (if simula-electric-indent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
434 (progn
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
435 ;;
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
436 ;; manually expand abbrev on last line, if any
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
437 ;;
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
438 (end-of-line 0)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
439 (expand-abbrev)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
440 ;; now maybe we should reindent that line
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
441 (beginning-of-line)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
442 (skip-chars-forward " \t\f")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
443 (if (and
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
444 (looking-at
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
445 "\\(end\\|if\\|then\\|else\\|when\\|otherwise\\)\\>")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
446 (not (simula-context)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
447 ;; yes - reindent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
448 (let ((post-indent (simula-calculate-indent)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
449 (if (eq (current-indentation) post-indent)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
450 ()
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
451 (delete-horizontal-space)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
452 (indent-to post-indent))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
453 (goto-char (- (point-max) origin))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
454 (if (eq (current-indentation) indent)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
455 (back-to-indentation)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
456 (delete-horizontal-space)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
457 (indent-to indent)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
458
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
459
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
460 (defun simula-indent-command (&optional whole-exp)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
461 "Indent current line as SIMULA code, or insert TAB character.
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
462 If `simula-tab-always-indent' is non-nil, always indent current line.
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
463 Otherwise, indent only if point is before any non-whitespace
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
464 character on the line.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
465
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
466 A numeric argument, regardless of its value, means indent rigidly
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
467 all the lines of the SIMULA statement after point so that this line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
468 becomes properly indented.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
469 The relative indentation among the lines of the statement are preserved."
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
470 (interactive "P")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
471 (let ((case-fold-search t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
472 (if (or whole-exp simula-tab-always-indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
473 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
474 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
475 (bolp)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
476 ;; reindent current line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
477 (let ((indent (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
478 (beginning-of-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
479 (simula-calculate-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
480 (current (current-indentation))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
481 (origin (- (point-max) (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
482 (bol (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
483 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
484 (bolp)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
485 beg end)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
486 (unwind-protect
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
487 (if (eq current indent)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
488 (if (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
489 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
490 (bolp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
491 (back-to-indentation))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
492 (beginning-of-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
493 (delete-horizontal-space)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
494 (indent-to indent))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
495 (if (not bol)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
496 (goto-char (- (point-max) origin))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
497 (setq origin (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
498 (if whole-exp
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
499 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
500 (beginning-of-line 2)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
501 (setq beg (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
502 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
503 (simula-next-statement 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
504 (setq end (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
505 (if (and (> end beg) (not (eq indent current)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
506 (indent-code-rigidly beg end (- indent current) "%")))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
507 (insert-tab))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
508
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
509
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
510 (defun simula-context ()
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
511 "Return value according to syntactic SIMULA context of point.
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
512 0 point inside COMMENT comment
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
513 1 point on SIMULA-compiler directive line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
514 2 point inside END comment
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
515 3 point inside string
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
516 4 point inside character constant
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
517 nil otherwise."
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
518 ;; first, find out if this is a compiler directive line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
519 (if (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
520 (beginning-of-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
521 (eq (following-char) ?%))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
522 ;; YES - return 1
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
523 1
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
524 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
525 ;; The current line is NOT a compiler directive line.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
526 ;; Now, the strategy is to search backward to find a semicolon
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
527 ;; that is NOT inside a string. The point after semicolon MUST be
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
528 ;; outside a comment, since semicolons are comment-ending and
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
529 ;; comments are non-recursive. We take advantage of the fact
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
530 ;; that strings MUST end on the same line as they started, so
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
531 ;; that we can easily decide whether we are inside a string or not.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
532 (let (return-value (origin (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
533 (skip-chars-backward "^;" (point-min))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
534 ;; found semicolon or beginning of buffer
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
535 (let (loopvalue (saved-point origin))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
536 (while (and (not (bobp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
537 (if (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
538 (beginning-of-line)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
539 ;; compiler directive line? If so, cont searching..
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
540 (eq (following-char) ?%))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
541 t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
542 (while (< (point) saved-point)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
543 (skip-chars-forward "^;\"'")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
544 (forward-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
545 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
546 ((eq (preceding-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
547 (setq saved-point (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
548 ((eq (preceding-char) ?\")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
549 (skip-chars-forward "^\";")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
550 (if (eq (following-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
551 (setq saved-point (point) loopvalue t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
552 (forward-char 1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
553 (t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
554 (if (eq (following-char) ?')
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
555 (forward-char 1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
556 (skip-chars-forward "^';")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
557 (if (eq (following-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
558 (setq saved-point (point) loopvalue t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
559 (forward-char 1)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
560 loopvalue))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
561 (backward-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
562 (skip-chars-backward "^;")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
563 (setq saved-point (point) loopvalue nil)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
564 ;; Now we are CERTAIN that we are outside comments and strings.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
565 ;; The job now is to search forward again towards the origin
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
566 ;; skipping directives, comments and strings correctly,
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
567 ;; so that we know what context we are in when we find the origin.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
568 (while (and
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
569 (< (point) origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
570 (re-search-forward
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
571 "\\<end\\>\\|!\\|\"\\|'\\|^%\\|\\<comment\\>" origin 'move))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
572 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
573 ((memq (preceding-char) '(?d ?D))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
574 (setq return-value 2)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
575 (while (and (re-search-forward
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
576 ";\\|\\<end\\>\\|\\<else\\>\\|\\<otherwise\\>\\|\\<when\\>\\|^%"
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
577 origin 'move)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
578 ;; found another END?
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
579 (or (memq (preceding-char) '(?d ?D))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
580 ;; if directive, skip line
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
581 (and (eq (preceding-char) ?%)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
582 (beginning-of-line 2))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
583 ;; found other keyword, out of END comment
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
584 (setq return-value nil))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
585 (if (and (eq (char-syntax (preceding-char)) ?w)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
586 (eq (char-syntax (following-char)) ?w))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
587 (save-excursion
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
588 (backward-word 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
589 (if (looking-at "end\\>\\|else\\>\\|otherwise\\>\\|when\\>")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
590 (setq return-value nil)))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
591 ((memq (preceding-char) '(?! ?t ?T))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
592 ; skip comment
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
593 (setq return-value 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
594 (skip-chars-forward "^%;" origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
595 (while (and return-value (< (point) origin))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
596 (if (eq (following-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
597 (setq return-value nil)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
598 (if (bolp)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
599 (beginning-of-line 2) ; skip directive inside comment
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
600 (forward-char 1)) ; or single '%'
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
601 (skip-chars-forward "^%;" origin))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
602 ((eq (preceding-char) ?\")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
603 (if (not (search-forward "\"" origin 'move))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
604 (setq return-value 3)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
605 ((eq (preceding-char) ?\')
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
606 (if (or (eq (point) origin) (eobp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
607 (setq return-value 4)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
608 (forward-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
609 (if (not (search-forward "'" origin 'move))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
610 (setq return-value 4))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
611 ;; compiler directive line - skip
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
612 (t (beginning-of-line 2))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
613 return-value)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
614 )))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
615
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
616
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
617 (defun simula-electric-label ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
618 "If this is a label that starts the line, reindent the line."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
619 (interactive)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
620 (expand-abbrev)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
621 (insert ?:)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
622 (let ((origin (- (point-max) (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
623 (case-fold-search t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
624 ;; don't mix a label with an assignment operator := :-
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
625 ;; therefore take a peek at next typed character...
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
626 (next-char (read-event)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
627 (unwind-protect
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
628 (setq unread-command-events (append unread-command-events
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
629 (list next-char)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
630 ;; Problem: find out if character just read is a command char
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
631 ;; that would insert something after ':' making it a label.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
632 ;; At least \n, \r (and maybe \t) falls into this category.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
633 ;; This is a real crock, it depends on traditional keymap
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
634 ;; bindings, that is, printing characters doing self-insert,
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
635 ;; and no other command sequence inserting '-' or '='.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
636 ;; simula-electric-label can be easily fooled...
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
637 (if (and (not (memq next-char '(?= ?-)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
638 (or (memq next-char '(?\n ?\r))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
639 (and (eq next-char ?\t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
640 simula-tab-always-indent)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
641 (not (memq (following-char) '(?= ?-))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
642 (not (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
643 ;; label?
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
644 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
645 (backward-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
646 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
647 (skip-chars-backward "a-zA-Z0-9_")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
648 (if (looking-at "virtual\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
649 nil
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
650 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
651 (bolp))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
652 (let ((amount (simula-calculate-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
653 (delete-horizontal-space)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
654 (indent-to amount)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
655 (goto-char (- (point-max) origin)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
656
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
657
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
658 (defun simula-backward-up-level (count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
659 "Move backward up COUNT block levels.
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
660 If COUNT is negative, move forward up block level instead."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
661 (interactive "p")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
662 (let ((origin (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
663 (case-fold-search t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
664 (condition-case ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
665 (if (> count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
666 (while (> count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
667 (re-search-backward "\\<begin\\>\\|\\<end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
668 (if (not (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
669 (setq count (if (memq (following-char) '(?b ?B))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
670 (1- count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
671 (1+ count)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
672 (while (< count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
673 (re-search-forward "\\<begin\\>\\|\\<end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
674 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
675 (if (not (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
676 (setq count (if (memq (following-char) '(?e ?E))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
677 (1+ count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
678 (1- count))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
679 (backward-word -1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
680 ;; If block level not found, jump back to origin and signal an error
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
681 (error (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
682 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
683 (error "No higher block level")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
684 (quit (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
685 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
686 (signal 'quit nil))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
687
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
688
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
689 (defun simula-forward-down-level (count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
690 "Move forward down COUNT block levels.
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
691 If COUNT is negative, move backward down block level instead."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
692 (interactive "p")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
693 ;; When we search for a deeper block level, we must never
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
694 ;; get out of the block where we started -> count >= start-count
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
695 (let ((start-count count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
696 (origin (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
697 (case-fold-search t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
698 (condition-case ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
699 (if (< count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
700 (while (< count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
701 (re-search-backward "\\<begin\\>\\|\\<end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
702 (if (not (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
703 (setq count (if (memq (following-char) '(?e ?E))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
704 (1+ count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
705 (1- count))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
706 (if (< count start-count) (signal 'error nil)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
707 (while (> count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
708 (re-search-forward "\\<begin\\>\\|\\<end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
709 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
710 (if (not (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
711 (setq count (if (memq (following-char) '(?b ?B))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
712 (1- count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
713 (1+ count))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
714 (backward-word -1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
715 ;; deeper level has to be found within starting block
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
716 (if (> count start-count) (signal 'error nil))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
717 ;; If block level not found, jump back to origin and signal an error
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
718 (error (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
719 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
720 (error "No containing block level")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
721 (quit (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
722 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
723 (signal 'quit nil))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
724
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
725
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
726 (defun simula-previous-statement (count)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
727 "Move backward COUNT statements.
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
728 If COUNT is negative, move forward instead."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
729 (interactive "p")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
730 (if (< count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
731 (simula-next-statement (- count))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
732 (let (status
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
733 (case-fold-search t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
734 (origin (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
735 (condition-case ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
736 ;;
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
737 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
738 (simula-skip-comment-backward)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
739 (if (memq (preceding-char) '(?n ?N))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
740 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
741 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
742 (if (not (looking-at "\\<begin\\>"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
743 (backward-word -1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
744 (if (eq (preceding-char) ?\;)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
745 (backward-char 1))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
746 )
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
747 (while (and (natnump (setq count (1- count)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
748 (setq status (simula-search-backward
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
749 ";\\|\\<begin\\>" nil 'move))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
750 (if status
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
751 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
752 (if (eq (following-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
753 (forward-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
754 (backward-word -1))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
755 (simula-skip-comment-forward))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
756 (error (progn (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
757 (error "Incomplete statement (too many ENDs)")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
758 (quit (progn (goto-char origin) (signal 'quit nil)))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
759
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
760
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
761 (defun simula-next-statement (count)
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
762 "Move forward COUNT statements.
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
763 If COUNT is negative, move backward instead."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
764 (interactive "p")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
765 (if (< count 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
766 (simula-previous-statement (- count))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
767 (let (status
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
768 (case-fold-search t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
769 (origin (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
770 (condition-case ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
771 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
772 (simula-skip-comment-forward)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
773 (if (looking-at "\\<end\\>") (forward-word 1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
774 (while (and (natnump (setq count (1- count)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
775 (setq status (simula-search-forward
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
776 ";\\|\\<end\\>" (point-max) 'move))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
777 (if (and status (/= (preceding-char) ?\;))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
778 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
779 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
780 (simula-skip-comment-backward))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
781 (error (progn (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
782 (error "Incomplete statement (too few ENDs)")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
783 (quit (progn (goto-char origin) (signal 'quit nil)))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
784
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
785
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
786 (defun simula-skip-comment-backward (&optional stop-at-end)
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
787 "Search towards bob to find first char that is outside a comment."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
788 (interactive)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
789 (catch 'simula-out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
790 (let (context)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
791 (while t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
792 (skip-chars-backward " \t\n\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
793 (if (eq (preceding-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
794 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
795 (backward-char 1)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
796 (setq context (simula-context))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
797 (if (and stop-at-end (eq context 2))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
798 (setq context nil)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
799 (setq context (simula-context)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
800 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
801 ((memq context '(nil 3 4))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
802 ;; check to see if we found a label
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
803 (if (and (eq (preceding-char) ?:)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
804 (not (memq (following-char) '(?- ?=)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
805 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
806 (skip-chars-backward ": \t\fa-zA-Z0-9_")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
807 (not (looking-at "virtual\\>"))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
808 (skip-chars-backward ": \t\fa-zA-Z0-9_")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
809 (throw 'simula-out nil)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
810 ((eq context 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
811 ;; since we are inside a comment, it must start somewhere!
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
812 (while (and (re-search-backward "!\\|\\<comment\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
813 (memq (simula-context) '(0 1)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
814 ((eq context 1)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
815 (beginning-of-line)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
816 (if (bobp)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
817 (throw 'simula-out nil)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
818 (backward-char)))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
819 ((eq context 2)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
820 ;; an END-comment must belong to an END
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
821 (re-search-backward "\\<end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
822 (forward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
823 (throw 'simula-out nil))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
824 ;; should be impossible to get here..
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
825 )))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
826
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
827
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
828 (defun simula-skip-comment-forward ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
829 "Search towards eob to find first char that is outside a comment."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
830 ;; this function assumes we start with point .outside a comment
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
831 (interactive)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
832 (catch 'simula-out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
833 (while t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
834 (skip-chars-forward " \t\n\f")
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
835 ;; BUG: the following (0 2) branches don't take into account intermixing
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
836 ;; directive lines
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
837 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
838 ((looking-at "!\\|\\<comment\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
839 (search-forward ";" nil 'move))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
840 ((and (bolp) (eq (following-char) ?%))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
841 (beginning-of-line 2))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
842 ((and (looking-at "[a-z0-9_]*[ \t\f]*:[^-=]")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
843 (not (looking-at "virtual\\>")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
844 (skip-chars-forward "a-zA-Z0-9_ \t\f:"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
845 (t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
846 (throw 'simula-out t))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
847
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
848
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
849 (defun simula-forward-up-level ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
850 (let ((continue-loop t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
851 (origin (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
852 (case-fold-search t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
853 return-value
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
854 temp)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
855 (while continue-loop
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
856 (if (re-search-backward "\\<begin\\>\\|\\<end\\>" (point-min) 'move)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
857 (setq temp (simula-context)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
858 return-value (and (memq (preceding-char) '(?d ?D))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
859 (memq temp '(nil 2)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
860 continue-loop (and (not return-value)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
861 (simula-forward-up-level)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
862 (setq continue-loop nil)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
863 (if return-value
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
864 t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
865 (goto-char origin)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
866 nil)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
867
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
868
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
869 (defun simula-calculate-indent ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
870 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
871 (let ((where (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
872 (origin (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
873 (indent 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
874 continued
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
875 start-line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
876 temp
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
877 found-end
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
878 prev-cont)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
879 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
880 ((eq where 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
881 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
882 ;; Comment.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
883 ;; If comment started on previous non-blank line, indent to the
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
884 ;; column where the comment started, else indent as that line.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
885 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
886 (skip-chars-backward " \t\n\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
887 (while (and (not (bolp)) (eq (simula-context) 0))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
888 (re-search-backward "^\\|!\\|\\<comment\\>"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
889 (skip-chars-forward " \t\n\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
890 (prog1
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
891 (current-column)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
892 (goto-char origin)))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
893 ((eq where 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
894 ;;
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
895 ;; Directive. Always 0.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
896 ;;
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
897 0)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
898 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
899 ;; Detect missing string delimiters
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
900 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
901 ((eq where 3)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
902 (error "Inside string"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
903 ((eq where 4)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
904 (error "Inside character constant"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
905 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
906 ;; check to see if inside ()'s
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
907 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
908 ((setq temp (simula-inside-parens))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
909 temp)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
910 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
911 ;; Calculate non-comment indentation
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
912 (t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
913 ;; first, find out if this line starts with something that needs
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
914 ;; special indentation (END/IF/THEN/ELSE/WHEN/OTHERWISE or label)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
915 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
916 (skip-chars-forward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
917 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
918 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
919 ;; END
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
920 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
921 ((looking-at "end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
922 (setq indent (- simula-indent-level)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
923 found-end t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
924 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
925 ;; IF/THEN/ELSE
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
926 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
927 ((looking-at "if\\>\\|then\\>\\|else\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
928 ;; search for the *starting* IF
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
929 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
930 ((memq (following-char) '(?T ?t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
931 (setq indent (car simula-if-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
932 ((memq (following-char) '(?E ?e))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
933 (setq indent (cdr simula-if-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
934 (t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
935 (forward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
936 (setq indent 0)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
937 (simula-find-if))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
938 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
939 ;; WHEN/OTHERWISE
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
940 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
941 ((looking-at "when\\>\\|otherwise\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
942 ;; search for corresponding INSPECT
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
943 (if (memq (following-char) '(?W ?w))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
944 (setq indent (car simula-inspect-indent))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
945 (setq indent (cdr simula-inspect-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
946 (simula-find-inspect))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
947 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
948 ;; label:
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
949 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
950 ((and (not (looking-at "virtual\\>"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
951 (looking-at "[a-z0-9_]*[ \t\f]*:[^-=]"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
952 (setq indent simula-label-offset)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
953 ;; find line with non-comment text
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
954 (simula-skip-comment-backward 'dont-skip-end)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
955 (if (and found-end
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
956 (not (eq (preceding-char) ?\;))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
957 (if (memq (preceding-char) '(?N ?n))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
958 (save-excursion
1621
ec2c000b8b69 * bytecomp.el: Declare unread-command-char an obsolete variable.
Jim Blandy <jimb@redhat.com>
parents: 841
diff changeset
959 (backward-word 1)
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
960 (not (looking-at "begin\\>")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
961 t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
962 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
963 (simula-previous-statement 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
964 (simula-skip-comment-backward)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
965 (setq start-line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
966 (save-excursion (beginning-of-line) (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
967 ;; - perhaps this is a continued statement
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
968 continued
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
969 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
970 (and (not (bobp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
971 ;; (not found-end)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
972 (if (eq (char-syntax (preceding-char)) ?w)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
973 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
974 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
975 (not (looking-at
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
976 "begin\\|then\\|else\\|when\\|otherwise\\|do"
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
977 )))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
978 (not (memq (preceding-char) '(?: ?\;)))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
979 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
980 ;; MAIN calculation loop - count BEGIN/DO etc.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
981 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
982 (while (not (bolp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
983 (if (re-search-backward
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
984 ";\\|\\<\\(begin\\|end\\|if\\|else\\|then\\|when\\|otherwise\\|do\\)\\>"
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
985 start-line 'move)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
986 (if (simula-context)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
987 ();; found something in a comment/string - ignore
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
988 (setq temp (following-char))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
989 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
990 ((eq temp ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
991 (simula-previous-statement 1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
992 ((looking-at "begin\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
993 (setq indent (+ indent simula-indent-level)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
994 ((looking-at "end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
995 (forward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
996 (simula-previous-statement 1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
997 ((looking-at "do\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
998 (setq indent (+ indent simula-substatement-offset))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
999 (simula-find-do-match))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1000 ((looking-at "\\(if\\|then\\|else\\)\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1001 (if (memq temp '(?I ?i))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1002 (forward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1003 (setq indent (+ indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1004 simula-substatement-offset
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1005 (if (memq temp '(?T ?t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1006 (car simula-if-indent)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1007 (cdr simula-if-indent)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1008 (simula-find-if))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1009 ((looking-at "\\<when\\>\\|\\<otherwise\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1010 (setq indent (+ indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1011 simula-substatement-offset
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1012 (if (memq temp '(?W ?w))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1013 (car simula-if-indent)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1014 (cdr simula-if-indent))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1015 (simula-find-inspect)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1016 ;; found the start of a [sub]statement
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
1017 ;; add indentation for continued statement
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1018 (if continued
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1019 (setq indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1020 (+ indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1021 (if (listp simula-continued-statement-offset)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1022 (car simula-continued-statement-offset)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1023 simula-continued-statement-offset))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1024 (setq start-line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1025 (save-excursion (beginning-of-line) (point))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1026 continued nil))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1027 ;; search failed .. point is at beginning of line
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1028 ;; determine if we should continue searching
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1029 ;; (at or before comment or label)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1030 ;; temp = t means finished
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1031 (setq temp
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
1032 (and (not (simula-context))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1033 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1034 (skip-chars-forward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1035 (or (looking-at "virtual")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1036 (not
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1037 (looking-at
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1038 "!\\|comment\\>\\|[a-z0-9_]*[ \t\f]*:[^-=]")))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1039 prev-cont continued)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1040 ;; if we are finished, find current line's indentation
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1041 (if temp
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1042 (setq indent (+ indent (current-indentation))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1043 ;; find next line with non-comment SIMULA text
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1044 ;; maybe indent extra if statement continues
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1045 (simula-skip-comment-backward)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1046 (setq continued
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1047 (and (not (bobp))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1048 (if (eq (char-syntax (preceding-char)) ?w)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1049 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1050 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1051 (not (looking-at
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1052 "begin\\|then\\|else\\|when\\|otherwise\\|do")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1053 (not (memq (preceding-char) '(?: ?\;))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1054 ;; if we the state of the continued-variable
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
1055 ;; changed, add indentation for continued statement
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1056 (if (or (and prev-cont (not continued))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1057 (and continued
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1058 (listp simula-continued-statement-offset)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1059 (setq indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1060 (+ indent
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1061 (if (listp simula-continued-statement-offset)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1062 (car simula-continued-statement-offset)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1063 simula-continued-statement-offset))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1064 ;; while ends if point is at beginning of line at loop test
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1065 (if (not temp)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1066 (setq start-line (save-excursion (beginning-of-line) (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1067 (beginning-of-line))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1068 ;;
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
1069 ;; return indentation
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1070 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1071 indent)))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1072
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1073
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1074 (defun simula-find-if ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1075 "Find starting IF of a IF-THEN[-ELSE[-IF-THEN...]] statement."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1076 (catch 'simula-out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1077 (while t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1078 (if (and (simula-search-backward "\\<if\\>\\|;\\|\\<begin\\>"nil t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1079 (memq (following-char) '(?I ?i)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1080 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1081 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1082 ;; find out if this IF was really the start of the IF statement
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1083 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1084 (simula-skip-comment-backward)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1085 (if (and (eq (char-syntax (preceding-char)) ?w)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1086 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1087 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1088 (looking-at "else\\>")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1089 ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1090 (throw 'simula-out t)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1091 (if (not (looking-at "\\<if\\>"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1092 (error "Missing IF or misplaced BEGIN or ';' (can't find IF)")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1093 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1094 ;; we were at the starting IF in the first place..
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1095 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1096 (throw 'simula-out t))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1097
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1098
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1099 (defun simula-find-inspect ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1100 "Find INSPECT matching WHEN or OTHERWISE."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1101 (catch 'simula-out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1102 (let ((level 0))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1103 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1104 ;; INSPECTs can be nested, have to find the corresponding one
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1105 ;;
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1106 (while t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1107 (if (and (simula-search-backward "\\<inspect\\>\\|\\<otherwise\\>\\|;"
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1108 nil t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1109 (/= (following-char) ?\;))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1110 (if (memq (following-char) '(?O ?o))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1111 (setq level (1+ level))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1112 (if (zerop level)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1113 (throw 'simula-out t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1114 (setq level (1- level))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1115 (error "Missing INSPECT or misplaced ';' (can't find INSPECT)"))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1116
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1117
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1118 (defun simula-find-do-match ()
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1119 "Find keyword matching DO: FOR, WHILE, INSPECT or WHEN."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1120 (while (and (re-search-backward
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1121 "\\<\\(do\\|for\\|while\\|inspect\\|when\\|end\\|begin\\)\\>\\|;"
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1122 nil 'move)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1123 (simula-context)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1124 (if (and (looking-at "\\<\\(for\\|while\\|inspect\\|when\\)\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1125 (not (simula-context)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1126 () ;; found match
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1127 (error "No matching FOR, WHILE or INSPECT for DO, or misplaced ';'")))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1128
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1129
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1130 (defun simula-inside-parens ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1131 "Return position after `(' on line if inside parentheses, nil otherwise."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1132 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1133 (let ((parlevel 0))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1134 (catch 'simula-out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1135 (while t
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1136 (if (re-search-backward "(\\|)\\|;" nil t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1137 (if (eq (simula-context) nil)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1138 ;; found something - check it out
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1139 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1140 ((eq (following-char) ?\;)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1141 (if (zerop parlevel)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1142 (throw 'simula-out nil)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
1143 (error "Parenthesis mismatch or misplaced ';'")))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1144 ((eq (following-char) ?\()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1145 (if (zerop parlevel)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1146 (throw 'simula-out (1+ (current-column)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1147 (setq parlevel (1- parlevel))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1148 (t (setq parlevel (1+ parlevel))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1149 );; nothing - inside comment or string
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1150 ;; search failed
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1151 (throw 'simula-out nil)))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1152
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1153
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1154 (defun simula-goto-definition ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1155 "Goto point of definition of variable, procedure or class."
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1156 (interactive))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1157
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1158
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1159 (defun simula-expand-stdproc ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1160 (if (or (not simula-abbrev-stdproc) (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1161 (unexpand-abbrev)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1162 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1163 ((eq simula-abbrev-stdproc 'upcase) (upcase-word -1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1164 ((eq simula-abbrev-stdproc 'downcase) (downcase-word -1))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1165 ((eq simula-abbrev-stdproc 'capitalize) (capitalize-word -1))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1166 ((eq simula-abbrev-stdproc 'abbrev-table)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1167 ;; If not in lowercase, expansions are always capitalized.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1168 ;; We then want to replace with the exact expansion.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1169 (if (equal (symbol-name last-abbrev) last-abbrev-text)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1170 ()
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1171 (downcase-word -1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1172 (expand-abbrev))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1173
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1174
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1175 (defun simula-expand-keyword ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1176 (if (or (not simula-abbrev-keyword) (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1177 (unexpand-abbrev)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1178 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1179 ((eq simula-abbrev-keyword 'upcase) (upcase-word -1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1180 ((eq simula-abbrev-keyword 'downcase) (downcase-word -1))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1181 ((eq simula-abbrev-keyword 'capitalize) (capitalize-word -1))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1182 ((eq simula-abbrev-stdproc 'abbrev-table)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1183 (if (equal (symbol-name last-abbrev) last-abbrev-text)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1184 ()
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1185 (downcase-word -1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1186 (expand-abbrev))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1187
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1188
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1189 (defun simula-electric-keyword ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1190 "Expand SIMULA keyword. If it starts the line, reindent."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1191 ;; redisplay
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1192 (let ((show-char (eq this-command 'self-insert-command)))
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2315
diff changeset
1193 ;; If the abbrev expansion results in reindentation, the user may have
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1194 ;; to wait some time before the character he typed is displayed
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1195 ;; (the char causing the expansion is inserted AFTER the hook function
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1196 ;; is called). This is annoying in case of normal characters.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1197 ;; However, if the user pressed a key bound to newline, it is better
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1198 ;; to have the line inserted after the begin-end match.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1199 (if show-char
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1200 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1201 (insert-char last-command-char 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1202 (sit-for 0)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1203 (backward-char 1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1204 (if (let ((where (simula-context))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1205 (case-fold-search t))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1206 (if where
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1207 (if (and (eq where 2) (eq (char-syntax (preceding-char)) ?w))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1208 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1209 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1210 (not (looking-at "end\\>"))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1211 (unexpand-abbrev)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1212 (cond
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1213 ((not simula-abbrev-keyword) (unexpand-abbrev))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1214 ((eq simula-abbrev-keyword 'upcase) (upcase-word -1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1215 ((eq simula-abbrev-keyword 'downcase) (downcase-word -1))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1216 ((eq simula-abbrev-keyword 'capitalize) (capitalize-word -1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1217 (let ((pos (- (point-max) (point)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1218 (case-fold-search t)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1219 null)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1220 (condition-case null
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1221 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1222 ;; check if the expanded word is on the beginning of the line.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1223 (if (and (eq (char-syntax (preceding-char)) ?w)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1224 (progn
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1225 (backward-word 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1226 (if (looking-at "end\\>")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1227 (save-excursion
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1228 (simula-backward-up-level 1)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1229 (if (pos-visible-in-window-p)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1230 (sit-for 1)
14330
35a18ea09b7b (simula-electric-keyword): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
1231 (message "Matches %s"
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1232 (buffer-substring
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1233 (point)
14330
35a18ea09b7b (simula-electric-keyword): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
1234 (+ (point) (window-width)))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1235 (skip-chars-backward " \t\f")
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1236 (bolp)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1237 (let ((indent (simula-calculate-indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1238 (if (eq indent (current-indentation))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1239 ()
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1240 (delete-horizontal-space)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1241 (indent-to indent)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1242 (skip-chars-forward " \t\f"))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1243 ;; check for END - blow whistles and ring bells
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1244
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1245 (goto-char (- (point-max) pos))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1246 (if show-char
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1247 (delete-char 1)))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1248 (quit (goto-char (- (point-max) pos))))))))
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1249
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1250
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1251 (defun simula-search-backward (regexp &optional bound noerror)
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1252 "Search backward from point for regular expression REGEXP,
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1253 ignoring matches found inside SIMULA comments, string literals,
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1254 and BEGIN..END blocks.
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1255 Set point to the end of the occurrence found, and return point.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1256 An optional second argument BOUND bounds the search, it is a buffer position.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1257 The match found must not extend after that position. Optional third argument
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1258 NOERROR, if t, means if fail just return nil (no error).
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1259 If not nil and not t, move to limit of search and return nil."
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1260 (let (begin end context (comb-regexp (concat regexp "\\|\\<end\\>"))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1261 match (start-point (point)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1262 (catch 'simula-backward
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1263 (while (re-search-backward comb-regexp bound 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1264 ;; We have a match, check SIMULA context at match-beginning
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1265 ;; to see if we are outside comments etc.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1266 ;; Set MATCH to t if we found a true match,
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1267 ;; set MATCH to 'BLOCK if we found a BEGIN..END block,
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1268 ;; else set MATCH to nil.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1269 (save-match-data
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1270 (setq context (simula-context))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1271 (cond
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1272 ((eq context nil)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1273 (setq match (if (looking-at regexp) t 'BLOCK)))
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1274 ;; A comment-ending `;' is part of the comment, and shouldn't match.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1275 ;; ((eq context 0)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1276 ;; (setq match (if (eq (following-char) ?\;) t nil)))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1277 ((eq context 2)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1278 (setq match (if (and (looking-at regexp)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1279 (looking-at ";\\|\\<end\\>\\|\\<else\\>\\|\\<otherwise\\>\\|\\<when\\>"))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1280 t
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1281 (if (looking-at "\\<end\\>") 'BLOCK nil))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1282 (t (setq match nil))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1283 ;; Exit if true match
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1284 (if (eq match t) (throw 'simula-backward (point)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1285 (if (eq match 'BLOCK)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1286 ;; We found the END of a block
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1287 (let ((level 0))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1288 (while (natnump level)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1289 (if (re-search-backward "\\<begin\\>\\|\\<end\\>" bound 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1290 (let ((context (simula-context)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1291 ;; We found a BEGIN -> decrease level count
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1292 (cond ((and (eq context nil)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1293 (memq (following-char) '(?b ?B)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1294 (setq level (1- level)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1295 ;; END -> increase level count
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1296 ((and (memq context '(nil 2))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1297 (memq (following-char) '(?e ?E)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1298 (setq level (1+ level)))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1299 ;; Block search failed. Action depends on noerror.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1300 (if (or (not noerror) (eq noerror t))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1301 (goto-char start-point))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1302 (if (not noerror)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1303 (signal 'search-failed (list regexp)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1304 (throw 'simula-backward nil))))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1305 ;; Search failed. Action depends on noerror.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1306 (if (or (not noerror) (eq noerror t))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1307 (goto-char start-point))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1308 (if noerror
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1309 nil
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1310 (signal 'search-failed (list regexp))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1311
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1312
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1313 (defun simula-search-forward (regexp &optional bound noerror)
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1314 "Search forward from point for regular expression REGEXP,
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1315 ignoring matches found inside SIMULA comments, string literals,
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1316 and BEGIN..END blocks.
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1317 Set point to the end of the occurrence found, and return point.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1318 An optional second argument BOUND bounds the search, it is a buffer position.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1319 The match found must not extend after that position. Optional third argument
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1320 NOERROR, if t, means if fail just return nil (no error).
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1321 If not nil and not t, move to limit of search and return nil."
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1322 (let (begin end context (comb-regexp (concat regexp "\\|\\<begin\\>"))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1323 match (start-point (point)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1324 (catch 'simula-forward
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1325 (while (re-search-forward comb-regexp bound 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1326 ;; We have a match, check SIMULA context at match-beginning
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1327 ;; to see if we are outside comments.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1328 ;; Set MATCH to t if we found a true match,
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1329 ;; set MATCH to 'BLOCK if we found a BEGIN..END block,
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1330 ;; else set MATCH to nil.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1331 (save-match-data
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1332 (save-excursion
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1333 (goto-char (match-beginning 0))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1334 (setq context (simula-context))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1335 (cond
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1336 ((not context)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1337 (setq match (if (looking-at regexp) t 'BLOCK)))
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1338 ;; Comment-ending `;' is part of the comment, and shouldn't match.
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1339 ;; ((eq context 0)
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1340 ;; (setq match (if (eq (following-char) ?\;) t nil)))
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1341 ((eq context 2)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1342 (setq match (if (and (looking-at regexp)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1343 (looking-at ";\\|\\<end\\>\\|\\<else\\>\\|\\<otherwise\\>\\|\\<when\\>")) t nil)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1344 (t (setq match nil)))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1345 ;; Exit if true match
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1346 (if (eq match t) (throw 'simula-forward (point)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1347 (if (eq match 'BLOCK)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1348 ;; We found the BEGINning of a block
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1349 (let ((level 0))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1350 (while (natnump level)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1351 (if (re-search-forward "\\<begin\\>\\|\\<end\\>" bound 1)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1352 (let ((context (simula-context)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1353 ;; We found a BEGIN -> increase level count
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1354 (cond ((eq context nil) (setq level (1+ level)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1355 ;; END -> decrease level count
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1356 ((and (eq context 2)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1357 ;; Don't match BEGIN inside END comment
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1358 (memq (preceding-char) '(?d ?D)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1359 (setq level (1- level)))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1360 ;; Block search failed. Action depends on noerror.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1361 (if (or (not noerror) (eq noerror t))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1362 (goto-char start-point))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1363 (if (not noerror)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1364 (signal 'search-failed (list regexp)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1365 (throw 'simula-forward nil))))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1366 ;; Search failed. Action depends on noerror.
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1367 (if (or (not noerror) (eq noerror t))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1368 (goto-char start-point))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1369 (if noerror
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1370 nil
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1371 (signal 'search-failed (list regexp))))))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1372
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47024
diff changeset
1373
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1374 (defun simula-install-standard-abbrevs ()
4664
b26469d5e812 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1375 "Define Simula keywords, procedures and classes in local abbrev table."
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1376 ;; procedure and class names are as of the SIMULA 87 standard.
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1377 (interactive)
49972
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1378 (dolist (args
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1379 '(("abs" "Abs" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1380 ("accum" "Accum" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1381 ("activate" "ACTIVATE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1382 ("addepsilon" "AddEpsilon" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1383 ("after" "AFTER" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1384 ("and" "AND" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1385 ("arccos" "ArcCos" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1386 ("arcsin" "ArcSin" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1387 ("arctan" "ArcTan" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1388 ("arctan2" "ArcTan2" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1389 ("array" "ARRAY" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1390 ("at" "AT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1391 ("before" "BEFORE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1392 ("begin" "BEGIN" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1393 ("blanks" "Blanks" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1394 ("boolean" "BOOLEAN" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1395 ("breakoutimage" "BreakOutImage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1396 ("bytefile" "ByteFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1397 ("call" "Call" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1398 ("cancel" "Cancel" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1399 ("cardinal" "Cardinal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1400 ("char" "Char" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1401 ("character" "CHARACTER" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1402 ("checkpoint" "CheckPoint" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1403 ("class" "CLASS" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1404 ("clear" "Clear" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1405 ("clocktime" "ClockTime" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1406 ("close" "Close" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1407 ("comment" "COMMENT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1408 ("constant" "Constant" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1409 ("copy" "Copy" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1410 ("cos" "Cos" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1411 ("cosh" "CosH" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1412 ("cotan" "CoTan" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1413 ("cputime" "CpuTime" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1414 ("current" "Current" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1415 ("datetime" "DateTime" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1416 ("decimalmark" "DecimalMark" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1417 ("delay" "DELAY" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1418 ("deleteimage" "DeleteImage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1419 ("detach" "Detach" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1420 ("digit" "Digit" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1421 ("directbytefile" "DirectByteFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1422 ("directfile" "DirectFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1423 ("discrete" "Discrete" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1424 ("do" "DO" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1425 ("downcase" "Downcase" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1426 ("draw" "Draw" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1427 ("eject" "Eject" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1428 ("else" "ELSE" simula-electric-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1429 ("empty" "Empty" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1430 ("end" "END" simula-electric-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1431 ("endfile" "Endfile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1432 ("entier" "Entier" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1433 ("eq" "EQ" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1434 ("eqv" "EQV" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1435 ("erlang" "Erlang" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1436 ("error" "Error" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1437 ("evtime" "EvTime" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1438 ("exp" "Exp" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1439 ("external" "EXTERNAL" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1440 ("false" "FALSE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1441 ("field" "Field" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1442 ("file" "File" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1443 ("first" "First" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1444 ("follow" "Follow" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1445 ("for" "FOR" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1446 ("ge" "GE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1447 ("getchar" "GetChar" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1448 ("getfrac" "GetFrac" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1449 ("getint" "GetInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1450 ("getreal" "GetReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1451 ("go" "GO" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1452 ("goto" "GOTO" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1453 ("gt" "GT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1454 ("head" "Head" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1455 ("hidden" "HIDDEN" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1456 ("histd" "HistD" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1457 ("histo" "Histo" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1458 ("hold" "Hold" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1459 ("idle" "Idle" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1460 ("if" "IF" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1461 ("image" "Image" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1462 ("imagefile" "ImageFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1463 ("imp" "IMP" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1464 ("in" "IN" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1465 ("inbyte" "InByte" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1466 ("inbytefile" "InByteFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1467 ("inchar" "InChar" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1468 ("infile" "InFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1469 ("infrac" "InFrac" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1470 ("inimage" "InImage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1471 ("inint" "InInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1472 ("inner" "INNER" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1473 ("inreal" "InReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1474 ("inrecord" "InRecord" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1475 ("inspect" "INSPECT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1476 ("integer" "INTEGER" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1477 ("intext" "InText" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1478 ("into" "Into" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1479 ("is" "IS" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1480 ("isochar" "ISOChar" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1481 ("isopen" "IsOpen" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1482 ("isorank" "ISORank" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1483 ("label" "LABEL" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1484 ("last" "Last" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1485 ("lastitem" "LastItem" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1486 ("lastloc" "LastLoc" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1487 ("le" "LE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1488 ("length" "Length" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1489 ("letter" "Letter" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1490 ("line" "Line" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1491 ("linear" "Linear" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1492 ("linesperpage" "LinesPerPage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1493 ("link" "Link" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1494 ("linkage" "Linkage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1495 ("ln" "Ln" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1496 ("locate" "Locate" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1497 ("location" "Location" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1498 ("lock" "Lock" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1499 ("locked" "Locked" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1500 ("log10" "Log10" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1501 ("long" "LONG" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1502 ("lowcase" "LowCase" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1503 ("lowerbound" "LowerBound" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1504 ("lowten" "LowTen" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1505 ("lt" "LT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1506 ("main" "Main" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1507 ("max" "Max" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1508 ("maxint" "MaxInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1509 ("maxlongreal" "MaxLongReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1510 ("maxloc" "MaxLoc" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1511 ("maxrank" "MaxRank" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1512 ("maxreal" "MaxReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1513 ("min" "Min" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1514 ("minint" "MinInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1515 ("minlongreal" "MinLongReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1516 ("minrank" "MinRank" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1517 ("minreal" "MinReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1518 ("mod" "Mod" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1519 ("more" "More" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1520 ("name" "NAME" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1521 ("ne" "NE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1522 ("negexp" "NegExp" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1523 ("new" "NEW" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1524 ("nextev" "NextEv" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1525 ("none" "NONE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1526 ("normal" "Normal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1527 ("not" "NOT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1528 ("notext" "NOTEXT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1529 ("open" "Open" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1530 ("or" "OR" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1531 ("otherwise" "OTHERWISE" simula-electric-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1532 ("out" "Out" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1533 ("outbyte" "OutByte" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1534 ("outbytefile" "OutByteFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1535 ("outchar" "OutChar" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1536 ("outfile" "OutFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1537 ("outfix" "OutFix" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1538 ("outfrac" "OutFrac" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1539 ("outimage" "OutImage" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1540 ("outint" "OutInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1541 ("outreal" "OutReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1542 ("outrecord" "OutRecord" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1543 ("outtext" "OutText" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1544 ("page" "Page" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1545 ("passivate" "Passivate" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1546 ("poisson" "Poisson" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1547 ("pos" "Pos" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1548 ("precede" "Precede" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1549 ("pred" "Pred" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1550 ("prev" "Prev" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1551 ("printfile" "PrintFile" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1552 ("prior" "PRIOR" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1553 ("procedure" "PROCEDURE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1554 ("process" "Process" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1555 ("protected" "PROTECTED" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1556 ("putchar" "PutChar" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1557 ("putfix" "PutFix" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1558 ("putfrac" "PutFrac" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1559 ("putint" "PutInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1560 ("putreal" "PutReal" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1561 ("qua" "QUA" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1562 ("randint" "RandInt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1563 ("rank" "Rank" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1564 ("reactivate" "REACTIVATE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1565 ("real" "REAL" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1566 ("ref" "REF" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1567 ("resume" "Resume" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1568 ("setaccess" "SetAccess" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1569 ("setpos" "SetPos" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1570 ("short" "SHORT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1571 ("sign" "Sign" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1572 ("simset" "SimSet" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1573 ("simulaid" "SimulaId" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1574 ("simulation" "Simulation" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1575 ("sin" "Sin" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1576 ("sinh" "SinH" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1577 ("sourceline" "SourceLine" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1578 ("spacing" "Spacing" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1579 ("sqrt" "Sqrt" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1580 ("start" "Start" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1581 ("step" "STEP" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1582 ("strip" "Strip" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1583 ("sub" "Sub" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1584 ("subepsilon" "SubEpsilon" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1585 ("suc" "Suc" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1586 ("switch" "SWITCH" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1587 ("sysin" "SysIn" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1588 ("sysout" "SysOut" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1589 ("tan" "Tan" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1590 ("tanh" "TanH" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1591 ("terminate_program" "Terminate_Program" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1592 ("terminated" "Terminated" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1593 ("text" "TEXT" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1594 ("then" "THEN" simula-electric-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1595 ("this" "THIS" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1596 ("time" "Time" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1597 ("to" "TO" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1598 ("true" "TRUE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1599 ("uniform" "Uniform" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1600 ("unlock" "Unlock" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1601 ("until" "UNTIL" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1602 ("upcase" "Upcase" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1603 ("upperbound" "UpperBound" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1604 ("value" "VALUE" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1605 ("virtual" "VIRTUAL" simula-expand-keyword)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1606 ("wait" "Wait" simula-expand-stdproc)
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1607 ("when" "WHEN" simula-electric-keyword)
49972
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1608 ("while" "WHILE" simula-expand-keyword)))
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1609 (define-abbrev simula-mode-abbrev-table
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1610 (nth 0 args) (nth 1 args) (nth 2 args) nil 'system)))
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1611
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1612 (if simula-abbrev-file
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1613 (read-abbrev-file simula-abbrev-file))
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1614 (let (abbrevs-changed)
0b437aaddba5 Move abbrev loading to after the fun it uses.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49731
diff changeset
1615 (simula-install-standard-abbrevs))
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1616
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1617 ;; Hilit mode support.
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1618 (if (and (fboundp 'hilit-set-mode-patterns)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1619 (boundp 'hilit-patterns-alist)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1620 (not (assoc 'simula-mode hilit-patterns-alist)))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1621 (hilit-set-mode-patterns
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1622 'simula-mode
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1623 '(
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1624 ("^%\\([ \t\f].*\\)?$" nil comment)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1625 ("^%include\\>" nil include)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1626 ("\"[^\"\n]*\"\\|'.'\\|'![0-9]+!'" nil string)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1627 ("\\<\\(ACTIVATE\\|AFTER\\|AND\\|ARRAY\\|AT\\|BEFORE\\|BEGIN\\|BOOLEAN\\|CHARACTER\\|CLASS\\|DELAY\\|DO\\|ELSE\\|END\\|EQ\\|EQV\\|EXTERNAL\\|FALSE\\|FOR\\|GE\\|GO\\|GOTO\\|GT\\|HIDDEN\\|IF\\|IMP\\|IN\\|INNER\\|INSPECT\\|INTEGER\\|IS\\|LABEL\\|LE\\|LONG\\|LT\\|NAME\\|NE\\|NEW\\|NONE\\|NOT\\|NOTEXT\\|OR\\|OTHERWISE\\|PRIOR\\|PROCEDURE\\|PROTECTED\\|QUA\\|REACTIVATE\\|REAL\\|REF\\|SHORT\\|STEP\\|SWITCH\\|TEXT\\|THEN\\|THIS\\|TO\\|TRUE\\|UNTIL\\|VALUE\\|VIRTUAL\\|WHEN\\|WHILE\\)\\>" nil keyword)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1628 ("!\\|\\<COMMENT\\>" ";" comment))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1629 nil 'case-insensitive))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1630
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1631 ;; defuns for submitting bug reports
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1632
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1633 (defconst simula-mode-help-address "simula-mode@ifi.uio.no"
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1634 "Address accepting submission of `simula-mode' bug reports.")
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1635
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1636 (defun simula-submit-bug-report ()
49731
36beaccb197a (simula-font-lock-syntactic-keywords): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
1637 "Submit via mail a bug report on `simula-mode'."
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1638 (interactive)
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1639 (and
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1640 (y-or-n-p "Do you want to submit a report on simula-mode? ")
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1641 (reporter-submit-bug-report
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1642 simula-mode-help-address
15054
df34d8bec5fc (simula-submit-bug-report): Use emacs-version.
Richard M. Stallman <rms@gnu.org>
parents: 15053
diff changeset
1643 (concat "simula-mode from Emacs " emacs-version)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1644 (list
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1645 ;; report only the vars that affect indentation
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1646 'simula-indent-level
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1647 'simula-substatement-offset
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1648 'simula-continued-statement-offset
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1649 'simula-label-offset
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1650 'simula-if-indent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1651 'simula-inspect-indent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1652 'simula-electric-indent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1653 'simula-abbrev-keyword
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1654 'simula-abbrev-stdproc
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1655 'simula-abbrev-file
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1656 'simula-tab-always-indent
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1657 ))))
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1658
25230
f4437b91a368 (simula): Provide `simula', not `simula-mode'.
Karl Heuer <kwzh@gnu.org>
parents: 21168
diff changeset
1659 (provide 'simula)
15053
68d9a01cfb23 (simula-tab-always-indent, simula-indent-level)
Richard M. Stallman <rms@gnu.org>
parents: 14330
diff changeset
1660
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49972
diff changeset
1661 ;;; arch-tag: 488c1bb0-eebf-4f06-93df-1df603f06255
805
10f8af91ab47 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1662 ;;; simula.el ends here